- Move NCI generated files to arch-specific directories
[reactos.git] / reactos / ntoskrnl / include / internal / kd64.h
1 /*
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)
7 */
8
9 //
10 // Breakpoint Status Flags
11 //
12 typedef enum _KDP_BREAKPOINT_FLAGS
13 {
14 KdpBreakpointActive = 1,
15 KdpBreakpointPending = 2,
16 KdpBreakpointSuspended = 4,
17 KdpBreakpointExpired = 8
18 } KDP_BREAKPOINT_FLAGS;
19
20 //
21 // Structure for Breakpoints
22 //
23 typedef struct _BREAKPOINT_ENTRY
24 {
25 ULONG Flags;
26 PKPROCESS Process;
27 PVOID Address;
28 UCHAR Content;
29 } BREAKPOINT_ENTRY, *PBREAKPOINT_ENTRY;
30
31 //
32 // Debug and Multi-Processor Switch Routine Definitions
33 //
34 typedef
35 BOOLEAN
36 (NTAPI *PKDEBUG_ROUTINE)(
37 IN PKTRAP_FRAME TrapFrame,
38 IN PKEXCEPTION_FRAME ExceptionFrame,
39 IN PEXCEPTION_RECORD ExceptionRecord,
40 IN PCONTEXT Context,
41 IN KPROCESSOR_MODE PreviousMode,
42 IN BOOLEAN SecondChance
43 );
44
45 typedef
46 BOOLEAN
47 (NTAPI *PKDEBUG_SWITCH_ROUTINE)(
48 IN PEXCEPTION_RECORD ExceptionRecord,
49 IN PCONTEXT Context,
50 IN BOOLEAN SecondChance
51 );
52
53 //
54 // Debug and Multi-Processor Switch Routines
55 //
56 BOOLEAN
57 NTAPI
58 KdpEnterDebuggerException(
59 IN PKTRAP_FRAME TrapFrame,
60 IN PKEXCEPTION_FRAME ExceptionFrame,
61 IN PEXCEPTION_RECORD ExceptionRecord,
62 IN PCONTEXT Context,
63 IN KPROCESSOR_MODE PreviousMode,
64 IN BOOLEAN SecondChance
65 );
66
67 BOOLEAN
68 NTAPI
69 KdpSwitchProcessor(
70 IN PEXCEPTION_RECORD ExceptionRecord,
71 IN OUT PCONTEXT ContextRecord,
72 IN BOOLEAN SecondChanceException
73 );
74
75 //
76 // Time Slip Support
77 //
78 VOID
79 NTAPI
80 KdpTimeSlipWork(
81 IN PVOID Context
82 );
83
84 VOID
85 NTAPI
86 KdpTimeSlipDpcRoutine(
87 IN PKDPC Dpc,
88 IN PVOID DeferredContext,
89 IN PVOID SystemArgument1,
90 IN PVOID SystemArgument2
91 );
92
93 //
94 // Debug Trap Handlers
95 //
96 BOOLEAN
97 NTAPI
98 KdpStub(
99 IN PKTRAP_FRAME TrapFrame,
100 IN PKEXCEPTION_FRAME ExceptionFrame,
101 IN PEXCEPTION_RECORD ExceptionRecord,
102 IN PCONTEXT ContextRecord,
103 IN KPROCESSOR_MODE PreviousMode,
104 IN BOOLEAN SecondChanceException
105 );
106
107 BOOLEAN
108 NTAPI
109 KdpTrap(
110 IN PKTRAP_FRAME TrapFrame,
111 IN PKEXCEPTION_FRAME ExceptionFrame,
112 IN PEXCEPTION_RECORD ExceptionRecord,
113 IN PCONTEXT ContextRecord,
114 IN KPROCESSOR_MODE PreviousMode,
115 IN BOOLEAN SecondChanceException
116 );
117
118 //
119 // Port Locking
120 //
121 VOID
122 NTAPI
123 KdpPortLock(
124 VOID
125 );
126
127 VOID
128 NTAPI
129 KdpPortUnlock(
130 VOID
131 );
132
133 BOOLEAN
134 NTAPI
135 KdpPollBreakInWithPortLock(
136 VOID
137 );
138
139 //
140 // Debugger Enable, Enter and Exit
141 //
142 BOOLEAN
143 NTAPI
144 KdEnterDebugger(
145 IN PKTRAP_FRAME TrapFrame,
146 IN PKEXCEPTION_FRAME ExceptionFrame
147 );
148
149 VOID
150 NTAPI
151 KdExitDebugger(
152 IN BOOLEAN Entered
153 );
154
155 NTSTATUS
156 NTAPI
157 KdEnableDebuggerWithLock(
158 IN BOOLEAN NeedLock
159 );
160
161 //
162 // Debug Event Handlers
163 //
164 ULONG
165 NTAPI
166 KdpPrint(
167 IN ULONG ComponentId,
168 IN ULONG ComponentMask,
169 IN LPSTR String,
170 IN ULONG Length,
171 IN KPROCESSOR_MODE PreviousMode,
172 IN PKTRAP_FRAME TrapFrame,
173 IN PKEXCEPTION_FRAME ExceptionFrame,
174 OUT PBOOLEAN Status
175 );
176
177 ULONG
178 NTAPI
179 KdpSymbol(
180 IN PSTRING DllPath,
181 IN PKD_SYMBOLS_INFO DllBase,
182 IN BOOLEAN Unload,
183 IN KPROCESSOR_MODE PreviousMode,
184 IN PCONTEXT ContextRecord,
185 IN PKTRAP_FRAME TrapFrame,
186 IN PKEXCEPTION_FRAME ExceptionFrame
187 );
188
189 //
190 // State Change Notifications
191 //
192 BOOLEAN
193 NTAPI
194 KdpReportLoadSymbolsStateChange(
195 IN PSTRING PathName,
196 IN PKD_SYMBOLS_INFO SymbolInfo,
197 IN BOOLEAN Unload,
198 IN OUT PCONTEXT Context
199 );
200
201 BOOLEAN
202 NTAPI
203 KdpReportExceptionStateChange(
204 IN PEXCEPTION_RECORD ExceptionRecord,
205 IN OUT PCONTEXT Context,
206 IN BOOLEAN SecondChanceException
207 );
208
209 //
210 // Breakpoint Support
211 //
212 VOID
213 NTAPI
214 KdpRestoreAllBreakpoints(
215 VOID
216 );
217
218 BOOLEAN
219 NTAPI
220 KdpDeleteBreakpoint(
221 IN ULONG BpEntry
222 );
223
224 BOOLEAN
225 NTAPI
226 KdpDeleteBreakpointRange(
227 IN PVOID Base,
228 IN PVOID Limit
229 );
230
231 ULONG
232 NTAPI
233 KdpAddBreakpoint(
234 IN PVOID Address
235 );
236
237 //
238 // Global KD Data
239 //
240 extern DBGKD_GET_VERSION64 KdVersionBlock;
241 extern KDDEBUGGER_DATA64 KdDebuggerDataBlock;
242 extern LIST_ENTRY KdpDebuggerDataListHead;
243 extern KSPIN_LOCK KdpDataSpinLock;
244 extern LARGE_INTEGER KdPerformanceCounterRate;
245 extern LARGE_INTEGER KdTimerStart;
246 extern ULONG KdDisableCount;
247 extern KD_CONTEXT KdpContext;
248 extern PKDEBUG_ROUTINE KiDebugRoutine;
249 extern PKDEBUG_SWITCH_ROUTINE KiDebugSwitchRoutine;
250 extern BOOLEAN KdBreakAfterSymbolLoad;
251 extern BOOLEAN KdPitchDebugger;
252 extern BOOLEAN _KdDebuggerNotPresent;
253 extern BOOLEAN _KdDebuggerEnabled;
254 extern BOOLEAN KdAutoEnableOnEvent;
255 extern BOOLEAN KdPreviouslyEnabled;
256 extern BOOLEAN KdpDebuggerStructuresInitialized;
257 extern BOOLEAN KdEnteredDebugger;
258 extern KDPC KdpTimeSlipDpc;
259 extern KTIMER KdpTimeSlipTimer;
260 extern WORK_QUEUE_ITEM KdpTimeSlipWorkItem;
261 extern LONG KdpTimeSlipPending;
262 extern PKEVENT KdpTimeSlipEvent;
263 extern KSPIN_LOCK KdpTimeSlipEventLock;
264 extern BOOLEAN KdpPortLocked;
265 extern BOOLEAN KdpControlCPressed;
266 extern KSPIN_LOCK KdpDebuggerLock;
267 extern LARGE_INTEGER KdTimerStop, KdTimerStart, KdTimerDifference;
268 extern ULONG KdComponentTableSize;
269 extern ULONG Kd_WIN2000_Mask;
270 extern PULONG KdComponentTable[104];
271 extern CHAR KdpMessageBuffer[4096], KdpPathBuffer[4096];
272 extern BREAKPOINT_ENTRY KdpBreakpointTable[20];
273 extern ULONG KdpBreakpointInstruction;
274 extern BOOLEAN KdpOweBreakpoint;
275 extern BOOLEAN BreakpointsSuspended;
276 extern ULONG KdpNumInternalBreakpoints;
277 extern ULONG KdpCurrentSymbolStart, KdpCurrentSymbolEnd;
278 extern ULONG TraceDataBuffer[40];
279 extern ULONG TraceDataBufferPosition;