about summary refs log tree commit diff
path: root/sysdeps/powerpc/powerpc64/multiarch/strlen.c
diff options
context:
space:
mode:
authorAdhemerval Zanella <azanella@linux.vnet.ibm.com>2014-05-02 12:00:36 -0500
committerAdhemerval Zanella <azanella@linux.vnet.ibm.com>2014-05-05 13:30:16 -0500
commit19c4bec0f43599eecc2f32de96ae179cd7d64053 (patch)
tree26047ede88c1c4231207e887b5ee88de9c60faff /sysdeps/powerpc/powerpc64/multiarch/strlen.c
parent7776e6692fe19553dafcb918df467aed522eea8d (diff)
downloadglibc-19c4bec0f43599eecc2f32de96ae179cd7d64053.tar.gz
glibc-19c4bec0f43599eecc2f32de96ae179cd7d64053.tar.xz
glibc-19c4bec0f43599eecc2f32de96ae179cd7d64053.zip
PowerPC: ifunc improvement for internal calls
This patch changes de default symbol redirection for internal call of
memcpy, memset, memchr, and strlen to the IFUNC resolved ones.  The
performance improvement is noticeable in algorithms that uses these
symbols extensible, like the regex functions.
Diffstat (limited to 'sysdeps/powerpc/powerpc64/multiarch/strlen.c')
-rw-r--r--sysdeps/powerpc/powerpc64/multiarch/strlen.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/sysdeps/powerpc/powerpc64/multiarch/strlen.c b/sysdeps/powerpc/powerpc64/multiarch/strlen.c
index 6574696443..d2c26e9a9c 100644
--- a/sysdeps/powerpc/powerpc64/multiarch/strlen.c
+++ b/sysdeps/powerpc/powerpc64/multiarch/strlen.c
@@ -17,15 +17,25 @@
    <http://www.gnu.org/licenses/>.  */
 
 #if defined SHARED && !defined NOT_IN_libc
+/* Redefine strlen so that the compiler won't complain about the type
+   mismatch with the IFUNC selector in strong_alias, below.  */
+# undef strlen
+# define strlen __redirect_strlen
 # include <string.h>
 # include <shlib-compat.h>
 # include "init-arch.h"
 
-extern __typeof (strlen) __strlen_ppc attribute_hidden;
-extern __typeof (strlen) __strlen_power7 attribute_hidden;
+extern __typeof (__redirect_strlen) __libc_strlen;
 
-libc_ifunc (strlen,
+extern __typeof (__redirect_strlen) __strlen_ppc attribute_hidden;
+extern __typeof (__redirect_strlen) __strlen_power7 attribute_hidden;
+
+libc_ifunc (__libc_strlen,
             (hwcap & PPC_FEATURE_HAS_VSX)
             ? __strlen_power7
             : __strlen_ppc);
+
+#undef strlen
+strong_alias (__libc_strlen, strlen)
+libc_hidden_ver (__libc_strlen, strlen)
 #endif