diff --git a/libitm/ChangeLog b/libitm/ChangeLog index ad8e3d73a8f..6e24888b710 100644 --- a/libitm/ChangeLog +++ b/libitm/ChangeLog @@ -1,3 +1,7 @@ +2012-02-15 Uros Bizjak + + * config/x86/target.h (GTM_longjmp): Jump indirect from memory address. + 2012-02-13 Eric Botcazou * configure.tgt (target_cpu): Handle sparc and sparc64 & sparcv9. diff --git a/libitm/config/x86/sjlj.S b/libitm/config/x86/sjlj.S index 0571a4ab658..9a74d97f76f 100644 --- a/libitm/config/x86/sjlj.S +++ b/libitm/config/x86/sjlj.S @@ -119,23 +119,21 @@ SYM(GTM_longjmp): movq 32(%rsi), %r13 movq 40(%rsi), %r14 movq 48(%rsi), %r15 - movq 56(%rsi), %rdx movl %edi, %eax + cfi_offset(%rip, 56) cfi_def_cfa(%rcx, 0) - cfi_register(%rip, %rdx) movq %rcx, %rsp - jmp *%rdx + jmp *56(%rsi) #else movl (%edx), %ecx movl 4(%edx), %ebx movl 8(%edx), %esi movl 12(%edx), %edi movl 16(%edx), %ebp - movl 20(%edx), %edx + cfi_offset(%eip, 20) cfi_def_cfa(%ecx, 0) - cfi_register(%eip, %edx) movl %ecx, %esp - jmp *%edx + jmp *20(%edx) #endif cfi_endproc