This implements unwind() properly on x86-64.
Signed-off-by: Eduard - Gabriel Munteanu <[email protected]>
---
arch/x86/unwind_64.S | 24 +++++++++++-------------
1 files changed, 11 insertions(+), 13 deletions(-)
diff --git a/arch/x86/unwind_64.S b/arch/x86/unwind_64.S
index 0f120c6..b89ba0f 100644
--- a/arch/x86/unwind_64.S
+++ b/arch/x86/unwind_64.S
@@ -8,34 +8,32 @@
* 2) Rethrows the exception in caller's context
*/
unwind:
- popq %rdx # return address of the method
- decq %rdx
-
/*
* Lookup pointer to compilation unit.
*/
- push %rdx
+ movq (%rsp), %rdi # return address of the method
+ decq %rdi
call jit_lookup_cu
- movq %rax, %rcx
- pop %rdx
/*
* Restore stack pointer. We need to restore space for locals too.
*/
- push %rdx
- push %rcx
+ push %rax # save cu
+
+ movq %rax, %rdi
+ movq 0x08(%rsp), %rsi
call cu_frame_locals_offset
- pop %rcx
+
+ pop %rdi
pop %rdx
movq %rbp, %rsp
subq %rax, %rsp
- pushq %rdx # native ptr
- pushq %rbp # frame
- pushq %rcx # cu
+ /* cu is already in %rdi */
+ movq %rbp, %rsi
+ /* native ptr is already in %rdx */
call throw_from_jit
- addq $24, %rsp
pushq %rax
ret
--
1.6.0.6
------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day
trial. Simplify your report design, integration and deployment - and focus on
what you do best, core application coding. Discover what's new with
Crystal Reports now. http://p.sf.net/sfu/bobj-july
_______________________________________________
Jatovm-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jatovm-devel