From 09dfeda9cf5a1bd1bd89180308ce923cc4c5f9b0 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Sat, 3 Dec 2011 12:48:24 -0500 Subject: 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 --- libc/sysdeps/linux/x86_64/bsd-_setjmp.S | 4 +++- libc/sysdeps/linux/x86_64/bsd-setjmp.S | 3 ++- libc/sysdeps/linux/x86_64/setjmp.S | 2 ++ 3 files changed, 7 insertions(+), 2 deletions(-) (limited to 'libc/sysdeps/linux/x86_64') 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 + .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 +#include .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 +#include .global __sigsetjmp .type __sigsetjmp,%function @@ -43,3 +44,4 @@ __sigsetjmp: jmp __sigjmp_save #endif .size __sigsetjmp,.-__sigsetjmp +libc_hidden_def(__sigsetjmp) -- cgit v1.2.3