diff options
Diffstat (limited to 'sysdeps/powerpc/powerpc64')
21 files changed, 201 insertions, 136 deletions
diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite.c index 067edc2ea6..c7d67f15a5 100644 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite.c +++ b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite.c @@ -16,6 +16,9 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ +#define __finite __redirect___finite +#define __finitef __redirect___finitef +#define __finitel __redirect___finitel #include <math.h> #include <math_ldbl_opt.h> #include <shlib-compat.h> @@ -24,13 +27,16 @@ extern __typeof (__finite) __finite_ppc64 attribute_hidden; extern __typeof (__finite) __finite_power7 attribute_hidden; extern __typeof (__finite) __finite_power8 attribute_hidden; - -libc_ifunc (__finite, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __finite_power8 : - (hwcap & PPC_FEATURE_ARCH_2_06) - ? __finite_power7 - : __finite_ppc64); +#undef __finite +#undef __finitef +#undef __finitel + +libc_ifunc_redirected (__redirect___finite, __finite, + (hwcap2 & PPC_FEATURE2_ARCH_2_07) + ? __finite_power8 + : (hwcap & PPC_FEATURE_ARCH_2_06) + ? __finite_power7 + : __finite_ppc64); weak_alias (__finite, finite) diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_finitef.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_finitef.c index e0b4686ced..c9ecd0d5f8 100644 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_finitef.c +++ b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_finitef.c @@ -16,6 +16,7 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ +#define __finitef __redirect___finitef #include <math.h> #include <shlib-compat.h> #include "init-arch.h" @@ -24,12 +25,13 @@ extern __typeof (__finitef) __finitef_ppc64 attribute_hidden; /* The double-precision version also works for single-precision. */ extern __typeof (__finitef) __finite_power7 attribute_hidden; extern __typeof (__finitef) __finite_power8 attribute_hidden; +#undef __finitef -libc_ifunc (__finitef, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __finite_power8 : - (hwcap & PPC_FEATURE_ARCH_2_06) - ? __finite_power7 - : __finitef_ppc64); +libc_ifunc_redirected (__redirect___finitef, __finitef, + (hwcap2 & PPC_FEATURE2_ARCH_2_07) + ? __finite_power8 + : (hwcap & PPC_FEATURE_ARCH_2_06) + ? __finite_power7 + : __finitef_ppc64); weak_alias (__finitef, finitef) diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinf.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinf.c index 07e159d9c1..a13ec27a45 100644 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinf.c +++ b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinf.c @@ -16,6 +16,9 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ +#define __isinf __redirect___isinf +#define __isinff __redirect___isinff +#define __isinfl __redirect___isinfl #include <math.h> #include <math_ldbl_opt.h> #include <shlib-compat.h> @@ -24,13 +27,16 @@ extern __typeof (__isinf) __isinf_ppc64 attribute_hidden; extern __typeof (__isinf) __isinf_power7 attribute_hidden; extern __typeof (__isinf) __isinf_power8 attribute_hidden; - -libc_ifunc (__isinf, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __isinf_power8 : - (hwcap & PPC_FEATURE_ARCH_2_06) - ? __isinf_power7 - : __isinf_ppc64); +#undef __isinf +#undef __isinff +#undef __isinfl + +libc_ifunc_redirected (__redirect___isinf, __isinf, + (hwcap2 & PPC_FEATURE2_ARCH_2_07) + ? __isinf_power8 + : (hwcap & PPC_FEATURE_ARCH_2_06) + ? __isinf_power7 + : __isinf_ppc64); weak_alias (__isinf, isinf) diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinff.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinff.c index 2cb161b54c..cafc118cd5 100644 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinff.c +++ b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinff.c @@ -16,6 +16,7 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ +#define __isinff __redirect___isinff #include <math.h> #include <math_ldbl_opt.h> #include <shlib-compat.h> @@ -25,12 +26,13 @@ extern __typeof (__isinff) __isinff_ppc64 attribute_hidden; /* The double-precision version also works for single-precision. */ extern __typeof (__isinff) __isinf_power7 attribute_hidden; extern __typeof (__isinff) __isinf_power8 attribute_hidden; +#undef __isinff -libc_ifunc (__isinff, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __isinf_power8 : - (hwcap & PPC_FEATURE_ARCH_2_06) - ? __isinf_power7 - : __isinff_ppc64); +libc_ifunc_redirected (__redirect___isinff, __isinff, + (hwcap2 & PPC_FEATURE2_ARCH_2_07) + ? __isinf_power8 + : (hwcap & PPC_FEATURE_ARCH_2_06) + ? __isinf_power7 + : __isinff_ppc64); weak_alias (__isinff, isinff) diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan.c index a614f25047..fce3c9d299 100644 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan.c +++ b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan.c @@ -16,6 +16,9 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ +#define __isnan __redirect___isnan +#define __isnanf __redirect___isnanf +#define __isnanl __redirect___isnanl #include <math.h> #include <math_ldbl_opt.h> #include <shlib-compat.h> @@ -27,19 +30,22 @@ extern __typeof (__isnan) __isnan_power6 attribute_hidden; extern __typeof (__isnan) __isnan_power6x attribute_hidden; extern __typeof (__isnan) __isnan_power7 attribute_hidden; extern __typeof (__isnan) __isnan_power8 attribute_hidden; - -libc_ifunc (__isnan, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __isnan_power8 : - (hwcap & PPC_FEATURE_ARCH_2_06) - ? __isnan_power7 : - (hwcap & PPC_FEATURE_POWER6_EXT) - ? __isnan_power6x : - (hwcap & PPC_FEATURE_ARCH_2_05) - ? __isnan_power6 : - (hwcap & PPC_FEATURE_POWER5) - ? __isnan_power5 - : __isnan_ppc64); +#undef __isnan +#undef __isnanf +#undef __isnanl + +libc_ifunc_redirected (__redirect___isnan, __isnan, + (hwcap2 & PPC_FEATURE2_ARCH_2_07) + ? __isnan_power8 + : (hwcap & PPC_FEATURE_ARCH_2_06) + ? __isnan_power7 + : (hwcap & PPC_FEATURE_POWER6_EXT) + ? __isnan_power6x + : (hwcap & PPC_FEATURE_ARCH_2_05) + ? __isnan_power6 + : (hwcap & PPC_FEATURE_POWER5) + ? __isnan_power5 + : __isnan_ppc64); weak_alias (__isnan, isnan) diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnanf.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnanf.c index acbc131721..903ea867f5 100644 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnanf.c +++ b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnanf.c @@ -27,17 +27,18 @@ extern __typeof (__isnanf) __isnan_power6x attribute_hidden; extern __typeof (__isnanf) __isnan_power7 attribute_hidden; extern __typeof (__isnanf) __isnan_power8 attribute_hidden; -libc_ifunc (__isnanf, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __isnan_power8 : - (hwcap & PPC_FEATURE_ARCH_2_06) - ? __isnan_power7 : - (hwcap & PPC_FEATURE_POWER6_EXT) - ? __isnan_power6x : - (hwcap & PPC_FEATURE_ARCH_2_05) - ? __isnan_power6 : - (hwcap & PPC_FEATURE_POWER5) - ? __isnan_power5 - : __isnan_ppc64); +libc_ifunc_hidden (__isnanf, __isnanf, + (hwcap2 & PPC_FEATURE2_ARCH_2_07) + ? __isnan_power8 + : (hwcap & PPC_FEATURE_ARCH_2_06) + ? __isnan_power7 + : (hwcap & PPC_FEATURE_POWER6_EXT) + ? __isnan_power6x + : (hwcap & PPC_FEATURE_ARCH_2_05) + ? __isnan_power6 + : (hwcap & PPC_FEATURE_POWER5) + ? __isnan_power5 + : __isnan_ppc64); +hidden_def (__isnanf) weak_alias (__isnanf, isnanf) diff --git a/sysdeps/powerpc/powerpc64/multiarch/memcmp.c b/sysdeps/powerpc/powerpc64/multiarch/memcmp.c index e8cf6ae23d..a45ebd75a4 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/memcmp.c +++ b/sysdeps/powerpc/powerpc64/multiarch/memcmp.c @@ -18,6 +18,7 @@ /* Define multiple versions only for definition in libc. */ #if IS_IN (libc) +# define memcmp __redirect_memcmp # include <string.h> # include <shlib-compat.h> # include "init-arch.h" @@ -25,15 +26,16 @@ extern __typeof (memcmp) __memcmp_ppc attribute_hidden; extern __typeof (memcmp) __memcmp_power4 attribute_hidden; extern __typeof (memcmp) __memcmp_power7 attribute_hidden; +# undef memcmp /* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle ifunc symbol properly. */ -libc_ifunc (memcmp, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __memcmp_power7 : - (hwcap & PPC_FEATURE_POWER4) - ? __memcmp_power4 - : __memcmp_ppc); +libc_ifunc_redirected (__redirect_memcmp, memcmp, + (hwcap & PPC_FEATURE_HAS_VSX) + ? __memcmp_power7 + : (hwcap & PPC_FEATURE_POWER4) + ? __memcmp_power4 + : __memcmp_ppc); #else #include <string/memcmp.c> #endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/mempcpy.c b/sysdeps/powerpc/powerpc64/multiarch/mempcpy.c index 3c77b5f1bd..36ec954e6f 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/mempcpy.c +++ b/sysdeps/powerpc/powerpc64/multiarch/mempcpy.c @@ -17,23 +17,28 @@ <http://www.gnu.org/licenses/>. */ #if IS_IN (libc) +# define mempcpy __redirect_mempcpy +# define __mempcpy __redirect___mempcpy # define NO_MEMPCPY_STPCPY_REDIRECT +/* Omit the mempcpy inline definitions because it would redefine mempcpy. */ +# define _HAVE_STRING_ARCH_mempcpy 1 # include <string.h> # include <shlib-compat.h> # include "init-arch.h" extern __typeof (__mempcpy) __mempcpy_ppc attribute_hidden; extern __typeof (__mempcpy) __mempcpy_power7 attribute_hidden; +# undef mempcpy +# undef __mempcpy /* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle ifunc symbol properly. */ -libc_ifunc (__mempcpy, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __mempcpy_power7 - : __mempcpy_ppc); +libc_ifunc_redirected (__redirect___mempcpy, __mempcpy, + (hwcap & PPC_FEATURE_HAS_VSX) + ? __mempcpy_power7 + : __mempcpy_ppc); weak_alias (__mempcpy, mempcpy) -libc_hidden_def (mempcpy) #else # include <string/mempcpy.c> #endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/rawmemchr.c b/sysdeps/powerpc/powerpc64/multiarch/rawmemchr.c index f06030eeeb..b53b148111 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/rawmemchr.c +++ b/sysdeps/powerpc/powerpc64/multiarch/rawmemchr.c @@ -17,19 +17,21 @@ <http://www.gnu.org/licenses/>. */ #if IS_IN (libc) +# define __rawmemchr __redirect___rawmemchr # include <string.h> # include <shlib-compat.h> # include "init-arch.h" extern __typeof (__rawmemchr) __rawmemchr_ppc attribute_hidden; extern __typeof (__rawmemchr) __rawmemchr_power7 attribute_hidden; +# undef __rawmemchr /* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle ifunc symbol properly. */ -libc_ifunc (__rawmemchr, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __rawmemchr_power7 - : __rawmemchr_ppc); +libc_ifunc_redirected (__redirect___rawmemchr, __rawmemchr, + (hwcap & PPC_FEATURE_HAS_VSX) + ? __rawmemchr_power7 + : __rawmemchr_ppc); weak_alias (__rawmemchr, rawmemchr) #else diff --git a/sysdeps/powerpc/powerpc64/multiarch/stpcpy.c b/sysdeps/powerpc/powerpc64/multiarch/stpcpy.c index bbc169180b..e378138379 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/stpcpy.c +++ b/sysdeps/powerpc/powerpc64/multiarch/stpcpy.c @@ -26,14 +26,15 @@ extern __typeof (__stpcpy) __stpcpy_ppc attribute_hidden; extern __typeof (__stpcpy) __stpcpy_power7 attribute_hidden; extern __typeof (__stpcpy) __stpcpy_power8 attribute_hidden; -libc_ifunc (__stpcpy, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __stpcpy_power8 : - (hwcap & PPC_FEATURE_HAS_VSX) - ? __stpcpy_power7 - : __stpcpy_ppc); +libc_ifunc_hidden (__stpcpy, __stpcpy, + (hwcap2 & PPC_FEATURE2_ARCH_2_07) + ? __stpcpy_power8 + : (hwcap & PPC_FEATURE_HAS_VSX) + ? __stpcpy_power7 + : __stpcpy_ppc); weak_alias (__stpcpy, stpcpy) +libc_hidden_def (__stpcpy) libc_hidden_def (stpcpy) #else # include <string/stpcpy.c> diff --git a/sysdeps/powerpc/powerpc64/multiarch/stpncpy.c b/sysdeps/powerpc/powerpc64/multiarch/stpncpy.c index b1484b1e36..fb3b529205 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/stpncpy.c +++ b/sysdeps/powerpc/powerpc64/multiarch/stpncpy.c @@ -17,6 +17,8 @@ <http://www.gnu.org/licenses/>. */ #if IS_IN (libc) +# define stpncpy __redirect_stpncpy +# define __stpncpy __redirect___stpncpy # include <string.h> # include <shlib-compat.h> # include "init-arch.h" @@ -24,13 +26,14 @@ extern __typeof (__stpncpy) __stpncpy_ppc attribute_hidden; extern __typeof (__stpncpy) __stpncpy_power7 attribute_hidden; extern __typeof (__stpncpy) __stpncpy_power8 attribute_hidden; +# undef stpncpy +# undef __stpncpy -libc_ifunc (__stpncpy, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __stpncpy_power8 : - (hwcap & PPC_FEATURE_HAS_VSX) - ? __stpncpy_power7 - : __stpncpy_ppc); - +libc_ifunc_redirected (__redirect___stpncpy, __stpncpy, + (hwcap2 & PPC_FEATURE2_ARCH_2_07) + ? __stpncpy_power8 + : (hwcap & PPC_FEATURE_HAS_VSX) + ? __stpncpy_power7 + : __stpncpy_ppc); weak_alias (__stpncpy, stpncpy) #endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcat.c b/sysdeps/powerpc/powerpc64/multiarch/strcat.c index a2894ae027..5080ed1150 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strcat.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strcat.c @@ -17,6 +17,7 @@ <http://www.gnu.org/licenses/>. */ #if IS_IN (libc) +# define strcat __redirect_strcat # include <string.h> # include <shlib-compat.h> # include "init-arch.h" @@ -24,11 +25,12 @@ extern __typeof (strcat) __strcat_ppc attribute_hidden; extern __typeof (strcat) __strcat_power7 attribute_hidden; extern __typeof (strcat) __strcat_power8 attribute_hidden; +# undef strcat -libc_ifunc (strcat, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __strcat_power8 : - (hwcap & PPC_FEATURE_HAS_VSX) - ? __strcat_power7 - : __strcat_ppc); +libc_ifunc_redirected (__redirect_strcat, strcat, + (hwcap2 & PPC_FEATURE2_ARCH_2_07) + ? __strcat_power8 + : (hwcap & PPC_FEATURE_HAS_VSX) + ? __strcat_power7 + : __strcat_ppc); #endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/strchr.c b/sysdeps/powerpc/powerpc64/multiarch/strchr.c index 2cfde632cb..e24d6b319e 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strchr.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strchr.c @@ -18,18 +18,22 @@ /* Define multiple versions only for definition in libc. */ #if defined SHARED && IS_IN (libc) +# define strchr __redirect_strchr +/* Omit the strchr inline definitions because it would redefine strchr. */ +# define __NO_STRING_INLINES # include <string.h> # include <shlib-compat.h> # include "init-arch.h" extern __typeof (strchr) __strchr_ppc attribute_hidden; extern __typeof (strchr) __strchr_power7 attribute_hidden; +# undef strchr /* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle ifunc symbol properly. */ -libc_ifunc (strchr, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __strchr_power7 - : __strchr_ppc); +libc_ifunc_redirected (__redirect_strchr, strchr, + (hwcap & PPC_FEATURE_HAS_VSX) + ? __strchr_power7 + : __strchr_ppc); weak_alias (strchr, index) #endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcmp.c b/sysdeps/powerpc/powerpc64/multiarch/strcmp.c index aee888a4b7..06f89cb375 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strcmp.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strcmp.c @@ -17,6 +17,9 @@ <http://www.gnu.org/licenses/>. */ #if defined SHARED && IS_IN (libc) +# define strcmp __redirect_strcmp +/* Omit the strcmp inline definitions because it would redefine strcmp. */ +# define __NO_STRING_INLINES # include <string.h> # include <shlib-compat.h> # include "init-arch.h" @@ -24,11 +27,12 @@ extern __typeof (strcmp) __strcmp_ppc attribute_hidden; extern __typeof (strcmp) __strcmp_power7 attribute_hidden; extern __typeof (strcmp) __strcmp_power8 attribute_hidden; +# undef strcmp -libc_ifunc (strcmp, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __strcmp_power8 : - (hwcap & PPC_FEATURE_HAS_VSX) - ? __strcmp_power7 - : __strcmp_ppc); +libc_ifunc_redirected (__redirect_strcmp, strcmp, + (hwcap2 & PPC_FEATURE2_ARCH_2_07) + ? __strcmp_power8 + : (hwcap & PPC_FEATURE_HAS_VSX) + ? __strcmp_power7 + : __strcmp_ppc); #endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/strcpy.c b/sysdeps/powerpc/powerpc64/multiarch/strcpy.c index d2c38589e7..8708fc72ce 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strcpy.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strcpy.c @@ -17,6 +17,7 @@ <http://www.gnu.org/licenses/>. */ #if defined SHARED && IS_IN (libc) +# define strcpy __redirect_strcpy # include <string.h> # include <shlib-compat.h> # include "init-arch.h" @@ -24,11 +25,12 @@ extern __typeof (strcpy) __strcpy_ppc attribute_hidden; extern __typeof (strcpy) __strcpy_power7 attribute_hidden; extern __typeof (strcpy) __strcpy_power8 attribute_hidden; +#undef strcpy -libc_ifunc (strcpy, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __strcpy_power8 : - (hwcap & PPC_FEATURE_HAS_VSX) - ? __strcpy_power7 - : __strcpy_ppc); +libc_ifunc_redirected (__redirect_strcpy, strcpy, + (hwcap2 & PPC_FEATURE2_ARCH_2_07) + ? __strcpy_power8 + : (hwcap & PPC_FEATURE_HAS_VSX) + ? __strcpy_power7 + : __strcpy_ppc); #endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncmp.c b/sysdeps/powerpc/powerpc64/multiarch/strncmp.c index 1eb6e517af..63a1aa049a 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strncmp.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strncmp.c @@ -18,6 +18,9 @@ /* Define multiple versions only for definition in libc. */ #if defined SHARED && IS_IN (libc) +# define strncmp __redirect_strncmp +/* Omit the strncmp inline definitions because it would redefine strncmp. */ +# define __NO_STRING_INLINES # include <string.h> # include <shlib-compat.h> # include "init-arch.h" @@ -26,15 +29,16 @@ extern __typeof (strncmp) __strncmp_ppc attribute_hidden; extern __typeof (strncmp) __strncmp_power4 attribute_hidden; extern __typeof (strncmp) __strncmp_power7 attribute_hidden; extern __typeof (strncmp) __strncmp_power8 attribute_hidden; +# undef strncmp /* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle ifunc symbol properly. */ -libc_ifunc (strncmp, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __strncmp_power8 : - (hwcap & PPC_FEATURE_HAS_VSX) - ? __strncmp_power7 : - (hwcap & PPC_FEATURE_POWER4) - ? __strncmp_power4 - : __strncmp_ppc); +libc_ifunc_redirected (__redirect_strncmp, strncmp, + (hwcap2 & PPC_FEATURE2_ARCH_2_07) + ? __strncmp_power8 + : (hwcap & PPC_FEATURE_HAS_VSX) + ? __strncmp_power7 + : (hwcap & PPC_FEATURE_POWER4) + ? __strncmp_power4 + : __strncmp_ppc); #endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/strncpy.c b/sysdeps/powerpc/powerpc64/multiarch/strncpy.c index 0176514c1e..64495df4bc 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strncpy.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strncpy.c @@ -18,6 +18,9 @@ /* Define multiple versions only for definition in libc. */ #if IS_IN (libc) +# define strncpy __redirect_strncpy +/* Omit the strncpy inline definitions because it would redefine strncpy. */ +# define __NO_STRING_INLINES # include <string.h> # include <shlib-compat.h> # include "init-arch.h" @@ -25,14 +28,15 @@ extern __typeof (strncpy) __strncpy_ppc attribute_hidden; extern __typeof (strncpy) __strncpy_power7 attribute_hidden; extern __typeof (strncpy) __strncpy_power8 attribute_hidden; +# undef strncpy /* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle ifunc symbol properly. */ -libc_ifunc (strncpy, - (hwcap2 & PPC_FEATURE2_ARCH_2_07) - ? __strncpy_power8 : - (hwcap & PPC_FEATURE_HAS_VSX) - ? __strncpy_power7 - : __strncpy_ppc); +libc_ifunc_redirected (__redirect_strncpy, strncpy, + (hwcap2 & PPC_FEATURE2_ARCH_2_07) + ? __strncpy_power8 + : (hwcap & PPC_FEATURE_HAS_VSX) + ? __strncpy_power7 + : __strncpy_ppc); #endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/strnlen.c b/sysdeps/powerpc/powerpc64/multiarch/strnlen.c index c4907e9ec8..71dc12dd9f 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strnlen.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strnlen.c @@ -17,19 +17,21 @@ <http://www.gnu.org/licenses/>. */ #if IS_IN (libc) +# define strnlen __redirect_strnlen +# define __strnlen __redirect___strnlen # include <string.h> # include <shlib-compat.h> # include "init-arch.h" extern __typeof (__strnlen) __strnlen_ppc attribute_hidden; extern __typeof (__strnlen) __strnlen_power7 attribute_hidden; - -libc_ifunc (__strnlen, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __strnlen_power7 - : __strnlen_ppc); +# undef strnlen +# undef __strnlen +libc_ifunc_redirected (__redirect___strnlen, __strnlen, + (hwcap & PPC_FEATURE_HAS_VSX) + ? __strnlen_power7 + : __strnlen_ppc); weak_alias (__strnlen, strnlen) -libc_hidden_def (strnlen) #else #include <string/strnlen.c> diff --git a/sysdeps/powerpc/powerpc64/multiarch/strrchr.c b/sysdeps/powerpc/powerpc64/multiarch/strrchr.c index 45742bc910..e485b02248 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strrchr.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strrchr.c @@ -18,18 +18,20 @@ /* Define multiple versions only for definition in libc. */ #if IS_IN (libc) +# define strrchr __redirect_strrchr # include <string.h> # include <shlib-compat.h> # include "init-arch.h" extern __typeof (strrchr) __strrchr_ppc attribute_hidden; extern __typeof (strrchr) __strrchr_power7 attribute_hidden; +#undef strrchr /* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle ifunc symbol properly. */ -libc_ifunc (strrchr, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __strrchr_power7 - : __strrchr_ppc); +libc_ifunc_redirected (__redirect_strrchr, strrchr, + (hwcap & PPC_FEATURE_HAS_VSX) + ? __strrchr_power7 + : __strrchr_ppc); weak_alias (strrchr, rindex) #endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/strstr.c b/sysdeps/powerpc/powerpc64/multiarch/strstr.c index 7efc4b0913..9a390c2623 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/strstr.c +++ b/sysdeps/powerpc/powerpc64/multiarch/strstr.c @@ -18,17 +18,19 @@ /* Define multiple versions only for definition in libc. */ #if IS_IN (libc) +# define strstr __redirect_strstr # include <string.h> # include <shlib-compat.h> # include "init-arch.h" extern __typeof (strstr) __strstr_ppc attribute_hidden; extern __typeof (strstr) __strstr_power7 attribute_hidden; +# undef strstr /* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle ifunc symbol properly. */ -libc_ifunc (strstr, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __strstr_power7 - : __strstr_ppc); +libc_ifunc_redirected (__redirect_strstr, strstr, + (hwcap & PPC_FEATURE_HAS_VSX) + ? __strstr_power7 + : __strstr_ppc); #endif diff --git a/sysdeps/powerpc/powerpc64/multiarch/wcschr.c b/sysdeps/powerpc/powerpc64/multiarch/wcschr.c index 44c9b971ce..a4705423b0 100644 --- a/sysdeps/powerpc/powerpc64/multiarch/wcschr.c +++ b/sysdeps/powerpc/powerpc64/multiarch/wcschr.c @@ -17,6 +17,8 @@ <http://www.gnu.org/licenses/>. */ #if IS_IN (libc) +# define wcschr __redirect_wcschr +# define __wcschr __redirect___wcschr # include <wchar.h> # include <shlib-compat.h> # include "init-arch.h" @@ -24,15 +26,16 @@ extern __typeof (wcschr) __wcschr_ppc attribute_hidden; extern __typeof (wcschr) __wcschr_power6 attribute_hidden; extern __typeof (wcschr) __wcschr_power7 attribute_hidden; +# undef wcschr +# undef __wcschr -libc_ifunc (__wcschr, - (hwcap & PPC_FEATURE_HAS_VSX) - ? __wcschr_power7 : - (hwcap & PPC_FEATURE_ARCH_2_05) - ? __wcschr_power6 - : __wcschr_ppc); +libc_ifunc_redirected (__redirect___wcschr, __wcschr, + (hwcap & PPC_FEATURE_HAS_VSX) + ? __wcschr_power7 + : (hwcap & PPC_FEATURE_ARCH_2_05) + ? __wcschr_power6 + : __wcschr_ppc); weak_alias (__wcschr, wcschr) -libc_hidden_builtin_def (wcschr) #else #undef libc_hidden_def #define libc_hidden_def(a) |