From 85736dc78ba0a44d524961eef464e3690c67678a Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Tue, 15 May 2012 16:43:11 -0700 Subject: Use R*_LP, sizeSS, oSS_FLAGS, oSS_SP and oSS_SIZE --- sysdeps/unix/sysv/linux/x86_64/Makefile | 4 +++ sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S | 34 ++++++++++++---------- .../unix/sysv/linux/x86_64/sigaltstack-offsets.sym | 15 ++++++++++ 3 files changed, 37 insertions(+), 16 deletions(-) create mode 100644 sysdeps/unix/sysv/linux/x86_64/sigaltstack-offsets.sym (limited to 'sysdeps') diff --git a/sysdeps/unix/sysv/linux/x86_64/Makefile b/sysdeps/unix/sysv/linux/x86_64/Makefile index 9c9e6151d1..59a6b0a8ba 100644 --- a/sysdeps/unix/sysv/linux/x86_64/Makefile +++ b/sysdeps/unix/sysv/linux/x86_64/Makefile @@ -17,6 +17,10 @@ ifeq ($(subdir),csu) gen-as-const-headers += ucontext_i.sym endif +ifeq ($(subdir),misc) +gen-as-const-headers += sigaltstack-offsets.sym +endif + ifeq ($(subdir),elf) sysdep_routines += dl-vdso endif diff --git a/sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S b/sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S index 1de7e09e8d..a0d1732bdc 100644 --- a/sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S +++ b/sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S @@ -19,6 +19,8 @@ #include #include +#include + .section .rodata.str1.1,"aMS",@progbits,1 .type longjmp_msg,@object longjmp_msg: @@ -29,18 +31,18 @@ longjmp_msg: //#define __longjmp ____longjmp_chk #ifdef PIC -# define CALL_FAIL subq $8, %rsp; \ +# define CALL_FAIL sub $8, %RSP_LP; \ cfi_remember_state; \ cfi_def_cfa_offset(16); \ - leaq longjmp_msg(%rip), %rdi; \ + lea longjmp_msg(%rip), %RDI_LP; \ call HIDDEN_JUMPTARGET(__fortify_fail); \ nop; \ cfi_restore_state #else -# define CALL_FAIL subq $8, %rsp; \ +# define CALL_FAIL sub $8, %RSP_LP; \ cfi_remember_state; \ cfi_def_cfa_offset(16); \ - movq $longjmp_msg, %rdi; \ + mov $longjmp_msg, %RDI_LP; \ call HIDDEN_JUMPTARGET(__fortify_fail); \ nop; \ cfi_restore_state @@ -52,16 +54,16 @@ longjmp_msg: .text ENTRY(____longjmp_chk) /* Restore registers. */ - movq (JB_RSP*8)(%rdi), %r8 + mov (JB_RSP*8)(%rdi), %R8_LP movq (JB_RBP*8)(%rdi), %r9 - movq (JB_PC*8)(%rdi), %rdx + mov (JB_PC*8)(%rdi), %RDX_LP #ifdef PTR_DEMANGLE - PTR_DEMANGLE (%r8) + PTR_DEMANGLE (%R8_LP) PTR_DEMANGLE (%r9) - PTR_DEMANGLE (%rdx) + PTR_DEMANGLE (%RDX_LP) #endif - cmpq %r8, %rsp + cmp %R8_LP, %RSP_LP jbe .Lok /* Save function parameters. */ @@ -71,19 +73,19 @@ ENTRY(____longjmp_chk) cfi_register (%rsi, %rbx) xorl %edi, %edi - leaq -24(%rsp), %rsi + lea -sizeSS(%rsp), %RSI_LP movl $__NR_sigaltstack, %eax syscall /* Without working sigaltstack we cannot perform the test. */ testl %eax, %eax jne .Lok2 - testl $1, -16(%rsp) + testl $1, (-sizeSS + oSS_FLAGS)(%rsp) jz .Lfail - movq -24(%rsp), %rax - addq -8(%rsp), %rax - subq %r8, %rax - cmpq -8(%rsp), %rax + mov (-sizeSS + oSS_SP)(%rsp), %RAX_LP + add (-sizeSS + oSS_SIZE)(%rsp), %RAX_LP + sub %R8_LP, %RAX_LP + cmp (-sizeSS + oSS_SIZE)(%rsp), %RAX_LP jae .Lok2 .Lfail: CALL_FAIL @@ -110,7 +112,7 @@ ENTRY(____longjmp_chk) movq (JB_R15*8)(%rdi), %r15 /* Set return value for setjmp. */ movl %esi, %eax - movq %r8,%rsp + mov %R8_LP, %RSP_LP movq %r9,%rbp jmpq *%rdx END (____longjmp_chk) diff --git a/sysdeps/unix/sysv/linux/x86_64/sigaltstack-offsets.sym b/sysdeps/unix/sysv/linux/x86_64/sigaltstack-offsets.sym new file mode 100644 index 0000000000..5ff3af4a82 --- /dev/null +++ b/sysdeps/unix/sysv/linux/x86_64/sigaltstack-offsets.sym @@ -0,0 +1,15 @@ +#ifndef _XOPEN_EXTENDED +# define _XOPEN_EXTENDED +#endif + +#include +#include + +-- + +#define sigaltstack(member) offsetof (stack_t, member) + +sizeSS sizeof (stack_t) +oSS_SP sigaltstack (ss_sp) +oSS_SIZE sigaltstack (ss_size) +oSS_FLAGS sigaltstack (ss_flags) -- cgit v1.2.3