- Add STATUS_ASSERTION_FAILURE status code required for NT_ASSERT.
authorStefan Ginsberg <stefanginsberg@gmail.com>
Sun, 4 Oct 2009 20:19:43 +0000 (20:19 +0000)
committerStefan Ginsberg <stefanginsberg@gmail.com>
Sun, 4 Oct 2009 20:19:43 +0000 (20:19 +0000)
- Check KdReceivePacket return for KdPacketReceived instead of 0 for correctness.
- Use KdpDprintf instead of setting CR2 for unhandled cases.
- Add more variables to KdDebuggerDataBlock.

svn path=/trunk/; revision=43291

reactos/include/reactos/windbgkd.h
reactos/ntoskrnl/include/internal/mm.h
reactos/ntoskrnl/kd64/kdapi.c
reactos/ntoskrnl/kd64/kddata.c
reactos/ntoskrnl/kd64/kdlock.c
reactos/ntoskrnl/kd64/kdprint.c
reactos/ntoskrnl/kd64/kdtrap.c
reactos/ntoskrnl/mm/ARM3/miarm.h

index 1e03a5c..9ee0dd5 100644 (file)
 // Fill Memory Flags
 //
 #define DBGKD_FILL_MEMORY_VIRTUAL           0x01
-#define DBGKD_FILL_MEMORY_PHYSICAL          0x002
+#define DBGKD_FILL_MEMORY_PHYSICAL          0x02
 
 //
 // Physical Memory Caching Flags
index b48aaa5..a247a08 100644 (file)
@@ -14,13 +14,14 @@ extern ULONG MmTotalPagedPoolQuota;
 extern ULONG MmTotalNonPagedPoolQuota;
 extern PHYSICAL_ADDRESS MmSharedDataPagePhysicalAddress;
 extern ULONG MmNumberOfPhysicalPages;
+extern ULONG MmLowestPhysicalPage;
+extern ULONG MmHighestPhysicalPage;
 
 extern PVOID MmPagedPoolBase;
 extern ULONG MmPagedPoolSize;
 
 extern PMEMORY_ALLOCATION_DESCRIPTOR MiFreeDescriptor;
 extern MEMORY_ALLOCATION_DESCRIPTOR MiFreeDescriptorOrg;
-extern ULONG MmHighestPhysicalPage;
 
 struct _KTRAP_FRAME;
 struct _EPROCESS;
