Fix x64 compilation:
- Some KDBG symbols for win32k debugging are defined only in x86 platform when _WINKD_ is disabled.
- KdSetOwedBreakpoints is defined only if _WINKD_ is enabled, addendum for x64 to r68842.

svn path=/trunk/; revision=68848
This commit is contained in:
Hermès Bélusca-Maïto 2015-08-28 14:01:58 +00:00
parent 5ff109f0b3
commit a39b4f51b9
4 changed files with 20 additions and 13 deletions

View file

@ -354,7 +354,7 @@ extern ULONG Kd_WIN2000_Mask;
#endif #endif
#if DBG #if DBG && defined(_M_IX86) && !defined(_WINKD_) // See ke/i386/traphdlr.c
#define ID_Win32PreServiceHook 'WSH0' #define ID_Win32PreServiceHook 'WSH0'
#define ID_Win32PostServiceHook 'WSH1' #define ID_Win32PostServiceHook 'WSH1'
typedef void (NTAPI *PKDBG_PRESERVICEHOOK)(ULONG, PULONG_PTR); typedef void (NTAPI *PKDBG_PRESERVICEHOOK)(ULONG, PULONG_PTR);

View file

@ -26,8 +26,8 @@ VOID NTAPI PspDumpThreads(BOOLEAN SystemThreads);
typedef struct typedef struct
{ {
ULONG ComponentId; ULONG ComponentId;
ULONG Level; ULONG Level;
} KD_COMPONENT_DATA; } KD_COMPONENT_DATA;
#define MAX_KD_COMPONENT_TABLE_ENTRIES 128 #define MAX_KD_COMPONENT_TABLE_ENTRIES 128
KD_COMPONENT_DATA KdComponentTable[MAX_KD_COMPONENT_TABLE_ENTRIES]; KD_COMPONENT_DATA KdComponentTable[MAX_KD_COMPONENT_TABLE_ENTRIES];
@ -74,6 +74,7 @@ KdpServiceDispatcher(ULONG Service,
break; break;
} }
#if defined(_M_IX86) && !defined(_WINKD_) // See ke/i386/traphdlr.c
/* Register a debug callback */ /* Register a debug callback */
case 'CsoR': case 'CsoR':
{ {
@ -90,6 +91,7 @@ KdpServiceDispatcher(ULONG Service,
} }
break; break;
} }
#endif
/* Special case for stack frame dumps */ /* Special case for stack frame dumps */
case 'DsoR': case 'DsoR':

View file

@ -15,7 +15,6 @@ EXTERN KiDispatchException:PROC
EXTERN FrLdrDbgPrint:DWORD EXTERN FrLdrDbgPrint:DWORD
EXTERN KeBugCheckWithTf:PROC EXTERN KeBugCheckWithTf:PROC
EXTERN MmAccessFault:PROC EXTERN MmAccessFault:PROC
EXTERN KdSetOwedBreakpoints:PROC
EXTERN KiSystemFatalException:PROC EXTERN KiSystemFatalException:PROC
EXTERN KiNpxNotAvailableFaultHandler:PROC EXTERN KiNpxNotAvailableFaultHandler:PROC
EXTERN KiGeneralProtectionFaultHandler:PROC EXTERN KiGeneralProtectionFaultHandler:PROC
@ -23,6 +22,11 @@ EXTERN KiXmmExceptionHandler:PROC
EXTERN KiDeliverApc:PROC EXTERN KiDeliverApc:PROC
EXTERN KiDpcInterruptHandler:PROC EXTERN KiDpcInterruptHandler:PROC
#ifdef _WINKD_
EXTERN KdSetOwedBreakpoints:PROC
#endif
/* GLOBALS *******************************************************************/ /* GLOBALS *******************************************************************/
.data .data
@ -509,16 +513,19 @@ FUNC KiPageFault
/* Check for success */ /* Check for success */
test eax, eax test eax, eax
#ifndef _WINKD_
jge PageFaultReturn
#else
jl PageFaultError jl PageFaultError
/* /* Check whether the kernel debugger has owed breakpoints to be inserted */
* We succeeded. Check whether the kernel debugger has
* owed breakpoints to be inserted, then return.
*/
call KdSetOwedBreakpoints call KdSetOwedBreakpoints
/* We succeeded, return */
jmp PageFaultReturn jmp PageFaultReturn
PageFaultError: PageFaultError:
#endif
/* Disable interrupts again for the debugger */ /* Disable interrupts again for the debugger */
cli cli

View file

@ -49,7 +49,7 @@ UCHAR KiTrapIoTable[] =
}; };
PFAST_SYSTEM_CALL_EXIT KiFastCallExitHandler; PFAST_SYSTEM_CALL_EXIT KiFastCallExitHandler;
#if DBG && !defined(_WINKD_) #if DBG && defined(_M_IX86) && !defined(_WINKD_)
PKDBG_PRESERVICEHOOK KeWin32PreServiceHook = NULL; PKDBG_PRESERVICEHOOK KeWin32PreServiceHook = NULL;
PKDBG_POSTSERVICEHOOK KeWin32PostServiceHook = NULL; PKDBG_POSTSERVICEHOOK KeWin32PostServiceHook = NULL;
#endif #endif
@ -1278,12 +1278,10 @@ KiTrap0EHandler(IN PKTRAP_FRAME TrapFrame)
if (NT_SUCCESS(Status)) if (NT_SUCCESS(Status))
{ {
#ifdef _WINKD_ #ifdef _WINKD_
/* /* Check whether the kernel debugger has owed breakpoints to be inserted */
* We succeeded. Check whether the kernel debugger has
* owed breakpoints to be inserted, then return.
*/
KdSetOwedBreakpoints(); KdSetOwedBreakpoints();
#endif #endif
/* We succeeded, return */
KiEoiHelper(TrapFrame); KiEoiHelper(TrapFrame);
} }