This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 7/8] Use libc_ifunc macro for vfork in libpthread.


This updated patch first undefines INIT_ARCH before it is defined.

On 06/23/2016 01:55 PM, Stefan Liebler wrote:
This patch uses the libc_ifunc macro to create already existing ifunc functions
vfork_ifunc and __vfork_ifunc if HAVE_IFUNC is defined.

ChangeLog:

	* nptl/pt-vfork.c (DEFINE_VFORK): Use libc_ifunc macro.
---
  nptl/pt-vfork.c | 21 ++++-----------------
  1 file changed, 4 insertions(+), 17 deletions(-)

diff --git a/nptl/pt-vfork.c b/nptl/pt-vfork.c
index 8f4be0c..6258835 100644
--- a/nptl/pt-vfork.c
+++ b/nptl/pt-vfork.c
@@ -46,32 +46,19 @@

  extern __typeof (vfork) __libc_vfork;   /* Defined in libc.  */

-static __typeof (vfork) *
-__attribute__ ((used))
-vfork_resolve (void)
-{
-  return &__libc_vfork;
-}
+# define INIT_ARCH()
+# define DEFINE_VFORK(name) libc_ifunc (name, &__libc_vfork)

-# ifdef HAVE_ASM_SET_DIRECTIVE
-#  define DEFINE_VFORK(name) \
-  asm (".set " #name ", vfork_resolve\n" \
-       ".globl " #name "\n" \
-       ".type " #name ", %gnu_indirect_function");
-# else
-#  define DEFINE_VFORK(name) \
-  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)
+extern __typeof(vfork) vfork_ifunc;
  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)
+extern __typeof(vfork) __vfork_ifunc;
  DEFINE_VFORK (__vfork_ifunc)
  compat_symbol (libpthread, __vfork_ifunc, __vfork, GLIBC_2_1_2);
  #endif

>From 899785dab6aae3ba488382b38a8f67916e39cf2b Mon Sep 17 00:00:00 2001
From: Stefan Liebler <stli@linux.vnet.ibm.com>
Date: Mon, 4 Jul 2016 15:33:57 +0200
Subject: [PATCH 7/8] Use libc_ifunc macro for vfork in libpthread.

This patch uses the libc_ifunc macro to create already existing ifunc functions
vfork_ifunc and __vfork_ifunc if HAVE_IFUNC is defined.

ChangeLog:

	* nptl/pt-vfork.c (DEFINE_VFORK): Use libc_ifunc macro.
---
 nptl/pt-vfork.c | 22 +++++-----------------
 1 file changed, 5 insertions(+), 17 deletions(-)

diff --git a/nptl/pt-vfork.c b/nptl/pt-vfork.c
index 8f4be0c..563e3ec 100644
--- a/nptl/pt-vfork.c
+++ b/nptl/pt-vfork.c
@@ -46,32 +46,20 @@
 
 extern __typeof (vfork) __libc_vfork;   /* Defined in libc.  */
 
-static __typeof (vfork) *
-__attribute__ ((used))
-vfork_resolve (void)
-{
-  return &__libc_vfork;
-}
+# undef INIT_ARCH
+# define INIT_ARCH()
+# define DEFINE_VFORK(name) libc_ifunc (name, &__libc_vfork)
 
-# ifdef HAVE_ASM_SET_DIRECTIVE
-#  define DEFINE_VFORK(name) \
-  asm (".set " #name ", vfork_resolve\n" \
-       ".globl " #name "\n" \
-       ".type " #name ", %gnu_indirect_function");
-# else
-#  define DEFINE_VFORK(name) \
-  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)
+extern __typeof(vfork) vfork_ifunc;
 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)
+extern __typeof(vfork) __vfork_ifunc;
 DEFINE_VFORK (__vfork_ifunc)
 compat_symbol (libpthread, __vfork_ifunc, __vfork, GLIBC_2_1_2);
 #endif
-- 
2.3.0


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]