mirror of
git://sourceware.org/git/glibc.git
synced 2024-12-09 04:11:27 +08:00
PowerPC: Fix memchr ifunc hidden symbol for PPC32
This patch fixes a similar issue to
736c304a1a
, where for PPC32 if the symbol
is defined as hidden (memchr) then compiler will create a local branc
(symbol@local) and the linker will not create a required PLT call to
make the ifunc work. It changes the default hidden symbol (__GI_memchr)
to default memchr symbol for powerpc32 (__memchr_ppc32).
This commit is contained in:
parent
df54acbb7b
commit
3d2badacf1
@ -1,3 +1,10 @@
|
||||
2014-05-22 Adhemerval Zanella <azanella@linux.vnet.ibm.com>
|
||||
|
||||
* sysdeps/powerpc/powerpc32/power4/multiarch/memchr.c (memchr): Remove
|
||||
libc_hidden_builtin_def to ifunc.
|
||||
* sysdeps/powerpc/powerpc32/power4/multiarch/memchr-ppc32.c
|
||||
[libc_hidden_builtin_def]: Define hidden definition to __memchr_ppc32.
|
||||
|
||||
2014-05-16 Roland McGrath <roland@hack.frob.com>
|
||||
|
||||
* sysdeps/unix/sysv/linux/aarch64/arch-fork.h: New file.
|
||||
|
@ -25,7 +25,8 @@
|
||||
|
||||
#ifdef SHARED
|
||||
# undef libc_hidden_builtin_def
|
||||
# define libc_hidden_builtin_def(name)
|
||||
# define libc_hidden_builtin_def(name) \
|
||||
__hidden_ver1(__memchr_ppc, __GI_memchr, __memchr_ppc);
|
||||
#endif
|
||||
|
||||
extern __typeof (memchr) __memchr_ppc attribute_hidden;
|
||||
|
@ -17,22 +17,25 @@
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef NOT_IN_libc
|
||||
# undef memcpy
|
||||
/* Redefine memchr so that the compiler won't make the weak_alias point
|
||||
to internal hidden definition (__GI_memchr), since PPC32 does not
|
||||
support local IFUNC calls. */
|
||||
# define memchr __redirect_memchr
|
||||
# include <string.h>
|
||||
# include <shlib-compat.h>
|
||||
# include "init-arch.h"
|
||||
|
||||
extern __typeof (__memchr) __memchr_ppc attribute_hidden;
|
||||
extern __typeof (__memchr) __memchr_power7 attribute_hidden;
|
||||
extern __typeof (__redirect_memchr) __memchr_ppc attribute_hidden;
|
||||
extern __typeof (__redirect_memchr) __memchr_power7 attribute_hidden;
|
||||
|
||||
/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle
|
||||
ifunc symbol properly. */
|
||||
libc_ifunc (__memchr,
|
||||
extern __typeof (__redirect_memchr) __libc_memchr;
|
||||
|
||||
libc_ifunc (__libc_memchr,
|
||||
(hwcap & PPC_FEATURE_HAS_VSX)
|
||||
? __memchr_power7
|
||||
: __memchr_ppc);
|
||||
|
||||
weak_alias (__memchr, memchr)
|
||||
libc_hidden_builtin_def (memchr)
|
||||
#undef memchr
|
||||
weak_alias (__libc_memchr, memchr)
|
||||
#else
|
||||
#include <string/memchr.c>
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user