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
This commit is contained in:
Uros Bizjak 2012-01-24 08:23:57 +01:00 committed by Uros Bizjak
parent a023688237
commit 9848887afa
3 changed files with 26 additions and 19 deletions

View File

@ -1,3 +1,12 @@
2012-01-24 Uros Bizjak <ubizjak@gmail.com>
* 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 <ubizjak@gmail.com>
PR libitm/51830

View File

@ -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)

View File

@ -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