about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--nptl/pt-vfork.c16
2 files changed, 12 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 11b3521dd4..271e31d45d 100644
--- 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.
diff --git a/nptl/pt-vfork.c b/nptl/pt-vfork.c
index eaffe48f53..f3858c2648 100644
--- a/nptl/pt-vfork.c
+++ b/nptl/pt-vfork.c
@@ -46,30 +46,32 @@
 
 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