From 89d7e5d3866f880086eaa9317a27f64e1ef23cd2 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 10 Dec 2008 01:15:46 +0000 Subject: [PATCH] Fix KiDebugServiceTrap, so that it calls KiDispatchException with the right parameters. Disable saving of xmm registers for now, as it causes breakpoint traps (emulation still active?) svn path=/branches/ros-amd64-bringup/; revision=37988 --- reactos/ntoskrnl/ke/amd64/trap.S | 70 ++++++++++++-------------------- 1 file changed, 25 insertions(+), 45 deletions(-) diff --git a/reactos/ntoskrnl/ke/amd64/trap.S b/reactos/ntoskrnl/ke/amd64/trap.S index c7f7f2e2fad..282509b6f64 100644 --- a/reactos/ntoskrnl/ke/amd64/trap.S +++ b/reactos/ntoskrnl/ke/amd64/trap.S @@ -73,12 +73,12 @@ _MsgUnexpectedInterrupt: mov [rbp + KTRAP_FRAME_R11], r11 /* Save xmm registers */ - movdqa [rbp + KTRAP_FRAME_Xmm0], xmm0 - movdqa [rbp + KTRAP_FRAME_Xmm1], xmm1 - movdqa [rbp + KTRAP_FRAME_Xmm2], xmm2 - movdqa [rbp + KTRAP_FRAME_Xmm3], xmm3 - movdqa [rbp + KTRAP_FRAME_Xmm4], xmm4 - movdqa [rbp + KTRAP_FRAME_Xmm5], xmm5 +// movdqa [rbp + KTRAP_FRAME_Xmm0], xmm0 +// movdqa [rbp + KTRAP_FRAME_Xmm1], xmm1 +// movdqa [rbp + KTRAP_FRAME_Xmm2], xmm2 +// movdqa [rbp + KTRAP_FRAME_Xmm3], xmm3 +// movdqa [rbp + KTRAP_FRAME_Xmm4], xmm4 +// movdqa [rbp + KTRAP_FRAME_Xmm5], xmm5 .endif /* Save segment selectors */ @@ -163,12 +163,12 @@ _MsgUnexpectedInterrupt: mov r11, [rbp + KTRAP_FRAME_R11] /* Restore xmm registers */ - movdqa xmm0, [rbp + KTRAP_FRAME_Xmm0] - movdqa xmm1, [rbp + KTRAP_FRAME_Xmm1] - movdqa xmm2, [rbp + KTRAP_FRAME_Xmm2] - movdqa xmm3, [rbp + KTRAP_FRAME_Xmm3] - movdqa xmm4, [rbp + KTRAP_FRAME_Xmm4] - movdqa xmm5, [rbp + KTRAP_FRAME_Xmm5] +// movdqa xmm0, [rbp + KTRAP_FRAME_Xmm0] +// movdqa xmm1, [rbp + KTRAP_FRAME_Xmm1] +// movdqa xmm2, [rbp + KTRAP_FRAME_Xmm2] +// movdqa xmm3, [rbp + KTRAP_FRAME_Xmm3] +// movdqa xmm4, [rbp + KTRAP_FRAME_Xmm4] +// movdqa xmm5, [rbp + KTRAP_FRAME_Xmm5] .endif /* Restore rbp */ @@ -257,8 +257,7 @@ _MsgUnexpectedInterrupt: lea rax, _FrLdrDbgPrint[rip] call [rax] - mov rcx, gs:[KPCR_PRCB + KPRCB_CurrentThread] - DISPATCH_EXCEPTION STATUS_BREAKPOINT, 3, 0, rcx, 0 + DISPATCH_EXCEPTION STATUS_BREAKPOINT, 3, 0, 0, 0 /* Return */ LEAVE_TRAP_FRAME @@ -469,37 +468,18 @@ _MsgUnexpectedInterrupt: push 0 .allocstack 0x08 - push rax - .pushreg rax - push rcx - .pushreg rcx - push rdx - .pushreg rdx - push r8 - .pushreg r8 - push r9 - .pushreg r9 - - /* Create stack space for parameters */ - sub rsp, 0x18 - .allocstack 0x18 - - /* just forward first 3 parameters */ - call _KdpServiceDispatcher - - /* Skip the int 3, increment return rip */ - inc qword ptr [rsp + 0x18 + 48] - - /* Cleanup */ - add rsp, 0x18 - - pop r9 - pop r8 - pop rdx - pop rcx - pop rax - - add rsp, 8 + ENTER_TRAP_FRAME (SIZE_EXCEPTION_RECORD + 0x28), 0 + + /* Increase Rip to skip the int3 */ + inc qword ptr [rbp + KTRAP_FRAME_Rip] + + /* Call KiDispatchException */ + mov r8, [ebp+KTRAP_FRAME_Rax] // Service + mov rcx, [ebp+KTRAP_FRAME_Rcx] // Buffer + mov rdx, [ebp+KTRAP_FRAME_Rdx] // Length + DISPATCH_EXCEPTION STATUS_BREAKPOINT, 3, r8, rcx, rdx + + LEAVE_TRAP_FRAME; iretq .endproc -- 2.17.1