Only provide non-default symbols in libpthread for vfork
authorRichard Henderson <rth@twiddle.net>
Fri, 23 May 2014 23:03:28 +0000 (16:03 -0700)
committerRichard Henderson <rth@twiddle.net>
Sat, 24 May 2014 04:33:05 +0000 (21:33 -0700)
* nptl/pt-vfork.c (vfork_resolve): Rename from vfork_ifunc.
(vfork, __vfork): Define via compat_symbol.

ChangeLog
nptl/pt-vfork.c

index 11b3521..271e31d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 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.
        [!HAVE_IFUNC] (vfork_compat): Remove.
        [!HAVE_IFUNC] (DEFINE_VFORK): Remove.
index eaffe48..f3858c2 100644 (file)
 
 extern __typeof (vfork) __libc_vfork;   /* Defined in libc.  */
 
-attribute_hidden __attribute__ ((used))
-__typeof (vfork) *
-vfork_ifunc (void)
+static __typeof (vfork) *
+__attribute__ ((used))
+vfork_resolve (void)
 {
   return &__libc_vfork;
 }
 
 # ifdef HAVE_ASM_SET_DIRECTIVE
 #  define DEFINE_VFORK(name) \
-  asm (".set " #name ", vfork_ifunc\n" \
+  asm (".set " #name ", vfork_resolve\n" \
        ".globl " #name "\n" \
        ".type " #name ", %gnu_indirect_function");
 # else
 #  define DEFINE_VFORK(name) \
-  asm (#name " = vfork_ifunc\n" \
+  asm (#name " = vfork_resolve\n" \
        ".globl " #name "\n" \
        ".type " #name ", %gnu_indirect_function");
 # endif
 #endif
 
 #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
 
 #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