Only provide non-default symbols in libpthread for vfork

* nptl/pt-vfork.c (vfork_resolve): Rename from vfork_ifunc.
	(vfork, __vfork): Define via compat_symbol.
This commit is contained in:
Richard Henderson 2014-05-23 16:03:28 -07:00
parent 8820e3acc3
commit 900e445fad
2 changed files with 12 additions and 7 deletions

View File

@ -1,5 +1,8 @@
2014-05-23 Richard Henderson <rth@twiddle.net> 2014-05-23 Richard Henderson <rth@twiddle.net>
* nptl/pt-vfork.c (vfork_resolve): Rename from vfork_ifunc.
(vfork, __vfork): Define via compat_symbol.
* nptl/pt-vfork.c: Error if !HAVE_IFUNC. * nptl/pt-vfork.c: Error if !HAVE_IFUNC.
[!HAVE_IFUNC] (vfork_compat): Remove. [!HAVE_IFUNC] (vfork_compat): Remove.
[!HAVE_IFUNC] (DEFINE_VFORK): Remove. [!HAVE_IFUNC] (DEFINE_VFORK): Remove.

View File

@ -46,30 +46,32 @@
extern __typeof (vfork) __libc_vfork; /* Defined in libc. */ extern __typeof (vfork) __libc_vfork; /* Defined in libc. */
attribute_hidden __attribute__ ((used)) static __typeof (vfork) *
__typeof (vfork) * __attribute__ ((used))
vfork_ifunc (void) vfork_resolve (void)
{ {
return &__libc_vfork; return &__libc_vfork;
} }
# ifdef HAVE_ASM_SET_DIRECTIVE # ifdef HAVE_ASM_SET_DIRECTIVE
# define DEFINE_VFORK(name) \ # define DEFINE_VFORK(name) \
asm (".set " #name ", vfork_ifunc\n" \ asm (".set " #name ", vfork_resolve\n" \
".globl " #name "\n" \ ".globl " #name "\n" \
".type " #name ", %gnu_indirect_function"); ".type " #name ", %gnu_indirect_function");
# else # else
# define DEFINE_VFORK(name) \ # define DEFINE_VFORK(name) \
asm (#name " = vfork_ifunc\n" \ asm (#name " = vfork_resolve\n" \
".globl " #name "\n" \ ".globl " #name "\n" \
".type " #name ", %gnu_indirect_function"); ".type " #name ", %gnu_indirect_function");
# endif # endif
#endif #endif
#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_20) #if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_20)
DEFINE_VFORK (vfork) DEFINE_VFORK (vfork_ifunc)
compat_symbol (libpthread, vfork_ifunc, vfork, GLIBC_2_0);
#endif #endif
#if SHLIB_COMPAT (libpthread, GLIBC_2_1_2, GLIBC_2_20) #if SHLIB_COMPAT (libpthread, GLIBC_2_1_2, GLIBC_2_20)
DEFINE_VFORK (__vfork) DEFINE_VFORK (__vfork_ifunc)
compat_symbol (libpthread, __vfork_ifunc, __vfork, GLIBC_2_1_2);
#endif #endif