2000-01-17 21:02:50 +00:00
|
|
|
#ifndef __INCLUDE_INTERNAL_KERNEL_DEBUGGER_H
|
|
|
|
#define __INCLUDE_INTERNAL_KERNEL_DEBUGGER_H
|
|
|
|
|
2005-04-25 14:44:48 +00:00
|
|
|
struct _KD_DISPATCH_TABLE;
|
2005-06-25 17:01:17 +00:00
|
|
|
extern KD_PORT_INFORMATION GdbPortInfo;
|
2005-04-25 14:44:48 +00:00
|
|
|
|
2005-04-25 19:42:48 +00:00
|
|
|
/* SYMBOL ROUTINES **********************************************************/
|
|
|
|
|
|
|
|
#if defined(KDBG) || defined(DBG)
|
|
|
|
|
|
|
|
VOID
|
2005-06-21 04:10:45 +00:00
|
|
|
KdbSymLoadUserModuleSymbols(IN PLDR_DATA_TABLE_ENTRY LdrModule);
|
2005-04-25 19:42:48 +00:00
|
|
|
|
|
|
|
VOID
|
|
|
|
KdbSymFreeProcessSymbols(IN PEPROCESS Process);
|
|
|
|
|
|
|
|
VOID
|
2005-06-25 17:01:17 +00:00
|
|
|
KdbSymLoadDriverSymbols(
|
|
|
|
IN PUNICODE_STRING Filename,
|
2005-07-30 16:25:35 +00:00
|
|
|
IN PLDR_DATA_TABLE_ENTRY Module
|
2005-06-25 17:01:17 +00:00
|
|
|
);
|
2005-04-25 19:42:48 +00:00
|
|
|
|
|
|
|
VOID
|
2005-07-30 16:25:35 +00:00
|
|
|
KdbSymUnloadDriverSymbols(IN PLDR_DATA_TABLE_ENTRY ModuleObject);
|
2005-04-25 19:42:48 +00:00
|
|
|
|
|
|
|
VOID
|
|
|
|
KdbSymProcessBootSymbols(IN PCHAR FileName);
|
|
|
|
|
|
|
|
VOID
|
2005-06-25 17:01:17 +00:00
|
|
|
KdbSymInit(
|
2005-07-30 16:25:35 +00:00
|
|
|
IN PLDR_DATA_TABLE_ENTRY NtoskrnlTextSection,
|
|
|
|
IN PLDR_DATA_TABLE_ENTRY LdrHalTextSection
|
2005-06-25 17:01:17 +00:00
|
|
|
);
|
2005-04-25 19:42:48 +00:00
|
|
|
|
2005-05-09 01:38:29 +00:00
|
|
|
BOOLEAN
|
2005-04-25 19:42:48 +00:00
|
|
|
KdbSymPrintAddress(IN PVOID Address);
|
|
|
|
|
|
|
|
VOID
|
|
|
|
KdbDeleteProcessHook(IN PEPROCESS Process);
|
|
|
|
|
|
|
|
NTSTATUS
|
2005-06-25 17:01:17 +00:00
|
|
|
KdbSymGetAddressInformation(
|
|
|
|
IN PROSSYM_INFO RosSymInfo,
|
|
|
|
IN ULONG_PTR RelativeAddress,
|
|
|
|
OUT PULONG LineNumber OPTIONAL,
|
|
|
|
OUT PCH FileName OPTIONAL,
|
|
|
|
OUT PCH FunctionName OPTIONAL
|
|
|
|
);
|
2005-04-25 19:42:48 +00:00
|
|
|
|
|
|
|
typedef struct _KDB_MODULE_INFO
|
|
|
|
{
|
|
|
|
WCHAR Name[256];
|
|
|
|
ULONG_PTR Base;
|
|
|
|
ULONG Size;
|
|
|
|
PROSSYM_INFO RosSymInfo;
|
|
|
|
} KDB_MODULE_INFO, *PKDB_MODULE_INFO;
|
|
|
|
|
|
|
|
/* MACROS FOR NON-KDBG BUILDS ************************************************/
|
|
|
|
|
|
|
|
# define KDB_LOADUSERMODULE_HOOK(LDRMOD) KdbSymLoadUserModuleSymbols(LDRMOD)
|
|
|
|
# define KDB_LOADDRIVER_HOOK(FILENAME, MODULE) KdbSymLoadDriverSymbols(FILENAME, MODULE)
|
|
|
|
# define KDB_UNLOADDRIVER_HOOK(MODULE) KdbSymUnloadDriverSymbols(MODULE)
|
|
|
|
# define KDB_LOADERINIT_HOOK(NTOS, HAL) KdbSymInit(NTOS, HAL)
|
|
|
|
# define KDB_SYMBOLFILE_HOOK(FILENAME) KdbSymProcessBootSymbols(FILENAME)
|
|
|
|
#else
|
|
|
|
# define KDB_LOADUSERMODULE_HOOK(LDRMOD) do { } while (0)
|
|
|
|
# define KDB_LOADDRIVER_HOOK(FILENAME, MODULE) do { } while (0)
|
|
|
|
# define KDB_UNLOADDRIVER_HOOK(MODULE) do { } while (0)
|
|
|
|
# define KDB_LOADERINIT_HOOK(NTOS, HAL) do { } while (0)
|
|
|
|
# define KDB_SYMBOLFILE_HOOK(FILENAME) do { } while (0)
|
|
|
|
# define KDB_CREATE_THREAD_HOOK(CONTEXT) do { } while (0)
|
|
|
|
#endif
|
|
|
|
|
2005-05-01 09:49:45 +00:00
|
|
|
#if defined(KDBG) || defined(DBG)
|
2005-04-25 19:42:48 +00:00
|
|
|
# define KeRosPrintAddress(ADDRESS) KdbSymPrintAddress(ADDRESS)
|
2005-05-01 09:49:45 +00:00
|
|
|
#else
|
|
|
|
# define KeRosPrintAddress(ADDRESS) KiRosPrintAddress(ADDRESS)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef KDBG
|
2005-04-25 19:42:48 +00:00
|
|
|
# define KdbInit() KdbpCliInit()
|
|
|
|
# define KdbModuleLoaded(FILENAME) KdbpCliModuleLoaded(FILENAME)
|
|
|
|
# define KDB_DELETEPROCESS_HOOK(PROCESS) KdbDeleteProcessHook(PROCESS)
|
|
|
|
#else
|
|
|
|
# define KdbEnterDebuggerException(ER, PM, C, TF, F) kdHandleException
|
|
|
|
# define KdbInit() do { } while (0)
|
|
|
|
# define KdbEnter() do { } while (0)
|
|
|
|
# define KdbModuleLoaded(X) do { } while (0)
|
|
|
|
# define KDB_DELETEPROCESS_HOOK(PROCESS) do { } while (0)
|
|
|
|
#endif
|
|
|
|
|
2005-04-25 14:44:48 +00:00
|
|
|
/* KD ROUTINES ***************************************************************/
|
2002-02-09 18:41:24 +00:00
|
|
|
|
2002-01-23 23:39:26 +00:00
|
|
|
typedef enum _KD_CONTINUE_TYPE
|
|
|
|
{
|
2005-04-25 14:44:48 +00:00
|
|
|
kdContinue = 0,
|
|
|
|
kdDoNotHandleException,
|
|
|
|
kdHandleException
|
2002-01-23 23:39:26 +00:00
|
|
|
} KD_CONTINUE_TYPE;
|
|
|
|
|
2005-04-25 14:44:48 +00:00
|
|
|
typedef
|
2004-06-23 00:49:22 +00:00
|
|
|
VOID
|
2005-06-25 17:01:17 +00:00
|
|
|
(STDCALL*PKDP_INIT_ROUTINE)(
|
|
|
|
struct _KD_DISPATCH_TABLE *DispatchTable,
|
|
|
|
ULONG BootPhase
|
|
|
|
);
|
2004-06-23 00:49:22 +00:00
|
|
|
|
2005-04-25 14:44:48 +00:00
|
|
|
typedef
|
2004-06-23 00:49:22 +00:00
|
|
|
VOID
|
2005-06-13 14:36:02 +00:00
|
|
|
(STDCALL*PKDP_PRINT_ROUTINE)(PCH String);
|
2002-01-23 23:39:26 +00:00
|
|
|
|
2005-04-25 14:44:48 +00:00
|
|
|
typedef
|
2002-01-23 23:39:26 +00:00
|
|
|
VOID
|
2005-06-13 14:36:02 +00:00
|
|
|
(STDCALL*PKDP_PROMPT_ROUTINE)(PCH String);
|
2002-01-23 23:39:26 +00:00
|
|
|
|
2005-04-25 14:44:48 +00:00
|
|
|
typedef
|
2002-01-23 23:39:26 +00:00
|
|
|
KD_CONTINUE_TYPE
|
2005-06-25 17:01:17 +00:00
|
|
|
(STDCALL*PKDP_EXCEPTION_ROUTINE)(
|
|
|
|
PEXCEPTION_RECORD ExceptionRecord,
|
|
|
|
PCONTEXT Context,
|
|
|
|
PKTRAP_FRAME TrapFrame
|
|
|
|
);
|
2004-08-26 16:04:50 +00:00
|
|
|
|
2005-04-25 14:44:48 +00:00
|
|
|
/* INIT ROUTINES *************************************************************/
|
2004-08-26 16:04:50 +00:00
|
|
|
|
2002-07-18 00:25:31 +00:00
|
|
|
VOID
|
2005-04-25 14:44:48 +00:00
|
|
|
STDCALL
|
2005-06-25 17:01:17 +00:00
|
|
|
KdpScreenInit(
|
|
|
|
struct _KD_DISPATCH_TABLE *DispatchTable,
|
|
|
|
ULONG BootPhase
|
|
|
|
);
|
|
|
|
|
|
|
|
VOID
|
|
|
|
STDCALL
|
|
|
|
KdpSerialInit(
|
|
|
|
struct _KD_DISPATCH_TABLE *DispatchTable,
|
|
|
|
ULONG BootPhase
|
|
|
|
);
|
2005-05-09 01:38:29 +00:00
|
|
|
|
2002-07-18 00:25:31 +00:00
|
|
|
VOID
|
2005-04-25 14:44:48 +00:00
|
|
|
STDCALL
|
2005-06-25 17:01:17 +00:00
|
|
|
KdpInitDebugLog(
|
|
|
|
struct _KD_DISPATCH_TABLE *DispatchTable,
|
|
|
|
ULONG BootPhase
|
|
|
|
);
|
2005-05-09 01:38:29 +00:00
|
|
|
|
2002-07-18 00:25:31 +00:00
|
|
|
VOID
|
2005-04-25 14:44:48 +00:00
|
|
|
STDCALL
|
2005-06-25 17:01:17 +00:00
|
|
|
KdpBochsInit(
|
|
|
|
struct _KD_DISPATCH_TABLE *DispatchTable,
|
|
|
|
ULONG BootPhase
|
|
|
|
);
|
|
|
|
|
|
|
|
VOID
|
|
|
|
STDCALL
|
|
|
|
KdpGdbStubInit(
|
|
|
|
struct _KD_DISPATCH_TABLE *DispatchTable,
|
|
|
|
ULONG BootPhase);
|
2005-05-09 01:38:29 +00:00
|
|
|
|
2005-04-25 14:44:48 +00:00
|
|
|
/* KD ROUTINES ***************************************************************/
|
2004-08-26 16:04:50 +00:00
|
|
|
|
2002-08-08 17:54:16 +00:00
|
|
|
KD_CONTINUE_TYPE
|
2005-04-25 14:44:48 +00:00
|
|
|
STDCALL
|
2005-06-25 17:01:17 +00:00
|
|
|
KdpEnterDebuggerException(
|
|
|
|
PEXCEPTION_RECORD ExceptionRecord,
|
|
|
|
KPROCESSOR_MODE PreviousMode,
|
|
|
|
PCONTEXT Context,
|
|
|
|
PKTRAP_FRAME TrapFrame,
|
|
|
|
BOOLEAN FirstChance,
|
|
|
|
BOOLEAN Gdb
|
|
|
|
);
|
2005-05-09 01:38:29 +00:00
|
|
|
|
2005-04-25 14:44:48 +00:00
|
|
|
ULONG
|
|
|
|
STDCALL
|
|
|
|
KdpPrintString(PANSI_STRING String);
|
2005-03-06 10:44:38 +00:00
|
|
|
|
2005-04-25 14:44:48 +00:00
|
|
|
BOOLEAN
|
|
|
|
STDCALL
|
|
|
|
KdpDetectConflicts(PCM_RESOURCE_LIST DriverList);
|
2005-05-09 01:38:29 +00:00
|
|
|
|
2005-06-25 17:01:17 +00:00
|
|
|
VOID
|
|
|
|
STDCALL
|
|
|
|
KdpBochsDebugPrint(IN PCH Message);
|
|
|
|
|
2005-04-25 14:44:48 +00:00
|
|
|
/* KD GLOBALS ***************************************************************/
|
|
|
|
|
|
|
|
/* serial debug connection */
|
|
|
|
#define DEFAULT_DEBUG_PORT 2 /* COM2 */
|
|
|
|
#define DEFAULT_DEBUG_COM1_IRQ 4 /* COM1 IRQ */
|
|
|
|
#define DEFAULT_DEBUG_COM2_IRQ 3 /* COM2 IRQ */
|
|
|
|
#define DEFAULT_DEBUG_BAUD_RATE 115200 /* 115200 Baud */
|
|
|
|
|
|
|
|
/* KD Native Modes */
|
|
|
|
#define KdScreen 0
|
|
|
|
#define KdSerial 1
|
|
|
|
#define KdFile 2
|
|
|
|
#define KdMax 3
|
|
|
|
|
|
|
|
/* KD Private Debug Modes */
|
|
|
|
typedef struct _KDP_DEBUG_MODE
|
|
|
|
{
|
2005-06-25 17:01:17 +00:00
|
|
|
union
|
|
|
|
{
|
|
|
|
struct
|
|
|
|
{
|
2005-04-25 14:44:48 +00:00
|
|
|
/* Native Modes */
|
|
|
|
UCHAR Screen :1;
|
|
|
|
UCHAR Serial :1;
|
|
|
|
UCHAR File :1;
|
2005-05-09 01:38:29 +00:00
|
|
|
|
2005-04-25 14:44:48 +00:00
|
|
|
/* Currently Supported Wrappers */
|
|
|
|
UCHAR Pice :1;
|
|
|
|
UCHAR Gdb :1;
|
|
|
|
UCHAR Bochs :1;
|
|
|
|
};
|
2005-05-09 01:38:29 +00:00
|
|
|
|
2005-04-25 14:44:48 +00:00
|
|
|
/* Generic Value */
|
|
|
|
ULONG Value;
|
|
|
|
};
|
|
|
|
} KDP_DEBUG_MODE;
|
|
|
|
|
|
|
|
/* KD Internal Debug Services */
|
|
|
|
typedef enum _KDP_DEBUG_SERVICE
|
|
|
|
{
|
2005-06-25 17:01:17 +00:00
|
|
|
DumpNonPagedPool = 0x1e, /* a */
|
|
|
|
ManualBugCheck = 0x30, /* b */
|
|
|
|
DumpNonPagedPoolStats = 0x2e, /* c */
|
|
|
|
DumpNewNonPagedPool = 0x20, /* d */
|
|
|
|
DumpNewNonPagedPoolStats = 0x12, /* e */
|
|
|
|
DumpAllThreads = 0x21, /* f */
|
|
|
|
DumpUserThreads = 0x22, /* g */
|
|
|
|
KdSpare1 = 0x23, /* h */
|
|
|
|
KdSpare2 = 0x17, /* i */
|
|
|
|
KdSpare3 = 0x24, /* j */
|
|
|
|
EnterDebugger = 0x25 /* k */
|
2005-04-25 14:44:48 +00:00
|
|
|
} KDP_DEBUG_SERVICE;
|
|
|
|
|
|
|
|
/* Dispatch Table for Wrapper Functions */
|
|
|
|
typedef struct _KD_DISPATCH_TABLE
|
|
|
|
{
|
|
|
|
LIST_ENTRY KdProvidersList;
|
|
|
|
PKDP_INIT_ROUTINE KdpInitRoutine;
|
|
|
|
PKDP_PRINT_ROUTINE KdpPrintRoutine;
|
2005-05-09 01:38:29 +00:00
|
|
|
PKDP_PROMPT_ROUTINE KdpPromptRoutine;
|
2005-04-25 14:44:48 +00:00
|
|
|
PKDP_EXCEPTION_ROUTINE KdpExceptionRoutine;
|
|
|
|
} KD_DISPATCH_TABLE, *PKD_DISPATCH_TABLE;
|
|
|
|
|
|
|
|
/* The current Debugging Mode */
|
|
|
|
extern KDP_DEBUG_MODE KdpDebugMode;
|
|
|
|
|
|
|
|
/* The current Port IRQ */
|
|
|
|
extern ULONG KdpPortIrq;
|
|
|
|
|
|
|
|
/* The current Port */
|
|
|
|
extern ULONG KdpPort;
|
|
|
|
|
|
|
|
/* Port Information for the Serial Native Mode */
|
|
|
|
extern KD_PORT_INFORMATION SerialPortInfo;
|
|
|
|
|
|
|
|
/* Init Functions for Native Providers */
|
|
|
|
extern PKDP_INIT_ROUTINE InitRoutines[KdMax];
|
|
|
|
|
|
|
|
/* Wrapper Init Function */
|
|
|
|
extern PKDP_INIT_ROUTINE WrapperInitRoutine;
|
2005-05-09 01:38:29 +00:00
|
|
|
|
2005-04-25 14:44:48 +00:00
|
|
|
/* Dispatch Tables for Native Providers */
|
|
|
|
extern KD_DISPATCH_TABLE DispatchTable[KdMax];
|
|
|
|
|
|
|
|
/* Dispatch Table for the Wrapper */
|
|
|
|
extern KD_DISPATCH_TABLE WrapperTable;
|
2005-05-09 01:38:29 +00:00
|
|
|
|
2005-04-25 14:44:48 +00:00
|
|
|
/* The KD Native Provider List */
|
|
|
|
extern LIST_ENTRY KdProviders;
|
2002-07-18 00:25:31 +00:00
|
|
|
|
2000-01-17 21:02:50 +00:00
|
|
|
#endif /* __INCLUDE_INTERNAL_KERNEL_DEBUGGER_H */
|