[hurd,commited] hurd: Avoid PLTs for longjmp & siglongjmp

Message ID 20180404232002.29236-1-samuel.thibault@ens-lyon.org
State New
Headers show
Series
  • [hurd,commited] hurd: Avoid PLTs for longjmp & siglongjmp
Related show

Commit Message

Samuel Thibault April 4, 2018, 11:20 p.m.
* include/setjmp.h (longjmp, siglongjmp): Add hidden protos.
	* setjmp/longjmp.c (longjmp, siglongjmp): Add hidden defs.
	* sysdeps/s390/longjmp.c (longjmp, siglongjmp): Add hidden defs.
---
 ChangeLog              | 6 ++++++
 include/setjmp.h       | 2 ++
 setjmp/longjmp.c       | 2 ++
 sysdeps/s390/longjmp.c | 2 ++
 4 files changed, 12 insertions(+)

Comments

Andreas Schwab April 5, 2018, 7:27 a.m. | #1
https://build.opensuse.org/package/live_build_log/home:Andreas_Schwab:glibc/glibc/s/s390x

In file included from <command-line>:0:0:
./../include/libc-symbols.h:471:26: error: '__EI_siglongjmp' aliased to undefined symbol '__GI_siglongjmp'
   extern __typeof (name) __EI_##name \
                          ^
./../include/libc-symbols.h:475:29: note: in expansion of macro '__hidden_ver1'
 #  define hidden_def(name)  __hidden_ver1(__GI_##name, name, name);
                             ^~~~~~~~~~~~~
./../include/libc-symbols.h:539:32: note: in expansion of macro 'hidden_def'
 # define libc_hidden_def(name) hidden_def (name)
                                ^~~~~~~~~~
../sysdeps/s390/longjmp.c:52:1: note: in expansion of macro 'libc_hidden_def'
 libc_hidden_def (siglongjmp)
 ^~~~~~~~~~~~~~~
./../include/libc-symbols.h:471:26: error: '__EI_longjmp' aliased to undefined symbol '__GI_longjmp'
   extern __typeof (name) __EI_##name \
                          ^
./../include/libc-symbols.h:475:29: note: in expansion of macro '__hidden_ver1'
 #  define hidden_def(name)  __hidden_ver1(__GI_##name, name, name);
                             ^~~~~~~~~~~~~
./../include/libc-symbols.h:539:32: note: in expansion of macro 'hidden_def'
 # define libc_hidden_def(name) hidden_def (name)
                                ^~~~~~~~~~
../sysdeps/s390/longjmp.c:46:1: note: in expansion of macro 'libc_hidden_def'
 libc_hidden_def (longjmp)
 ^~~~~~~~~~~~~~~

Andreas.

Patch

diff --git a/ChangeLog b/ChangeLog
index 174bb6a46a..58d4d94ec0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@ 
+2018-04-05  Samuel Thibault  <samuel.thibault@ens-lyon.org>
+
+	* include/setjmp.h (longjmp, siglongjmp): Add hidden protos.
+	* setjmp/longjmp.c (longjmp, siglongjmp): Add hidden defs.
+	* sysdeps/s390/longjmp.c (longjmp, siglongjmp): Add hidden defs.
+
 2018-04-04  Tulio Magno Quites Machado Filho  <tuliom@linux.ibm.com>
 
 	* sysdeps/powerpc/fpu/libm-test-ulps: Increase double-precision
diff --git a/include/setjmp.h b/include/setjmp.h
index 263bc64b3d..ed582516c9 100644
--- a/include/setjmp.h
+++ b/include/setjmp.h
@@ -26,6 +26,8 @@  extern void __libc_longjmp (sigjmp_buf env, int val)
 
 libc_hidden_proto (_setjmp)
 libc_hidden_proto (__sigsetjmp)
+libc_hidden_proto (longjmp)
+libc_hidden_proto (siglongjmp)
 
 # if IS_IN (rtld) && !defined NO_RTLD_HIDDEN
 extern __typeof (__sigsetjmp) __sigsetjmp attribute_hidden;
diff --git a/setjmp/longjmp.c b/setjmp/longjmp.c
index a2a7065a85..72d43f45df 100644
--- a/setjmp/longjmp.c
+++ b/setjmp/longjmp.c
@@ -45,5 +45,7 @@  __libc_siglongjmp (sigjmp_buf env, int val)
 strong_alias (__libc_siglongjmp, __libc_longjmp)
 weak_alias (__libc_siglongjmp, _longjmp)
 weak_alias (__libc_siglongjmp, longjmp)
+libc_hidden_def (longjmp)
 weak_alias (__libc_siglongjmp, siglongjmp)
+libc_hidden_def (siglongjmp)
 #endif
diff --git a/sysdeps/s390/longjmp.c b/sysdeps/s390/longjmp.c
index e61cdba2a3..1064647ee0 100644
--- a/sysdeps/s390/longjmp.c
+++ b/sysdeps/s390/longjmp.c
@@ -43,9 +43,11 @@  weak_alias (__libc_siglongjmp, __v1longjmp)
 weak_alias (__libc_siglongjmp, __v2longjmp)
 versioned_symbol (libc, __v1longjmp, longjmp, GLIBC_2_0);
 compat_symbol (libc, __v2longjmp, longjmp, GLIBC_2_19);
+libc_hidden_def (longjmp)
 
 weak_alias (__libc_siglongjmp, __v1siglongjmp)
 weak_alias (__libc_siglongjmp, __v2siglongjmp)
 versioned_symbol (libc, __v1siglongjmp, siglongjmp, GLIBC_2_0);
 compat_symbol (libc, __v2siglongjmp, siglongjmp, GLIBC_2_19);
+libc_hidden_def (siglongjmp)
 #endif /* SHARED && SHLIB_COMPAT (libc, GLIBC_2_19, GLIBC_2_20)  */