diff mbox

powerpc: Fix --disable-multi-arch build on POWER8

Message ID 201605302107.u4UL3v4e048424@mx0a-001b2d01.pphosted.com
State New
Headers show

Commit Message

Tulio Magno Quites Machado Filho May 30, 2016, 9:06 p.m. UTC
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

Adhemerval Zanella May 31, 2016, 1:52 p.m. UTC | #1
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
>
Tulio Magno Quites Machado Filho June 6, 2016, 8:13 p.m. UTC | #2
Adhemerval Zanella <adhemerval.zanella@linaro.org> writes:

> LGTM.

Pushed as c24480ce.

Thanks!
diff mbox

Patch

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