Make winkd somewhat portable.
[reactos.git] / reactos / ntoskrnl / kd64 / kddata.c
index 1cdaf12..9e9c25a 100644 (file)
@@ -20,10 +20,9 @@ VOID NTAPI RtlpBreakWithStatusInstruction(VOID);
 // Debugger State\r
 //\r
 KD_CONTEXT KdpContext;\r
-BOOLEAN KdpControlCPressed;\r
-BOOLEAN KdpControlCWaiting;\r
 BOOLEAN KdpPortLocked;\r
 KSPIN_LOCK KdpDebuggerLock;\r
+BOOLEAN KdpControlCPressed;\r
 \r
 //\r
 // Debug Trap Handlers\r
@@ -45,6 +44,23 @@ BOOLEAN KdEnteredDebugger;
 ULONG KdDisableCount;\r
 LARGE_INTEGER KdPerformanceCounterRate;\r
 \r
+//\r
+// Breakpoint Data\r
+//\r
+BREAKPOINT_ENTRY KdpBreakpointTable[20];\r
+ULONG KdpBreakpointInstruction = 0xCC;\r
+BOOLEAN KdpOweBreakpoint;\r
+BOOLEAN BreakpointsSuspended;\r
+ULONG KdpNumInternalBreakpoints;\r
+\r
+ULONG KdpCurrentSymbolStart, KdpCurrentSymbolEnd;\r
+\r
+//\r
+// Tracepoint Data\r
+//\r
+ULONG TraceDataBuffer[40];\r
+ULONG TraceDataBufferPosition = 1;\r
+\r
 //\r
 // Time Slip Support\r
 //\r
@@ -310,7 +326,17 @@ DBGKD_GET_VERSION64 KdVersionBlock =
     DBGKD_64BIT_PROTOCOL_VERSION2,\r
     KD_SECONDARY_VERSION_DEFAULT,\r
     DBGKD_VERS_FLAG_DATA,\r
+#if defined(_M_IX86)\r
     IMAGE_FILE_MACHINE_I386,\r
+#elif defined (_M_AMD64)\r
+    IMAGE_FILE_MACHINE_AMD64,\r
+#elif defined(_M_PPC)\r
+    IMAGE_FILE_MACHINE_POWERPC,\r
+#elif defined(_M_MIPS)\r
+    IMAGE_FILE_MACHINE_R4000,\r
+#else\r
+#error Unknown platform\r
+#endif\r
     PACKET_TYPE_MAX,\r
     0,\r
     0,\r
