[KDGDB]
[reactos.git] / reactos / drivers / base / kdgdb / kdgdb.h
index 37b5510..07a0eab 100644 (file)
@@ -16,7 +16,7 @@
 #include <windbgkd.h>
 #include <kddll.h>
 
-// #define KDDEBUG /* uncomment to enable debugging this dll */
+#define KDDEBUG /* uncomment to enable debugging this dll */
 
 #ifndef KDDEBUG
 #define KDDBGPRINT(...)
@@ -25,6 +25,19 @@ extern ULONG KdpDbgPrint(const char* Format, ...);
 #define KDDBGPRINT KdpDbgPrint
 #endif
 
+/* Callbacks to simulate a KdReceive <-> KdSend loop without GDB being aware of it */
+typedef VOID (*KDP_SEND_HANDLER)(
+    _In_ ULONG PacketType,
+    _In_ PSTRING MessageHeader,
+    _In_ PSTRING MessageData
+);
+typedef KDSTATUS (*KDP_MANIPULATESTATE_HANDLER)(
+    _Out_ DBGKD_MANIPULATE_STATE64* State,
+    _Out_ PSTRING MessageData,
+    _Out_ PULONG MessageLength,
+    _Inout_ PKD_CONTEXT KdContext
+);
+
 /* gdb_input.c */
 extern HANDLE gdb_dbg_thread;
 KDSTATUS gdb_interpret_input(_Out_ DBGKD_MANIPULATE_STATE64* State, _Out_ PSTRING MessageData, _Out_ PULONG MessageLength, _Inout_ PKD_CONTEXT KdContext);
@@ -39,6 +52,7 @@ void send_gdb_packet(_In_ CHAR* Buffer);
 void send_gdb_memory(_In_ VOID* Buffer, size_t Length);
 void gdb_send_debug_io(_In_ PSTRING String);
 void gdb_send_exception(void);
+void send_gdb_ntstatus(_In_ NTSTATUS Status);
 
 /* kdcom.c */
 KDSTATUS NTAPI KdpPollBreakIn(VOID);
@@ -49,8 +63,22 @@ KDSTATUS NTAPI KdpReceiveByte(_Out_ PUCHAR OutByte);
 extern DBGKD_ANY_WAIT_STATE_CHANGE CurrentStateChange;
 extern DBGKD_GET_VERSION64 KdVersion;
 extern KDDEBUGGER_DATA64* KdDebuggerDataBlock;
+extern KDP_SEND_HANDLER KdpSendPacketHandler;
+extern KDP_MANIPULATESTATE_HANDLER KdpManipulateStateHandler;
+
 
 /* arch_sup.c */
 void gdb_send_registers(void);
 
+/* Architecture specific defines. See ntoskrnl/include/internal/arch/ke.h */
+#ifdef _M_IX86
+#  define KdpGetContextPc(Context) \
+    ((Context)->Eip)
+#  define KdpSetContextPc(Context, ProgramCounter) \
+    ((Context)->Eip = (ProgramCounter))
+#  define KD_BREAKPOINT_SIZE        sizeof(UCHAR)
+#else
+#  error "Please define relevant macros for your architecture"
+#endif
+
 #endif /* _KDGDB_H_ */