powerpc: Fix --disable-multi-arch build on POWER8
authorTulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com>
Mon, 30 May 2016 21:00:57 +0000 (18:00 -0300)
committerTulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com>
Mon, 6 Jun 2016 19:03:29 +0000 (16:03 -0300)
Add missing symbols of stpncpy and strcasestr when multi-arch is
disabled.
Fix memset call from strncpy/stpncpy when multi-arch is disabled.

ChangeLog
sysdeps/powerpc/powerpc64/multiarch/stpncpy-power8.S
sysdeps/powerpc/powerpc64/multiarch/strncpy-power8.S
sysdeps/powerpc/powerpc64/power8/stpncpy.S
sysdeps/powerpc/powerpc64/power8/strcasestr.S
sysdeps/powerpc/powerpc64/power8/strncpy.S

index 3cec387..6c1c36a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2016-06-06  Tulio Magno Quites Machado Filho  <tuliom@linux.vnet.ibm.com>
+
+       * sysdeps/powerpc/powerpc64/power8/strcasestr.S (__strcasestr):
+       New symbol defined as libc_hidden_def.
+       (strcasestr): Became a weak alias to __strcasestr.
+       * sysdeps/powerpc/powerpc64/power8/strncpy.S: Handle memset calls
+       according to multi-arch support.  Move __stpncpy hidden
+       definition from here to...
+       * sysdeps/powerpc/powerpc64/power8/stpncpy.S: ...here.  Add
+       symbol stpncpy.
+       * sysdeps/powerpc/powerpc64/multiarch/stpncpy-power8.S: Undefine
+       libc_hidden_builtin_def.
+       * sysdeps/powerpc/powerpc64/multiarch/strncpy-power8.S: Specify which
+       memset symbol to use when multi-arch support is available.
+
 2016-06-06  Stefan Liebler  <stli@linux.vnet.ibm.com>
 
        * dlfcn/tst-rec-dlopen.c: Include string.h.
index 804e499..e08fbe5 100644 (file)
@@ -36,4 +36,7 @@
   TRACEBACK(__stpncpy_power8)                                  \
   END_2(__stpncpy_power8)
 
+#undef libc_hidden_builtin_def
+#define libc_hidden_builtin_def(name)
+
 #include <sysdeps/powerpc/powerpc64/power8/stpncpy.S>
index 3263bbd..7522155 100644 (file)
@@ -37,4 +37,7 @@
 #undef libc_hidden_builtin_def
 #define libc_hidden_builtin_def(name)
 
+/* memset is used to pad the end of the string.  */
+#define MEMSET __memset_power8
+
 #include <sysdeps/powerpc/powerpc64/power8/strncpy.S>
index 067910b..9393dd4 100644 (file)
@@ -18,3 +18,7 @@
 
 #define USE_AS_STPNCPY
 #include <sysdeps/powerpc/powerpc64/power8/strncpy.S>
+
+weak_alias (__stpncpy, stpncpy)
+libc_hidden_def (__stpncpy)
+libc_hidden_builtin_def (stpncpy)
index 24b2b76..60015ae 100644 (file)
@@ -81,7 +81,7 @@
 /* TODO: change this to .machine power8 when the minimum required binutils
    allows it.  */
        .machine  power7
-EALIGN (strcasestr, 4, 0)
+EALIGN (__strcasestr, 4, 0)
        CALL_MCOUNT 2
        mflr    r0                      /* Load link register LR to r0.  */
        std     r31, -8(r1)             /* Save callers register r31.  */
@@ -527,5 +527,8 @@ L(end):
        cfi_restore(r31)
        mtlr    r0              /* Branch to link register.  */
        blr
-END (strcasestr)
+END (__strcasestr)
+
+weak_alias (__strcasestr, strcasestr)
+libc_hidden_def (__strcasestr)
 libc_hidden_builtin_def (strcasestr)
index 437edeb..b7fae6d 100644 (file)
 # define FUNC_NAME strncpy
 #endif
 
+#ifndef MEMSET
+/* For builds without IFUNC support, local calls should be made to internal
+   GLIBC symbol (created by libc_hidden_builtin_def).  */
+# ifdef SHARED
+#  define MEMSET   __GI_memset
+# else
+#  define MEMSET   memset
+# endif
+#endif
+
 #define FRAMESIZE (FRAME_MIN_SIZE+48)
 
 /* Implements the function
@@ -223,7 +233,7 @@ L(zero_pad_start_1):
        stdu    r1,-FRAMESIZE(r1)
        cfi_adjust_cfa_offset(FRAMESIZE)
 
-       bl      __memset_power8
+       bl      MEMSET
        nop
 
        /* Restore the stack frame.  */
@@ -442,8 +452,6 @@ L(zero_pad_start_prepare_1):
        b       L(zero_pad_start_1)
 END (FUNC_NAME)
 
-#ifdef USE_AS_STPNCPY
-libc_hidden_def (__stpncpy)
-#else
+#ifndef USE_AS_STPNCPY
 libc_hidden_builtin_def (strncpy)
 #endif