powerpc: Fix --disable-multi-arch build on POWER8
Commit Message
Add missing symbols of stpncpy and strcasestr when multi-arch is
disabled.
Fix memset call from strncpy/stpncpy when multi-arch is disabled.
2016-05-30 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.
---
sysdeps/powerpc/powerpc64/multiarch/stpncpy-power8.S | 3 +++
sysdeps/powerpc/powerpc64/multiarch/strncpy-power8.S | 3 +++
sysdeps/powerpc/powerpc64/power8/stpncpy.S | 4 ++++
sysdeps/powerpc/powerpc64/power8/strcasestr.S | 7 +++++--
sysdeps/powerpc/powerpc64/power8/strncpy.S | 16 ++++++++++++----
5 files changed, 27 insertions(+), 6 deletions(-)
Comments
LGTM.
On 30/05/2016 18:06, Tulio Magno Quites Machado Filho wrote:
> Add missing symbols of stpncpy and strcasestr when multi-arch is
> disabled.
> Fix memset call from strncpy/stpncpy when multi-arch is disabled.
>
> 2016-05-30 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.
> ---
> sysdeps/powerpc/powerpc64/multiarch/stpncpy-power8.S | 3 +++
> sysdeps/powerpc/powerpc64/multiarch/strncpy-power8.S | 3 +++
> sysdeps/powerpc/powerpc64/power8/stpncpy.S | 4 ++++
> sysdeps/powerpc/powerpc64/power8/strcasestr.S | 7 +++++--
> sysdeps/powerpc/powerpc64/power8/strncpy.S | 16 ++++++++++++----
> 5 files changed, 27 insertions(+), 6 deletions(-)
>
> diff --git a/sysdeps/powerpc/powerpc64/multiarch/stpncpy-power8.S b/sysdeps/powerpc/powerpc64/multiarch/stpncpy-power8.S
> index 804e499..e08fbe5 100644
> --- a/sysdeps/powerpc/powerpc64/multiarch/stpncpy-power8.S
> +++ b/sysdeps/powerpc/powerpc64/multiarch/stpncpy-power8.S
> @@ -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>
> diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncpy-power8.S b/sysdeps/powerpc/powerpc64/multiarch/strncpy-power8.S
> index 3263bbd..7522155 100644
> --- a/sysdeps/powerpc/powerpc64/multiarch/strncpy-power8.S
> +++ b/sysdeps/powerpc/powerpc64/multiarch/strncpy-power8.S
> @@ -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>
> diff --git a/sysdeps/powerpc/powerpc64/power8/stpncpy.S b/sysdeps/powerpc/powerpc64/power8/stpncpy.S
> index 067910b..9393dd4 100644
> --- a/sysdeps/powerpc/powerpc64/power8/stpncpy.S
> +++ b/sysdeps/powerpc/powerpc64/power8/stpncpy.S
> @@ -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)
> diff --git a/sysdeps/powerpc/powerpc64/power8/strcasestr.S b/sysdeps/powerpc/powerpc64/power8/strcasestr.S
> index 24b2b76..60015ae 100644
> --- a/sysdeps/powerpc/powerpc64/power8/strcasestr.S
> +++ b/sysdeps/powerpc/powerpc64/power8/strcasestr.S
> @@ -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)
> diff --git a/sysdeps/powerpc/powerpc64/power8/strncpy.S b/sysdeps/powerpc/powerpc64/power8/strncpy.S
> index 437edeb..b7fae6d 100644
> --- a/sysdeps/powerpc/powerpc64/power8/strncpy.S
> +++ b/sysdeps/powerpc/powerpc64/power8/strncpy.S
> @@ -24,6 +24,16 @@
> # 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
>
Adhemerval Zanella <adhemerval.zanella@linaro.org> writes:
> LGTM.
Pushed as c24480ce.
Thanks!
@@ -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>
@@ -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>
@@ -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)
@@ -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)
@@ -24,6 +24,16 @@
# 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