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 // Breakpoint Status Flags
17 typedef enum _KDP_BREAKPOINT_FLAGS
19 KdpBreakpointActive
= 1,
20 KdpBreakpointPending
= 2,
21 KdpBreakpointSuspended
= 4,
22 KdpBreakpointExpired
= 8
23 } KDP_BREAKPOINT_FLAGS
;
26 // Structure for Breakpoints
28 typedef struct _BREAKPOINT_ENTRY
33 KD_BREAKPOINT_TYPE Content
;
34 } BREAKPOINT_ENTRY
, *PBREAKPOINT_ENTRY
;
37 // Debug and Multi-Processor Switch Routine Definitions
41 (NTAPI
*PKDEBUG_ROUTINE
)(
42 IN PKTRAP_FRAME TrapFrame
,
43 IN PKEXCEPTION_FRAME ExceptionFrame
,
44 IN PEXCEPTION_RECORD ExceptionRecord
,
46 IN KPROCESSOR_MODE PreviousMode
,
47 IN BOOLEAN SecondChance
52 (NTAPI
*PKDEBUG_SWITCH_ROUTINE
)(
53 IN PEXCEPTION_RECORD ExceptionRecord
,
55 IN BOOLEAN SecondChance
59 // Initialization Routines
65 PLOADER_PARAMETER_BLOCK LoaderBlock
75 // Multi-Processor Switch Support
80 IN PEXCEPTION_RECORD ExceptionRecord
,
81 IN OUT PCONTEXT ContextRecord
,
82 IN BOOLEAN SecondChanceException
96 KdpTimeSlipDpcRoutine(
98 IN PVOID DeferredContext
,
99 IN PVOID SystemArgument1
,
100 IN PVOID SystemArgument2
104 // Debug Trap Handlers
109 IN PKTRAP_FRAME TrapFrame
,
110 IN PKEXCEPTION_FRAME ExceptionFrame
,
111 IN PEXCEPTION_RECORD ExceptionRecord
,
112 IN PCONTEXT ContextRecord
,
113 IN KPROCESSOR_MODE PreviousMode
,
114 IN BOOLEAN SecondChanceException
120 IN PKTRAP_FRAME TrapFrame
,
121 IN PKEXCEPTION_FRAME ExceptionFrame
,
122 IN PEXCEPTION_RECORD ExceptionRecord
,
123 IN PCONTEXT ContextRecord
,
124 IN KPROCESSOR_MODE PreviousMode
,
125 IN BOOLEAN SecondChanceException
145 KdpPollBreakInWithPortLock(
150 // Debugger Enable, Enter and Exit
155 IN PKTRAP_FRAME TrapFrame
,
156 IN PKEXCEPTION_FRAME ExceptionFrame
167 KdEnableDebuggerWithLock(
172 // Debug Event Handlers
177 IN ULONG ComponentId
,
178 IN ULONG ComponentMask
,
181 IN KPROCESSOR_MODE PreviousMode
,
182 IN PKTRAP_FRAME TrapFrame
,
183 IN PKEXCEPTION_FRAME ExceptionFrame
,
191 IN USHORT InStringLength
,
193 IN USHORT OutStringLength
,
194 IN KPROCESSOR_MODE PreviousMode
,
195 IN PKTRAP_FRAME TrapFrame
,
196 IN PKEXCEPTION_FRAME ExceptionFrame
203 IN PKD_SYMBOLS_INFO DllBase
,
205 IN KPROCESSOR_MODE PreviousMode
,
206 IN PCONTEXT ContextRecord
,
207 IN PKTRAP_FRAME TrapFrame
,
208 IN PKEXCEPTION_FRAME ExceptionFrame
216 IN KPROCESSOR_MODE PreviousMode
,
217 IN PCONTEXT ContextRecord
,
218 IN PKTRAP_FRAME TrapFrame
,
219 IN PKEXCEPTION_FRAME ExceptionFrame
223 // State Change Notifications
227 KdpReportLoadSymbolsStateChange(
229 IN PKD_SYMBOLS_INFO SymbolInfo
,
231 IN OUT PCONTEXT Context
236 KdpReportExceptionStateChange(
237 IN PEXCEPTION_RECORD ExceptionRecord
,
238 IN OUT PCONTEXT Context
,
239 IN BOOLEAN SecondChanceException
243 // Breakpoint Support
247 KdpRestoreAllBreakpoints(
259 KdpDeleteBreakpointRange(
271 // Architecture dependent support routines
280 IN PDBGKD_GET_VERSION64 Version
289 IN PDBGKD_MANIPULATE_STATE64 State
,
296 IN PDBGKD_WAIT_STATE_CHANGE64 WaitStateChange
,
307 OUT PLARGE_INTEGER MsrValue
314 IN PLARGE_INTEGER MsrValue
323 IN ULONG BusDataType
,
329 OUT PULONG ActualLength
335 IN ULONG BusDataType
,
341 OUT PULONG ActualLength
349 KdpSysReadControlSpace(
351 IN ULONG64 BaseAddress
,
354 OUT PULONG ActualLength
359 KdpSysWriteControlSpace(
361 IN ULONG64 BaseAddress
,
364 OUT PULONG ActualLength
373 IN ULONG InterfaceType
,
375 IN ULONG AddressSpace
,
376 IN ULONG64 IoAddress
,
379 OUT PULONG ActualDataSize
385 IN ULONG InterfaceType
,
387 IN ULONG AddressSpace
,
388 IN ULONG64 IoAddress
,
391 OUT PULONG ActualDataSize
399 KdpSysCheckLowMemory(
404 // Internal routine for sending strings directly to the debugger
416 extern DBGKD_GET_VERSION64 KdVersionBlock
;
417 extern KDDEBUGGER_DATA64 KdDebuggerDataBlock
;
418 extern LIST_ENTRY KdpDebuggerDataListHead
;
419 extern KSPIN_LOCK KdpDataSpinLock
;
420 extern LARGE_INTEGER KdPerformanceCounterRate
;
421 extern LARGE_INTEGER KdTimerStart
;
422 extern ULONG KdDisableCount
;
423 extern KD_CONTEXT KdpContext
;
424 extern PKDEBUG_ROUTINE KiDebugRoutine
;
425 extern PKDEBUG_SWITCH_ROUTINE KiDebugSwitchRoutine
;
426 extern BOOLEAN KdBreakAfterSymbolLoad
;
427 extern BOOLEAN KdPitchDebugger
;
428 extern BOOLEAN _KdDebuggerNotPresent
;
429 extern BOOLEAN _KdDebuggerEnabled
;
430 extern BOOLEAN KdAutoEnableOnEvent
;
431 extern BOOLEAN KdPreviouslyEnabled
;
432 extern BOOLEAN KdpDebuggerStructuresInitialized
;
433 extern BOOLEAN KdEnteredDebugger
;
434 extern KDPC KdpTimeSlipDpc
;
435 extern KTIMER KdpTimeSlipTimer
;
436 extern WORK_QUEUE_ITEM KdpTimeSlipWorkItem
;
437 extern LONG KdpTimeSlipPending
;
438 extern PKEVENT KdpTimeSlipEvent
;
439 extern KSPIN_LOCK KdpTimeSlipEventLock
;
440 extern BOOLEAN KdpPortLocked
;
441 extern BOOLEAN KdpControlCPressed
;
442 extern KSPIN_LOCK KdpDebuggerLock
;
443 extern LARGE_INTEGER KdTimerStop
, KdTimerStart
, KdTimerDifference
;
444 extern ULONG KdComponentTableSize
;
445 extern ULONG Kd_WIN2000_Mask
;
446 extern PULONG KdComponentTable
[104];
447 extern CHAR KdpMessageBuffer
[4096], KdpPathBuffer
[4096];
448 extern BREAKPOINT_ENTRY KdpBreakpointTable
[KD_BREAKPOINT_MAX
];
449 extern KD_BREAKPOINT_TYPE KdpBreakpointInstruction
;
450 extern BOOLEAN KdpOweBreakpoint
;
451 extern BOOLEAN BreakpointsSuspended
;
452 extern ULONG KdpNumInternalBreakpoints
;
453 extern ULONG KdpCurrentSymbolStart
, KdpCurrentSymbolEnd
;
454 extern ULONG TraceDataBuffer
[40];
455 extern ULONG TraceDataBufferPosition
;