summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2011-12-03 12:48:24 -0500
committerMike Frysinger <vapier@gentoo.org>2011-12-03 12:55:45 -0500
commit09dfeda9cf5a1bd1bd89180308ce923cc4c5f9b0 (patch)
treefb15c096881079c954cd4fbb2123c3c589ce7425
parent46fa3f2fdc873d98818dcd5efae90c09a3b75a66 (diff)
x86_64: add PLT bypass for __sigsetjmp
The current x86_64 setjmp helpers incur a reloc, so fix that up. $ readelf -r lib/libc.so.0 ... Relocation section '.rela.plt' at offset 0xb058 contains 10 entries: Offset Info Type Sym. Value Sym. Name + Addend 000000236010 02a400000007 R_X86_64_JUMP_SLO 000000000000b3c4 __sigsetjmp + 0 ... Signed-off-by: Mike Frysinger <vapier@gentoo.org>
-rw-r--r--libc/sysdeps/linux/x86_64/bsd-_setjmp.S4
-rw-r--r--libc/sysdeps/linux/x86_64/bsd-setjmp.S3
-rw-r--r--libc/sysdeps/linux/x86_64/setjmp.S2
3 files changed, 7 insertions, 2 deletions
diff --git a/libc/sysdeps/linux/x86_64/bsd-_setjmp.S b/libc/sysdeps/linux/x86_64/bsd-_setjmp.S
index 81a4352f3..8b68ff2ca 100644
--- a/libc/sysdeps/linux/x86_64/bsd-_setjmp.S
+++ b/libc/sysdeps/linux/x86_64/bsd-_setjmp.S
@@ -21,9 +21,11 @@
We cannot do it in C because it must be a tail-call, so frame-unwinding
in setjmp doesn't clobber the state restored by longjmp. */
+#include <sysdep.h>
+
.global _setjmp
.type _setjmp,%function
_setjmp:
xorq %rsi, %rsi
- jmp __sigsetjmp@PLT
+ jmp HIDDEN_JUMPTARGET(__sigsetjmp)
.size _setjmp,.-_setjmp
diff --git a/libc/sysdeps/linux/x86_64/bsd-setjmp.S b/libc/sysdeps/linux/x86_64/bsd-setjmp.S
index a906a6132..889efa6ce 100644
--- a/libc/sysdeps/linux/x86_64/bsd-setjmp.S
+++ b/libc/sysdeps/linux/x86_64/bsd-setjmp.S
@@ -20,10 +20,11 @@
#define _ASM
#define _SETJMP_H
#include <bits/setjmp.h>
+#include <sysdep.h>
.global setjmp
.type setjmp,%function
setjmp:
movq $1, %rsi
- jmp __sigsetjmp@PLT
+ jmp HIDDEN_JUMPTARGET(__sigsetjmp)
.size setjmp,.-setjmp
diff --git a/libc/sysdeps/linux/x86_64/setjmp.S b/libc/sysdeps/linux/x86_64/setjmp.S
index eb4b97363..3a0f30b52 100644
--- a/libc/sysdeps/linux/x86_64/setjmp.S
+++ b/libc/sysdeps/linux/x86_64/setjmp.S
@@ -20,6 +20,7 @@
#define _ASM
#define _SETJMP_H
#include <bits/setjmp.h>
+#include <sysdep.h>
.global __sigsetjmp
.type __sigsetjmp,%function
@@ -43,3 +44,4 @@ __sigsetjmp:
jmp __sigjmp_save
#endif
.size __sigsetjmp,.-__sigsetjmp
+libc_hidden_def(__sigsetjmp)