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