mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 06:25:49 +00:00
- Load symbols for NTOSKRNL and HAL as 1st and 2nd entries in LoadOrderList in LPB.
- Remove now unused symbol-loading function, silence an error message in rossym/frommem.c, since it's a normal situation now (if it's not in memory, then it's on disk and needs to be loaded). svn path=/trunk/; revision=30590
This commit is contained in:
parent
28960f40d7
commit
7de35ea613
2 changed files with 29 additions and 127 deletions
|
@ -72,7 +72,7 @@ RosSymCreateFromMem(PVOID ImageStart, ULONG_PTR ImageSize, PROSSYM_INFO *RosSymI
|
||||||
if (ImageSize < SectionHeader->PointerToRawData + SectionHeader->SizeOfRawData
|
if (ImageSize < SectionHeader->PointerToRawData + SectionHeader->SizeOfRawData
|
||||||
|| SectionHeader->SizeOfRawData < sizeof(ROSSYM_HEADER))
|
|| SectionHeader->SizeOfRawData < sizeof(ROSSYM_HEADER))
|
||||||
{
|
{
|
||||||
DPRINT1("Invalid %s section\n", ROSSYM_SECTION_NAME);
|
DPRINT("Invalid %s section\n", ROSSYM_SECTION_NAME);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -651,122 +651,6 @@ KdbSymProcessSymbols(IN PANSI_STRING AnsiFileName, IN PKD_SYMBOLS_INFO SymbolInf
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*! \brief Called when a symbol file is loaded by the loader?
|
|
||||||
*
|
|
||||||
* Tries to find a driver (.sys) or executable (.exe) with the same base name
|
|
||||||
* as the symbol file and sets the drivers/exes symbol info to the loaded
|
|
||||||
* module.
|
|
||||||
* Used to load ntoskrnl and hal symbols before the SystemRoot is available to us.
|
|
||||||
*
|
|
||||||
* \param FileName Filename for which the symbols are loaded.
|
|
||||||
*/
|
|
||||||
VOID
|
|
||||||
KdbSymProcessBootSymbols(IN PANSI_STRING AnsiFileName,
|
|
||||||
IN BOOLEAN FullName,
|
|
||||||
IN BOOLEAN LoadFromFile)
|
|
||||||
{
|
|
||||||
BOOLEAN Found = FALSE;
|
|
||||||
PLIST_ENTRY ListHead, NextEntry;
|
|
||||||
PLDR_DATA_TABLE_ENTRY LdrEntry = NULL;
|
|
||||||
WCHAR Buffer[MAX_PATH];
|
|
||||||
UNICODE_STRING ModuleName;
|
|
||||||
NTSTATUS Status;
|
|
||||||
|
|
||||||
/* Convert file name to unicode */
|
|
||||||
ModuleName.MaximumLength = (MAX_PATH-1)*sizeof(WCHAR);
|
|
||||||
ModuleName.Length = 0;
|
|
||||||
ModuleName.Buffer = Buffer;
|
|
||||||
|
|
||||||
Status = RtlAnsiStringToUnicodeString(&ModuleName, AnsiFileName, FALSE);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
DPRINT1("Failed to convert Ansi to Unicode with Status=0x%08X, Length=%d\n",
|
|
||||||
Status, ModuleName.Length);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
DPRINT("KdbSymProcessBootSymbols(%wZ)\n", &ModuleName);
|
|
||||||
|
|
||||||
/* We use PsLoadedModuleList here, otherwise (in case of
|
|
||||||
using KeLoaderBlock) all our data will be just lost */
|
|
||||||
ListHead = &PsLoadedModuleList;
|
|
||||||
|
|
||||||
/* Found module we are interested in */
|
|
||||||
NextEntry = ListHead->Flink;
|
|
||||||
while (ListHead != NextEntry)
|
|
||||||
{
|
|
||||||
/* Get the entry */
|
|
||||||
LdrEntry = CONTAINING_RECORD(NextEntry,
|
|
||||||
LDR_DATA_TABLE_ENTRY,
|
|
||||||
InLoadOrderLinks);
|
|
||||||
|
|
||||||
if (FullName)
|
|
||||||
{
|
|
||||||
if (RtlEqualUnicodeString(&ModuleName, &LdrEntry->FullDllName, TRUE))
|
|
||||||
{
|
|
||||||
Found = TRUE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (RtlEqualUnicodeString(&ModuleName, &LdrEntry->BaseDllName, TRUE))
|
|
||||||
{
|
|
||||||
Found = TRUE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Go to the next one */
|
|
||||||
NextEntry = NextEntry->Flink;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Exit if we didn't find the module requested */
|
|
||||||
if (!Found)
|
|
||||||
return;
|
|
||||||
|
|
||||||
DPRINT("Found LdrEntry=%p\n", LdrEntry);
|
|
||||||
if (!LoadSymbols)
|
|
||||||
{
|
|
||||||
LdrEntry->PatchInformation = NULL;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Remove symbol info if it already exists */
|
|
||||||
if (LdrEntry->PatchInformation != NULL)
|
|
||||||
{
|
|
||||||
KdbpSymRemoveCachedFile(LdrEntry->PatchInformation);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (LoadFromFile)
|
|
||||||
{
|
|
||||||
/* Load symbol info from file */
|
|
||||||
KdbpSymLoadModuleSymbols(&LdrEntry->FullDllName,
|
|
||||||
(PROSSYM_INFO*)&LdrEntry->PatchInformation);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Load new symbol information */
|
|
||||||
if (! RosSymCreateFromMem(LdrEntry->DllBase,
|
|
||||||
LdrEntry->SizeOfImage,
|
|
||||||
(PROSSYM_INFO*)&LdrEntry->PatchInformation))
|
|
||||||
{
|
|
||||||
/* Error loading symbol info, exit */
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Add file to cache */
|
|
||||||
KdbpSymAddCachedFile(&ModuleName, LdrEntry->PatchInformation);
|
|
||||||
}
|
|
||||||
|
|
||||||
DPRINT("Installed symbols: %wZ@%08x-%08x %p\n",
|
|
||||||
&ModuleName,
|
|
||||||
LdrEntry->DllBase,
|
|
||||||
LdrEntry->SizeOfImage + (ULONG)LdrEntry->DllBase,
|
|
||||||
LdrEntry->PatchInformation);
|
|
||||||
}
|
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
NTAPI
|
NTAPI
|
||||||
KdbDebugPrint(PCH Message, ULONG Length)
|
KdbDebugPrint(PCH Message, ULONG Length)
|
||||||
|
@ -786,9 +670,11 @@ KdbInitialize(PKD_DISPATCH_TABLE DispatchTable,
|
||||||
ULONG BootPhase)
|
ULONG BootPhase)
|
||||||
{
|
{
|
||||||
PCHAR p1, p2;
|
PCHAR p1, p2;
|
||||||
int Found;
|
SHORT Found;
|
||||||
char YesNo;
|
CHAR YesNo;
|
||||||
ANSI_STRING FileName;
|
LIST_ENTRY *ModuleEntry;
|
||||||
|
PLDR_DATA_TABLE_ENTRY DataTableEntry;
|
||||||
|
KD_SYMBOLS_INFO SymbolsInfo;
|
||||||
|
|
||||||
DPRINT("KdbSymInit() BootPhase=%d\n", BootPhase);
|
DPRINT("KdbSymInit() BootPhase=%d\n", BootPhase);
|
||||||
|
|
||||||
|
@ -860,13 +746,29 @@ KdbInitialize(PKD_DISPATCH_TABLE DispatchTable,
|
||||||
}
|
}
|
||||||
else if (BootPhase == 1)
|
else if (BootPhase == 1)
|
||||||
{
|
{
|
||||||
/* Load symbols for NTOSKRNL.EXE and HAL.DLL*/
|
/* Load symbols for NTOSKRNL.EXE */
|
||||||
/* FIXME: Load as 1st and 2nd entries of InLoadOrderList instead
|
ModuleEntry = &KeLoaderBlock->LoadOrderListHead;
|
||||||
of hardcoding them here! */
|
DataTableEntry = CONTAINING_RECORD(ModuleEntry,
|
||||||
RtlInitAnsiString(&FileName, "\\SystemRoot\\System32\\NTOSKRNL.EXE");
|
LDR_DATA_TABLE_ENTRY, InLoadOrderLinks);
|
||||||
KdbSymProcessBootSymbols(&FileName, TRUE, FALSE);
|
|
||||||
RtlInitAnsiString(&FileName, "\\SystemRoot\\System32\\HAL.DLL");
|
SymbolsInfo.BaseOfDll = DataTableEntry->DllBase;
|
||||||
KdbSymProcessBootSymbols(&FileName, TRUE, FALSE);
|
SymbolsInfo.CheckSum = DataTableEntry->CheckSum;
|
||||||
|
SymbolsInfo.ProcessId = 0;
|
||||||
|
SymbolsInfo.SizeOfImage = DataTableEntry->SizeOfImage;
|
||||||
|
|
||||||
|
KdbSymProcessSymbols(NULL, &SymbolsInfo);
|
||||||
|
|
||||||
|
/* and HAL.DLL */
|
||||||
|
ModuleEntry = ModuleEntry->Flink;
|
||||||
|
DataTableEntry = CONTAINING_RECORD(ModuleEntry,
|
||||||
|
LDR_DATA_TABLE_ENTRY, InLoadOrderLinks);
|
||||||
|
|
||||||
|
SymbolsInfo.BaseOfDll = DataTableEntry->DllBase;
|
||||||
|
SymbolsInfo.CheckSum = DataTableEntry->CheckSum;
|
||||||
|
SymbolsInfo.ProcessId = 0;
|
||||||
|
SymbolsInfo.SizeOfImage = DataTableEntry->SizeOfImage;
|
||||||
|
|
||||||
|
KdbSymProcessSymbols(NULL, &SymbolsInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue