From: Mike Frysinger Date: Sat, 3 Dec 2011 17:48:24 +0000 (-0500) Subject: x86_64: add PLT bypass for __sigsetjmp X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=09dfeda9cf5a1bd1bd89180308ce923cc4c5f9b0;p=uclinux-h8%2FuClibc.git 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 --- 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)