index 4a46aba..1a55204 100644 (file)
@@ -282,7 +282,8 @@ KdpReadVirtualMemory(IN PDBGKD_MANIPULATE_STATE64 State,
 #if 0\r
     if (!MmIsAddressValid((PVOID)(ULONG_PTR)State->u.ReadMemory.TargetBaseAddress))\r
     {\r
-        Ke386SetCr2(State->u.ReadMemory.TargetBaseAddress);\r
+        KdpDprintf("Tried to read invalid address %p\n",\r
+                   (PVOID)(ULONG_PTR)State->u.ReadMemory.TargetBaseAddress);\r
         while (TRUE);\r
     }\r
 #endif\r
@@ -484,6 +485,7 @@ KdpGetContext(IN PDBGKD_MANIPULATE_STATE64 State,
         else\r
         {\r
             /* SMP not yet handled */\r
+            KdpDprintf("SMP UNHANDLED\n");\r
             ControlStart = NULL;\r
             while (TRUE);\r
         }\r
@@ -534,6 +536,7 @@ KdpSetContext(IN PDBGKD_MANIPULATE_STATE64 State,
         else\r
         {\r
             /* SMP not yet handled */\r
+            KdpDprintf("SMP UNHANDLED\n");\r
             ControlStart = NULL;\r
             while (TRUE);\r
         }\r
@@ -620,7 +623,7 @@ SendPacket:
             case DbgKdWriteVirtualMemoryApi:\r
 \r
                 /* FIXME: TODO */\r
-                Ke386SetCr2(DbgKdWriteVirtualMemoryApi);\r
+                KdpDprintf("DbgKdWriteVirtualMemoryApi called\n");\r
                 while (TRUE);\r
                 break;\r
 \r
@@ -668,14 +671,14 @@ SendPacket:
             case DbgKdReadIoSpaceApi:\r
 \r
                 /* FIXME: TODO */\r
-                Ke386SetCr2(DbgKdReadIoSpaceApi);\r
+                KdpDprintf("DbgKdReadIoSpaceApi called\n");\r
                 while (TRUE);\r
                 break;\r
 \r
             case DbgKdWriteIoSpaceApi:\r
 \r
                 /* FIXME: TODO */\r
-                Ke386SetCr2(DbgKdWriteIoSpaceApi);\r
+                KdpDprintf("DbgKdWriteIoSpaceApi called\n");\r
                 while (TRUE);\r
                 break;\r
 \r
@@ -704,64 +707,65 @@ SendPacket:
             case DbgKdReadPhysicalMemoryApi:\r
 \r
                 /* FIXME: TODO */\r
-                goto fail;\r
-                Ke386SetCr2(DbgKdReadPhysicalMemoryApi);\r
+                KdpDprintf("DbgKdReadPhysicalMemoryApi called for address %I64X\n",\r
+                           ManipulateState.u.ReadMemory.TargetBaseAddress);\r
+                goto Hack;\r
                 while (TRUE);\r
                 break;\r
 \r
             case DbgKdWritePhysicalMemoryApi:\r
 \r
                 /* FIXME: TODO */\r
-                Ke386SetCr2(DbgKdWritePhysicalMemoryApi);\r
+                KdpDprintf("DbgKdWritePhysicalMemoryApi called\n");\r
                 while (TRUE);\r
                 break;\r
 \r
             case DbgKdQuerySpecialCallsApi:\r
 \r
                 /* FIXME: TODO */\r
-                Ke386SetCr2(DbgKdQuerySpecialCallsApi);\r
+                KdpDprintf("DbgKdQuerySpecialCallsApi called\n");\r
                 while (TRUE);\r
                 break;\r
 \r
             case DbgKdSetSpecialCallApi:\r
 \r
                 /* FIXME: TODO */\r
-                Ke386SetCr2(DbgKdSetSpecialCallApi);\r
+                KdpDprintf("DbgKdSetSpecialCallApi called\n");\r
                 while (TRUE);\r
                 break;\r
 \r
             case DbgKdClearSpecialCallsApi:\r
 \r
                 /* FIXME: TODO */\r
-                Ke386SetCr2(DbgKdClearSpecialCallsApi);\r
+                KdpDprintf("DbgKdClearSpecialCallsApi called\n");\r
                 while (TRUE);\r
                 break;\r
 \r
             case DbgKdSetInternalBreakPointApi:\r
 \r
                 /* FIXME: TODO */\r
-                Ke386SetCr2(DbgKdSetInternalBreakPointApi);\r
+                KdpDprintf("DbgKdSetInternalBreakPointApi called\n");\r
                 while (TRUE);\r
                 break;\r
 \r
             case DbgKdGetInternalBreakPointApi:\r
 \r
                 /* FIXME: TODO */\r
-                Ke386SetCr2(DbgKdGetInternalBreakPointApi);\r
+                KdpDprintf("DbgKdGetInternalBreakPointApi called\n");\r
                 while (TRUE);\r
                 break;\r
 \r
             case DbgKdReadIoSpaceExtendedApi:\r
 \r
                 /* FIXME: TODO */\r
-                Ke386SetCr2(DbgKdReadIoSpaceExtendedApi);\r
+                KdpDprintf("DbgKdReadIoSpaceExtendedApi called\n");\r
                 while (TRUE);\r
                 break;\r
 \r
             case DbgKdWriteIoSpaceExtendedApi:\r
 \r
                 /* FIXME: TODO */\r
-                Ke386SetCr2(DbgKdWriteIoSpaceExtendedApi);\r
+                KdpDprintf("DbgKdWriteIoSpaceExtendedApi called\n");\r
                 while (TRUE);\r
                 break;\r
 \r
@@ -774,14 +778,14 @@ SendPacket:
             case DbgKdWriteBreakPointExApi:\r
 \r
                 /* FIXME: TODO */\r
-                Ke386SetCr2(DbgKdWriteBreakPointExApi);\r
+                KdpDprintf("DbgKdWriteBreakPointExApi called\n");\r
                 while (TRUE);\r
                 break;\r
 \r
             case DbgKdRestoreBreakPointExApi:\r
 \r
                 /* FIXME: TODO */\r
-                Ke386SetCr2(DbgKdRestoreBreakPointExApi);\r
+                KdpDprintf("DbgKdRestoreBreakPointExApi called\n");\r
                 while (TRUE);\r
                 break;\r
 \r
@@ -794,70 +798,70 @@ SendPacket:
             case DbgKdSwitchProcessor:\r
 \r
                 /* FIXME: TODO */\r
-                Ke386SetCr2(DbgKdSwitchProcessor);\r
+                KdpDprintf("DbgKdSwitchProcessor called\n");\r
                 while (TRUE);\r
                 break;\r
 \r
             case DbgKdPageInApi:\r
 \r
                 /* FIXME: TODO */\r
-                Ke386SetCr2(DbgKdPageInApi);\r
+                KdpDprintf("DbgKdPageInApi called\n");\r
                 while (TRUE);\r
                 break;\r
 \r
             case DbgKdReadMachineSpecificRegister:\r
 \r
                 /* FIXME: TODO */\r
-                Ke386SetCr2(DbgKdReadMachineSpecificRegister);\r
+                KdpDprintf("DbgKdReadMachineSpecificRegister called\n");\r
                 while (TRUE);\r
                 break;\r
 \r
             case DbgKdWriteMachineSpecificRegister:\r
 \r
                 /* FIXME: TODO */\r
-                Ke386SetCr2(DbgKdWriteMachineSpecificRegister);\r
+                KdpDprintf("DbgKdWriteMachineSpecificRegister called\n");\r
                 while (TRUE);\r
                 break;\r
 \r
             case OldVlm1:\r
 \r
                 /* FIXME: TODO */\r
-                Ke386SetCr2(OldVlm1);\r
+                KdpDprintf("OldVlm1 called\n");\r
                 while (TRUE);\r
                 break;\r
 \r
             case OldVlm2:\r
 \r
                 /* FIXME: TODO */\r
-                Ke386SetCr2(OldVlm2);\r
+                KdpDprintf("OldVlm2 called\n");\r
                 while (TRUE);\r
                 break;\r
 \r
             case DbgKdSearchMemoryApi:\r
 \r
                 /* FIXME: TODO */\r
-                Ke386SetCr2(DbgKdSearchMemoryApi);\r
+                KdpDprintf("DbgKdSearchMemoryApi called\n");\r
                 while (TRUE);\r
                 break;\r
 \r
             case DbgKdGetBusDataApi:\r
 \r
                 /* FIXME: TODO */\r
-                Ke386SetCr2(DbgKdGetBusDataApi);\r
+                KdpDprintf("DbgKdGetBusDataApi called\n");\r
                 while (TRUE);\r
                 break;\r
 \r
             case DbgKdSetBusDataApi:\r
 \r
                 /* FIXME: TODO */\r
-                Ke386SetCr2(DbgKdSetBusDataApi);\r
+                KdpDprintf("DbgKdSetBusDataApi called\n");\r
                 while (TRUE);\r
                 break;\r
 \r
             case DbgKdCheckLowMemoryApi:\r
 \r
                 /* FIXME: TODO */\r
-                Ke386SetCr2(DbgKdCheckLowMemoryApi);\r
+                KdpDprintf("DbgKdCheckLowMemoryApi called\n");\r
                 while (TRUE);\r
                 break;\r
 \r
@@ -870,7 +874,7 @@ SendPacket:
             case DbgKdFillMemoryApi:\r
 \r
                 /* FIXME: TODO */\r
-                Ke386SetCr2(DbgKdFillMemoryApi);\r
+                KdpDprintf("DbgKdFillMemoryApi called\n");\r
                 while (TRUE);\r
                 break;\r
 \r
@@ -883,7 +887,7 @@ SendPacket:
             case DbgKdSwitchPartition:\r
 \r
                 /* FIXME: TODO */\r
-                Ke386SetCr2(DbgKdSwitchPartition);\r
+                KdpDprintf("DbgKdSwitchPartition called\n");\r
                 while (TRUE);\r
                 break;\r
 \r
@@ -891,8 +895,9 @@ SendPacket:
             default:\r
 \r
                 /* Setup an empty message, with failure */\r
+                KdpDprintf("Received unknown API Number %lx\n", ManipulateState.ApiNumber);\r
                 while (TRUE);\r
-fail:\r
+Hack:\r
                 Data.Length = 0;\r
                 ManipulateState.ReturnStatus = STATUS_UNSUCCESSFUL;\r
 \r
@@ -1247,6 +1252,7 @@ NTAPI
 KdEnableDebugger(VOID)\r
 {\r
     /* Use the internal routine */\r
+    KdpDprintf("KdEnableDebugger called\n");\r
     while (TRUE);\r
     return KdEnableDebuggerWithLock(TRUE);\r
 }\r
index a420932..ba06152 100644 (file)
@@ -9,6 +9,7 @@
 /* INCLUDES ******************************************************************/\r
 \r
 #include <ntoskrnl.h>\r
+#include "../mm/arm3/miarm.h"\r
 #define NDEBUG\r
 #include <debug.h>\r
 \r
@@ -51,7 +52,7 @@ BREAKPOINT_ENTRY KdpBreakpointTable[20];
 #if defined(_M_IX86) || defined(_M_AMD64)\r
 ULONG KdpBreakpointInstruction = 0xCC; // INT3\r
 #else\r
-#error TODO\r
+#error Define the breakpoint instruction for this architecture\r
 #endif\r
 BOOLEAN KdpOweBreakpoint;\r
 BOOLEAN BreakpointsSuspended;\r
@@ -367,23 +368,23 @@ KDDEBUGGER_DATA64 KdDebuggerDataBlock =
     {0},                                                        // MmSystemCacheStart\r
     {0},                                                        // MmSystemCacheEnd\r
     {0},                                                        // MmSystemCacheWs\r
-    {0},                                                        // MmPfnDatabase\r
-    {0},                                                        // MmSystemPtesStart\r
-    {0},                                                        // MmSystemPtesEnd\r
+    {PtrToUlong(&MmPfnDatabase)},\r
+    {PtrToUlong(MmSystemPtesStart)},\r
+    {PtrToUlong(MmSystemPtesEnd)},\r
     {0},                                                        // MmSubsectionBase\r
     {0},                                                        // MmNumberOfPagingFiles\r
-    {0},                                                        // MmLowestPhysicalPage\r
-    {0},                                                        // MmHighestPhysicalPage\r
-    {0},                                                        // MmNumberOfPhysicalPages\r
-    {0},                                                        // MmMaximumNonPagedPoolInBytes\r
-    {0},                                                        // MmNonPagedSystemStart\r
-    {0},                                                        // MmNonPagedPoolStart\r
-    {0},                                                        // MmNonPagedPoolEnd\r
-    {0},                                                        // MmPagedPoolStart\r
-    {0},                                                        // MmPagedPoolEnd\r
-    {0},                                                        // MmPagedPoolInfo\r
+    {PtrToUlong(&MmLowestPhysicalPage)},\r
+    {PtrToUlong(&MmHighestPhysicalPage)},\r
+    {PtrToUlong(&MmNumberOfPhysicalPages)},\r
+    {PtrToUlong(&MmMaximumNonPagedPoolInBytes)},\r
+    {PtrToUlong(&MmNonPagedSystemStart)},\r
+    {PtrToUlong(&MmNonPagedPoolStart)},\r
+    {PtrToUlong(&MmNonPagedPoolEnd)},\r
+    {PtrToUlong(&MmPagedPoolStart)},\r
+    {PtrToUlong(&MmPagedPoolEnd)},\r
+    {PtrToUlong(&MmPagedPoolInfo)},\r
     PAGE_SIZE,\r
-    {0},                                                        // MmSizeOfPagedPoolInBytes\r
+    {PtrToUlong(&MmSizeOfPagedPoolInBytes)},\r
     {0},                                                        // MmTotalCommitLimit\r
     {0},                                                        // MmTotalCommittedPages\r
     {0},                                                        // MmSharedCommit\r
@@ -399,7 +400,7 @@ KDDEBUGGER_DATA64 KdDebuggerDataBlock =
     {0},                                                        // MmAvailablePages\r
     {0},                                                        // MmResidentAvailablePages\r
     {0},                                                        // PoolTrackTable\r
-    {0},                                                        // NonPagedPoolDescriptor\r
+    {PtrToUlong(&NonPagedPoolDescriptor)},\r
     {PtrToUlong(&MmHighestUserAddress)},\r
     {PtrToUlong(&MmSystemRangeStart)},\r
     {PtrToUlong(&MmUserProbeAddress)},\r
@@ -421,9 +422,9 @@ KDDEBUGGER_DATA64 KdDebuggerDataBlock =
     {0},                                                        // MmPeakCommitment\r
     {0},                                                        // MmtotalCommitLimitMaximum\r
     {PtrToUlong(&CmNtCSDVersion)},\r
-    {0},                                                        // MmPhysicalMemoryBlock\r
-    {0},                                                        // MmSessionBase\r
-    {0},                                                        // MmSessionSize\r
+    {PtrToUlong(&MmPhysicalMemoryBlock)},\r
+    {PtrToUlong(&MmSessionBase)},\r
+    {PtrToUlong(&MmSessionSize)},\r
     {0},\r
     {0},\r
     FIELD_OFFSET(KTHREAD, NextProcessor),\r
@@ -471,6 +472,6 @@ KDDEBUGGER_DATA64 KdDebuggerDataBlock =
     KGDT_TSS,\r
     0,\r
     0,\r
-    {0},                                                        // IopNumTriagDumpDataBlocks\r
+    {0},                                                        // IopNumTriageDumpDataBlocks\r
     {0},                                                        // IopTriageDumpDataBlocks\r
 };\r
index e294997..df0f342 100644 (file)
@@ -49,11 +49,11 @@ KdpPollBreakInWithPortLock(VOID)
         else\r
         {\r
             /* Now get a packet */\r
-            if (!KdReceivePacket(PACKET_TYPE_KD_POLL_BREAKIN,\r
+            if (KdReceivePacket(PACKET_TYPE_KD_POLL_BREAKIN,\r
                                  NULL,\r
                                  NULL,\r
                                  NULL,\r
-                                 NULL))\r
+                                 NULL) == KdPacketReceived)\r
             {\r
                 /* Successful breakin */\r
                 DoBreak = TRUE;\r
@@ -96,11 +96,11 @@ KdPollBreakIn(VOID)
             if (KeTryToAcquireSpinLockAtDpcLevel(&KdpDebuggerLock))\r
             {\r
                 /* Now get a packet */\r
-                if (!KdReceivePacket(PACKET_TYPE_KD_POLL_BREAKIN,\r
+                if (KdReceivePacket(PACKET_TYPE_KD_POLL_BREAKIN,\r
                                      NULL,\r
                                      NULL,\r
                                      NULL,\r
-                                     NULL))\r
+                                     NULL) == KdPacketReceived)\r
                 {\r
                     /* Successful breakin */\r
                     DoBreak = TRUE;\r
index 48d3cd4..08a7eb5 100644 (file)
@@ -61,6 +61,7 @@ KdpCommandString(IN ULONG Length,
                  IN PKEXCEPTION_FRAME ExceptionFrame)\r
 {\r
     /* FIXME */\r
+    KdpDprintf("KdpCommandString called\n");\r
     while (TRUE);\r
 }\r
 \r
@@ -118,6 +119,7 @@ KdpPrompt(IN LPSTR InString,
           IN PKEXCEPTION_FRAME ExceptionFrame)\r
 {\r
     /* FIXME */\r
+    KdpDprintf("KdpPrompt called\n");\r
     while (TRUE);\r
     return FALSE;\r
 }\r
index 6ba033f..154043f 100644 (file)
@@ -30,7 +30,7 @@ KdpReport(IN PKTRAP_FRAME TrapFrame,
     /* Check if this is INT1 or 3, or if we're forced to handle it */\r
     if ((ExceptionCode == STATUS_BREAKPOINT) ||\r
         (ExceptionCode == STATUS_SINGLE_STEP) ||\r
-        //(ExceptionCode == STATUS_ASSERTION_FAILURE) ||\r
+        (ExceptionCode == STATUS_ASSERTION_FAILURE) ||\r
         (NtGlobalFlag & FLG_STOP_ON_EXCEPTION))\r
     {\r
         /* Check if we can't really handle this */\r
index a9506da..a3d7c3a 100644 (file)
@@ -83,6 +83,8 @@ typedef struct _POOL_HEADER
 C_ASSERT(sizeof(POOL_HEADER) == 8);
 C_ASSERT(sizeof(POOL_HEADER) == sizeof(LIST_ENTRY));
 
+extern POOL_DESCRIPTOR NonPagedPoolDescriptor;
+
 //
 // END FIXFIX
 //
@@ -119,9 +121,15 @@ extern MMPTE HyperTemplatePte;
 
 extern ULONG MmSizeOfNonPagedPoolInBytes;
 extern ULONG MmMaximumNonPagedPoolInBytes;
+extern PVOID MmNonPagedSystemStart;
 extern PVOID MmNonPagedPoolStart;
 extern PVOID MmNonPagedPoolExpansionStart;
 extern PVOID MmNonPagedPoolEnd;
+extern ULONG MmSizeOfPagedPoolInBytes;
+extern PVOID MmPagedPoolStart;
+extern PVOID MmPagedPoolEnd;
+extern PVOID MmSessionBase;
+extern ULONG MmSessionSize;
 extern PMMPTE MmFirstReservedMappingPte, MmLastReservedMappingPte;
 extern PMMPTE MiFirstReservedZeroingPte;
 extern MI_PFN_CACHE_ATTRIBUTE MiPlatformCacheAttributes[2][MmMaximumCacheType];