about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBrooks Moses <bmoses@google.com>2014-04-25 13:59:50 -0700
committerBrooks Moses <bmoses@google.com>2014-04-25 13:59:50 -0700
commit1ecb690ee61b079cb89c53fa860eb5649aba4d70 (patch)
treef69b5c4f2587f7c9a3e6ec17a9002f4cb28b861a
parentae4d5ce7debf3108345fd6b4baaae20880d74e37 (diff)
downloadglibc-1ecb690ee61b079cb89c53fa860eb5649aba4d70.tar.gz
glibc-1ecb690ee61b079cb89c53fa860eb5649aba4d70.tar.xz
glibc-1ecb690ee61b079cb89c53fa860eb5649aba4d70.zip
For b/14302447, backport upstream patches for __bzero_ppc.
-rw-r--r--README.google9
-rw-r--r--sysdeps/powerpc/powerpc32/power4/multiarch/bzero-ppc32.S11
-rw-r--r--sysdeps/powerpc/powerpc32/power4/multiarch/bzero.c2
-rw-r--r--sysdeps/powerpc/powerpc64/multiarch/memset-ppc64.S11
4 files changed, 26 insertions, 7 deletions
diff --git a/README.google b/README.google
index 81cc9359d8..39313f0836 100644
--- a/README.google
+++ b/README.google
@@ -291,3 +291,12 @@ sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/localplt.data
 elf/rtld.c
   For b/12342355, remove inappropriate assert in EXEC_ORIGIN support.
   (bmoses, google-local)
+
+sysdeps/powerpc/powerpc32/power4/multiarch/bzero.c
+sysdeps/powerpc/powerpc32/power4/multiarch/bzero-ppc32.S
+sysdeps/powerpc/powerpc64/multiarch/memset-ppc64.S
+  For b/14302447, backport upstream patches for __bzero_ppc:
+  https://sourceware.org/bugzilla/show_bug.cgi?id=16683
+  https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=4facea473059914983b7da8dd654c06b8e3dcc41
+  https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=dd3946c615184e1957a0cb09352cac72be5d6d5b
+  (bmoses, already upstream)
diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/bzero-ppc32.S b/sysdeps/powerpc/powerpc32/power4/multiarch/bzero-ppc32.S
index 7a7cca99ed..80a2dc589b 100644
--- a/sysdeps/powerpc/powerpc32/power4/multiarch/bzero-ppc32.S
+++ b/sysdeps/powerpc/powerpc32/power4/multiarch/bzero-ppc32.S
@@ -19,8 +19,17 @@
 
 #include <sysdep.h>
 
+/* memset ifunc selector is not built for static and memset@local
+   for shared builds makes the linker point the call to the ifunc
+   selector.  */
+#ifdef SHARED
+# define MEMSET __memset_ppc
+#else
+# define MEMSET memset
+#endif
+
 ENTRY (__bzero_ppc)
         mr      r5,r4
         li      r4,0
-        b       __memset_ppc@local
+        b       MEMSET@local
 END (__bzero_ppc)
diff --git a/sysdeps/powerpc/powerpc32/power4/multiarch/bzero.c b/sysdeps/powerpc/powerpc32/power4/multiarch/bzero.c
index 2a6298a33d..baaa6b4bcf 100644
--- a/sysdeps/powerpc/powerpc32/power4/multiarch/bzero.c
+++ b/sysdeps/powerpc/powerpc32/power4/multiarch/bzero.c
@@ -17,7 +17,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 /* Define multiple versions only for definition in libc.  */
-#if defined SHARED && !defined NOT_IN_libc
+#ifndef NOT_IN_libc
 # include <string.h>
 # include <strings.h>
 # include "init-arch.h"
diff --git a/sysdeps/powerpc/powerpc64/multiarch/memset-ppc64.S b/sysdeps/powerpc/powerpc64/multiarch/memset-ppc64.S
index 5b234d9ecb..65b3afe250 100644
--- a/sysdeps/powerpc/powerpc64/multiarch/memset-ppc64.S
+++ b/sysdeps/powerpc/powerpc64/multiarch/memset-ppc64.S
@@ -18,10 +18,9 @@
 
 #include <sysdep.h>
 
-#if defined SHARED && !defined NOT_IN_libc
-
 /* Copied from bzero.S to prevent the linker from inserting a stub
-   between bzero and memset.  */
+   between bzero and memset.  NOTE: this code should be positioned
+   before ENTRY/END_GEN_TB redefinition.  */
 ENTRY (__bzero_ppc)
         CALL_MCOUNT 3
         mr      r5,r4
@@ -29,6 +28,8 @@ ENTRY (__bzero_ppc)
         b       L(_memset)
 END_GEN_TB (__bzero_ppc,TB_TOCLESS)
 
+
+#if defined SHARED && !defined NOT_IN_libc
 # undef EALIGN
 # define EALIGN(name, alignt, words)				\
   .section ".text";						\
@@ -48,9 +49,9 @@ END_GEN_TB (__bzero_ppc,TB_TOCLESS)
 # undef libc_hidden_builtin_def
 # define libc_hidden_builtin_def(name)				\
   .globl __GI_memset; __GI_memset = __memset_ppc
+#endif
 
 /* Do not implement __bzero at powerpc64/memset.S.  */
-# define NO_BZERO_IMPL
-#endif
+#define NO_BZERO_IMPL
 
 #include <sysdeps/powerpc/powerpc64/memset.S>