aboutsummaryrefslogtreecommitdiff
path: root/libitm
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2012-02-14 08:50:38 +0100
committerUros Bizjak <uros@gcc.gnu.org>2012-02-14 08:50:38 +0100
commitd4a698d494b9bc5344b49824ac3aa27710833fa8 (patch)
tree529977eb49b5177417a3feddd087a94813367eae /libitm
parent1982a38354a6e26f2f6f9935d45cd60165ab70d7 (diff)
downloadgcc-d4a698d494b9bc5344b49824ac3aa27710833fa8.zip
gcc-d4a698d494b9bc5344b49824ac3aa27710833fa8.tar.gz
gcc-d4a698d494b9bc5344b49824ac3aa27710833fa8.tar.bz2
target.h (GTM_longjmp): Jump indirect from memory address.
* config/x86/target.h (GTM_longjmp): Jump indirect from memory address. From-SVN: r184198
Diffstat (limited to 'libitm')
-rw-r--r--libitm/ChangeLog4
-rw-r--r--libitm/config/x86/sjlj.S10
2 files changed, 8 insertions, 6 deletions
diff --git a/libitm/ChangeLog b/libitm/ChangeLog
index ad8e3d7..6e24888 100644
--- a/libitm/ChangeLog
+++ b/libitm/ChangeLog
@@ -1,3 +1,7 @@
+2012-02-15 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/x86/target.h (GTM_longjmp): Jump indirect from memory address.
+
2012-02-13 Eric Botcazou <ebotcazou@adacore.com>
* configure.tgt (target_cpu): Handle sparc and sparc64 & sparcv9.
diff --git a/libitm/config/x86/sjlj.S b/libitm/config/x86/sjlj.S
index 0571a4a..9a74d97 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