https://git.reactos.org/?p=reactos.git;a=commitdiff;h=99b0e4b9a9fe6a891c240ee732a516e786a7b0fb

commit 99b0e4b9a9fe6a891c240ee732a516e786a7b0fb
Author:     Hermès Bélusca-Maïto <[email protected]>
AuthorDate: Mon Nov 28 02:48:55 2022 +0100
Commit:     Hermès Bélusca-Maïto <[email protected]>
CommitDate: Wed Apr 12 19:30:57 2023 +0200

    [NTOS:KDBG] Only use the direct KdbPrintf instead of KdbpPrint (pager) 
inside the exception handler (outside the debugger main loop).
---
 ntoskrnl/kdbg/kdb.c | 89 ++++++++++++++++++++++++-----------------------------
 1 file changed, 41 insertions(+), 48 deletions(-)

diff --git a/ntoskrnl/kdbg/kdb.c b/ntoskrnl/kdbg/kdb.c
index c1ed2d0a9d7..15175d5ca93 100644
--- a/ntoskrnl/kdbg/kdb.c
+++ b/ntoskrnl/kdbg/kdb.c
@@ -12,9 +12,6 @@
 #include <ntoskrnl.h>
 #include "kdb.h"
 
-#define NDEBUG
-#include <debug.h>
-
 /* TYPES *********************************************************************/
 
 /* DEFINES *******************************************************************/
