2 * PROJECT: ReactOS Kernel
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: ntoskrnl/include/kd64.h
5 * PURPOSE: Internal header for the KD64 Library
6 * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
10 // Maximum supported number of breakpoints
12 #define KD_BREAKPOINT_MAX 32
15 // Default size of the DbgPrint log buffer
18 #define KD_DEFAULT_LOG_BUFFER_SIZE 0x8000
20 #define KD_DEFAULT_LOG_BUFFER_SIZE 0x1000
24 // Breakpoint Status Flags
26 typedef enum _KDP_BREAKPOINT_FLAGS
28 KdpBreakpointActive
= 1,
29 KdpBreakpointPending
= 2,
30 KdpBreakpointSuspended
= 4,
31 KdpBreakpointExpired
= 8
32 } KDP_BREAKPOINT_FLAGS
;
35 // Structure for Breakpoints
37 typedef struct _BREAKPOINT_ENTRY
42 KD_BREAKPOINT_TYPE Content
;
43 } BREAKPOINT_ENTRY
, *PBREAKPOINT_ENTRY
;
46 // Debug and Multi-Processor Switch Routine Definitions
50 (NTAPI
*PKDEBUG_ROUTINE
)(
51 IN PKTRAP_FRAME TrapFrame
,
52 IN PKEXCEPTION_FRAME ExceptionFrame
,
53 IN PEXCEPTION_RECORD ExceptionRecord
,
55 IN KPROCESSOR_MODE PreviousMode
,
56 IN BOOLEAN SecondChance
61 (NTAPI
*PKDEBUG_SWITCH_ROUTINE
)(
62 IN PEXCEPTION_RECORD ExceptionRecord
,
64 IN BOOLEAN SecondChance
68 // Initialization Routines
74 PLOADER_PARAMETER_BLOCK LoaderBlock
84 // Determines if the kernel debugger must handle a particular trap
89 IN PEXCEPTION_RECORD ExceptionRecord
,
91 IN KPROCESSOR_MODE PreviousMode
95 // Multi-Processor Switch Support
100 IN PEXCEPTION_RECORD ExceptionRecord
,
101 IN OUT PCONTEXT ContextRecord
,
102 IN BOOLEAN SecondChanceException
116 KdpTimeSlipDpcRoutine(
118 IN PVOID DeferredContext
,
119 IN PVOID SystemArgument1
,
120 IN PVOID SystemArgument2
124 // Debug Trap Handlers
129 IN PKTRAP_FRAME TrapFrame
,
130 IN PKEXCEPTION_FRAME ExceptionFrame
,
131 IN PEXCEPTION_RECORD ExceptionRecord
,
132 IN PCONTEXT ContextRecord
,
133 IN KPROCESSOR_MODE PreviousMode
,
134 IN BOOLEAN SecondChanceException
140 IN PKTRAP_FRAME TrapFrame
,
141 IN PKEXCEPTION_FRAME ExceptionFrame
,
142 IN PEXCEPTION_RECORD ExceptionRecord
,
143 IN PCONTEXT ContextRecord
,
144 IN KPROCESSOR_MODE PreviousMode
,
145 IN BOOLEAN SecondChanceException
165 KdpPollBreakInWithPortLock(
170 // Debugger Enter, Exit, Enable and Disable
175 IN PKTRAP_FRAME TrapFrame
,
176 IN PKEXCEPTION_FRAME ExceptionFrame
187 KdEnableDebuggerWithLock(
193 KdDisableDebuggerWithLock(
198 // Debug Event Handlers
203 IN ULONG ComponentId
,
207 IN KPROCESSOR_MODE PreviousMode
,
208 IN PKTRAP_FRAME TrapFrame
,
209 IN PKEXCEPTION_FRAME ExceptionFrame
,
216 IN LPSTR PromptString
,
217 IN USHORT PromptLength
,
218 OUT LPSTR ResponseString
,
219 IN USHORT MaximumResponseLength
,
220 IN KPROCESSOR_MODE PreviousMode
,
221 IN PKTRAP_FRAME TrapFrame
,
222 IN PKEXCEPTION_FRAME ExceptionFrame
229 IN PKD_SYMBOLS_INFO SymbolInfo
,
231 IN KPROCESSOR_MODE PreviousMode
,
232 IN PCONTEXT ContextRecord
,
233 IN PKTRAP_FRAME TrapFrame
,
234 IN PKEXCEPTION_FRAME ExceptionFrame
240 IN PSTRING NameString
,
241 IN PSTRING CommandString
,
242 IN KPROCESSOR_MODE PreviousMode
,
243 IN PCONTEXT ContextRecord
,
244 IN PKTRAP_FRAME TrapFrame
,
245 IN PKEXCEPTION_FRAME ExceptionFrame
249 // State Change Notifications
253 KdpReportLoadSymbolsStateChange(
255 IN PKD_SYMBOLS_INFO SymbolInfo
,
257 IN OUT PCONTEXT Context
262 KdpReportCommandStringStateChange(
263 IN PSTRING NameString
,
264 IN PSTRING CommandString
,
265 IN OUT PCONTEXT Context
270 KdpReportExceptionStateChange(
271 IN PEXCEPTION_RECORD ExceptionRecord
,
272 IN OUT PCONTEXT Context
,
273 IN BOOLEAN SecondChanceException
277 // Breakpoint Support
293 KdpDeleteBreakpointRange(
300 KdpSuspendBreakPoint(
306 KdpRestoreAllBreakpoints(
312 KdpSuspendAllBreakPoints(
317 // Safe memory read & write Support
327 OUT PULONG ActualSize OPTIONAL
331 // Low Level Support Routines for the KD API
340 IN PDBGKD_GET_VERSION64 Version
349 IN PDBGKD_MANIPULATE_STATE64 State
,
356 IN PDBGKD_ANY_WAIT_STATE_CHANGE WaitStateChange
,
367 OUT PLARGE_INTEGER MsrValue
374 IN PLARGE_INTEGER MsrValue
383 IN ULONG BusDataType
,
389 OUT PULONG ActualLength
395 IN ULONG BusDataType
,
401 OUT PULONG ActualLength
409 KdpSysReadControlSpace(
411 IN ULONG64 BaseAddress
,
414 OUT PULONG ActualLength
419 KdpSysWriteControlSpace(
421 IN ULONG64 BaseAddress
,
424 OUT PULONG ActualLength
433 IN ULONG InterfaceType
,
435 IN ULONG AddressSpace
,
436 IN ULONG64 IoAddress
,
439 OUT PULONG ActualDataSize
445 IN ULONG InterfaceType
,
447 IN ULONG AddressSpace
,
448 IN ULONG64 IoAddress
,
451 OUT PULONG ActualDataSize
459 KdpSysCheckLowMemory(
464 // Internal routine for sending strings directly to the debugger
476 extern DBGKD_GET_VERSION64 KdVersionBlock
;
477 extern KDDEBUGGER_DATA64 KdDebuggerDataBlock
;
478 extern LIST_ENTRY KdpDebuggerDataListHead
;
479 extern KSPIN_LOCK KdpDataSpinLock
;
480 extern LARGE_INTEGER KdPerformanceCounterRate
;
481 extern LARGE_INTEGER KdTimerStart
;
482 extern ULONG KdDisableCount
;
483 extern KD_CONTEXT KdpContext
;
484 extern PKDEBUG_ROUTINE KiDebugRoutine
;
485 extern PKDEBUG_SWITCH_ROUTINE KiDebugSwitchRoutine
;
486 extern BOOLEAN KdBreakAfterSymbolLoad
;
487 extern BOOLEAN KdPitchDebugger
;
488 extern BOOLEAN _KdDebuggerNotPresent
;
489 extern BOOLEAN _KdDebuggerEnabled
;
490 extern BOOLEAN KdAutoEnableOnEvent
;
491 extern BOOLEAN KdBlockEnable
;
492 extern BOOLEAN KdIgnoreUmExceptions
;
493 extern BOOLEAN KdPreviouslyEnabled
;
494 extern BOOLEAN KdpDebuggerStructuresInitialized
;
495 extern BOOLEAN KdEnteredDebugger
;
496 extern KDPC KdpTimeSlipDpc
;
497 extern KTIMER KdpTimeSlipTimer
;
498 extern WORK_QUEUE_ITEM KdpTimeSlipWorkItem
;
499 extern LONG KdpTimeSlipPending
;
500 extern PKEVENT KdpTimeSlipEvent
;
501 extern KSPIN_LOCK KdpTimeSlipEventLock
;
502 extern BOOLEAN KdpPortLocked
;
503 extern BOOLEAN KdpControlCPressed
;
504 extern BOOLEAN KdpContextSent
;
505 extern KSPIN_LOCK KdpDebuggerLock
;
506 extern LARGE_INTEGER KdTimerStop
, KdTimerStart
, KdTimerDifference
;
507 extern ULONG KdComponentTableSize
;
508 extern ULONG Kd_WIN2000_Mask
;
509 extern PULONG KdComponentTable
[104];
510 extern CHAR KdpMessageBuffer
[0x1000], KdpPathBuffer
[0x1000];
511 extern CHAR KdPrintDefaultCircularBuffer
[KD_DEFAULT_LOG_BUFFER_SIZE
];
512 extern BREAKPOINT_ENTRY KdpBreakpointTable
[KD_BREAKPOINT_MAX
];
513 extern KD_BREAKPOINT_TYPE KdpBreakpointInstruction
;
514 extern BOOLEAN KdpOweBreakpoint
;
515 extern BOOLEAN BreakpointsSuspended
;
516 extern ULONG KdpNumInternalBreakpoints
;
517 extern ULONG KdpCurrentSymbolStart
, KdpCurrentSymbolEnd
;
518 extern ULONG TraceDataBuffer
[40];
519 extern ULONG TraceDataBufferPosition
;