[NTOSKRNL]
authorThomas Faber <thomas.faber@reactos.org>
Sun, 19 Feb 2012 08:38:09 +0000 (08:38 +0000)
committerThomas Faber <thomas.faber@reactos.org>
Sun, 19 Feb 2012 08:38:09 +0000 (08:38 +0000)
- Make Trap debugging usable again. Suggested by Stefan.

svn path=/trunk/; revision=55701

reactos/ntoskrnl/include/internal/i386/trap_x.h
reactos/ntoskrnl/ke/i386/traphdlr.c
reactos/ntoskrnl/ke/i386/v86vdm.c

index 0b8673a..f7c7586 100644 (file)
@@ -98,7 +98,7 @@ KiFillTrapFrameDebug(IN PKTRAP_FRAME TrapFrame)
 VOID
 FORCEINLINE
 KiExitTrapDebugChecks(IN PKTRAP_FRAME TrapFrame,
-                      IN KTRAP_EXIT_SKIP_BITS SkipBits)
+                      IN BOOLEAN SkipPreviousMode)
 {
     /* Make sure interrupts are disabled */
     if (__readeflags() & EFLAGS_INTERRUPT_MASK)
@@ -137,7 +137,7 @@ KiExitTrapDebugChecks(IN PKTRAP_FRAME TrapFrame,
     }
     
     /* If we're ignoring previous mode, make sure caller doesn't actually want it */
-    if ((SkipBits.SkipPreviousMode) && (TrapFrame->PreviousPreviousMode != -1))
+    if (SkipPreviousMode && (TrapFrame->PreviousPreviousMode != -1))
     {
         DbgPrint("Exiting a trap witout restoring previous mode, yet previous mode seems valid: %lx\n", TrapFrame->PreviousPreviousMode);
         __debugbreak();
index 422e5b6..29996ed 100644 (file)
@@ -82,7 +82,7 @@ KiIsFrameEdited(IN PKTRAP_FRAME TrapFrame)
 
 VOID
 FORCEINLINE
-KiCommonExit(IN PKTRAP_FRAME TrapFrame, const ULONG Flags)
+KiCommonExit(IN PKTRAP_FRAME TrapFrame, BOOLEAN SkipPreviousMode)
 {
     /* Disable interrupts until we return */
     _disable();
@@ -91,7 +91,7 @@ KiCommonExit(IN PKTRAP_FRAME TrapFrame, const ULONG Flags)
     KiCheckForApcDelivery(TrapFrame);
     
     /* Debugging checks */
-    KiExitTrapDebugChecks(TrapFrame, Flags);
+    KiExitTrapDebugChecks(TrapFrame, SkipPreviousMode);
 
     /* Restore the SEH handler chain */
     KeGetPcr()->NtTib.ExceptionList = TrapFrame->ExceptionList;
@@ -112,7 +112,7 @@ FASTCALL
 KiEoiHelper(IN PKTRAP_FRAME TrapFrame)
 {
     /* Common trap exit code */
-    KiCommonExit(TrapFrame, 0);
+    KiCommonExit(TrapFrame, TRUE);
 
     /* Check if this was a V8086 trap */
     if (TrapFrame->EFlags & EFLAGS_V86_MASK) KiTrapReturnNoSegments(TrapFrame);
@@ -140,7 +140,7 @@ KiServiceExit(IN PKTRAP_FRAME TrapFrame,
     TrapFrame->Eax = Status;
     
     /* Common trap exit code */
-    KiCommonExit(TrapFrame, 0);
+    KiCommonExit(TrapFrame, FALSE);
     
     /* Restore previous mode */
     KeGetCurrentThread()->PreviousMode = (CCHAR)TrapFrame->PreviousPreviousMode;
@@ -171,7 +171,7 @@ FASTCALL
 KiServiceExit2(IN PKTRAP_FRAME TrapFrame)
 {
     /* Common trap exit code */
-    KiCommonExit(TrapFrame, 0);
+    KiCommonExit(TrapFrame, FALSE);
     
     /* Restore previous mode */
     KeGetCurrentThread()->PreviousMode = (CCHAR)TrapFrame->PreviousPreviousMode;
index 6c86062..7818e1c 100644 (file)
@@ -526,8 +526,10 @@ KiEnterV86Mode(IN PKV8086_STACK_FRAME StackFrame)
     TrapFrame->HardwareEsp = 0x11FFE;
     TrapFrame->ExceptionList = EXCEPTION_CHAIN_END;
     TrapFrame->Dr7 = 0;
-    //TrapFrame->DbgArgMark = 0xBADB0D00;
+#ifdef TRAP_DEBUG
+    TrapFrame->DbgArgMark = 0xBADB0D00;
     TrapFrame->PreviousPreviousMode = -1;
+#endif
     
     /* Disable interrupts */
     _disable();