diff --git a/reactos/ntoskrnl/include/internal/kd.h b/reactos/ntoskrnl/include/internal/kd.h index 97d99066ca8..f1bff1d7274 100644 --- a/reactos/ntoskrnl/include/internal/kd.h +++ b/reactos/ntoskrnl/include/internal/kd.h @@ -354,7 +354,7 @@ extern ULONG Kd_WIN2000_Mask; #endif -#if DBG +#if DBG && defined(_M_IX86) && !defined(_WINKD_) // See ke/i386/traphdlr.c #define ID_Win32PreServiceHook 'WSH0' #define ID_Win32PostServiceHook 'WSH1' typedef void (NTAPI *PKDBG_PRESERVICEHOOK)(ULONG, PULONG_PTR); diff --git a/reactos/ntoskrnl/kd/kdmain.c b/reactos/ntoskrnl/kd/kdmain.c index 3c740170729..1b0a0e5ecb6 100644 --- a/reactos/ntoskrnl/kd/kdmain.c +++ b/reactos/ntoskrnl/kd/kdmain.c @@ -26,8 +26,8 @@ VOID NTAPI PspDumpThreads(BOOLEAN SystemThreads); typedef struct { - ULONG ComponentId; - ULONG Level; + ULONG ComponentId; + ULONG Level; } KD_COMPONENT_DATA; #define MAX_KD_COMPONENT_TABLE_ENTRIES 128 KD_COMPONENT_DATA KdComponentTable[MAX_KD_COMPONENT_TABLE_ENTRIES]; @@ -74,6 +74,7 @@ KdpServiceDispatcher(ULONG Service, break; } +#if defined(_M_IX86) && !defined(_WINKD_) // See ke/i386/traphdlr.c /* Register a debug callback */ case 'CsoR': { @@ -90,6 +91,7 @@ KdpServiceDispatcher(ULONG Service, } break; } +#endif /* Special case for stack frame dumps */ case 'DsoR': diff --git a/reactos/ntoskrnl/ke/amd64/trap.S b/reactos/ntoskrnl/ke/amd64/trap.S index 0cb1d44ae92..3988ab99e0c 100644 --- a/reactos/ntoskrnl/ke/amd64/trap.S +++ b/reactos/ntoskrnl/ke/amd64/trap.S @@ -15,7 +15,6 @@ EXTERN KiDispatchException:PROC EXTERN FrLdrDbgPrint:DWORD EXTERN KeBugCheckWithTf:PROC EXTERN MmAccessFault:PROC -EXTERN KdSetOwedBreakpoints:PROC EXTERN KiSystemFatalException:PROC EXTERN KiNpxNotAvailableFaultHandler:PROC EXTERN KiGeneralProtectionFaultHandler:PROC @@ -23,6 +22,11 @@ EXTERN KiXmmExceptionHandler:PROC EXTERN KiDeliverApc:PROC EXTERN KiDpcInterruptHandler:PROC +#ifdef _WINKD_ +EXTERN KdSetOwedBreakpoints:PROC +#endif + + /* GLOBALS *******************************************************************/ .data @@ -509,16 +513,19 @@ FUNC KiPageFault /* Check for success */ test eax, eax +#ifndef _WINKD_ + jge PageFaultReturn +#else jl PageFaultError - /* - * We succeeded. Check whether the kernel debugger has - * owed breakpoints to be inserted, then return. - */ + /* Check whether the kernel debugger has owed breakpoints to be inserted */ call KdSetOwedBreakpoints + /* We succeeded, return */ jmp PageFaultReturn PageFaultError: +#endif + /* Disable interrupts again for the debugger */ cli diff --git a/reactos/ntoskrnl/ke/i386/traphdlr.c b/reactos/ntoskrnl/ke/i386/traphdlr.c index b9c339b9ebd..4170a7b13b1 100644 --- a/reactos/ntoskrnl/ke/i386/traphdlr.c +++ b/reactos/ntoskrnl/ke/i386/traphdlr.c @@ -49,7 +49,7 @@ UCHAR KiTrapIoTable[] = }; PFAST_SYSTEM_CALL_EXIT KiFastCallExitHandler; -#if DBG && !defined(_WINKD_) +#if DBG && defined(_M_IX86) && !defined(_WINKD_) PKDBG_PRESERVICEHOOK KeWin32PreServiceHook = NULL; PKDBG_POSTSERVICEHOOK KeWin32PostServiceHook = NULL; #endif @@ -1278,12 +1278,10 @@ KiTrap0EHandler(IN PKTRAP_FRAME TrapFrame) if (NT_SUCCESS(Status)) { #ifdef _WINKD_ - /* - * We succeeded. Check whether the kernel debugger has - * owed breakpoints to be inserted, then return. - */ + /* Check whether the kernel debugger has owed breakpoints to be inserted */ KdSetOwedBreakpoints(); #endif + /* We succeeded, return */ KiEoiHelper(TrapFrame); }