Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/corert.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Kotas <jkotas@microsoft.com>2016-04-21 22:46:34 +0300
committerJan Kotas <jkotas@microsoft.com>2016-04-21 22:46:34 +0300
commitb07a75e331ccbb8b1138a4722d60c0a63491be90 (patch)
tree26e99c818cae4d813a1bcd46eefa7f90b41c4246 /src/Native/Runtime/amd64/ExceptionHandling.asm
parente0f7cc4e2b58d92baab8e12e819e9d647b56c63d (diff)
Fix funclet arguments (#1181)
Diffstat (limited to 'src/Native/Runtime/amd64/ExceptionHandling.asm')
-rw-r--r--src/Native/Runtime/amd64/ExceptionHandling.asm16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/Native/Runtime/amd64/ExceptionHandling.asm b/src/Native/Runtime/amd64/ExceptionHandling.asm
index 8932682a4..2919ba396 100644
--- a/src/Native/Runtime/amd64/ExceptionHandling.asm
+++ b/src/Native/Runtime/amd64/ExceptionHandling.asm
@@ -382,7 +382,12 @@ endif
movdqa xmm14,[r8 + OFFSETOF__REGDISPLAY__Xmm + 8*10h]
movdqa xmm15,[r8 + OFFSETOF__REGDISPLAY__Xmm + 9*10h]
+ifdef CORERT ;; @TODO Reconcile
+ mov rcx, [r8 + OFFSETOF__REGDISPLAY__SP] ;; rcx <- establisher frame
+ mov rdx, [rsp + rsp_offsetof_arguments + 0h] ;; rdx <- exception object
+else
mov rcx, [rsp + rsp_offsetof_arguments + 0h] ;; rcx <- exception object
+endif
call qword ptr [rsp + rsp_offsetof_arguments + 8h] ;; call handler funclet
ALTERNATE_ENTRY RhpCallCatchFunclet2
@@ -554,7 +559,8 @@ if 0 ;; _DEBUG ;; @TODO: temporarily removed because trashing RBP breaks the deb
mov [rax], r9
endif
- call qword ptr [rsp + rsp_offsetof_arguments + 0h] ;; rcx <- handler funclet address
+ mov rcx, [rdx + OFFSETOF__REGDISPLAY__SP] ;; rcx <- establisher frame
+ call qword ptr [rsp + rsp_offsetof_arguments + 0h] ;; handler funclet address
ALTERNATE_ENTRY RhpCallFinallyFunclet2
mov rdx, [rsp + rsp_offsetof_arguments + 8h] ;; rdx <- regdisplay
@@ -628,8 +634,14 @@ NESTED_ENTRY RhpCallFilterFunclet, _TEXT
mov rax, [r8 + OFFSETOF__REGDISPLAY__pRbp]
mov rbp, [rax]
+ mov rax, rdx ;; rax <- handler funclet address
+ifdef CORERT ;; @TODO Reconcile
+ mov rdx, rcx ;; rdx <- exception object
+ mov rcx, [r8 + OFFSETOF__REGDISPLAY__SP] ;; rcx <- establisher frame
+else
;; RCX still contains the exception object
- call rdx
+endif
+ call rax
ALTERNATE_ENTRY RhpCallFilterFunclet2
;; RAX contains the result of the filter execution