@@ -242,7 +239,7 @@ KdbpShouldStepOverInstruction(
 
     if (!NT_SUCCESS(KdbpSafeReadMemory(Mem, (PVOID)Eip, sizeof (Mem))))
     {
-        KdbpPrint("Couldn't access memory at 0x%p\n", Eip);
+        KdbPrintf("Couldn't access memory at 0x%p\n", Eip);
         return FALSE;
     }
 
@@ -312,7 +309,7 @@ KdbpStepIntoInstruction(
     /* Read memory */
     if (!NT_SUCCESS(KdbpSafeReadMemory(Mem, (PVOID)Eip, sizeof (Mem))))
     {
-        /*KdbpPrint("Couldn't access memory at 0x%p\n", Eip);*/
+        // KdbPrintf("Couldn't access memory at 0x%p\n", Eip);
         return FALSE;
     }
 
@@ -336,14 +333,14 @@ KdbpStepIntoInstruction(
     __sidt(&Idtr.Limit);
     if (IntVect >= (Idtr.Limit + 1) / 8)
     {
-        /*KdbpPrint("IDT does not contain interrupt vector %d.\n", IntVect);*/
+        // KdbPrintf("IDT does not contain interrupt vector %d.\n", IntVect);
         return TRUE;
     }
 
     /* Get the interrupt descriptor */
     if (!NT_SUCCESS(KdbpSafeReadMemory(IntDesc, (PVOID)((ULONG_PTR)Idtr.Base + 
(IntVect * 8)), sizeof(IntDesc))))
     {
-        /*KdbpPrint("Couldn't access memory at 0x%p\n", (ULONG_PTR)Idtr.Base + 
(IntVect * 8));*/
+        // KdbPrintf("Couldn't access memory at 0x%p\n", (ULONG_PTR)Idtr.Base 
+ (IntVect * 8));
         return FALSE;
     }
 
@@ -499,13 +496,13 @@ KdbpInsertBreakPoint(
     {
         if ((Address % Size) != 0)
         {
-            KdbpPrint("Address (0x%p) must be aligned to a multiple of the 
size (%d)\n", Address, Size);
+            KdbPrintf("Address (0x%p) must be aligned to a multiple of the 
size (%d)\n", Address, Size);
             return STATUS_UNSUCCESSFUL;
         }
 
         if (AccessType == KdbAccessExec && Size != 1)
         {
-            KdbpPrint("Size must be 1 for execution breakpoints.\n");
+            KdbPuts("Size must be 1 for execution breakpoints.\n");
             return STATUS_UNSUCCESSFUL;
         }
     }
@@ -515,16 +512,16 @@ KdbpInsertBreakPoint(
         return STATUS_UNSUCCESSFUL;
     }
 
-    /* Parse conditon expression string and duplicate it */
+    /* Parse condition expression string and duplicate it */
     if (ConditionExpression)
     {
         Condition = KdbpRpnParseExpression(ConditionExpression, &ErrOffset, 
ErrMsg);
         if (!Condition)
         {
             if (ErrOffset >= 0)
-                KdbpPrint("Couldn't parse expression: %s at character %d\n", 
ErrMsg, ErrOffset);
+                KdbPrintf("Couldn't parse expression: %s at character %d\n", 
ErrMsg, ErrOffset);
             else
-                KdbpPrint("Couldn't parse expression: %s", ErrMsg);
+                KdbPrintf("Couldn't parse expression: %s", ErrMsg);
 
             return STATUS_UNSUCCESSFUL;
         }
@@ -578,7 +575,7 @@ KdbpInsertBreakPoint(
     KdbBreakPointCount++;
 
     if (Type != KdbBreakPointTemporary)
-        KdbpPrint("Breakpoint %d inserted.\n", i);
+        KdbPrintf("Breakpoint %d inserted.\n", i);
 
     /* Try to enable the breakpoint */
     KdbpEnableBreakPoint(i, NULL);
@@ -611,7 +608,7 @@ KdbpDeleteBreakPoint(
 
     if (BreakPointNr < 0 || BreakPointNr >= KDB_MAXIMUM_BREAKPOINT_COUNT)
     {
-        KdbpPrint("Invalid breakpoint: %d\n", BreakPointNr);
+        KdbPrintf("Invalid breakpoint: %d\n", BreakPointNr);
         return FALSE;
     }
 
@@ -622,7 +619,7 @@ KdbpDeleteBreakPoint(
 
     if (BreakPoint->Type == KdbBreakPointNone)
     {
-        KdbpPrint("Invalid breakpoint: %d\n", BreakPointNr);
+        KdbPrintf("Invalid breakpoint: %d\n", BreakPointNr);
         return FALSE;
     }
 
@@ -630,7 +627,7 @@ KdbpDeleteBreakPoint(
         return FALSE;
 
     if (BreakPoint->Type != KdbBreakPointTemporary)
-        KdbpPrint("Breakpoint %d deleted.\n", BreakPointNr);
+        KdbPrintf("Breakpoint %d deleted.\n", BreakPointNr);
 
     BreakPoint->Type = KdbBreakPointNone;
     KdbBreakPointCount--;
@@ -718,7 +715,7 @@ KdbpEnableBreakPoint(
 
     if (BreakPointNr < 0 || BreakPointNr >= KDB_MAXIMUM_BREAKPOINT_COUNT)
     {
-        KdbpPrint("Invalid breakpoint: %d\n", BreakPointNr);
+        KdbPrintf("Invalid breakpoint: %d\n", BreakPointNr);
         return FALSE;
     }
 
@@ -729,13 +726,13 @@ KdbpEnableBreakPoint(
 
     if (BreakPoint->Type == KdbBreakPointNone)
     {
-        KdbpPrint("Invalid breakpoint: %d\n", BreakPointNr);
+        KdbPrintf("Invalid breakpoint: %d\n", BreakPointNr);
         return FALSE;
     }
 
     if (BreakPoint->Enabled)
     {
-        KdbpPrint("Breakpoint %d is already enabled.\n", BreakPointNr);
+        KdbPrintf("Breakpoint %d is already enabled.\n", BreakPointNr);
         return TRUE;
     }
 
@@ -744,7 +741,7 @@ KdbpEnableBreakPoint(
     {
         if (KdbSwBreakPointCount >= KDB_MAXIMUM_SW_BREAKPOINT_COUNT)
         {
-            KdbpPrint("Maximum number of SW breakpoints (%d) used. "
+            KdbPrintf("Maximum number of SW breakpoints (%d) used. "
                       "Disable another breakpoint in order to enable this 
one.\n",
                       KDB_MAXIMUM_SW_BREAKPOINT_COUNT);
             return FALSE;
@@ -754,7 +751,7 @@ KdbpEnableBreakPoint(
                                           0xCC, 
&BreakPoint->Data.SavedInstruction);
         if (!NT_SUCCESS(Status))
         {
-            KdbpPrint("Couldn't access memory at 0x%p\n", BreakPoint->Address);
+            KdbPrintf("Couldn't access memory at 0x%p\n", BreakPoint->Address);
             return FALSE;
         }
 
@@ -769,10 +766,9 @@ KdbpEnableBreakPoint(
 
         if (KdbHwBreakPointCount >= KDB_MAXIMUM_HW_BREAKPOINT_COUNT)
         {
-            KdbpPrint("Maximum number of HW breakpoints (%d) already used. "
+            KdbPrintf("Maximum number of HW breakpoints (%d) already used. "
                       "Disable another breakpoint in order to enable this 
one.\n",
                       KDB_MAXIMUM_HW_BREAKPOINT_COUNT);
-
             return FALSE;
         }
 
@@ -853,7 +849,7 @@ KdbpEnableBreakPoint(
 
     BreakPoint->Enabled = TRUE;
     if (BreakPoint->Type != KdbBreakPointTemporary)
-        KdbpPrint("Breakpoint %d enabled.\n", BreakPointNr);
+        KdbPrintf("Breakpoint %d enabled.\n", BreakPointNr);
 
     return TRUE;
 }
@@ -884,7 +880,7 @@ KdbpDisableBreakPoint(
 
     if (BreakPointNr < 0 || BreakPointNr >= KDB_MAXIMUM_BREAKPOINT_COUNT)
     {
-        KdbpPrint("Invalid breakpoint: %d\n", BreakPointNr);
+        KdbPrintf("Invalid breakpoint: %d\n", BreakPointNr);
         return FALSE;
     }
 
@@ -895,13 +891,13 @@ KdbpDisableBreakPoint(
 
     if (BreakPoint->Type == KdbBreakPointNone)
     {
-        KdbpPrint("Invalid breakpoint: %d\n", BreakPointNr);
+        KdbPrintf("Invalid breakpoint: %d\n", BreakPointNr);
         return FALSE;
     }
 
     if (BreakPoint->Enabled == FALSE)
     {
-        KdbpPrint("Breakpoint %d is not enabled.\n", BreakPointNr);
+        KdbPrintf("Breakpoint %d is not enabled.\n", BreakPointNr);
         return TRUE;
     }
 
@@ -914,7 +910,7 @@ KdbpDisableBreakPoint(
 
         if (!NT_SUCCESS(Status))
         {
-            KdbpPrint("Couldn't restore original instruction.\n");
+            KdbPuts("Couldn't restore original instruction.\n");
             return FALSE;
         }
 
@@ -959,7 +955,7 @@ KdbpDisableBreakPoint(
 
     BreakPoint->Enabled = FALSE;
     if (BreakPoint->Type != KdbBreakPointTemporary)
-        KdbpPrint("Breakpoint %d disabled.\n", BreakPointNr);
+        KdbPrintf("Breakpoint %d disabled.\n", BreakPointNr);
 
     return TRUE;
 }
@@ -1180,7 +1176,7 @@ KdbpInternalEnter(VOID)
     Thread->Tcb.StackLimit = (ULONG_PTR)KdbStack;
     Thread->Tcb.KernelStack = (char*)KdbStack + KDB_STACK_SIZE;
 
-    // KdbpPrint("Switching to KDB stack 0x%08x-0x%08x (Current Stack is 
0x%08x)\n", Thread->Tcb.StackLimit, Thread->Tcb.StackBase, Esp);
+    // KdbPrintf("Switching to KDB stack 0x%08x-0x%08x (Current Stack is 
0x%08x)\n", Thread->Tcb.StackLimit, Thread->Tcb.StackBase, Esp);
 
     KdbpStackSwitchAndCall(KdbStack + KDB_STACK_SIZE - KDB_STACK_RESERVE, 
KdbpCallMainLoop);
 
@@ -1318,7 +1314,7 @@ KdbEnterDebuggerException(
             if (!NT_SUCCESS(KdbpOverwriteInstruction(KdbCurrentProcess, 
BreakPoint->Address,
                                                      
BreakPoint->Data.SavedInstruction, NULL)))
             {
-                KdbpPrint("Couldn't restore original instruction after INT3! 
Cannot continue execution.\n");
+                KdbPuts("Couldn't restore original instruction after INT3! 
Cannot continue execution.\n");
                 KeBugCheck(0); // FIXME: Proper bugcode!
             }
 
@@ -1402,17 +1398,17 @@ KdbEnterDebuggerException(
 
         if (BreakPoint->Type == KdbBreakPointSoftware)
         {
-            KdbpPrint("\nEntered debugger on breakpoint #%d: EXEC 
0x%04x:0x%p\n",
+            KdbPrintf("\nEntered debugger on breakpoint #%d: EXEC 
0x%04x:0x%p\n",
                       KdbLastBreakPointNr, Context->SegCs & 0xffff, 
KeGetContextPc(Context));
         }
         else if (BreakPoint->Type == KdbBreakPointHardware)
         {
-            KdbpPrint("\nEntered debugger on breakpoint #%d: %s 0x%08x\n",
+            KdbPrintf("\nEntered debugger on breakpoint #%d: %s 0x%08x\n",
                       KdbLastBreakPointNr,
-                     (BreakPoint->Data.Hw.AccessType == KdbAccessRead) ? 
"READ" :
-                     ((BreakPoint->Data.Hw.AccessType == KdbAccessWrite) ? 
"WRITE" :
-                     ((BreakPoint->Data.Hw.AccessType == KdbAccessReadWrite) ? 
"RDWR" : "EXEC")),
-                     BreakPoint->Address);
+                      (BreakPoint->Data.Hw.AccessType == KdbAccessRead) ? 
"READ" :
+                      ((BreakPoint->Data.Hw.AccessType == KdbAccessWrite) ? 
"WRITE" :
+                      ((BreakPoint->Data.Hw.AccessType == KdbAccessReadWrite) 
? "RDWR" : "EXEC")),
+                      BreakPoint->Address);
         }
     }
     else if (ExceptionCode == STATUS_SINGLE_STEP)
@@ -1433,7 +1429,7 @@ KdbEnterDebuggerException(
             if (!NT_SUCCESS(KdbpOverwriteInstruction(KdbCurrentProcess, 
BreakPoint->Address, 0xCC,
                                                      
&BreakPoint->Data.SavedInstruction)))
             {
-                KdbpPrint("Warning: Couldn't reenable breakpoint %d\n",
+                KdbPrintf("Warning: Couldn't reenable breakpoint %d\n",
                           BreakPoint - KdbBreakPoints);
             }
 
@@ -1481,7 +1477,7 @@ KdbEnterDebuggerException(
                 return kdHandleException;
             }
 
-            KdbpPrint("\nEntered debugger on unexpected debug trap!\n");
+            KdbPuts("\nEntered debugger on unexpected debug trap!\n");
         }
     }
     else if (ExceptionCode == STATUS_BREAKPOINT)
@@ -1496,31 +1492,28 @@ KdbEnterDebuggerException(
             return kdHandleException;
         }
 
-        KdbpPrint("\nEntered debugger on embedded INT3 at 0x%04x:0x%p.\n",
+        KdbPrintf("\nEntered debugger on embedded INT3 at 0x%04x:0x%p.\n",
                   Context->SegCs & 0xffff, KeGetContextPc(Context));
     }
     else
     {
         const CHAR *ExceptionString = (ExpNr < 
RTL_NUMBER_OF(ExceptionNrToString)) ?
-                                      (ExceptionNrToString[ExpNr]) :
-                                      ("Unknown/User defined exception");
+                                      ExceptionNrToString[ExpNr] :
+                                      "Unknown/User defined exception";
 
         if (!EnterConditionMet)
         {
             return ContinueType;
         }
 
-        KdbpPrint("\nEntered debugger on %s-chance exception (Exception Code: 
0x%x) (%s)\n",
+        KdbPrintf("\nEntered debugger on %s-chance exception (Exception Code: 
0x%x) (%s)\n",
                   FirstChance ? "first" : "last", ExceptionCode, 
ExceptionString);
 
         if (ExceptionCode == STATUS_ACCESS_VIOLATION &&
             ExceptionRecord && ExceptionRecord->NumberParameters != 0)
         {
-            ULONG_PTR TrapCr2;
-
-            TrapCr2 = __readcr2();
-
-            KdbpPrint("Memory at 0x%p could not be accessed\n", TrapCr2);
+            ULONG_PTR TrapCr2 = __readcr2();
+            KdbPrintf("Memory at 0x%p could not be accessed\n", TrapCr2);
         }
     }
 

Reply via email to