summaryrefslogtreecommitdiff
path: root/libitm
diff options
context:
space:
mode:
authoruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>2012-02-14 07:50:38 +0000
committeruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>2012-02-14 07:50:38 +0000
commitf4858af8ace52c7400e47d171319f61cfae61105 (patch)
tree529977eb49b5177417a3feddd087a94813367eae /libitm
parent0ead4a40258234c098fdd1a50b35713d90804490 (diff)
downloadgcc-f4858af8ace52c7400e47d171319f61cfae61105.tar.gz
* config/x86/target.h (GTM_longjmp): Jump indirect from memory address.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@184198 138bc75d-0d04-0410-961f-82ee72b054a4
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 ad8e3d73a8f..6e24888b710 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 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