-/* $Id: kd.h,v 1.6 2002/02/09 18:41:23 chorns Exp $
- *
- * kernel debugger prototypes
- */
-
-#ifndef __INCLUDE_INTERNAL_KERNEL_DEBUGGER_H
-#define __INCLUDE_INTERNAL_KERNEL_DEBUGGER_H
-
-#include <internal/ke.h>
-
-typedef enum
+typedef struct _BREAKPOINT_ENTRY
{
- NoDebug = 0,
- GdbDebug,
- PiceDebug,
- ScreenDebug,
- SerialDebug,
- BochsDebug,
- FileLogDebug
-} DEBUG_TYPE;
-
-extern DEBUG_TYPE KdDebugType;
-
-typedef enum _KD_CONTINUE_TYPE
-{
- kdContinue = 0,
- kdDoNotHandleException,
- kdHandleException
-} KD_CONTINUE_TYPE;
-
-ULONG
-KdpPrintString (PANSI_STRING String);
+ ULONG Flags;
+ PKPROCESS Process;
+ PVOID Address;
+ UCHAR Content;
+} BREAKPOINT_ENTRY, *PBREAKPOINT_ENTRY;
-VOID
-DebugLogWrite(PCH String);
-VOID
-DebugLogInit(VOID);
-VOID
-DebugLogInit2(VOID);
+typedef enum _KDP_BREAKPOINT_FLAGS
+{
+ KdpBreakpointActive = 1,
+ KdpBreakpointPending = 2,
+ KdpBreakpointSuspended = 4,
+ KdpBreakpointExpired = 8
+} KDP_BREAKPOINT_FLAGS;
+
+typedef
+BOOLEAN
+(NTAPI *PKDEBUG_ROUTINE)(
+ IN PKTRAP_FRAME TrapFrame,
+ IN PKEXCEPTION_FRAME ExceptionFrame,
+ IN PEXCEPTION_RECORD ExceptionRecord,
+ IN PCONTEXT Context,
+ IN KPROCESSOR_MODE PreviousMode,
+ IN BOOLEAN SecondChance
+);
+
+typedef
+BOOLEAN
+(NTAPI *PKDEBUG_SWITCH_ROUTINE)(
+ IN PEXCEPTION_RECORD ExceptionRecord,
+ IN PCONTEXT Context,
+ IN BOOLEAN SecondChance
+);
+
+BOOLEAN
+NTAPI
+KdpEnterDebuggerException(
+ IN PKTRAP_FRAME TrapFrame,
+ IN PKEXCEPTION_FRAME ExceptionFrame,
+ IN PEXCEPTION_RECORD ExceptionRecord,
+ IN PCONTEXT Context,
+ IN KPROCESSOR_MODE PreviousMode,
+ IN BOOLEAN SecondChance
+);
VOID
-KdInit1(VOID);
+NTAPI
+KdpTimeSlipWork(
+ IN PVOID Context
+);
+
+BOOLEAN
+NTAPI
+KdpSwitchProcessor(
+ IN PEXCEPTION_RECORD ExceptionRecord,
+ IN OUT PCONTEXT ContextRecord,
+ IN BOOLEAN SecondChanceException
+);
VOID
-KdInit2(VOID);
+NTAPI
+KdpTimeSlipDpcRoutine(
+ IN PKDPC Dpc,
+ IN PVOID DeferredContext,
+ IN PVOID SystemArgument1,
+ IN PVOID SystemArgument2
+);
+
+BOOLEAN
+NTAPI
+KdpStub(
+ IN PKTRAP_FRAME TrapFrame,
+ IN PKEXCEPTION_FRAME ExceptionFrame,
+ IN PEXCEPTION_RECORD ExceptionRecord,
+ IN PCONTEXT ContextRecord,
+ IN KPROCESSOR_MODE PreviousMode,
+ IN BOOLEAN SecondChanceException
+);
+
+BOOLEAN
+NTAPI
+KdpTrap(
+ IN PKTRAP_FRAME TrapFrame,
+ IN PKEXCEPTION_FRAME ExceptionFrame,
+ IN PEXCEPTION_RECORD ExceptionRecord,
+ IN PCONTEXT ContextRecord,
+ IN KPROCESSOR_MODE PreviousMode,
+ IN BOOLEAN SecondChanceException
+);
VOID
-KdPutChar(UCHAR Value);
-
-UCHAR
-KdGetChar(VOID);
+NTAPI
+KdpPortLock(
+ VOID
+);
VOID
-KdGdbStubInit();
+NTAPI
+KdpPortUnlock(
+ VOID
+);
+
+BOOLEAN
+NTAPI
+KdEnterDebugger(
+ IN PKTRAP_FRAME TrapFrame,
+ IN PKEXCEPTION_FRAME ExceptionFrame
+);
VOID
-KdGdbDebugPrint (LPSTR Message);
+NTAPI
+KdExitDebugger(
+ IN BOOLEAN Entered
+);
+
+NTSTATUS
+NTAPI
+KdEnableDebuggerWithLock(
+ IN BOOLEAN NeedLock
+);
+
+ULONG
+NTAPI
+KdpPrint(
+ IN ULONG ComponentId,
+ IN ULONG ComponentMask,
+ IN LPSTR String,
+ IN ULONG Length,
+ IN KPROCESSOR_MODE PreviousMode,
+ IN PKTRAP_FRAME TrapFrame,
+ IN PKEXCEPTION_FRAME ExceptionFrame,
+ OUT PBOOLEAN Status
+);
+
+ULONG
+NTAPI
+KdpSymbol(
+ IN PSTRING DllPath,
+ IN PKD_SYMBOLS_INFO DllBase,
+ IN BOOLEAN Unload,
+ IN KPROCESSOR_MODE PreviousMode,
+ IN PCONTEXT ContextRecord,
+ IN PKTRAP_FRAME TrapFrame,
+ IN PKEXCEPTION_FRAME ExceptionFrame
+);
+
+BOOLEAN
+NTAPI
+KdpPollBreakInWithPortLock(
+ VOID
+);
+
+BOOLEAN
+NTAPI
+KdpReportLoadSymbolsStateChange(
+ IN PSTRING PathName,
+ IN PKD_SYMBOLS_INFO SymbolInfo,
+ IN BOOLEAN Unload,
+ IN OUT PCONTEXT Context
+);
VOID
-KdDebugPrint (LPSTR Message);
-
-KD_CONTINUE_TYPE
-KdEnterDebuggerException(PEXCEPTION_RECORD ExceptionRecord,
- PCONTEXT Context,
- PKTRAP_FRAME TrapFrame);
-
-#endif /* __INCLUDE_INTERNAL_KERNEL_DEBUGGER_H */
+NTAPI
+KdpRestoreAllBreakpoints(
+ VOID
+);
+
+BOOLEAN
+NTAPI
+KdpDeleteBreakpoint(
+ IN ULONG BpEntry
+);
+
+extern DBGKD_GET_VERSION64 KdVersionBlock;
+extern KDDEBUGGER_DATA64 KdDebuggerDataBlock;
+extern LIST_ENTRY KdpDebuggerDataListHead;
+extern KSPIN_LOCK KdpDataSpinLock;
+extern LARGE_INTEGER KdPerformanceCounterRate;
+extern LARGE_INTEGER KdTimerStart;
+extern ULONG KdDisableCount;
+extern KD_CONTEXT KdpContext;
+extern PKDEBUG_ROUTINE KiDebugRoutine;
+extern PKDEBUG_SWITCH_ROUTINE KiDebugSwitchRoutine;
+extern BOOLEAN KdBreakAfterSymbolLoad;
+extern BOOLEAN KdPitchDebugger;
+extern BOOLEAN _KdDebuggerNotPresent;
+extern BOOLEAN _KdDebuggerEnabled;
+extern BOOLEAN KdAutoEnableOnEvent;
+extern BOOLEAN KdPreviouslyEnabled;
+extern BOOLEAN KdpDebuggerStructuresInitialized;
+extern BOOLEAN KdEnteredDebugger;
+extern KDPC KdpTimeSlipDpc;
+extern KTIMER KdpTimeSlipTimer;
+extern WORK_QUEUE_ITEM KdpTimeSlipWorkItem;
+extern LONG KdpTimeSlipPending;
+extern PKEVENT KdpTimeSlipEvent;
+extern KSPIN_LOCK KdpTimeSlipEventLock;
+extern BOOLEAN KdpControlCPressed;
+extern BOOLEAN KdpControlCWaiting;
+extern BOOLEAN KdpPortLocked;
+extern KSPIN_LOCK KdpDebuggerLock;
+extern LARGE_INTEGER KdTimerStop, KdTimerStart, KdTimerDifference;
+extern ULONG KdComponentTableSize;
+extern ULONG Kd_WIN2000_Mask;
+extern PULONG KdComponentTable[104];
+extern CHAR KdpMessageBuffer[4096], KdpPathBuffer[4096];
+extern BREAKPOINT_ENTRY KdpBreakpointTable[20];
+extern ULONG KdpBreakpointInstruction;
+extern BOOLEAN KdpOweBreakpoint;
+extern BOOLEAN BreakpointsSuspended;