* Sync up to trunk head (r60691).
[reactos.git] / ntoskrnl / kdbg / kdb.h
1 #pragma once
2
3 /* DEFINES *******************************************************************/
4
5 #ifndef RTL_NUMBER_OF
6 # define RTL_NUMBER_OF(x) (sizeof(x) / sizeof((x)[0]))
7 #endif
8
9 /* formerly located in kdbg/kdb_symbols.c */
10 #define TAG_KDBS 'SBDK'
11 #define TAG_KDBG 'GBDK'
12
13 /* TYPES *********************************************************************/
14
15 /* from kdb.c */
16 typedef struct _KDB_KTRAP_FRAME
17 {
18 KTRAP_FRAME Tf;
19 ULONG Cr0;
20 ULONG Cr1; /* reserved/unused */
21 ULONG Cr2;
22 ULONG Cr3;
23 ULONG Cr4;
24 } KDB_KTRAP_FRAME, *PKDB_KTRAP_FRAME;
25
26 typedef enum _KDB_BREAKPOINT_TYPE
27 {
28 KdbBreakPointNone = 0,
29 KdbBreakPointSoftware,
30 KdbBreakPointHardware,
31 KdbBreakPointTemporary
32 } KDB_BREAKPOINT_TYPE;
33
34 typedef enum _KDB_ACCESS_TYPE
35 {
36 KdbAccessRead,
37 KdbAccessWrite,
38 KdbAccessReadWrite,
39 KdbAccessExec
40 } KDB_ACCESS_TYPE;
41
42 typedef struct _KDB_BREAKPOINT
43 {
44 KDB_BREAKPOINT_TYPE Type; /* Type of breakpoint */
45 BOOLEAN Enabled; /* Whether the bp is enabled */
46 ULONG_PTR Address; /* Address of the breakpoint */
47 BOOLEAN Global; /* Whether the breakpoint is global or local to a process */
48 PEPROCESS Process; /* Owning process */
49 PCHAR ConditionExpression;
50 PVOID Condition;
51 union {
52 /* KdbBreakPointSoftware */
53 UCHAR SavedInstruction;
54 /* KdbBreakPointHardware */
55 struct {
56 UCHAR DebugReg : 2;
57 UCHAR Size : 3;
58 KDB_ACCESS_TYPE AccessType;
59 } Hw;
60 } Data;
61 } KDB_BREAKPOINT, *PKDB_BREAKPOINT;
62
63 typedef enum _KDB_ENTER_CONDITION
64 {
65 KdbDoNotEnter,
66 KdbEnterAlways,
67 KdbEnterFromKmode,
68 KdbEnterFromUmode
69 } KDB_ENTER_CONDITION;
70
71 /* These values MUST be nonzero. They're used as bit masks. */
72 typedef enum _KDB_OUTPUT_SETTINGS
73 {
74 KD_DEBUG_KDSERIAL = 1,
75 KD_DEBUG_KDNOECHO = 2
76 } KDB_OUTPUT_SETTINGS;
77
78 /* FUNCTIONS *****************************************************************/
79
80 /* from i386/i386-dis.c */
81
82 LONG
83 KdbpDisassemble(
84 IN ULONG Address,
85 IN ULONG IntelSyntax);
86
87 LONG
88 KdbpGetInstLength(
89 IN ULONG Address);
90
91 /* from i386/kdb_help.S */
92
93 VOID NTAPI
94 KdbpStackSwitchAndCall(
95 IN PVOID NewStack,
96 IN VOID (*Function)(VOID));
97
98 /* from kdb_cli.c */
99
100 extern PCHAR KdbInitFileBuffer;
101
102 VOID
103 KdbpCliInit(VOID);
104
105 VOID
106 KdbpCliMainLoop(
107 IN BOOLEAN EnteredOnSingleStep);
108
109 VOID
110 KdbpCliModuleLoaded(
111 IN PUNICODE_STRING Name);
112
113 VOID
114 KdbpCliInterpretInitFile(VOID);
115
116 VOID
117 KdbpPrint(
118 IN PCHAR Format,
119 IN ... OPTIONAL);
120
121 BOOLEAN
122 NTAPI
123 KdbpGetHexNumber(
124 IN PCHAR pszNum,
125 OUT ULONG_PTR *pulValue);
126
127 /* from kdb_expr.c */
128
129 BOOLEAN
130 KdbpRpnEvaluateExpression(
131 IN PCHAR Expression,
132 IN PKDB_KTRAP_FRAME TrapFrame,
133 OUT PULONGLONG Result,
134 OUT PLONG ErrOffset OPTIONAL,
135 OUT PCHAR ErrMsg OPTIONAL);
136
137 PVOID
138 KdbpRpnParseExpression(
139 IN PCHAR Expression,
140 OUT PLONG ErrOffset OPTIONAL,
141 OUT PCHAR ErrMsg OPTIONAL);
142
143 BOOLEAN
144 KdbpRpnEvaluateParsedExpression(
145 IN PVOID Expression,
146 IN PKDB_KTRAP_FRAME TrapFrame,
147 OUT PULONGLONG Result,
148 OUT PLONG ErrOffset OPTIONAL,
149 OUT PCHAR ErrMsg OPTIONAL);
150
151 /* from kdb_symbols.c */
152
153 BOOLEAN
154 KdbpSymFindModule(
155 IN PVOID Address OPTIONAL,
156 IN LPCWSTR Name OPTIONAL,
157 IN INT Index OPTIONAL,
158 OUT PLDR_DATA_TABLE_ENTRY* pLdrEntry);
159
160 /* from kdb.c */
161
162 extern PEPROCESS KdbCurrentProcess;
163 extern PETHREAD KdbCurrentThread;
164 extern LONG KdbLastBreakPointNr;
165 extern ULONG KdbNumSingleSteps;
166 extern BOOLEAN KdbSingleStepOver;
167 extern PKDB_KTRAP_FRAME KdbCurrentTrapFrame;
168 extern ULONG KdbDebugState;
169
170 LONG
171 KdbpGetNextBreakPointNr(
172 IN ULONG Start OPTIONAL);
173
174 BOOLEAN
175 KdbpGetBreakPointInfo(
176 IN ULONG BreakPointNr,
177 OUT ULONG_PTR *Address OPTIONAL,
178 OUT KDB_BREAKPOINT_TYPE *Type OPTIONAL,
179 OUT UCHAR *Size OPTIONAL,
180 OUT KDB_ACCESS_TYPE *AccessType OPTIONAL,
181 OUT UCHAR *DebugReg OPTIONAL,
182 OUT BOOLEAN *Enabled OPTIONAL,
183 OUT BOOLEAN *Global OPTIONAL,
184 OUT PEPROCESS *Process OPTIONAL,
185 OUT PCHAR *ConditionExpression OPTIONAL);
186
187 NTSTATUS
188 KdbpInsertBreakPoint(
189 IN ULONG_PTR Address,
190 IN KDB_BREAKPOINT_TYPE Type,
191 IN UCHAR Size OPTIONAL,
192 IN KDB_ACCESS_TYPE AccessType OPTIONAL,
193 IN PCHAR ConditionExpression OPTIONAL,
194 IN BOOLEAN Global,
195 OUT PLONG BreakPointNr OPTIONAL);
196
197 BOOLEAN
198 KdbpDeleteBreakPoint(
199 IN LONG BreakPointNr OPTIONAL,
200 IN OUT PKDB_BREAKPOINT BreakPoint OPTIONAL);
201
202 BOOLEAN
203 KdbpEnableBreakPoint(
204 IN LONG BreakPointNr OPTIONAL,
205 IN OUT PKDB_BREAKPOINT BreakPoint OPTIONAL);
206
207 BOOLEAN
208 KdbpDisableBreakPoint(
209 IN LONG BreakPointNr OPTIONAL,
210 IN OUT PKDB_BREAKPOINT BreakPoint OPTIONAL);
211
212 BOOLEAN
213 KdbpGetEnterCondition(
214 IN LONG ExceptionNr,
215 IN BOOLEAN FirstChance,
216 OUT KDB_ENTER_CONDITION *Condition);
217
218 BOOLEAN
219 KdbpSetEnterCondition(
220 IN LONG ExceptionNr,
221 IN BOOLEAN FirstChance,
222 IN KDB_ENTER_CONDITION Condition);
223
224 BOOLEAN
225 KdbpAttachToThread(
226 PVOID ThreadId);
227
228 BOOLEAN
229 KdbpAttachToProcess(
230 PVOID ProcessId);
231
232 VOID
233 NTAPI
234 KdbpGetCommandLineSettings(PCHAR p1);
235
236 KD_CONTINUE_TYPE
237 KdbEnterDebuggerException(PEXCEPTION_RECORD ExceptionRecord,
238 KPROCESSOR_MODE PreviousMode,
239 PCONTEXT Context,
240 PKTRAP_FRAME TrapFrame,
241 BOOLEAN FirstChance);
242 /* other functions */
243
244 NTSTATUS
245 KdbpSafeReadMemory(OUT PVOID Dest,
246 IN PVOID Src,
247 IN ULONG Bytes);
248
249 NTSTATUS
250 KdbpSafeWriteMemory(OUT PVOID Dest,
251 IN PVOID Src,
252 IN ULONG Bytes);
253
254 #define KdbpGetCharKeyboard(ScanCode) KdbpTryGetCharKeyboard(ScanCode, 0)
255 CHAR
256 KdbpTryGetCharKeyboard(PULONG ScanCode, ULONG Retry);
257
258 #define KdbpGetCharSerial() KdbpTryGetCharSerial(0)
259 CHAR
260 KdbpTryGetCharSerial(ULONG Retry);
261
262 VOID
263 KdbEnter(VOID);
264 VOID
265 DbgRDebugInit(VOID);
266 VOID
267 DbgShowFiles(VOID);
268 VOID
269 DbgEnableFile(PCH Filename);
270 VOID
271 DbgDisableFile(PCH Filename);
272 VOID
273 KbdDisableMouse(VOID);
274 VOID
275 KbdEnableMouse(VOID);