strip whitespace from end of lines
[reactos.git] / reactos / ntoskrnl / include / internal / 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 /* TYPES *********************************************************************/
20
21 /* from kdb.c */
22 typedef struct _KDB_KTRAP_FRAME
23 {
24 KTRAP_FRAME Tf;
25 ULONG Cr0;
26 ULONG Cr1; /* reserved/unused */
27 ULONG Cr2;
28 ULONG Cr3;
29 ULONG Cr4;
30 } KDB_KTRAP_FRAME, *PKDB_KTRAP_FRAME;
31
32 typedef enum _KDB_BREAKPOINT_TYPE
33 {
34 KdbBreakPointNone = 0,
35 KdbBreakPointSoftware,
36 KdbBreakPointHardware,
37 KdbBreakPointTemporary
38 } KDB_BREAKPOINT_TYPE;
39
40 typedef enum _KDB_ACCESS_TYPE
41 {
42 KdbAccessRead,
43 KdbAccessWrite,
44 KdbAccessReadWrite,
45 KdbAccessExec
46 } KDB_ACCESS_TYPE;
47
48 typedef struct _KDB_BREAKPOINT
49 {
50 KDB_BREAKPOINT_TYPE Type; /* Type of breakpoint */
51 BOOLEAN Enabled; /* Whether the bp is enabled */
52 ULONG_PTR Address; /* Address of the breakpoint */
53 BOOLEAN Global; /* Whether the breakpoint is global or local to a process */
54 PEPROCESS Process; /* Owning process */
55 PCHAR ConditionExpression;
56 PVOID Condition;
57 union {
58 /* KdbBreakPointSoftware */
59 UCHAR SavedInstruction;
60 /* KdbBreakPointHardware */
61 struct {
62 UCHAR DebugReg : 2;
63 UCHAR Size : 3;
64 KDB_ACCESS_TYPE AccessType;
65 } Hw;
66 } Data;
67 } KDB_BREAKPOINT, *PKDB_BREAKPOINT;
68
69 typedef enum _KDB_ENTER_CONDITION
70 {
71 KdbDoNotEnter,
72 KdbEnterAlways,
73 KdbEnterFromKmode,
74 KdbEnterFromUmode
75 } KDB_ENTER_CONDITION;
76
77 /* These values MUST be nonzero. They're used as bit masks. */
78 typedef enum _KDB_OUTPUT_SETTINGS
79 {
80 KD_DEBUG_KDSERIAL = 1,
81 KD_DEBUG_KDNOECHO = 2
82 } KDB_OUTPUT_SETTINGS;
83
84 /* FUNCTIONS *****************************************************************/
85
86 /* from i386/i386-dis.c */
87
88 LONG
89 KdbpDisassemble(
90 IN ULONG Address,
91 IN ULONG IntelSyntax);
92
93 LONG
94 KdbpGetInstLength(
95 IN ULONG Address);
96
97 /* from i386/kdb_help.S */
98
99 STDCALL VOID
100 KdbpStackSwitchAndCall(
101 IN PVOID NewStack,
102 IN VOID (*Function)(VOID));
103
104 /* from kdb_cli.c */
105
106 extern PCHAR KdbInitFileBuffer;
107
108 VOID
109 KdbpCliInit();
110
111 VOID
112 KdbpCliMainLoop(
113 IN BOOLEAN EnteredOnSingleStep);
114
115 VOID
116 KdbpCliModuleLoaded(
117 IN PUNICODE_STRING Name);
118
119 VOID
120 KdbpCliInterpretInitFile();
121
122 VOID
123 KdbpPrint(
124 IN PCHAR Format,
125 IN ... OPTIONAL);
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 KdbpSymFindModuleByAddress(IN PVOID Address,
155 OUT PKDB_MODULE_INFO pInfo);
156
157 BOOLEAN
158 KdbpSymFindModuleByName(IN LPCWSTR Name,
159 OUT PKDB_MODULE_INFO pInfo);
160
161 BOOLEAN
162 KdbpSymFindModuleByIndex(IN INT Index,
163 OUT PKDB_MODULE_INFO pInfo);
164
165 /* from kdb.c */
166
167 extern PEPROCESS KdbCurrentProcess;
168 extern PETHREAD KdbCurrentThread;
169 extern LONG KdbLastBreakPointNr;
170 extern ULONG KdbNumSingleSteps;
171 extern BOOLEAN KdbSingleStepOver;
172 extern PKDB_KTRAP_FRAME KdbCurrentTrapFrame;
173 extern ULONG KdbDebugState;
174
175 LONG
176 KdbpGetNextBreakPointNr(
177 IN ULONG Start OPTIONAL);
178
179 BOOLEAN
180 KdbpGetBreakPointInfo(
181 IN ULONG BreakPointNr,
182 OUT ULONG_PTR *Address OPTIONAL,
183 OUT KDB_BREAKPOINT_TYPE *Type OPTIONAL,
184 OUT UCHAR *Size OPTIONAL,
185 OUT KDB_ACCESS_TYPE *AccessType OPTIONAL,
186 OUT UCHAR *DebugReg OPTIONAL,
187 OUT BOOLEAN *Enabled OPTIONAL,
188 OUT BOOLEAN *Global OPTIONAL,
189 OUT PEPROCESS *Process OPTIONAL,
190 OUT PCHAR *ConditionExpression OPTIONAL);
191
192 NTSTATUS
193 KdbpInsertBreakPoint(
194 IN ULONG_PTR Address,
195 IN KDB_BREAKPOINT_TYPE Type,
196 IN UCHAR Size OPTIONAL,
197 IN KDB_ACCESS_TYPE AccessType OPTIONAL,
198 IN PCHAR ConditionExpression OPTIONAL,
199 IN BOOLEAN Global,
200 OUT PULONG BreakPointNumber OPTIONAL);
201
202 BOOLEAN
203 KdbpDeleteBreakPoint(
204 IN LONG BreakPointNr OPTIONAL,
205 IN OUT PKDB_BREAKPOINT BreakPoint OPTIONAL);
206
207 BOOLEAN
208 KdbpEnableBreakPoint(
209 IN LONG BreakPointNr OPTIONAL,
210 IN OUT PKDB_BREAKPOINT BreakPoint OPTIONAL);
211
212 BOOLEAN
213 KdbpDisableBreakPoint(
214 IN LONG BreakPointNr OPTIONAL,
215 IN OUT PKDB_BREAKPOINT BreakPoint OPTIONAL);
216
217 BOOLEAN
218 KdbpGetEnterCondition(
219 IN LONG ExceptionNr,
220 IN BOOLEAN FirstChance,
221 OUT KDB_ENTER_CONDITION *Condition);
222
223 BOOLEAN
224 KdbpSetEnterCondition(
225 IN LONG ExceptionNr,
226 IN BOOLEAN FirstChance,
227 IN KDB_ENTER_CONDITION Condition);
228
229 BOOLEAN
230 KdbpAttachToThread(
231 PVOID ThreadId);
232
233 BOOLEAN
234 KdbpAttachToProcess(
235 PVOID ProcessId);
236
237 VOID
238 STDCALL
239 KdbpGetCommandLineSettings(PCHAR p1);
240
241 KD_CONTINUE_TYPE
242 KdbEnterDebuggerException(PEXCEPTION_RECORD ExceptionRecord,
243 KPROCESSOR_MODE PreviousMode,
244 PCONTEXT Context,
245 PKTRAP_FRAME TrapFrame,
246 BOOLEAN FirstChance);
247 /* other functions */
248
249 #define KdbpSafeReadMemory(dst, src, size) MmSafeCopyFromUser(dst, src, size)
250 #define KdbpSafeWriteMemory(dst, src, size) MmSafeCopyToUser(dst, src, size)
251
252 #define KdbpGetCharKeyboard(ScanCode) KdbpTryGetCharKeyboard(ScanCode, 0)
253 CHAR
254 KdbpTryGetCharKeyboard(PULONG ScanCode, UINT Retry);
255
256 #define KdbpGetCharSerial() KdbpTryGetCharSerial(0)
257 CHAR
258 KdbpTryGetCharSerial(UINT Retry);
259
260 VOID
261 KdbEnter(VOID);
262 VOID
263 DbgRDebugInit(VOID);
264 VOID
265 DbgShowFiles(VOID);
266 VOID
267 DbgEnableFile(PCH Filename);
268 VOID
269 DbgDisableFile(PCH Filename);
270 VOID
271 KbdDisableMouse();
272 VOID
273 KbdEnableMouse();
274
275 #endif /* NTOSKRNL_KDB_H */
276