From 9848887afad7b720d100d536ab35deb7d6c4396c Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Tue, 24 Jan 2012 08:23:57 +0100 Subject: [PATCH] target.h (gtm_jmpbuf): Move rip to the end of structure. * config/x86/target.h (gtm_jmpbuf) [__x86_64__]: Move rip to the end of structure. * config/x86/sjlj.S (_ITM_beginTransaction) [__x86_64__]: Update offset values. Do not copy return address. Decrement stack by 56 bytes only. (GTM_longjump) [__x86_64__]: Update offset values. From-SVN: r183467 --- libitm/ChangeLog | 9 +++++++++ libitm/config/x86/sjlj.S | 34 ++++++++++++++++------------------ libitm/config/x86/target.h | 2 +- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/libitm/ChangeLog b/libitm/ChangeLog index bf29f4efc3f4..4b6d156d750d 100644 --- a/libitm/ChangeLog +++ b/libitm/ChangeLog @@ -1,3 +1,12 @@ +2012-01-24 Uros Bizjak + + * config/x86/target.h (gtm_jmpbuf) [__x86_64__]: Move rip to the + end of structure. + * config/x86/sjlj.S (_ITM_beginTransaction) [__x86_64__]: Update + offset values. Do not copy return address. Decrement stack + by 56 bytes only. + (GTM_longjump) [__x86_64__]: Update offset values. + 2012-01-23 Uros Bizjak PR libitm/51830 diff --git a/libitm/config/x86/sjlj.S b/libitm/config/x86/sjlj.S index c30c216f229d..0571a4ab658a 100644 --- a/libitm/config/x86/sjlj.S +++ b/libitm/config/x86/sjlj.S @@ -61,20 +61,18 @@ SYM(_ITM_beginTransaction): cfi_startproc #ifdef __x86_64__ leaq 8(%rsp), %rax - movq (%rsp), %r8 - subq $72, %rsp - cfi_def_cfa_offset(80) + subq $56, %rsp + cfi_def_cfa_offset(64) movq %rax, (%rsp) - movq %r8, 8(%rsp) - movq %rbx, 16(%rsp) - movq %rbp, 24(%rsp) - movq %r12, 32(%rsp) - movq %r13, 40(%rsp) - movq %r14, 48(%rsp) - movq %r15, 56(%rsp) + movq %rbx, 8(%rsp) + movq %rbp, 16(%rsp) + movq %r12, 24(%rsp) + movq %r13, 32(%rsp) + movq %r14, 40(%rsp) + movq %r15, 48(%rsp) movq %rsp, %rsi call SYM(GTM_begin_transaction) - addq $72, %rsp + addq $56, %rsp cfi_def_cfa_offset(8) ret #else @@ -115,13 +113,13 @@ SYM(GTM_longjmp): cfi_startproc #ifdef __x86_64__ movq (%rsi), %rcx - movq 8(%rsi), %rdx - movq 16(%rsi), %rbx - movq 24(%rsi), %rbp - movq 32(%rsi), %r12 - movq 40(%rsi), %r13 - movq 48(%rsi), %r14 - movq 56(%rsi), %r15 + movq 8(%rsi), %rbx + movq 16(%rsi), %rbp + movq 24(%rsi), %r12 + movq 32(%rsi), %r13 + movq 40(%rsi), %r14 + movq 48(%rsi), %r15 + movq 56(%rsi), %rdx movl %edi, %eax cfi_def_cfa(%rcx, 0) cfi_register(%rip, %rdx) diff --git a/libitm/config/x86/target.h b/libitm/config/x86/target.h index a59608f388ca..1d81a4777f3e 100644 --- a/libitm/config/x86/target.h +++ b/libitm/config/x86/target.h @@ -29,13 +29,13 @@ namespace GTM HIDDEN { typedef struct gtm_jmpbuf { void *cfa; - unsigned long rip; unsigned long rbx; unsigned long rbp; unsigned long r12; unsigned long r13; unsigned long r14; unsigned long r15; + unsigned long rip; } gtm_jmpbuf; #else typedef struct gtm_jmpbuf -- 2.39.2