@@ -324,26 +350,32 @@ KDDEBUGGER_DATA64 KdDebuggerDataBlock =
 {\r
     {{0}},\r
     0,\r
-    {PtrToUlong(RtlpBreakWithStatusInstruction)},\r
+    {(ULONG_PTR)RtlpBreakWithStatusInstruction},\r
     0,\r
     FIELD_OFFSET(KTHREAD, CallbackStack),\r
     CBSTACK_CALLBACK_STACK,\r
+#if defined(_M_X86)\r
     CBSTACK_EBP,\r
+#elif defined (_M_AMD64)\r
+    CBSTACK_RBP,\r
+#else\r
+#error Invalid architecture\r
+#endif\r
     0,\r
-    {PtrToUlong(KiCallUserMode)},\r
+    {(ULONG_PTR)KiCallUserMode},\r
     {0},\r
-    {PtrToUlong(&PsLoadedModuleList)},\r
-    {PtrToUlong(&PsActiveProcessHead)},\r
-    {PtrToUlong(&PspCidTable)},\r
-    {PtrToUlong(&ExpSystemResourcesList)},\r
+    {(ULONG_PTR)&PsLoadedModuleList},\r
+    {(ULONG_PTR)&PsActiveProcessHead},\r
+    {(ULONG_PTR)&PspCidTable},\r
+    {(ULONG_PTR)&ExpSystemResourcesList},\r
     {0},                                                        // ExpPagedPoolDescriptor\r
     {0},                                                        // ExpNumberOfPagedPools\r
-    {PtrToUlong(&KeTimeIncrement)},\r
-    {PtrToUlong(&KeBugcheckCallbackListHead)},\r
-    {PtrToUlong(KiBugCheckData)},\r
-    {PtrToUlong(&IopErrorLogListHead)},\r
-    {PtrToUlong(&ObpRootDirectoryObject)},\r
-    {PtrToUlong(&ObpTypeObjectType)},\r
+    {(ULONG_PTR)&KeTimeIncrement},\r
+    {(ULONG_PTR)&KeBugcheckCallbackListHead},\r
+    {(ULONG_PTR)KiBugCheckData},\r
+    {(ULONG_PTR)&IopErrorLogListHead},\r
+    {(ULONG_PTR)&ObpRootDirectoryObject},\r
+    {(ULONG_PTR)&ObpTypeObjectType},\r
     {0},                                                        // MmSystemCacheStart\r
     {0},                                                        // MmSystemCacheEnd\r
     {0},                                                        // MmSystemCacheWs\r
@@ -380,17 +412,17 @@ KDDEBUGGER_DATA64 KdDebuggerDataBlock =
     {0},                                                        // MmResidentAvailablePages\r
     {0},                                                        // PoolTrackTable\r
     {0},                                                        // NonPagedPoolDescriptor\r
-    {PtrToUlong(&MmHighestUserAddress)},\r
-    {PtrToUlong(&MmSystemRangeStart)},\r
-    {PtrToUlong(&MmUserProbeAddress)},\r
-    {PtrToUlong(KdPrintDefaultCircularBuffer)},\r
-    {PtrToUlong(KdPrintDefaultCircularBuffer + 1)},\r
-    {PtrToUlong(&KdPrintWritePointer)},\r
-    {PtrToUlong(&KdPrintRolloverCount)},\r
+    {(ULONG_PTR)&MmHighestUserAddress},\r
+    {(ULONG_PTR)&MmSystemRangeStart},\r
+    {(ULONG_PTR)&MmUserProbeAddress},\r
+    {(ULONG_PTR)KdPrintDefaultCircularBuffer},\r
+    {(ULONG_PTR)(KdPrintDefaultCircularBuffer + 1)},\r
+    {(ULONG_PTR)&KdPrintWritePointer},\r
+    {(ULONG_PTR)&KdPrintRolloverCount},\r
     {0},                                                        // MmLoadedUserImageList\r
-    {PtrToUlong(&NtBuildLab)},\r
+    {(ULONG_PTR)&NtBuildLab},\r
     {0},\r
-    {PtrToUlong(KiProcessorBlock)},\r
+    {(ULONG_PTR)KiProcessorBlock},\r
     {0},                                                        // MmUnloadedDrivers\r
     {0},                                                        // MmLastUnloadedDrivers\r
     {0},                                                        // MmTriageActionTaken\r
@@ -400,7 +432,7 @@ KDDEBUGGER_DATA64 KdDebuggerDataBlock =
     {0},                                                        // MmAllocatedNonPagedPool\r
     {0},                                                        // MmPeakCommitment\r
     {0},                                                        // MmtotalCommitLimitMaximum\r
-    {PtrToUlong(&CmNtCSDVersion)},\r
+    {(ULONG_PTR)&CmNtCSDVersion},\r
     {0},                                                        // MmPhysicalMemoryBlock\r
     {0},                                                        // MmSessionBase\r
     {0},                                                        // MmSessionSize\r
@@ -427,18 +459,31 @@ KDDEBUGGER_DATA64 KdDebuggerDataBlock =
     FIELD_OFFSET(KPRCB, ProcessorState.ContextFrame),\r
     FIELD_OFFSET(KPRCB, Number),\r
     sizeof(ETHREAD),\r
-    {PtrToUlong(KdPrintDefaultCircularBuffer)},\r
-    {PtrToUlong(&KdPrintBufferSize)},\r
-    {PtrToUlong(&KeLoaderBlock)},\r
+    {(ULONG_PTR)KdPrintDefaultCircularBuffer},\r
+    {(ULONG_PTR)&KdPrintBufferSize},\r
+    {(ULONG_PTR)&KeLoaderBlock},\r
     sizeof(KIPCR) + sizeof(KPRCB),\r
     FIELD_OFFSET(KIPCR, Self),\r
+#if defined(_M_X86)\r
     FIELD_OFFSET(KPCR, Prcb),\r
+#elif defined(_M_AMD64)\r
+    FIELD_OFFSET(KPCR, CurrentPrcb),\r
+#else\r
+ #error Invalid architecture\r
+#endif\r
+#if defined(_M_X86)\r
     FIELD_OFFSET(KIPCR, PrcbData),\r
+#elif defined(_M_AMD64)\r
+    FIELD_OFFSET(KIPCR, Prcb),\r
+#else\r
+ #error Invalid architecture\r
+#endif\r
     0,\r
     0,\r
     0,\r
     0,\r
     0,\r
+#if defined(_M_X86)\r
     FIELD_OFFSET(KIPCR, PrcbData) +\r
     FIELD_OFFSET(KPRCB, ProcessorState.SpecialRegisters),\r
     KGDT_R0_CODE,\r
@@ -449,6 +494,20 @@ KDDEBUGGER_DATA64 KdDebuggerDataBlock =
     KGDT_R3_TEB,\r
     KGDT_LDT,\r
     KGDT_TSS,\r
+#elif defined(_M_AMD64)\r
+    FIELD_OFFSET(KIPCR, Prcb) +\r
+    FIELD_OFFSET(KPRCB, ProcessorState.SpecialRegisters),\r
+    KGDT_64_R0_CODE,\r
+    KGDT_64_DATA,\r
+    KGDT_64_DATA,\r
+    KGDT_64_R3_CODE,\r
+    KGDT_64_DATA,\r
+    KGDT_64_DATA,\r
+    0,\r
+    KGDT_TSS,\r
+#else\r
+ #error Invalid architecture\r
+#endif\r
     0,\r
     0,\r
     {0},                                                        // IopNumTriagDumpDataBlocks\r