diff --git a/ntoskrnl/kd64/kddata.c b/ntoskrnl/kd64/kddata.c index 40a42fb01ba..bd7e038aba6 100644 --- a/ntoskrnl/kd64/kddata.c +++ b/ntoskrnl/kd64/kddata.c @@ -518,11 +518,17 @@ DBGKD_GET_VERSION64 KdVersionBlock = C_ASSERT(sizeof(KDDEBUGGER_DATA64) >= 0x318); #endif +/* Minimal hackery for GCC, see commit b9cd3f2d9 (r25845) */ +#if defined(__GNUC__) && defined(_M_IX86) +#define PtrToUL64(x) ((ULPTR64)(ULONG_PTR)(x)) +#else +#define PtrToUL64(x) ((ULPTR64)(x)) +#endif KDDEBUGGER_DATA64 KdDebuggerDataBlock = { {{0}}, 0, - {(ULONG_PTR)RtlpBreakWithStatusInstruction}, + PtrToUL64(RtlpBreakWithStatusInstruction), 0, FIELD_OFFSET(KTHREAD, CallbackStack), #if defined(_M_ARM) || defined(_M_AMD64) @@ -533,82 +539,82 @@ KDDEBUGGER_DATA64 KdDebuggerDataBlock = FIELD_OFFSET(KCALLOUT_FRAME, CBSTACK_FRAME_POINTER), #endif FALSE, - {(ULONG_PTR)KiCallUserMode}, + PtrToUL64(KiCallUserMode), 0, - {(ULONG_PTR)&PsLoadedModuleList}, - {(ULONG_PTR)&PsActiveProcessHead}, - {(ULONG_PTR)&PspCidTable}, - {(ULONG_PTR)&ExpSystemResourcesList}, - {(ULONG_PTR)ExpPagedPoolDescriptor}, - {(ULONG_PTR)&ExpNumberOfPagedPools}, - {(ULONG_PTR)&KeTimeIncrement}, - {(ULONG_PTR)&KeBugcheckCallbackListHead}, - {(ULONG_PTR)KiBugCheckData}, - {(ULONG_PTR)&IopErrorLogListHead}, - {(ULONG_PTR)&ObpRootDirectoryObject}, - {(ULONG_PTR)&ObpTypeObjectType}, - {(ULONG_PTR)&MmSystemCacheStart}, - {(ULONG_PTR)&MmSystemCacheEnd}, - {(ULONG_PTR)&MmSystemCacheWs}, - {(ULONG_PTR)&MmPfnDatabase}, - {(ULONG_PTR)MmSystemPtesStart}, - {(ULONG_PTR)MmSystemPtesEnd}, - {(ULONG_PTR)&MmSubsectionBase}, - {(ULONG_PTR)&MmNumberOfPagingFiles}, - {(ULONG_PTR)&MmLowestPhysicalPage}, - {(ULONG_PTR)&MmHighestPhysicalPage}, - {(ULONG_PTR)&MmNumberOfPhysicalPages}, - {(ULONG_PTR)&MmMaximumNonPagedPoolInBytes}, - {(ULONG_PTR)&MmNonPagedSystemStart}, - {(ULONG_PTR)&MmNonPagedPoolStart}, - {(ULONG_PTR)&MmNonPagedPoolEnd}, - {(ULONG_PTR)&MmPagedPoolStart}, - {(ULONG_PTR)&MmPagedPoolEnd}, - {(ULONG_PTR)&MmPagedPoolInfo}, + PtrToUL64(&PsLoadedModuleList), + PtrToUL64(&PsActiveProcessHead), + PtrToUL64(&PspCidTable), + PtrToUL64(&ExpSystemResourcesList), + PtrToUL64(ExpPagedPoolDescriptor), + PtrToUL64(&ExpNumberOfPagedPools), + PtrToUL64(&KeTimeIncrement), + PtrToUL64(&KeBugcheckCallbackListHead), + PtrToUL64(KiBugCheckData), + PtrToUL64(&IopErrorLogListHead), + PtrToUL64(&ObpRootDirectoryObject), + PtrToUL64(&ObpTypeObjectType), + PtrToUL64(&MmSystemCacheStart), + PtrToUL64(&MmSystemCacheEnd), + PtrToUL64(&MmSystemCacheWs), + PtrToUL64(&MmPfnDatabase), + PtrToUL64(MmSystemPtesStart), + PtrToUL64(MmSystemPtesEnd), + PtrToUL64(&MmSubsectionBase), + PtrToUL64(&MmNumberOfPagingFiles), + PtrToUL64(&MmLowestPhysicalPage), + PtrToUL64(&MmHighestPhysicalPage), + PtrToUL64(&MmNumberOfPhysicalPages), + PtrToUL64(&MmMaximumNonPagedPoolInBytes), + PtrToUL64(&MmNonPagedSystemStart), + PtrToUL64(&MmNonPagedPoolStart), + PtrToUL64(&MmNonPagedPoolEnd), + PtrToUL64(&MmPagedPoolStart), + PtrToUL64(&MmPagedPoolEnd), + PtrToUL64(&MmPagedPoolInfo), PAGE_SIZE, - {(ULONG_PTR)&MmSizeOfPagedPoolInBytes}, - {(ULONG_PTR)&MmTotalCommitLimit}, - {(ULONG_PTR)&MmTotalCommittedPages}, - {(ULONG_PTR)&MmSharedCommit}, - {(ULONG_PTR)&MmDriverCommit}, - {(ULONG_PTR)&MmProcessCommit}, - {(ULONG_PTR)&MmPagedPoolCommit}, - {0}, - {(ULONG_PTR)&MmZeroedPageListHead}, - {(ULONG_PTR)&MmFreePageListHead}, - {(ULONG_PTR)&MmStandbyPageListHead}, - {(ULONG_PTR)&MmModifiedPageListHead}, - {(ULONG_PTR)&MmModifiedNoWritePageListHead}, - {(ULONG_PTR)&MmAvailablePages}, - {(ULONG_PTR)&MmResidentAvailablePages}, - {(ULONG_PTR)&PoolTrackTable}, - {(ULONG_PTR)&NonPagedPoolDescriptor}, - {(ULONG_PTR)&MmHighestUserAddress}, - {(ULONG_PTR)&MmSystemRangeStart}, - {(ULONG_PTR)&MmUserProbeAddress}, - {(ULONG_PTR)KdPrintDefaultCircularBuffer}, - {(ULONG_PTR)KdPrintDefaultCircularBuffer + 1}, - {(ULONG_PTR)&KdPrintWritePointer}, - {(ULONG_PTR)&KdPrintRolloverCount}, - {(ULONG_PTR)&MmLoadedUserImageList}, - {(ULONG_PTR)&NtBuildLab}, - {0}, - {(ULONG_PTR)KiProcessorBlock}, - {(ULONG_PTR)&MmUnloadedDrivers}, - {(ULONG_PTR)&MmLastUnloadedDrivers}, - {(ULONG_PTR)&MmTriageActionTaken}, - {(ULONG_PTR)&MmSpecialPoolTag}, - {(ULONG_PTR)&KernelVerifier}, - {(ULONG_PTR)&MmVerifierData}, - {(ULONG_PTR)&MmAllocatedNonPagedPool}, - {(ULONG_PTR)&MmPeakCommitment}, - {(ULONG_PTR)&MmtotalCommitLimitMaximum}, - {(ULONG_PTR)&CmNtCSDVersion}, - {(ULONG_PTR)&MmPhysicalMemoryBlock}, - {(ULONG_PTR)&MmSessionBase}, - {(ULONG_PTR)&MmSessionSize}, - {0}, - {0}, + PtrToUL64(&MmSizeOfPagedPoolInBytes), + PtrToUL64(&MmTotalCommitLimit), + PtrToUL64(&MmTotalCommittedPages), + PtrToUL64(&MmSharedCommit), + PtrToUL64(&MmDriverCommit), + PtrToUL64(&MmProcessCommit), + PtrToUL64(&MmPagedPoolCommit), + PtrToUL64(0), + PtrToUL64(&MmZeroedPageListHead), + PtrToUL64(&MmFreePageListHead), + PtrToUL64(&MmStandbyPageListHead), + PtrToUL64(&MmModifiedPageListHead), + PtrToUL64(&MmModifiedNoWritePageListHead), + PtrToUL64(&MmAvailablePages), + PtrToUL64(&MmResidentAvailablePages), + PtrToUL64(&PoolTrackTable), + PtrToUL64(&NonPagedPoolDescriptor), + PtrToUL64(&MmHighestUserAddress), + PtrToUL64(&MmSystemRangeStart), + PtrToUL64(&MmUserProbeAddress), + PtrToUL64(KdPrintDefaultCircularBuffer), + PtrToUL64(KdPrintDefaultCircularBuffer + 1), + PtrToUL64(&KdPrintWritePointer), + PtrToUL64(&KdPrintRolloverCount), + PtrToUL64(&MmLoadedUserImageList), + PtrToUL64(&NtBuildLab), + PtrToUL64(0), + PtrToUL64(KiProcessorBlock), + PtrToUL64(&MmUnloadedDrivers), + PtrToUL64(&MmLastUnloadedDrivers), + PtrToUL64(&MmTriageActionTaken), + PtrToUL64(&MmSpecialPoolTag), + PtrToUL64(&KernelVerifier), + PtrToUL64(&MmVerifierData), + PtrToUL64(&MmAllocatedNonPagedPool), + PtrToUL64(&MmPeakCommitment), + PtrToUL64(&MmtotalCommitLimitMaximum), + PtrToUL64(&CmNtCSDVersion), + PtrToUL64(&MmPhysicalMemoryBlock), + PtrToUL64(&MmSessionBase), + PtrToUL64(&MmSessionSize), + PtrToUL64(0), + PtrToUL64(0), FIELD_OFFSET(KTHREAD, NextProcessor), FIELD_OFFSET(KTHREAD, Teb), FIELD_OFFSET(KTHREAD, KernelStack), @@ -630,9 +636,9 @@ KDDEBUGGER_DATA64 KdDebuggerDataBlock = FIELD_OFFSET(KPRCB, ProcessorState.ContextFrame), FIELD_OFFSET(KPRCB, Number), sizeof(ETHREAD), - {(ULONG_PTR)KdPrintDefaultCircularBuffer}, - {(ULONG_PTR)&KdPrintBufferSize}, - {(ULONG_PTR)&KeLoaderBlock}, + PtrToUL64(&KdPrintDefaultCircularBuffer), + PtrToUL64(&KdPrintBufferSize), + PtrToUL64(&KeLoaderBlock), sizeof(KPCR), KPCR_SELF_PCR_OFFSET, KPCR_CURRENT_PRCB_OFFSET, @@ -693,8 +699,8 @@ KDDEBUGGER_DATA64 KdDebuggerDataBlock = 0, 0, #endif - {(ULONG_PTR)&IopNumTriageDumpDataBlocks}, - {(ULONG_PTR)IopTriageDumpDataBlocks}, + PtrToUL64(&IopNumTriageDumpDataBlocks), + PtrToUL64(IopTriageDumpDataBlocks), #if (NTDDI_VERSION >= NTDDI_LONGHORN) #error KdDebuggerDataBlock requires other fields for this NT version! diff --git a/sdk/include/psdk/wdbgexts.h b/sdk/include/psdk/wdbgexts.h index 9664ec201be..d682814a7dc 100644 --- a/sdk/include/psdk/wdbgexts.h +++ b/sdk/include/psdk/wdbgexts.h @@ -174,110 +174,116 @@ typedef struct _DBGKD_DEBUG_DATA_HEADER64 ULONG Size; } DBGKD_DEBUG_DATA_HEADER64, *PDBGKD_DEBUG_DATA_HEADER64; -typedef union _GCC_ULONG64 +/* Self-documenting type: stores a pointer as a 64-bit quantity */ +#if defined(__GNUC__) && defined(_M_IX86) // See commit b9cd3f2d9 (r25845) +typedef union _ULPTR64 { - ULONG_PTR Pointer; - ULONG64 RealPointer; -} GCC_ULONG64, *PGCC_ULONG64; + ULONG_PTR ptr; + ULONG64 ptr64; +} ULPTR64; +#else +// #define ULPTR64 PVOID64 +#define ULPTR64 ULONG64 +#endif typedef struct _KDDEBUGGER_DATA64 { DBGKD_DEBUG_DATA_HEADER64 Header; ULONG64 KernBase; - GCC_ULONG64 BreakpointWithStatus; + ULPTR64 BreakpointWithStatus; ULONG64 SavedContext; USHORT ThCallbackStack; USHORT NextCallback; USHORT FramePointer; USHORT PaeEnabled:1; - GCC_ULONG64 KiCallUserMode; + ULPTR64 KiCallUserMode; ULONG64 KeUserCallbackDispatcher; - GCC_ULONG64 PsLoadedModuleList; - GCC_ULONG64 PsActiveProcessHead; - GCC_ULONG64 PspCidTable; - GCC_ULONG64 ExpSystemResourcesList; - GCC_ULONG64 ExpPagedPoolDescriptor; - GCC_ULONG64 ExpNumberOfPagedPools; - GCC_ULONG64 KeTimeIncrement; - GCC_ULONG64 KeBugCheckCallbackListHead; - GCC_ULONG64 KiBugcheckData; - GCC_ULONG64 IopErrorLogListHead; - GCC_ULONG64 ObpRootDirectoryObject; - GCC_ULONG64 ObpTypeObjectType; - GCC_ULONG64 MmSystemCacheStart; - GCC_ULONG64 MmSystemCacheEnd; - GCC_ULONG64 MmSystemCacheWs; - GCC_ULONG64 MmPfnDatabase; - GCC_ULONG64 MmSystemPtesStart; - GCC_ULONG64 MmSystemPtesEnd; - GCC_ULONG64 MmSubsectionBase; - GCC_ULONG64 MmNumberOfPagingFiles; - GCC_ULONG64 MmLowestPhysicalPage; - GCC_ULONG64 MmHighestPhysicalPage; - GCC_ULONG64 MmNumberOfPhysicalPages; - GCC_ULONG64 MmMaximumNonPagedPoolInBytes; - GCC_ULONG64 MmNonPagedSystemStart; - GCC_ULONG64 MmNonPagedPoolStart; - GCC_ULONG64 MmNonPagedPoolEnd; - GCC_ULONG64 MmPagedPoolStart; - GCC_ULONG64 MmPagedPoolEnd; - GCC_ULONG64 MmPagedPoolInformation; + ULPTR64 PsLoadedModuleList; + ULPTR64 PsActiveProcessHead; + ULPTR64 PspCidTable; + ULPTR64 ExpSystemResourcesList; + ULPTR64 ExpPagedPoolDescriptor; + ULPTR64 ExpNumberOfPagedPools; + ULPTR64 KeTimeIncrement; + ULPTR64 KeBugCheckCallbackListHead; + ULPTR64 KiBugcheckData; + ULPTR64 IopErrorLogListHead; + ULPTR64 ObpRootDirectoryObject; + ULPTR64 ObpTypeObjectType; + ULPTR64 MmSystemCacheStart; + ULPTR64 MmSystemCacheEnd; + ULPTR64 MmSystemCacheWs; + ULPTR64 MmPfnDatabase; + ULPTR64 MmSystemPtesStart; + ULPTR64 MmSystemPtesEnd; + ULPTR64 MmSubsectionBase; + ULPTR64 MmNumberOfPagingFiles; + ULPTR64 MmLowestPhysicalPage; + ULPTR64 MmHighestPhysicalPage; + ULPTR64 MmNumberOfPhysicalPages; + ULPTR64 MmMaximumNonPagedPoolInBytes; + ULPTR64 MmNonPagedSystemStart; + ULPTR64 MmNonPagedPoolStart; + ULPTR64 MmNonPagedPoolEnd; + ULPTR64 MmPagedPoolStart; + ULPTR64 MmPagedPoolEnd; + ULPTR64 MmPagedPoolInformation; ULONG64 MmPageSize; - GCC_ULONG64 MmSizeOfPagedPoolInBytes; - GCC_ULONG64 MmTotalCommitLimit; - GCC_ULONG64 MmTotalCommittedPages; - GCC_ULONG64 MmSharedCommit; - GCC_ULONG64 MmDriverCommit; - GCC_ULONG64 MmProcessCommit; - GCC_ULONG64 MmPagedPoolCommit; - GCC_ULONG64 MmExtendedCommit; - GCC_ULONG64 MmZeroedPageListHead; - GCC_ULONG64 MmFreePageListHead; - GCC_ULONG64 MmStandbyPageListHead; - GCC_ULONG64 MmModifiedPageListHead; - GCC_ULONG64 MmModifiedNoWritePageListHead; - GCC_ULONG64 MmAvailablePages; - GCC_ULONG64 MmResidentAvailablePages; - GCC_ULONG64 PoolTrackTable; - GCC_ULONG64 NonPagedPoolDescriptor; - GCC_ULONG64 MmHighestUserAddress; - GCC_ULONG64 MmSystemRangeStart; - GCC_ULONG64 MmUserProbeAddress; - GCC_ULONG64 KdPrintCircularBuffer; - GCC_ULONG64 KdPrintCircularBufferEnd; - GCC_ULONG64 KdPrintWritePointer; - GCC_ULONG64 KdPrintRolloverCount; - GCC_ULONG64 MmLoadedUserImageList; + ULPTR64 MmSizeOfPagedPoolInBytes; + ULPTR64 MmTotalCommitLimit; + ULPTR64 MmTotalCommittedPages; + ULPTR64 MmSharedCommit; + ULPTR64 MmDriverCommit; + ULPTR64 MmProcessCommit; + ULPTR64 MmPagedPoolCommit; + ULPTR64 MmExtendedCommit; + ULPTR64 MmZeroedPageListHead; + ULPTR64 MmFreePageListHead; + ULPTR64 MmStandbyPageListHead; + ULPTR64 MmModifiedPageListHead; + ULPTR64 MmModifiedNoWritePageListHead; + ULPTR64 MmAvailablePages; + ULPTR64 MmResidentAvailablePages; + ULPTR64 PoolTrackTable; + ULPTR64 NonPagedPoolDescriptor; + ULPTR64 MmHighestUserAddress; + ULPTR64 MmSystemRangeStart; + ULPTR64 MmUserProbeAddress; + ULPTR64 KdPrintCircularBuffer; + ULPTR64 KdPrintCircularBufferEnd; + ULPTR64 KdPrintWritePointer; + ULPTR64 KdPrintRolloverCount; + ULPTR64 MmLoadedUserImageList; #if (NTDDI_VERSION >= NTDDI_WINXP) - GCC_ULONG64 NtBuildLab; - GCC_ULONG64 KiNormalSystemCall; + ULPTR64 NtBuildLab; + ULPTR64 KiNormalSystemCall; #endif /* NOTE: Documented as "NT 5.0 hotfix (QFE) addition" */ #if (NTDDI_VERSION >= NTDDI_WIN2KSP4) - GCC_ULONG64 KiProcessorBlock; - GCC_ULONG64 MmUnloadedDrivers; - GCC_ULONG64 MmLastUnloadedDriver; - GCC_ULONG64 MmTriageActionTaken; - GCC_ULONG64 MmSpecialPoolTag; - GCC_ULONG64 KernelVerifier; - GCC_ULONG64 MmVerifierData; - GCC_ULONG64 MmAllocatedNonPagedPool; - GCC_ULONG64 MmPeakCommitment; - GCC_ULONG64 MmTotalCommitLimitMaximum; - GCC_ULONG64 CmNtCSDVersion; + ULPTR64 KiProcessorBlock; + ULPTR64 MmUnloadedDrivers; + ULPTR64 MmLastUnloadedDriver; + ULPTR64 MmTriageActionTaken; + ULPTR64 MmSpecialPoolTag; + ULPTR64 KernelVerifier; + ULPTR64 MmVerifierData; + ULPTR64 MmAllocatedNonPagedPool; + ULPTR64 MmPeakCommitment; + ULPTR64 MmTotalCommitLimitMaximum; + ULPTR64 CmNtCSDVersion; #endif #if (NTDDI_VERSION >= NTDDI_WINXP) - GCC_ULONG64 MmPhysicalMemoryBlock; - GCC_ULONG64 MmSessionBase; - GCC_ULONG64 MmSessionSize; - GCC_ULONG64 MmSystemParentTablePage; + ULPTR64 MmPhysicalMemoryBlock; + ULPTR64 MmSessionBase; + ULPTR64 MmSessionSize; + ULPTR64 MmSystemParentTablePage; #endif #if (NTDDI_VERSION >= NTDDI_WS03) - GCC_ULONG64 MmVirtualTranslationBase; + ULPTR64 MmVirtualTranslationBase; USHORT OffsetKThreadNextProcessor; USHORT OffsetKThreadTeb; USHORT OffsetKThreadKernelStack; @@ -299,9 +305,9 @@ typedef struct _KDDEBUGGER_DATA64 USHORT OffsetPrcbProcStateContext; USHORT OffsetPrcbNumber; USHORT SizeEThread; - GCC_ULONG64 KdPrintCircularBufferPtr; - GCC_ULONG64 KdPrintBufferSize; - GCC_ULONG64 KeLoaderBlock; + ULPTR64 KdPrintCircularBufferPtr; + ULPTR64 KdPrintBufferSize; + ULPTR64 KeLoaderBlock; USHORT SizePcr; USHORT OffsetPcrSelfPcr; USHORT OffsetPcrCurrentPrcb; @@ -322,18 +328,18 @@ typedef struct _KDDEBUGGER_DATA64 USHORT GdtTss; USHORT Gdt64R3CmCode; USHORT Gdt64R3CmTeb; - GCC_ULONG64 IopNumTriageDumpDataBlocks; - GCC_ULONG64 IopTriageDumpDataBlocks; + ULPTR64 IopNumTriageDumpDataBlocks; + ULPTR64 IopTriageDumpDataBlocks; #endif #if (NTDDI_VERSION >= NTDDI_LONGHORN) - GCC_ULONG64 VfCrashDataBlock; - GCC_ULONG64 MmBadPagesDetected; - GCC_ULONG64 MmZeroedPageSingleBitErrorsDetected; + ULPTR64 VfCrashDataBlock; + ULPTR64 MmBadPagesDetected; + ULPTR64 MmZeroedPageSingleBitErrorsDetected; #endif #if (NTDDI_VERSION >= NTDDI_WIN7) - GCC_ULONG64 EtwpDebuggerData; + ULPTR64 EtwpDebuggerData; USHORT OffsetPrcbContext; #endif @@ -358,11 +364,11 @@ typedef struct _KDDEBUGGER_DATA64 #if (NTDDI_VERSION >= NTDDI_WIN10_RS1) USHORT Padding; - GCC_ULONG64 PteBase; + ULPTR64 PteBase; #endif #if (NTDDI_VERSION >= NTDDI_WIN10_RS5) - GCC_ULONG64 RetpolineStubFunctionTable; + ULPTR64 RetpolineStubFunctionTable; ULONG RetpolineStubFunctionTableSize; ULONG RetpolineStubOffset; ULONG RetpolineStubSize;