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 // Routine to determine if it is safe to disable the debugger
326 // Safe memory read & write Support
336 OUT PULONG ActualSize OPTIONAL
340 // Low Level Support Routines for the KD API
349 IN PDBGKD_GET_VERSION64 Version
358 IN PDBGKD_MANIPULATE_STATE64 State
,
365 IN PDBGKD_ANY_WAIT_STATE_CHANGE WaitStateChange
,
376 OUT PLARGE_INTEGER MsrValue
383 IN PLARGE_INTEGER MsrValue
392 IN ULONG BusDataType
,
398 OUT PULONG ActualLength
404 IN ULONG BusDataType
,
410 OUT PULONG ActualLength
418 KdpSysReadControlSpace(
420 IN ULONG64 BaseAddress
,
423 OUT PULONG ActualLength
428 KdpSysWriteControlSpace(
430 IN ULONG64 BaseAddress
,
433 OUT PULONG ActualLength
442 IN ULONG InterfaceType
,
444 IN ULONG AddressSpace
,
445 IN ULONG64 IoAddress
,
448 OUT PULONG ActualDataSize
454 IN ULONG InterfaceType
,
456 IN ULONG AddressSpace
,
457 IN ULONG64 IoAddress
,
460 OUT PULONG ActualDataSize
468 KdpSysCheckLowMemory(
473 // Internal routine for sending strings directly to the debugger
485 extern DBGKD_GET_VERSION64 KdVersionBlock
;
486 extern KDDEBUGGER_DATA64 KdDebuggerDataBlock
;
487 extern LIST_ENTRY KdpDebuggerDataListHead
;
488 extern KSPIN_LOCK KdpDataSpinLock
;
489 extern LARGE_INTEGER KdPerformanceCounterRate
;
490 extern LARGE_INTEGER KdTimerStart
;
491 extern ULONG KdDisableCount
;
492 extern KD_CONTEXT KdpContext
;
493 extern PKDEBUG_ROUTINE KiDebugRoutine
;
494 extern PKDEBUG_SWITCH_ROUTINE KiDebugSwitchRoutine
;
495 extern BOOLEAN KdBreakAfterSymbolLoad
;
496 extern BOOLEAN KdPitchDebugger
;
497 extern BOOLEAN _KdDebuggerNotPresent
;
498 extern BOOLEAN _KdDebuggerEnabled
;
499 extern BOOLEAN KdAutoEnableOnEvent
;
500 extern BOOLEAN KdBlockEnable
;
501 extern BOOLEAN KdIgnoreUmExceptions
;
502 extern BOOLEAN KdPreviouslyEnabled
;
503 extern BOOLEAN KdpDebuggerStructuresInitialized
;
504 extern BOOLEAN KdEnteredDebugger
;
505 extern KDPC KdpTimeSlipDpc
;
506 extern KTIMER KdpTimeSlipTimer
;
507 extern WORK_QUEUE_ITEM KdpTimeSlipWorkItem
;
508 extern LONG KdpTimeSlipPending
;
509 extern PKEVENT KdpTimeSlipEvent
;
510 extern KSPIN_LOCK KdpTimeSlipEventLock
;
511 extern BOOLEAN KdpPortLocked
;
512 extern BOOLEAN KdpControlCPressed
;
513 extern BOOLEAN KdpContextSent
;
514 extern KSPIN_LOCK KdpDebuggerLock
;
515 extern LARGE_INTEGER KdTimerStop
, KdTimerStart
, KdTimerDifference
;
516 extern ULONG KdComponentTableSize
;
517 extern ULONG Kd_WIN2000_Mask
;
518 extern PULONG KdComponentTable
[104];
519 extern CHAR KdpMessageBuffer
[0x1000], KdpPathBuffer
[0x1000];
520 extern CHAR KdPrintDefaultCircularBuffer
[KD_DEFAULT_LOG_BUFFER_SIZE
];
521 extern BREAKPOINT_ENTRY KdpBreakpointTable
[KD_BREAKPOINT_MAX
];
522 extern KD_BREAKPOINT_TYPE KdpBreakpointInstruction
;
523 extern BOOLEAN KdpOweBreakpoint
;
524 extern BOOLEAN BreakpointsSuspended
;
525 extern ULONG KdpNumInternalBreakpoints
;
526 extern ULONG KdpCurrentSymbolStart
, KdpCurrentSymbolEnd
;
527 extern ULONG TraceDataBuffer
[40];
528 extern ULONG TraceDataBufferPosition
;