Author: ion Date: Mon Feb 19 21:52:23 2007 New Revision: 25845
URL: http://svn.reactos.org/svn/reactos?rev=25845&view=rev Log: - Create GCC_ULONG64 type to hack around a bug in GCC which is incapable of creating entries for externals at compile-time for 64-bit pointers. - Rename NameSpaceRoot to ObpRootDirectoryObject, IopLogListHead to IopErrorLogListHead, BugcheckCallbackListHead to KeBugcheckCallbackListHead, BugcheckReasonCallbackListHead to KeBugcheckReasonCallbackListHead, ObTypeObjectType to ObpTypeObjectType. - Fill out KdDebuggerDataBlock with the variables that ROS currently supports. Most Mm variables we don't have yet -- it's unknown how much this will hurt WinDBG compatibility/functionality. - Add KdPrint circular buffer and buffer location/data variables.
Modified: branches/alex-kd-branch/reactos/include/ndk/asm.h branches/alex-kd-branch/reactos/include/psdk/wdbgexts.h branches/alex-kd-branch/reactos/lib/rtl/i386/debug_asm.S branches/alex-kd-branch/reactos/ntoskrnl/cm/regobj.c branches/alex-kd-branch/reactos/ntoskrnl/ex/init.c branches/alex-kd-branch/reactos/ntoskrnl/include/internal/ex.h branches/alex-kd-branch/reactos/ntoskrnl/include/internal/io.h branches/alex-kd-branch/reactos/ntoskrnl/include/internal/ke.h branches/alex-kd-branch/reactos/ntoskrnl/include/internal/ob.h branches/alex-kd-branch/reactos/ntoskrnl/io/iomgr/error.c branches/alex-kd-branch/reactos/ntoskrnl/io/iomgr/iomgr.c branches/alex-kd-branch/reactos/ntoskrnl/kd64/kddata.c branches/alex-kd-branch/reactos/ntoskrnl/ke/bug.c branches/alex-kd-branch/reactos/ntoskrnl/ke/krnlinit.c branches/alex-kd-branch/reactos/ntoskrnl/ob/obinit.c branches/alex-kd-branch/reactos/ntoskrnl/ob/oblife.c branches/alex-kd-branch/reactos/ntoskrnl/ob/obname.c
Modified: branches/alex-kd-branch/reactos/include/ndk/asm.h URL: http://svn.reactos.org/svn/reactos/branches/alex-kd-branch/reactos/include/n... ============================================================================== --- branches/alex-kd-branch/reactos/include/ndk/asm.h (original) +++ branches/alex-kd-branch/reactos/include/ndk/asm.h Mon Feb 19 21:52:23 2007 @@ -503,6 +503,7 @@ #define CBSTACK_STACK 0x0 #define CBSTACK_TRAP_FRAME 0x4 #define CBSTACK_CALLBACK_STACK 0x8 +#define CBSTACK_EBP 0x18 #define CBSTACK_RESULT 0x20 #define CBSTACK_RESULT_LENGTH 0x24
Modified: branches/alex-kd-branch/reactos/include/psdk/wdbgexts.h URL: http://svn.reactos.org/svn/reactos/branches/alex-kd-branch/reactos/include/p... ============================================================================== --- branches/alex-kd-branch/reactos/include/psdk/wdbgexts.h (original) +++ branches/alex-kd-branch/reactos/include/psdk/wdbgexts.h Mon Feb 19 21:52:23 2007 @@ -47,92 +47,98 @@ ULONG Size; } DBGKD_DEBUG_DATA_HEADER64, *PDBGKD_DEBUG_DATA_HEADER64;
+typedef union _GCC_ULONG64 +{ + ULONG_PTR Pointer; + ULONG64 RealPointer; +} GCC_ULONG64, *PGCC_ULONG64; + typedef struct _KDDEBUGGER_DATA64 { DBGKD_DEBUG_DATA_HEADER64 Header; ULONG64 KernBase; - ULONG64 BreakpointWithStatus; + GCC_ULONG64 BreakpointWithStatus; ULONG64 SavedContext; USHORT ThCallbackStack; USHORT NextCallback; USHORT FramePointer; USHORT PaeEnabled:1; - ULONG64 KiCallUserMode; - ULONG64 KeUserCallbackDispatcher; - ULONG64 PsLoadedModuleList; - ULONG64 PsActiveProcessHead; - ULONG64 PspCidTable; - ULONG64 ExpSystemResourcesList; - ULONG64 ExpPagedPoolDescriptor; - ULONG64 ExpNumberOfPagedPools; - ULONG64 KeTimeIncrement; - ULONG64 KeBugCheckCallbackListHead; - ULONG64 KiBugcheckData; - ULONG64 IopErrorLogListHead; - ULONG64 ObpRootDirectoryObject; - ULONG64 ObpTypeObjectType; - ULONG64 MmSystemCacheStart; - ULONG64 MmSystemCacheEnd; - ULONG64 MmSystemCacheWs; - ULONG64 MmPfnDatabase; - ULONG64 MmSystemPtesStart; - ULONG64 MmSystemPtesEnd; - ULONG64 MmSubsectionBase; - ULONG64 MmNumberOfPagingFiles; - ULONG64 MmLowestPhysicalPage; - ULONG64 MmHighestPhysicalPage; - ULONG64 MmNumberOfPhysicalPages; - ULONG64 MmMaximumNonPagedPoolInBytes; - ULONG64 MmNonPagedSystemStart; - ULONG64 MmNonPagedPoolStart; - ULONG64 MmNonPagedPoolEnd; - ULONG64 MmPagedPoolStart; - ULONG64 MmPagedPoolEnd; - ULONG64 MmPagedPoolInformation; + GCC_ULONG64 KiCallUserMode; + GCC_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; ULONG64 MmPageSize; - ULONG64 MmSizeOfPagedPoolInBytes; - ULONG64 MmTotalCommitLimit; - ULONG64 MmTotalCommittedPages; - ULONG64 MmSharedCommit; - ULONG64 MmDriverCommit; - ULONG64 MmProcessCommit; - ULONG64 MmPagedPoolCommit; - ULONG64 MmExtendedCommit; - ULONG64 MmZeroedPageListHead; - ULONG64 MmFreePageListHead; - ULONG64 MmStandbyPageListHead; - ULONG64 MmModifiedPageListHead; - ULONG64 MmModifiedNoWritePageListHead; - ULONG64 MmAvailablePages; - ULONG64 MmResidentAvailablePages; - ULONG64 PoolTrackTable; - ULONG64 NonPagedPoolDescriptor; - ULONG64 MmHighestUserAddress; - ULONG64 MmSystemRangeStart; - ULONG64 MmUserProbeAddress; - ULONG64 KdPrintCircularBuffer; - ULONG64 KdPrintCircularBufferEnd; - ULONG64 KdPrintWritePointer; - ULONG64 KdPrintRolloverCount; - ULONG64 MmLoadedUserImageList; - ULONG64 NtBuildLab; - ULONG64 KiNormalSystemCall; - ULONG64 KiProcessorBlock; - ULONG64 MmUnloadedDrivers; - ULONG64 MmLastUnloadedDriver; - ULONG64 MmTriageActionTaken; - ULONG64 MmSpecialPoolTag; - ULONG64 KernelVerifier; - ULONG64 MmVerifierData; - ULONG64 MmAllocatedNonPagedPool; - ULONG64 MmPeakCommitment; - ULONG64 MmTotalCommitLimitMaximum; - ULONG64 CmNtCSDVersion; - ULONG64 MmPhysicalMemoryBlock; - ULONG64 MmSessionBase; - ULONG64 MmSessionSize; - ULONG64 MmSystemParentTablePage; - ULONG64 MmVirtualTranslationBase; + 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; + GCC_ULONG64 NtBuildLab; + GCC_ULONG64 KiNormalSystemCall; + 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; + GCC_ULONG64 MmPhysicalMemoryBlock; + GCC_ULONG64 MmSessionBase; + GCC_ULONG64 MmSessionSize; + GCC_ULONG64 MmSystemParentTablePage; + GCC_ULONG64 MmVirtualTranslationBase; USHORT OffsetKThreadNextProcessor; USHORT OffsetKThreadTeb; USHORT OffsetKThreadKernelStack; @@ -154,9 +160,9 @@ USHORT OffsetPrcbProcStateContext; USHORT OffsetPrcbNumber; USHORT SizeEThread; - ULONG64 KdPrintCircularBufferPtr; - ULONG64 KdPrintBufferSize; - ULONG64 KeLoaderBlock; + GCC_ULONG64 KdPrintCircularBufferPtr; + GCC_ULONG64 KdPrintBufferSize; + GCC_ULONG64 KeLoaderBlock; USHORT SizePcr; USHORT OffsetPcrSelfPcr; USHORT OffsetPcrCurrentPrcb; @@ -177,9 +183,9 @@ USHORT GdtTss; USHORT Gdt64R3CmCode; USHORT Gdt64R3CmTeb; - ULONG64 IopNumTriageDumpDataBlocks; - ULONG64 IopTriageDumpDataBlocks; - ULONG64 VfCrashDataBlock; + GCC_ULONG64 IopNumTriageDumpDataBlocks; + GCC_ULONG64 IopTriageDumpDataBlocks; + GCC_ULONG64 VfCrashDataBlock; } KDDEBUGGER_DATA64, *PKDDEBUGGER_DATA64;
#endif
Modified: branches/alex-kd-branch/reactos/lib/rtl/i386/debug_asm.S URL: http://svn.reactos.org/svn/reactos/branches/alex-kd-branch/reactos/lib/rtl/i... ============================================================================== --- branches/alex-kd-branch/reactos/lib/rtl/i386/debug_asm.S (original) +++ branches/alex-kd-branch/reactos/lib/rtl/i386/debug_asm.S Mon Feb 19 21:52:23 2007 @@ -16,6 +16,7 @@ .globl _DebugService@20 .globl _DebugService2@12 .globl _DbgBreakPointNoBugCheck@0 +.globl _RtlpBreakWithStatusInstruction@0
/* FUNCTIONS ***************************************************************/
@@ -35,6 +36,8 @@ .func DbgBreakPointWithStatus@4 _DbgBreakPointWithStatus@4: mov eax, [esp+4] + +_RtlpBreakWithStatusInstruction@0: int 3 ret 4 .endfunc
Modified: branches/alex-kd-branch/reactos/ntoskrnl/cm/regobj.c URL: http://svn.reactos.org/svn/reactos/branches/alex-kd-branch/reactos/ntoskrnl/... ============================================================================== --- branches/alex-kd-branch/reactos/ntoskrnl/cm/regobj.c (original) +++ branches/alex-kd-branch/reactos/ntoskrnl/cm/regobj.c Mon Feb 19 21:52:23 2007 @@ -172,11 +172,11 @@
if (ObjectCreateInfo->RootDirectory == NULL) { - ObReferenceObjectByPointer(NameSpaceRoot, + ObReferenceObjectByPointer(ObpRootDirectoryObject, DIRECTORY_TRAVERSE, CmiKeyType, ObjectCreateInfo->ProbeMode); - CurrentObject = NameSpaceRoot; + CurrentObject = ObpRootDirectoryObject; } else { @@ -312,7 +312,7 @@ if (Status == STATUS_REPARSE) { /* reparse the object path */ - NextObject = NameSpaceRoot; + NextObject = ObpRootDirectoryObject; current = PathString.Buffer;
ObReferenceObjectByPointer(NextObject,
Modified: branches/alex-kd-branch/reactos/ntoskrnl/ex/init.c URL: http://svn.reactos.org/svn/reactos/branches/alex-kd-branch/reactos/ntoskrnl/... ============================================================================== --- branches/alex-kd-branch/reactos/ntoskrnl/ex/init.c (original) +++ branches/alex-kd-branch/reactos/ntoskrnl/ex/init.c Mon Feb 19 21:52:23 2007 @@ -24,8 +24,18 @@ ULONG NtMinorVersion = 0; ULONG NtOSCSDVersion = BUILD_OSCSDVERSION(4, 0); ULONG NtBuildNumber = KERNEL_VERSION_BUILD; + +/* NT System Info */ ULONG NtGlobalFlag; ULONG ExSuiteMask; + +/* Cm Version Info */ +ULONG CmNtSpBuildNumber; +ULONG CmNtCSDVersion; +ULONG CmNtCSDReleaseType; +UNICODE_STRING CmVersionString; +UNICODE_STRING CmCSDVersionString; +CHAR NtBuildLab[] = KERNEL_VERSION_BUILD_STR;
/* Init flags and settings */ ULONG ExpInitializationPhase;
Modified: branches/alex-kd-branch/reactos/ntoskrnl/include/internal/ex.h URL: http://svn.reactos.org/svn/reactos/branches/alex-kd-branch/reactos/ntoskrnl/... ============================================================================== --- branches/alex-kd-branch/reactos/ntoskrnl/include/internal/ex.h (original) +++ branches/alex-kd-branch/reactos/ntoskrnl/include/internal/ex.h Mon Feb 19 21:52:23 2007 @@ -18,9 +18,12 @@ extern LIST_ENTRY ExpFirmwareTableProviderListHead; extern BOOLEAN ExpIsWinPEMode; extern ULONG NtGlobalFlag; +extern LIST_ENTRY ExpSystemResourcesList; ULONG ExpAnsiCodePageDataOffset, ExpOemCodePageDataOffset; ULONG ExpUnicodeCaseTableDataOffset; PVOID ExpNlsSectionPointer; +extern CHAR NtBuildLab[]; +extern ULONG CmNtCSDVersion;
typedef struct _EXHANDLE {
Modified: branches/alex-kd-branch/reactos/ntoskrnl/include/internal/io.h URL: http://svn.reactos.org/svn/reactos/branches/alex-kd-branch/reactos/ntoskrnl/... ============================================================================== --- branches/alex-kd-branch/reactos/ntoskrnl/include/internal/io.h (original) +++ branches/alex-kd-branch/reactos/ntoskrnl/include/internal/io.h Mon Feb 19 21:52:23 2007 @@ -968,6 +968,7 @@ extern GENERIC_MAPPING IopFileMapping; extern POBJECT_TYPE _IoFileObjectType; extern HAL_DISPATCH _HalDispatchTable; +extern LIST_ENTRY IopErrorLogListHead;
// // Inlined Functions
Modified: branches/alex-kd-branch/reactos/ntoskrnl/include/internal/ke.h URL: http://svn.reactos.org/svn/reactos/branches/alex-kd-branch/reactos/ntoskrnl/... ============================================================================== --- branches/alex-kd-branch/reactos/ntoskrnl/include/internal/ke.h (original) +++ branches/alex-kd-branch/reactos/ntoskrnl/include/internal/ke.h Mon Feb 19 21:52:23 2007 @@ -126,7 +126,7 @@ extern UCHAR KiTimeIncrementShiftCount; extern ULONG KiTimeLimitIsrMicroseconds; extern ULONG KiServiceLimit; -extern LIST_ENTRY BugcheckCallbackListHead, BugcheckReasonCallbackListHead; +extern LIST_ENTRY KeBugcheckCallbackListHead, KeBugcheckReasonCallbackListHead; extern KSPIN_LOCK BugCheckCallbackLock; extern KDPC KiTimerExpireDpc; extern KTIMER_TABLE_ENTRY KiTimerTableListHead[TIMER_TABLE_SIZE]; @@ -150,6 +150,8 @@ extern UCHAR KiDebugRegisterTrapOffsets[9]; extern UCHAR KiDebugRegisterContextOffsets[9]; extern ULONG KiFreezeFlag; +extern ULONG KeTimeIncrement; +extern PVOID KiBugCheckData;
/* MACROS *************************************************************************/
Modified: branches/alex-kd-branch/reactos/ntoskrnl/include/internal/ob.h URL: http://svn.reactos.org/svn/reactos/branches/alex-kd-branch/reactos/ntoskrnl/... ============================================================================== --- branches/alex-kd-branch/reactos/ntoskrnl/include/internal/ob.h (original) +++ branches/alex-kd-branch/reactos/ntoskrnl/include/internal/ob.h Mon Feb 19 21:52:23 2007 @@ -503,8 +503,8 @@ extern KEVENT ObpDefaultObject; extern POBJECT_TYPE ObpTypeObjectType; extern POBJECT_TYPE ObSymbolicLinkType; -extern POBJECT_TYPE ObTypeObjectType; -extern POBJECT_DIRECTORY NameSpaceRoot; +extern POBJECT_TYPE ObpTypeObjectType; +extern POBJECT_DIRECTORY ObpRootDirectoryObject; extern POBJECT_DIRECTORY ObpTypeDirectoryObject; extern PHANDLE_TABLE ObpKernelHandleTable; extern WORK_QUEUE_ITEM ObpReaperWorkItem;
Modified: branches/alex-kd-branch/reactos/ntoskrnl/io/iomgr/error.c URL: http://svn.reactos.org/svn/reactos/branches/alex-kd-branch/reactos/ntoskrnl/... ============================================================================== --- branches/alex-kd-branch/reactos/ntoskrnl/io/iomgr/error.c (original) +++ branches/alex-kd-branch/reactos/ntoskrnl/io/iomgr/error.c Mon Feb 19 21:52:23 2007 @@ -23,7 +23,7 @@ /* GLOBALS *******************************************************************/
LONG IopTotalLogSize; -LIST_ENTRY IopLogListHead; +LIST_ENTRY IopErrorLogListHead; KSPIN_LOCK IopLogListLock;
BOOLEAN IopLogWorkerRunning; @@ -59,7 +59,7 @@
/* Acquire the lock and check if the list is empty */ KeAcquireSpinLock(&IopLogListLock, &OldIrql); - if (IsListEmpty(&IopLogListHead)) + if (IsListEmpty(&IopErrorLogListHead)) { /* List is empty, disable the worker and return NULL */ IopLogWorkerRunning = FALSE; @@ -68,7 +68,7 @@ else { /* Otherwise, remove an entry */ - ListEntry = RemoveHeadList(&IopLogListHead); + ListEntry = RemoveHeadList(&IopErrorLogListHead); }
/* Release the lock and return the entry */ @@ -420,7 +420,7 @@ if (!NT_SUCCESS(Status)) { /* Requeue log message and restart the worker */ - ExInterlockedInsertTailList(&IopLogListHead, + ExInterlockedInsertTailList(&IopErrorLogListHead, &LogEntry->ListEntry, &IopLogListLock); IopLogWorkerRunning = FALSE; @@ -581,7 +581,7 @@
/* Acquire the lock and insert this write in the list */ KeAcquireSpinLock(&IopLogListLock, &Irql); - InsertHeadList(&IopLogListHead, &LogEntry->ListEntry); + InsertHeadList(&IopErrorLogListHead, &LogEntry->ListEntry);
/* Check if the worker is runnign */ if (!IopLogWorkerRunning)
Modified: branches/alex-kd-branch/reactos/ntoskrnl/io/iomgr/iomgr.c URL: http://svn.reactos.org/svn/reactos/branches/alex-kd-branch/reactos/ntoskrnl/... ============================================================================== --- branches/alex-kd-branch/reactos/ntoskrnl/io/iomgr/iomgr.c (original) +++ branches/alex-kd-branch/reactos/ntoskrnl/io/iomgr/iomgr.c Mon Feb 19 21:52:23 2007 @@ -70,7 +70,7 @@ extern LIST_ENTRY DriverReinitListHead; extern LIST_ENTRY PnpNotifyListHead; extern LIST_ENTRY FsChangeNotifyListHead; -extern LIST_ENTRY IopLogListHead; +extern LIST_ENTRY IopErrorLogListHead; extern LIST_ENTRY IopTimerQueueHead; extern KDPC IopTimerDpc; extern KTIMER IopTimer; @@ -467,7 +467,7 @@ InitializeListHead(&PnpNotifyListHead); InitializeListHead(&ShutdownListHead); InitializeListHead(&FsChangeNotifyListHead); - InitializeListHead(&IopLogListHead); + InitializeListHead(&IopErrorLogListHead); KeInitializeSpinLock(&CancelSpinLock); KeInitializeSpinLock(&IoVpbLock); KeInitializeSpinLock(&IoStatisticsLock);
Modified: branches/alex-kd-branch/reactos/ntoskrnl/kd64/kddata.c URL: http://svn.reactos.org/svn/reactos/branches/alex-kd-branch/reactos/ntoskrnl/... ============================================================================== --- branches/alex-kd-branch/reactos/ntoskrnl/kd64/kddata.c (original) +++ branches/alex-kd-branch/reactos/ntoskrnl/kd64/kddata.c Mon Feb 19 21:52:23 2007 @@ -12,6 +12,8 @@ #define NDEBUG #include <debug.h>
+VOID NTAPI RtlpBreakWithStatusInstruction(VOID); + /* GLOBALS *******************************************************************/
// @@ -34,13 +36,6 @@ 0, 0 }; - -// -// Debugger Data -// -KDDEBUGGER_DATA64 KdDebuggerDataBlock; -LIST_ENTRY KdpDebuggerDataListHead; -KSPIN_LOCK KdpDataSpinLock;
// // Debugger State @@ -87,6 +82,16 @@ // CHAR KdpMessageBuffer[4096]; CHAR KdpPathBuffer[4096]; + +// +// KdPrint Buffers +// +CHAR KdPrintDefaultCircularBuffer[0x8000]; +PCHAR KdPrintWritePointer = KdPrintDefaultCircularBuffer; +ULONG KdPrintRolloverCount; +PCHAR KdPrintCircularBuffer = KdPrintDefaultCircularBuffer; +ULONG KdPrintBufferSize = sizeof(KdPrintDefaultCircularBuffer); +ULONG KdPrintBufferChanges = 0;
// // Debug Filter Masks @@ -309,3 +314,143 @@ };
ULONG KdComponentTableSize = sizeof(KdComponentTable); + +// +// Debugger Data +// +LIST_ENTRY KdpDebuggerDataListHead; +KSPIN_LOCK KdpDataSpinLock; +KDDEBUGGER_DATA64 KdDebuggerDataBlock = +{ + {{0}}, + 0, + {PtrToUlong(RtlpBreakWithStatusInstruction)}, + 0, + FIELD_OFFSET(KTHREAD, CallbackStack), + CBSTACK_CALLBACK_STACK, + CBSTACK_EBP, + 0, + {PtrToUlong(KiCallUserMode)}, + {0}, + {PtrToUlong(&PsLoadedModuleList)}, + {PtrToUlong(&PsActiveProcessHead)}, + {PtrToUlong(&PspCidTable)}, + {PtrToUlong(&ExpSystemResourcesList)}, + {0}, // ExpPagedPoolDescriptor + {0}, // ExpNumberOfPagedPools + {PtrToUlong(&KeTimeIncrement)}, + {PtrToUlong(&KeBugcheckCallbackListHead)}, + {PtrToUlong(&KiBugCheckData)}, + {PtrToUlong(&IopErrorLogListHead)}, + {PtrToUlong(&ObpRootDirectoryObject)}, + {PtrToUlong(&ObpTypeObjectType)}, + {0}, // MmSystemCacheStart + {0}, // MmSystemCacheEnd + {0}, // MmSystemCacheWs + {0}, // MmPfnDatabase + {0}, // MmSystemPtesStart + {0}, // MmSystemPtesEnd + {0}, // MmSubsectionBase + {0}, // MmNumberOfPagingFiles + {0}, // MmLowestPhysicalPage + {0}, // MmHighestPhysicalPage + {0}, // MmNumberOfPhysicalPages + {0}, // MmMaximumNonPagedPoolInBytes + {0}, // MmNonPagedSystemStart + {0}, // MmNonPagedPoolStart + {0}, // MmNonPagedPoolEnd + {0}, // MmPagedPoolStart + {0}, // MmPagedPoolEnd + {0}, // MmPagedPoolInfo + PAGE_SIZE, + {0}, // MmSizeOfPagedPoolInBytes + {0}, // MmTotalCommitLimit + {0}, // MmTotalCommittedPages + {0}, // MmSharedCommit + {0}, // MmDriverCommit + {0}, // MmProcessCommit + {0}, // MmPagedPoolCommit + {0}, + {0}, // MmZeroedPageListHead + {0}, // MmFreePageListHead + {0}, // MmStandbyPageListHead + {0}, // MmModifiedPageListHead + {0}, // MmModifiedNoWritePageListHead + {0}, // MmAvailablePages + {0}, // MmResidentAvailablePages + {0}, // PoolTrackTable + {0}, // NonPagedPoolDescriptor + {PtrToUlong(&MmHighestUserAddress)}, + {PtrToUlong(&MmSystemRangeStart)}, + {PtrToUlong(&MmUserProbeAddress)}, + {PtrToUlong(KdPrintDefaultCircularBuffer)}, + {PtrToUlong(KdPrintDefaultCircularBuffer + 1)}, + {PtrToUlong(&KdPrintWritePointer)}, + {PtrToUlong(&KdPrintRolloverCount)}, + {0}, // MmLoadedUserImageList + {PtrToUlong(&NtBuildLab)}, + {0}, + {PtrToUlong(KiProcessorBlock)}, + {0}, // MmUnloadedDrivers + {0}, // MmLastUnloadedDrivers + {0}, // MmTriageActionTaken + {0}, // MmSpecialPoolTag + {0}, // KernelVerifier + {0}, // MmVerifierData + {0}, // MmAllocatedNonPagedPool + {0}, // MmPeakCommitment + {0}, // MmtotalCommitLimitMaximum + {PtrToUlong(&CmNtCSDVersion)}, + {0}, // MmPhysicalMemoryBlock + {0}, // MmSessionBase + {0}, // MmSessionSize + {0}, + {0}, + FIELD_OFFSET(KTHREAD, NextProcessor), + FIELD_OFFSET(KTHREAD, Teb), + FIELD_OFFSET(KTHREAD, KernelStack), + FIELD_OFFSET(KTHREAD, InitialStack), + FIELD_OFFSET(KTHREAD, ApcState.Process), + FIELD_OFFSET(KTHREAD, State), + 0, + 0, + sizeof(EPROCESS), + FIELD_OFFSET(EPROCESS, Peb), + FIELD_OFFSET(EPROCESS, InheritedFromUniqueProcessId), + FIELD_OFFSET(EPROCESS, Pcb.DirectoryTableBase), + sizeof(KPRCB), + FIELD_OFFSET(KPRCB, DpcRoutineActive), + FIELD_OFFSET(KPRCB, CurrentThread), + FIELD_OFFSET(KPRCB, MHz), + FIELD_OFFSET(KPRCB, CpuType), + FIELD_OFFSET(KPRCB, VendorString), + FIELD_OFFSET(KPRCB, ProcessorState.ContextFrame), + FIELD_OFFSET(KPRCB, Number), + sizeof(ETHREAD), + {PtrToUlong(KdPrintDefaultCircularBuffer)}, + {PtrToUlong(&KdPrintBufferSize)}, + {PtrToUlong(&KeLoaderBlock)}, + sizeof(KIPCR) + sizeof(KPRCB), + FIELD_OFFSET(KIPCR, Self), + FIELD_OFFSET(KPCR, Prcb), + FIELD_OFFSET(KIPCR, PrcbData), + 0, + 0, + 0, + 0, + 0, + FIELD_OFFSET(KIPCR, PrcbData) + + FIELD_OFFSET(KPRCB, ProcessorState.SpecialRegisters), + KGDT_R0_CODE, + KGDT_R0_DATA, + KGDT_R0_PCR, + KGDT_R3_CODE, + KGDT_R3_DATA, + KGDT_R3_TEB, + KGDT_LDT, + KGDT_TSS, + 0, + 0, + {0}, // IopNumTriagDumpDataBlocks + {0}, // IopTriageDumpDataBlocks +};
Modified: branches/alex-kd-branch/reactos/ntoskrnl/ke/bug.c URL: http://svn.reactos.org/svn/reactos/branches/alex-kd-branch/reactos/ntoskrnl/... ============================================================================== --- branches/alex-kd-branch/reactos/ntoskrnl/ke/bug.c (original) +++ branches/alex-kd-branch/reactos/ntoskrnl/ke/bug.c Mon Feb 19 21:52:23 2007 @@ -18,8 +18,8 @@
/* GLOBALS *******************************************************************/
-LIST_ENTRY BugcheckCallbackListHead; -LIST_ENTRY BugcheckReasonCallbackListHead; +LIST_ENTRY KeBugcheckCallbackListHead; +LIST_ENTRY KeBugcheckReasonCallbackListHead; KSPIN_LOCK BugCheckCallbackLock; ULONG KeBugCheckActive, KeBugCheckOwner; LONG KeBugCheckOwnerRecursionCount; @@ -209,7 +209,7 @@ ULONG_PTR Checksum;
/* First make sure that the list is Initialized... it might not be */ - ListHead = &BugcheckCallbackListHead; + ListHead = &KeBugcheckCallbackListHead; if ((ListHead->Flink) && (ListHead->Blink)) { /* Loop the list */ @@ -1033,7 +1033,7 @@ CallbackRecord->Component = Component; CallbackRecord->CallbackRoutine = CallbackRoutine; CallbackRecord->State = BufferInserted; - InsertTailList(&BugcheckCallbackListHead, &CallbackRecord->Entry); + InsertTailList(&KeBugcheckCallbackListHead, &CallbackRecord->Entry); Status = TRUE; }
@@ -1067,7 +1067,7 @@ CallbackRecord->CallbackRoutine = CallbackRoutine; CallbackRecord->State = BufferInserted; CallbackRecord->Reason = Reason; - InsertTailList(&BugcheckReasonCallbackListHead, + InsertTailList(&KeBugcheckReasonCallbackListHead, &CallbackRecord->Entry); Status = TRUE; }
Modified: branches/alex-kd-branch/reactos/ntoskrnl/ke/krnlinit.c URL: http://svn.reactos.org/svn/reactos/branches/alex-kd-branch/reactos/ntoskrnl/... ============================================================================== --- branches/alex-kd-branch/reactos/ntoskrnl/ke/krnlinit.c (original) +++ branches/alex-kd-branch/reactos/ntoskrnl/ke/krnlinit.c Mon Feb 19 21:52:23 2007 @@ -62,8 +62,8 @@ ULONG i;
/* Initialize Bugcheck Callback data */ - InitializeListHead(&BugcheckCallbackListHead); - InitializeListHead(&BugcheckReasonCallbackListHead); + InitializeListHead(&KeBugcheckCallbackListHead); + InitializeListHead(&KeBugcheckReasonCallbackListHead); KeInitializeSpinLock(&BugCheckCallbackLock);
/* Initialize the Timer Expiration DPC */
Modified: branches/alex-kd-branch/reactos/ntoskrnl/ob/obinit.c URL: http://svn.reactos.org/svn/reactos/branches/alex-kd-branch/reactos/ntoskrnl/... ============================================================================== --- branches/alex-kd-branch/reactos/ntoskrnl/ob/obinit.c (original) +++ branches/alex-kd-branch/reactos/ntoskrnl/ob/obinit.c Mon Feb 19 21:52:23 2007 @@ -198,7 +198,7 @@ ObjectTypeInitializer.GenericMapping = ObpTypeMapping; ObjectTypeInitializer.DefaultNonPagedPoolCharge = sizeof(OBJECT_TYPE); ObjectTypeInitializer.InvalidAttributes = OBJ_OPENLINK; - ObCreateObjectType(&Name, &ObjectTypeInitializer, NULL, &ObTypeObjectType); + ObCreateObjectType(&Name, &ObjectTypeInitializer, NULL, &ObpTypeObjectType);
/* Create the Directory Type */ RtlInitUnicodeString(&Name, L"Directory"); @@ -247,7 +247,7 @@ 0, ObDirectoryType, KernelMode, - (PVOID*)&NameSpaceRoot, + (PVOID*)&ObpRootDirectoryObject, NULL); if (!NT_SUCCESS(Status)) return FALSE;
@@ -289,7 +289,7 @@ ObpAcquireDirectoryLockExclusive(ObpTypeDirectoryObject, &Context);
/* Loop the object types */ - ListHead = &ObTypeObjectType->TypeList; + ListHead = &ObpTypeObjectType->TypeList; NextEntry = ListHead->Flink; while (ListHead != NextEntry) {
Modified: branches/alex-kd-branch/reactos/ntoskrnl/ob/oblife.c URL: http://svn.reactos.org/svn/reactos/branches/alex-kd-branch/reactos/ntoskrnl/... ============================================================================== --- branches/alex-kd-branch/reactos/ntoskrnl/ob/oblife.c (original) +++ branches/alex-kd-branch/reactos/ntoskrnl/ob/oblife.c Mon Feb 19 21:52:23 2007 @@ -19,7 +19,7 @@
extern ULONG NtGlobalFlag;
-POBJECT_TYPE ObTypeObjectType = NULL; +POBJECT_TYPE ObpTypeObjectType = NULL; KEVENT ObpDefaultObject;
NPAGED_LOOKASIDE_LIST ObpNmLookasideList, ObpCiLookasideList; @@ -1074,7 +1074,7 @@ /* Allocate the Object */ Status = ObpAllocateObject(NULL, &ObjectName, - ObTypeObjectType, + ObpTypeObjectType, sizeof(OBJECT_TYPE), KernelMode, (POBJECT_HEADER*)&Header); @@ -1098,11 +1098,11 @@ LocalObjectType->HighWaterNumberOfHandles = 0;
/* Check if this is the first Object Type */ - if (!ObTypeObjectType) + if (!ObpTypeObjectType) { /* It is, so set this as the type object */ - ObTypeObjectType = LocalObjectType; - Header->Type = ObTypeObjectType; + ObpTypeObjectType = LocalObjectType; + Header->Type = ObpTypeObjectType;
/* Set the hard-coded key and object count */ LocalObjectType->TotalNumberOfObjects = 1; @@ -1195,11 +1195,11 @@
/* Get creator info and insert it into the type list */ CreatorInfo = OBJECT_HEADER_TO_CREATOR_INFO(Header); - if (CreatorInfo) InsertTailList(&ObTypeObjectType->TypeList, + if (CreatorInfo) InsertTailList(&ObpTypeObjectType->TypeList, &CreatorInfo->TypeList);
/* Set the index and the entry into the object type array */ - LocalObjectType->Index = ObTypeObjectType->TotalNumberOfObjects; + LocalObjectType->Index = ObpTypeObjectType->TotalNumberOfObjects; if (LocalObjectType->Index < 32) { /* It fits, insert it */
Modified: branches/alex-kd-branch/reactos/ntoskrnl/ob/obname.c URL: http://svn.reactos.org/svn/reactos/branches/alex-kd-branch/reactos/ntoskrnl/... ============================================================================== --- branches/alex-kd-branch/reactos/ntoskrnl/ob/obname.c (original) +++ branches/alex-kd-branch/reactos/ntoskrnl/ob/obname.c Mon Feb 19 21:52:23 2007 @@ -16,7 +16,7 @@ #include <debug.h>
BOOLEAN ObpCaseInsensitive = TRUE; -POBJECT_DIRECTORY NameSpaceRoot; +POBJECT_DIRECTORY ObpRootDirectoryObject; POBJECT_DIRECTORY ObpTypeDirectoryObject;
/* DOS Device Prefix ??\ and ?? */ @@ -407,7 +407,7 @@ { /* Reparsed to the root directory, so start over */ ObDereferenceObject(RootDirectory); - RootDirectory = NameSpaceRoot; + RootDirectory = ObpRootDirectoryObject;
/* Don't use this anymore, since we're starting at root */ RootHandle = NULL; @@ -448,7 +448,7 @@ else { /* We did not get a Root Directory, so use the root */ - RootDirectory = NameSpaceRoot; + RootDirectory = ObpRootDirectoryObject;
/* It must start with a path separator */ if (!(ObjectName->Length) || @@ -811,7 +811,7 @@
/* Start at Root */ ParentDirectory = NULL; - RootDirectory = NameSpaceRoot; + RootDirectory = ObpRootDirectoryObject;
/* Check for reparse status */ if (Status == STATUS_REPARSE_OBJECT) @@ -838,7 +838,7 @@ goto ParseFromRoot; } } - else if (RootDirectory == NameSpaceRoot) + else if (RootDirectory == ObpRootDirectoryObject) { /* We got STATUS_REPARSE but are at the Root Directory */ Object = NULL; @@ -1025,7 +1025,7 @@ * enough right at the beginning, not work our way through * and find out at the end */ - if (Object == NameSpaceRoot) + if (Object == ObpRootDirectoryObject) { /* Size of the '' string */ NameSize = sizeof(OBJ_NAME_PATH_SEPARATOR); @@ -1037,7 +1037,7 @@ NameSize = sizeof(OBJ_NAME_PATH_SEPARATOR) + LocalInfo->Name.Length;
/* Loop inside the directory to get the top-most one (meaning root) */ - while ((ParentDirectory != NameSpaceRoot) && (ParentDirectory)) + while ((ParentDirectory != ObpRootDirectoryObject) && (ParentDirectory)) { /* Get the Name Information */ LocalInfo = OBJECT_HEADER_TO_NAME_INFO( @@ -1080,7 +1080,7 @@ *--ObjectName = UNICODE_NULL;
/* Check if the object is actually the Root directory */ - if (Object == NameSpaceRoot) + if (Object == ObpRootDirectoryObject) { /* This is already the Root Directory, return "\" */ *--ObjectName = OBJ_NAME_PATH_SEPARATOR; @@ -1101,7 +1101,7 @@
/* Now parse the Parent directories until we reach the top */ ParentDirectory = LocalInfo->Directory; - while ((ParentDirectory != NameSpaceRoot) && (ParentDirectory)) + while ((ParentDirectory != ObpRootDirectoryObject) && (ParentDirectory)) { /* Get the name information */ LocalInfo = OBJECT_HEADER_TO_NAME_INFO(