diff options
author | Jan Kotas <jkotas@microsoft.com> | 2016-04-21 22:46:34 +0300 |
---|---|---|
committer | Jan Kotas <jkotas@microsoft.com> | 2016-04-21 22:46:34 +0300 |
commit | b07a75e331ccbb8b1138a4722d60c0a63491be90 (patch) | |
tree | 26e99c818cae4d813a1bcd46eefa7f90b41c4246 /src/Native/Runtime/amd64/ExceptionHandling.asm | |
parent | e0f7cc4e2b58d92baab8e12e819e9d647b56c63d (diff) |
Fix funclet arguments (#1181)
Diffstat (limited to 'src/Native/Runtime/amd64/ExceptionHandling.asm')
-rw-r--r-- | src/Native/Runtime/amd64/ExceptionHandling.asm | 16 |
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 |