https://git.reactos.org/?p=reactos.git;a=commitdiff;h=083cf05f7b454f65ec9ac…
commit 083cf05f7b454f65ec9ac1ca7f4ee9072a05c2d1
Author: Hervé Poussineau <hpoussin(a)reactos.org>
AuthorDate: Sat Mar 28 19:25:03 2020 +0100
Commit: Hervé Poussineau <hpoussin(a)reactos.org>
CommitDate: Mon Nov 16 08:55:02 2020 +0100
[NTOS:KDBG] Remove useless file
---
ntoskrnl/kdbg/kdb_symbols.cmake.c | 768 --------------------------------------
1 file changed, 768 deletions(-)
diff --git a/ntoskrnl/kdbg/kdb_symbols.cmake.c b/ntoskrnl/kdbg/kdb_symbols.cmake.c
deleted file mode 100644
index a6b260a5b96..00000000000
--- a/ntoskrnl/kdbg/kdb_symbols.cmake.c
+++ /dev/null
@@ -1,768 +0,0 @@
-/*
- * COPYRIGHT: See COPYING in the top level directory
- * PROJECT: ReactOS kernel
- * FILE: ntoskrnl/kdbg/kdb_symbols.cmake.c
- * PURPOSE: Getting symbol information...
- *
- * PROGRAMMERS: David Welch (welch(a)cwcom.net)
- * Colin Finck (colin(a)reactos.org)
- */
-
-/* INCLUDES *****************************************************************/
-
-#include <ntoskrnl.h>
-
-#define NDEBUG
-#include <cache/section/newmm.h>
-#include <debug.h>
-
-/* GLOBALS ******************************************************************/
-
-typedef struct _IMAGE_SYMBOL_INFO_CACHE
-{
- LIST_ENTRY ListEntry;
- ULONG RefCount;
- UNICODE_STRING FileName;
- PROSSYM_INFO RosSymInfo;
-}
-IMAGE_SYMBOL_INFO_CACHE, *PIMAGE_SYMBOL_INFO_CACHE;
-
-typedef struct _ROSSYM_KM_OWN_CONTEXT {
- LARGE_INTEGER FileOffset;
- PFILE_OBJECT FileObject;
-} ROSSYM_KM_OWN_CONTEXT, *PROSSYM_KM_OWN_CONTEXT;
-
-static BOOLEAN LoadSymbols;
-static LIST_ENTRY SymbolFileListHead;
-static KSPIN_LOCK SymbolFileListLock;
-//static PROSSYM_INFO KdbpRosSymInfo;
-//static ULONG_PTR KdbpImageBase;
-BOOLEAN KdbpSymbolsInitialized = FALSE;
-
-/* FUNCTIONS ****************************************************************/
-
-static BOOLEAN
-KdbpSeekSymFile(PVOID FileContext, ULONG_PTR Target)
-{
- PROSSYM_KM_OWN_CONTEXT Context = (PROSSYM_KM_OWN_CONTEXT)FileContext;
- Context->FileOffset.QuadPart = Target;
- return TRUE;
-}
-
-static BOOLEAN
-KdbpReadSymFile(PVOID FileContext, PVOID Buffer, ULONG Length)
-{
- PROSSYM_KM_OWN_CONTEXT Context = (PROSSYM_KM_OWN_CONTEXT)FileContext;
- IO_STATUS_BLOCK Iosb;
- NTSTATUS Status = MiSimpleRead
- (Context->FileObject,
- &Context->FileOffset,
- Buffer,
- Length,
- FALSE,
- &Iosb);
- return NT_SUCCESS(Status);
-}
-
-static PROSSYM_KM_OWN_CONTEXT
-KdbpCaptureFileForSymbols(PFILE_OBJECT FileObject)
-{
- PROSSYM_KM_OWN_CONTEXT Context = ExAllocatePool(NonPagedPool, sizeof(*Context));
- if (!Context) return NULL;
- ObReferenceObject(FileObject);
- Context->FileOffset.QuadPart = 0;
- Context->FileObject = FileObject;
- return Context;
-}
-
-static VOID
-KdbpReleaseFileForSymbols(PROSSYM_KM_OWN_CONTEXT Context)
-{
- ObDereferenceObject(Context->FileObject);
- ExFreePool(Context);
-}
-
-static BOOLEAN
-KdbpSymSearchModuleList(
- IN PLIST_ENTRY current_entry,
- IN PLIST_ENTRY end_entry,
- IN PLONG Count,
- IN PVOID Address,
- IN LPCWSTR Name,
- IN INT Index,
- OUT PLDR_DATA_TABLE_ENTRY* pLdrEntry)
-{
- while (current_entry && current_entry != end_entry)
- {
- *pLdrEntry = CONTAINING_RECORD(current_entry, LDR_DATA_TABLE_ENTRY,
InLoadOrderLinks);
-
- if ((Address && Address >= (PVOID)(*pLdrEntry)->DllBase &&
Address < (PVOID)((ULONG_PTR)(*pLdrEntry)->DllBase + (*pLdrEntry)->SizeOfImage))
||
- (Name && !_wcsnicmp((*pLdrEntry)->BaseDllName.Buffer, Name,
(*pLdrEntry)->BaseDllName.Length / sizeof(WCHAR))) ||
- (Index >= 0 && (*Count)++ == Index))
- {
- return TRUE;
- }
-
- current_entry = current_entry->Flink;
- }
-
- return FALSE;
-}
-
-/*! \brief Find a module...
- *
- * \param Address If \a Address is not NULL the module containing \a Address
- * is searched.
- * \param Name If \a Name is not NULL the module named \a Name will be
- * searched.
- * \param Index If \a Index is >= 0 the Index'th module will be returned.
- * \param pLdrEntry Pointer to a PLDR_DATA_TABLE_ENTRY which is filled.
- *
- * \retval TRUE Module was found, \a pLdrEntry was filled.
- * \retval FALSE No module was found.
- */
-BOOLEAN
-KdbpSymFindModule(
- IN PVOID Address OPTIONAL,
- IN LPCWSTR Name OPTIONAL,
- IN INT Index OPTIONAL,
- OUT PLDR_DATA_TABLE_ENTRY* pLdrEntry)
-{
- LONG Count = 0;
- PEPROCESS CurrentProcess;
-
- /* First try to look up the module in the kernel module list. */
- if(KdbpSymSearchModuleList(PsLoadedModuleList.Flink,
- &PsLoadedModuleList,
- &Count,
- Address,
- Name,
- Index,
- pLdrEntry))
- {
- return TRUE;
- }
-
- /* That didn't succeed. Try the module list of the current process now. */
- CurrentProcess = PsGetCurrentProcess();
-
- if(!CurrentProcess || !CurrentProcess->Peb || !CurrentProcess->Peb->Ldr)
- return FALSE;
-
- return
KdbpSymSearchModuleList(CurrentProcess->Peb->Ldr->InLoadOrderModuleList.Flink,
-
&CurrentProcess->Peb->Ldr->InLoadOrderModuleList,
- &Count,
- Address,
- Name,
- Index,
- pLdrEntry);
-}
-
-/*! \brief Print address...
- *
- * Tries to lookup line number, file name and function name for the given
- * address and prints it.
- * If no such information is found the address is printed in the format
- * <module: offset>, otherwise the format will be
- * <module: offset (filename:linenumber (functionname))>
- *
- * \retval TRUE Module containing \a Address was found, \a Address was printed.
- * \retval FALSE No module containing \a Address was found, nothing was printed.
- */
-BOOLEAN
-KdbSymPrintAddress(
- IN PVOID Address,
- IN PKTRAP_FRAME Context)
-{
- int i;
- PMEMORY_AREA MemoryArea = NULL;
- PROS_SECTION_OBJECT SectionObject;
- PLDR_DATA_TABLE_ENTRY LdrEntry;
-#if 0
- PROSSYM_KM_OWN_CONTEXT FileContext;
-#endif
- ULONG_PTR RelativeAddress;
- NTSTATUS Status;
- ROSSYM_LINEINFO LineInfo = {0};
-
- struct {
- enum _ROSSYM_REGNAME regname;
- size_t ctx_offset;
- } regmap[] = {
- { ROSSYM_X86_EDX, FIELD_OFFSET(KTRAP_FRAME, Edx) },
- { ROSSYM_X86_EAX, FIELD_OFFSET(KTRAP_FRAME, Eax) },
- { ROSSYM_X86_ECX, FIELD_OFFSET(KTRAP_FRAME, Ecx) },
- { ROSSYM_X86_EBX, FIELD_OFFSET(KTRAP_FRAME, Ebx) },
- { ROSSYM_X86_ESI, FIELD_OFFSET(KTRAP_FRAME, Esi) },
- { ROSSYM_X86_EDI, FIELD_OFFSET(KTRAP_FRAME, Edi) },
- { ROSSYM_X86_EBP, FIELD_OFFSET(KTRAP_FRAME, Ebp) },
- { ROSSYM_X86_ESP, FIELD_OFFSET(KTRAP_FRAME, HardwareEsp) }
- };
-
- if (Context)
- {
-#if 0
- // Disable arguments for now
- DPRINT("Has Context %x (EBP %x)\n", Context, Context->Ebp);
- LineInfo.Flags = ROSSYM_LINEINFO_HAS_REGISTERS;
-#endif
-
- for (i = 0; i < sizeof(regmap) / sizeof(regmap[0]); i++) {
- memcpy
- (&LineInfo.Registers.Registers[regmap[i].regname],
- ((PCHAR)Context)+regmap[i].ctx_offset,
- sizeof(ULONG_PTR));
- DPRINT("DWARF REG[%d] -> %x\n", regmap[i].regname,
LineInfo.Registers.Registers[regmap[i].regname]);
- }
- }
-
- if (!KdbpSymbolsInitialized || !KdbpSymFindModule(Address, NULL, -1, &LdrEntry))
- return FALSE;
-
- RelativeAddress = (ULONG_PTR)Address - (ULONG_PTR)LdrEntry->DllBase;
- Status = KdbSymGetAddressInformation
- (LdrEntry->PatchInformation,
- RelativeAddress,
- &LineInfo);
-
- if (NT_SUCCESS(Status))
- {
- DbgPrint("<%wZ:%x (%s:%d (%s))>",
- &LdrEntry->BaseDllName, RelativeAddress, LineInfo.FileName,
LineInfo.LineNumber, LineInfo.FunctionName);
- if (Context && LineInfo.NumParams)
- {
- int i;
- char *comma = "";
- DbgPrint("(");
- for (i = 0; i < LineInfo.NumParams; i++) {
- DbgPrint
- ("%s%s=%llx",
- comma,
- LineInfo.Parameters[i].ValueName,
- LineInfo.Parameters[i].Value);
- comma = ",";
- }
- DbgPrint(")");
- }
-
- return TRUE;
- }
- else if (Address < MmSystemRangeStart)
- {
- MemoryArea = MmLocateMemoryAreaByAddress(&PsGetCurrentProcess()->Vm, Address);
- if (!MemoryArea || MemoryArea->Type != MEMORY_AREA_SECTION_VIEW)
- {
- goto end;
- }
-
- SectionObject = MemoryArea->Data.SectionData.Section;
- if (!(SectionObject->AllocationAttributes & SEC_IMAGE)) goto end;
-#if 0
- if (MemoryArea->StartingAddress != (PVOID)KdbpImageBase)
- {
- if (KdbpRosSymInfo)
- {
- RosSymDelete(KdbpRosSymInfo);
- KdbpRosSymInfo = NULL;
- KdbpImageBase = 0;
- }
-
- if ((FileContext = KdbpCaptureFileForSymbols(SectionObject->FileObject)))
- {
- if (RosSymCreateFromFile(FileContext, &KdbpRosSymInfo))
- KdbpImageBase = (ULONG_PTR)MemoryArea->StartingAddress;
-
- KdbpReleaseFileForSymbols(FileContext);
- }
- }
-
- if (KdbpRosSymInfo)
- {
- RelativeAddress = (ULONG_PTR)Address - KdbpImageBase;
- RosSymFreeInfo(&LineInfo);
- Status = KdbSymGetAddressInformation
- (KdbpRosSymInfo,
- RelativeAddress,
- &LineInfo);
- if (NT_SUCCESS(Status))
- {
- DbgPrint
- ("<%wZ:%x (%s:%d (%s))>",
- &SectionObject->FileObject->FileName,
- RelativeAddress,
- LineInfo.FileName,
- LineInfo.LineNumber,
- LineInfo.FunctionName);
-
- if (Context && LineInfo.NumParams)
- {
- int i;
- char *comma = "";
- DbgPrint("(");
- for (i = 0; i < LineInfo.NumParams; i++) {
- DbgPrint
- ("%s%s=%llx",
- comma,
- LineInfo.Parameters[i].ValueName,
- LineInfo.Parameters[i].Value);
- comma = ",";
- }
- DbgPrint(")");
- }
-
- return TRUE;
- }
- }
-#endif
- }
-
-end:
- DbgPrint("<%wZ:%x>", &LdrEntry->BaseDllName, RelativeAddress);
-
- return TRUE;
-}
-
-
-/*! \brief Get information for an address (source file, line number,
- * function name)
- *
- * \param SymbolInfo Pointer to ROSSYM_INFO.
- * \param RelativeAddress Relative address to look up.
- * \param LineNumber Pointer to an ULONG which is filled with the line
- * number (can be NULL)
- * \param FileName Pointer to an array of CHARs which gets filled with
- * the filename (can be NULL)
- * \param FunctionName Pointer to an array of CHARs which gets filled with
- * the function name (can be NULL)
- *
- * \returns NTSTATUS error code.
- * \retval STATUS_SUCCESS At least one of the requested informations was found.
- * \retval STATUS_UNSUCCESSFUL None of the requested information was found.
- */
-NTSTATUS
-KdbSymGetAddressInformation(
- IN PROSSYM_INFO RosSymInfo,
- IN ULONG_PTR RelativeAddress,
- IN PROSSYM_LINEINFO LineInfo)
-{
- if (!KdbpSymbolsInitialized ||
- !RosSymInfo ||
- !RosSymGetAddressInformation(RosSymInfo, RelativeAddress, LineInfo))
- {
- return STATUS_UNSUCCESSFUL;
- }
-
- return STATUS_SUCCESS;
-}
-
-/*! \brief Find cached symbol file.
- *
- * Looks through the list of cached symbol files and tries to find an already
- * loaded one.
- *
- * \param FileName FileName of the symbol file to look for.
- *
- * \returns A pointer to the cached symbol info.
- * \retval NULL No cached info found.
- *
- * \sa KdbpSymAddCachedFile
- */
-PROSSYM_INFO
-KdbpSymFindCachedFile(
- IN PUNICODE_STRING FileName)
-{
- PIMAGE_SYMBOL_INFO_CACHE Current;
- PLIST_ENTRY CurrentEntry;
- KIRQL Irql;
-
- KeAcquireSpinLock(&SymbolFileListLock, &Irql);
-
- CurrentEntry = SymbolFileListHead.Flink;
- while (CurrentEntry != (&SymbolFileListHead))
- {
- Current = CONTAINING_RECORD(CurrentEntry, IMAGE_SYMBOL_INFO_CACHE, ListEntry);
-
- if (RtlEqualUnicodeString(&Current->FileName, FileName, TRUE))
- {
- Current->RefCount++;
- KeReleaseSpinLock(&SymbolFileListLock, Irql);
- DPRINT("Found cached file!\n");
- return Current->RosSymInfo;
- }
-
- CurrentEntry = CurrentEntry->Flink;
- }
-
- KeReleaseSpinLock(&SymbolFileListLock, Irql);
-
- DPRINT("Cached file not found!\n");
- return NULL;
-}
-
-/*! \brief Add a symbol file to the cache.
- *
- * \param FileName Filename of the symbol file.
- * \param RosSymInfo Pointer to the symbol info.
- *
- * \sa KdbpSymRemoveCachedFile
- */
-static VOID
-KdbpSymAddCachedFile(
- IN PUNICODE_STRING FileName,
- IN PROSSYM_INFO RosSymInfo)
-{
- PIMAGE_SYMBOL_INFO_CACHE CacheEntry;
-
- DPRINT("Adding symbol file: %wZ RosSymInfo = %p\n", FileName, RosSymInfo);
-
- /* allocate entry */
- CacheEntry = ExAllocatePoolWithTag(NonPagedPool, sizeof (IMAGE_SYMBOL_INFO_CACHE),
TAG_KDBS);
- ASSERT(CacheEntry);
- RtlZeroMemory(CacheEntry, sizeof (IMAGE_SYMBOL_INFO_CACHE));
-
- /* fill entry */
- CacheEntry->FileName.Buffer = ExAllocatePoolWithTag(NonPagedPool,
- FileName->Length,
- TAG_KDBS);
- CacheEntry->FileName.MaximumLength = FileName->Length;
- RtlCopyUnicodeString(&CacheEntry->FileName, FileName);
- ASSERT(CacheEntry->FileName.Buffer);
- CacheEntry->RefCount = 1;
- CacheEntry->RosSymInfo = RosSymInfo;
- InsertTailList(&SymbolFileListHead, &CacheEntry->ListEntry); /* FIXME:
Lock list? */
-}
-
-/*! \brief Remove a symbol file (reference) from the cache.
- *
- * Tries to find a cache entry matching the given symbol info and decreases
- * it's reference count. If the refcount is 0 after decreasing it the cache
- * entry will be removed from the list and freed.
- *
- * \param RosSymInfo Pointer to the symbol info.
- *
- * \sa KdbpSymAddCachedFile
- */
-static VOID
-KdbpSymRemoveCachedFile(
- IN PROSSYM_INFO RosSymInfo)
-{
- PIMAGE_SYMBOL_INFO_CACHE Current;
- PLIST_ENTRY CurrentEntry;
- KIRQL Irql;
-
- KeAcquireSpinLock(&SymbolFileListLock, &Irql);
-
- CurrentEntry = SymbolFileListHead.Flink;
- while (CurrentEntry != (&SymbolFileListHead))
- {
- Current = CONTAINING_RECORD(CurrentEntry, IMAGE_SYMBOL_INFO_CACHE, ListEntry);
-
- if (Current->RosSymInfo == RosSymInfo) /* found */
- {
- ASSERT(Current->RefCount > 0);
- Current->RefCount--;
- if (Current->RefCount < 1)
- {
- RemoveEntryList(&Current->ListEntry);
- RosSymDelete(Current->RosSymInfo);
- ExFreePool(Current);
- }
-
- KeReleaseSpinLock(&SymbolFileListLock, Irql);
- return;
- }
-
- CurrentEntry = CurrentEntry->Flink;
- }
-
- KeReleaseSpinLock(&SymbolFileListLock, Irql);
-}
-
-/*! \brief Loads a symbol file.
- *
- * \param FileName Filename of the symbol file to load.
- * \param RosSymInfo Pointer to a ROSSYM_INFO which gets filled.
- *
- * \sa KdbpSymUnloadModuleSymbols
- */
-VOID
-KdbpSymLoadModuleSymbols(
- IN PUNICODE_STRING FileName,
- OUT PROSSYM_INFO *RosSymInfo)
-{
- OBJECT_ATTRIBUTES ObjectAttributes;
- HANDLE FileHandle;
- NTSTATUS Status;
- IO_STATUS_BLOCK IoStatusBlock;
- PFILE_OBJECT FileObject;
- PROSSYM_KM_OWN_CONTEXT FileContext;
-
- /* Allow KDB to break on module load */
- KdbModuleLoaded(FileName);
-
- if (!LoadSymbols)
- {
- *RosSymInfo = NULL;
- return;
- }
-
- /* Try to find cached (already loaded) symbol file */
- *RosSymInfo = KdbpSymFindCachedFile(FileName);
- if (*RosSymInfo)
- {
- DPRINT("Found cached symbol file %wZ\n", FileName);
- return;
- }
-
- /* Open the file */
- InitializeObjectAttributes(&ObjectAttributes,
- FileName,
- OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
- NULL,
- NULL);
-
- DPRINT("Attempting to open image: %wZ\n", FileName);
-
- Status = ZwOpenFile(&FileHandle,
- FILE_READ_ACCESS | SYNCHRONIZE,
- &ObjectAttributes,
- &IoStatusBlock,
- FILE_SHARE_READ | FILE_SHARE_WRITE,
- FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT);
- if (!NT_SUCCESS(Status))
- {
- DPRINT("Could not open image file(%x): %wZ\n", Status, FileName);
- return;
- }
-
- DPRINT("Loading symbols from %wZ...\n", FileName);
-
- Status = ObReferenceObjectByHandle
- (FileHandle,
- FILE_READ_DATA | SYNCHRONIZE,
- NULL,
- KernelMode,
- (PVOID*)&FileObject,
- NULL);
-
- if (!NT_SUCCESS(Status))
- {
- DPRINT("Could not get the file object\n");
- ZwClose(FileHandle);
- return;
- }
-
- if ((FileContext = KdbpCaptureFileForSymbols(FileObject)))
- {
- if (RosSymCreateFromFile(FileContext, RosSymInfo))
- {
- /* add file to cache */
- int i;
- UNICODE_STRING TruncatedName = *FileName;
- for (i = (TruncatedName.Length / sizeof(WCHAR)) - 1; i >= 0; i--)
- if (TruncatedName.Buffer[i] == '\\') {
- TruncatedName.Buffer += i+1;
- TruncatedName.Length -= (i+1)*sizeof(WCHAR);
- TruncatedName.MaximumLength -= (i+1)*sizeof(WCHAR);
- break;
- }
- KdbpSymAddCachedFile(&TruncatedName, *RosSymInfo);
- DPRINT("Installed symbols: %wZ %p\n", &TruncatedName,
*RosSymInfo);
- }
- KdbpReleaseFileForSymbols(FileContext);
- }
-
- ObDereferenceObject(FileObject);
- ZwClose(FileHandle);
-}
-
-VOID
-KdbSymProcessSymbols(
- IN PLDR_DATA_TABLE_ENTRY LdrEntry)
-{
- if (!LoadSymbols)
- {
- LdrEntry->PatchInformation = NULL;
- return;
- }
-
- /* Remove symbol info if it already exists */
- if (LdrEntry->PatchInformation) {
- KdbpSymRemoveCachedFile(LdrEntry->PatchInformation);
- }
-
- /* Error loading symbol info, try to load it from file */
- KdbpSymLoadModuleSymbols(&LdrEntry->FullDllName,
- (PROSSYM_INFO*)&LdrEntry->PatchInformation);
-
- if (!LdrEntry->PatchInformation) {
- // HACK: module dll names don't identify the real files
- UNICODE_STRING SystemRoot;
- UNICODE_STRING ModuleNameCopy;
- RtlInitUnicodeString(&SystemRoot,
L"\\SystemRoot\\System32\\Drivers\\");
- ModuleNameCopy.Length = 0;
- ModuleNameCopy.MaximumLength =
- LdrEntry->BaseDllName.MaximumLength + SystemRoot.MaximumLength;
- ModuleNameCopy.Buffer = ExAllocatePool(NonPagedPool, SystemRoot.MaximumLength +
LdrEntry->BaseDllName.MaximumLength);
- RtlCopyUnicodeString(&ModuleNameCopy, &SystemRoot);
- RtlCopyMemory
- (ModuleNameCopy.Buffer + ModuleNameCopy.Length / sizeof(WCHAR),
- LdrEntry->BaseDllName.Buffer,
- LdrEntry->BaseDllName.Length);
- ModuleNameCopy.Length += LdrEntry->BaseDllName.Length;
- KdbpSymLoadModuleSymbols(&ModuleNameCopy,
- (PROSSYM_INFO*)&LdrEntry->PatchInformation);
- if (!LdrEntry->PatchInformation) {
- SystemRoot.Length -= strlen("Drivers\\") * sizeof(WCHAR);
- RtlCopyUnicodeString(&ModuleNameCopy, &SystemRoot);
- RtlCopyMemory
- (ModuleNameCopy.Buffer + ModuleNameCopy.Length / sizeof(WCHAR),
- LdrEntry->BaseDllName.Buffer,
- LdrEntry->BaseDllName.Length);
- ModuleNameCopy.Length += LdrEntry->BaseDllName.Length;
- KdbpSymLoadModuleSymbols(&ModuleNameCopy,
- (PROSSYM_INFO*)&LdrEntry->PatchInformation);
- }
- RtlFreeUnicodeString(&ModuleNameCopy);
- }
-
- /* It already added symbols to cache */
- DPRINT("Installed symbols: %wZ@%p-%p %p\n",
- &LdrEntry->BaseDllName,
- LdrEntry->DllBase,
- (PVOID)(LdrEntry->SizeOfImage + (ULONG_PTR)LdrEntry->DllBase),
- LdrEntry->PatchInformation);
-}
-
-VOID
-NTAPI
-KdbDebugPrint(
- PCH Message,
- ULONG Length)
-{
- /* Nothing here */
-}
-
-static PVOID KdbpSymAllocMem(ULONG_PTR size)
-{
- return ExAllocatePoolWithTag(NonPagedPool, size, 'RSYM');
-}
-
-static VOID KdbpSymFreeMem(PVOID Area)
-{
- return ExFreePool(Area);
-}
-
-static BOOLEAN KdbpSymReadMem(PVOID FileContext, ULONG_PTR* TargetDebug, PVOID SourceMem,
ULONG Size)
-{
- return NT_SUCCESS(KdbpSafeReadMemory(TargetDebug, SourceMem, Size));
-}
-
-static ROSSYM_CALLBACKS KdbpRosSymCallbacks = {
- KdbpSymAllocMem, KdbpSymFreeMem,
- KdbpReadSymFile, KdbpSeekSymFile,
- KdbpSymReadMem
-};
-
-/*! \brief Initializes the KDB symbols implementation.
- *
- * \param DispatchTable Pointer to the KD dispatch table
- * \param BootPhase Phase of initialization
- */
-VOID
-NTAPI
-KdbInitialize(
- PKD_DISPATCH_TABLE DispatchTable,
- ULONG BootPhase)
-{
- PCHAR p1, p2;
- SHORT Found = FALSE;
- CHAR YesNo;
- PLDR_DATA_TABLE_ENTRY LdrEntry;
-
- DPRINT("KdbSymInit() BootPhase=%d\n", BootPhase);
-
- LoadSymbols = FALSE;
-
-#if DBG
- /* Load symbols only if we have 96Mb of RAM or more */
- if (MmNumberOfPhysicalPages >= 0x6000)
- LoadSymbols = TRUE;
-#endif
-
- if (BootPhase == 0)
- {
- /* Write out the functions that we support for now */
- DispatchTable->KdpInitRoutine = KdpKdbgInit;
- DispatchTable->KdpPrintRoutine = KdbDebugPrint;
-
- /* Register as a Provider */
- InsertTailList(&KdProviders, &DispatchTable->KdProvidersList);
-
- /* Perform actual initialization of symbol module */
- //NtoskrnlModuleObject->PatchInformation = NULL;
- //LdrHalModuleObject->PatchInformation = NULL;
-
- InitializeListHead(&SymbolFileListHead);
- KeInitializeSpinLock(&SymbolFileListLock);
-
- /* Check the command line for /LOADSYMBOLS, /NOLOADSYMBOLS,
- * /LOADSYMBOLS={YES|NO}, /NOLOADSYMBOLS={YES|NO} */
- ASSERT(KeLoaderBlock);
- p1 = KeLoaderBlock->LoadOptions;
- while('\0' != *p1 && NULL != (p2 = strchr(p1, '/')))
- {
- p2++;
- Found = 0;
- if (0 == _strnicmp(p2, "LOADSYMBOLS", 11))
- {
- Found = +1;
- p2 += 11;
- }
- else if (0 == _strnicmp(p2, "NOLOADSYMBOLS", 13))
- {
- Found = -1;
- p2 += 13;
- }
- if (0 != Found)
- {
- while (isspace(*p2))
- {
- p2++;
- }
- if ('=' == *p2)
- {
- p2++;
- while (isspace(*p2))
- {
- p2++;
- }
- YesNo = toupper(*p2);
- if ('N' == YesNo || 'F' == YesNo || '0' ==
YesNo)
- {
- Found = -1 * Found;
- }
- }
- LoadSymbols = (0 < Found);
- }
- p1 = p2;
- }
-
- RosSymInit(&KdbpRosSymCallbacks);
- }
- else if (BootPhase == 3)
- {
- /* Load symbols for NTOSKRNL.EXE.
- It is always the first module in PsLoadedModuleList. KeLoaderBlock can't
be used here as its content is just temporary. */
- LdrEntry = CONTAINING_RECORD(PsLoadedModuleList.Flink, LDR_DATA_TABLE_ENTRY,
InLoadOrderLinks);
- KdbSymProcessSymbols(LdrEntry);
-
- /* Also load them for HAL.DLL. */
- LdrEntry = CONTAINING_RECORD(PsLoadedModuleList.Flink->Flink,
LDR_DATA_TABLE_ENTRY, InLoadOrderLinks);
- KdbSymProcessSymbols(LdrEntry);
-
- KdbpSymbolsInitialized = TRUE;
- }
-}
-
-/* EOF */