[ros-diffs] [tkreuzer] 44937: [KE] Improve KiDoubleFaultAbort

tkreuzer at svn.reactos.org tkreuzer at svn.reactos.org
Tue Jan 5 00:00:36 CET 2010


Author: tkreuzer
Date: Tue Jan  5 00:00:35 2010
New Revision: 44937

URL: http://svn.reactos.org/svn/reactos?rev=44937&view=rev
Log:
[KE]
Improve KiDoubleFaultAbort

Modified:
    branches/ros-amd64-bringup/reactos/ntoskrnl/ke/amd64/trap.S

Modified: branches/ros-amd64-bringup/reactos/ntoskrnl/ke/amd64/trap.S
URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/ntoskrnl/ke/amd64/trap.S?rev=44937&r1=44936&r2=44937&view=diff
==============================================================================
--- branches/ros-amd64-bringup/reactos/ntoskrnl/ke/amd64/trap.S [iso-8859-1] (original)
+++ branches/ros-amd64-bringup/reactos/ntoskrnl/ke/amd64/trap.S [iso-8859-1] Tue Jan  5 00:00:35 2010
@@ -32,6 +32,9 @@
 
 _MsgInvalidOpcodeFault:
 .ascii "General protection fault at %p!\n\0"
+
+_MsgDoubleFault:
+.ascii "Double fault at %p, rbp=%p!\n\0"
 
 _MsgTrapInfo:
 .ascii "Trap: %s at %p\n\0"
@@ -430,20 +433,23 @@
     push 0
     .allocstack 0x8
 
-    /* Reserve stack space for parameters */
-    sub rsp, 0x28
-    .allocstack 0x28
+    ENTER_TRAP_FRAME TRAPFLAG_ALL
+
+    lea rcx, _MsgDoubleFault[rip]
+    mov rdx, [rbp + KTRAP_FRAME_FaultAddress]
+    mov r8, rbp
+    call _FrLdrDbgPrint[rip]
 
     /* Bugcheck code UNEXPECTED_KERNEL_MODE_TRAP */
     mov rcx, 0x0000007F
     
     /* Set double fault parameters */
-    mov rdx, 0x00000008
+    mov rdx, 0x00000008 // EXCEPTION_DOUBLE_FAULT
     mov r8, 0
     mov r9, 0
-    mov qword ptr [rsp + 0x20], 0
-
-    call _KeBugCheckEx
+    mov [rbp + KTRAP_FRAME_P5], rbp // trap frame (HACKY)
+    push 0
+    call _KeBugCheckWithTf
 
     jmp $
 .endproc
@@ -773,8 +779,13 @@
 
 .proc KiUnexpectedInterrupt
     .pushframe 0
-    push 0
-    .allocstack 0x8
+    /* Push pseudo error code */
+    push 0
+    .allocstack 0x8
+
+    cli
+
+    ENTER_TRAP_FRAME TRAPFLAG_ALL
 
     lea rcx, _MsgUnexpectedInterrupt[rip]
     call _FrLdrDbgPrint[rip]




More information about the Ros-diffs mailing list