summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2016-11-29 10:16:35 +0100
committerFlorian Weimer <fweimer@redhat.com>2016-11-29 10:16:35 +0100
commitb36528936449d2e800db8833869d108a20653c96 (patch)
treebf72453076bccca5b03f3197e1203788b3b74a80
parent76388b236a7089f6ee5dc0a566caa518132f16bd (diff)
downloadglibc-b36528936449d2e800db8833869d108a20653c96.tar.gz
powerpc: Add hidden definition for __sigsetjmp
There already is a hidden prototype for __sigsetjmp, but the architecture-specific definition was missing.
-rw-r--r--ChangeLog7
-rw-r--r--sysdeps/powerpc/powerpc32/fpu/setjmp.S1
-rw-r--r--sysdeps/powerpc/powerpc32/setjmp.S1
-rw-r--r--sysdeps/powerpc/powerpc64/setjmp-common.S11
4 files changed, 20 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index a35e3f9b71..7a70c49646 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
2016-11-29 Florian Weimer <fweimer@redhat.com>
+ * sysdeps/powerpc/powerpc64/setjmp-common.S (__GI___sigsetjmp):
+ Define.
+ * sysdeps/powerpc/powerpc32/setjmp.S (__sigsetjmp): Add hidden
+ definition.
+
+2016-11-29 Florian Weimer <fweimer@redhat.com>
+
* sysdeps/powerpc/powerpc32/fpu/__longjmp.S (__longjmp): Remove
version and turn into strong alias. Remove compat symbol.
diff --git a/sysdeps/powerpc/powerpc32/fpu/setjmp.S b/sysdeps/powerpc/powerpc32/fpu/setjmp.S
index 6a4016c229..de6cdcf959 100644
--- a/sysdeps/powerpc/powerpc32/fpu/setjmp.S
+++ b/sysdeps/powerpc/powerpc32/fpu/setjmp.S
@@ -32,6 +32,7 @@ versioned_symbol (libc, __vmx__sigsetjmp, __sigsetjmp, GLIBC_2_3_4)
# define __sigsetjmp_symbol __vmx__sigsetjmp
# define __sigjmp_save_symbol __vmx__sigjmp_save
# include "setjmp-common.S"
+libc_hidden_ver (__vmx__sigsetjmp, __sigsetjmp)
# if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4)
# define __NO_VMX__
diff --git a/sysdeps/powerpc/powerpc32/setjmp.S b/sysdeps/powerpc/powerpc32/setjmp.S
index 88f7f828ce..285d40cab8 100644
--- a/sysdeps/powerpc/powerpc32/setjmp.S
+++ b/sysdeps/powerpc/powerpc32/setjmp.S
@@ -31,6 +31,7 @@ versioned_symbol (libc, __vmx__sigsetjmp, __sigsetjmp, GLIBC_2_3_4)
# define __sigsetjmp_symbol __vmx__sigsetjmp
# define __sigjmp_save_symbol __vmx__sigjmp_save
# include "setjmp-common.S"
+libc_hidden_ver (__vmx__sigsetjmp, __sigsetjmp)
# if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4)
# define __NO_VMX__
diff --git a/sysdeps/powerpc/powerpc64/setjmp-common.S b/sysdeps/powerpc/powerpc64/setjmp-common.S
index 83361f537c..b5de49ebaf 100644
--- a/sysdeps/powerpc/powerpc64/setjmp-common.S
+++ b/sysdeps/powerpc/powerpc64/setjmp-common.S
@@ -232,3 +232,14 @@ L(no_vmx):
blr
#endif
END (__sigsetjmp_symbol)
+
+#if defined SHARED && !IS_IN (rtld) && !defined __NO_VMX__
+/* When called from within libc we need a special version of __sigsetjmp
+ that saves r2 since the call won't go via a plt call stub. See
+ bugz #269. */
+ENTRY (__GI___sigsetjmp)
+ std r2,FRAME_TOC_SAVE(r1) /* Save the callers TOC in the save area. */
+ CALL_MCOUNT 1
+ b JUMPTARGET (GLUE(__sigsetjmp_symbol,_ent))
+END (__GI___sigsetjmp)
+#endif