Print addresses in stack frames even early in the boot

svn path=/trunk/; revision=1739
This commit is contained in:
David Welch 2001-03-27 21:43:43 +00:00
parent 634bb6b997
commit 09ad24f08c
6 changed files with 64 additions and 13 deletions

View file

@ -1,4 +1,4 @@
/* $Id: ide.c,v 1.38 2001/03/04 00:46:46 ekohl Exp $
/* $Id: ide.c,v 1.39 2001/03/27 21:43:43 dwelch Exp $
*
* IDE.C - IDE Disk driver
* written by Rex Jolliff
@ -258,6 +258,7 @@ DriverEntry(IN PDRIVER_OBJECT DriverObject,
{
IDEInitialized = TRUE;
}
DPRINT( "Returning from DriverEntry\n" );
return WeGotSomeDisks ? STATUS_SUCCESS : STATUS_NO_SUCH_DEVICE;
}

View file

@ -73,7 +73,8 @@ RtlImageDirectoryEntryToData (
IN BOOLEAN ImageLoaded,
IN ULONG Directory,
OUT PULONG Size);
VOID
LdrInit1(VOID);
#endif /* __INCLUDE_INTERNAL_LDR_H */

View file

@ -5,6 +5,14 @@
#include <ddk/ntddk.h>
#include <pe.h>
typedef struct _MODULE_TEXT_SECTION
{
ULONG Base;
ULONG Length;
LIST_ENTRY ListEntry;
PWCH Name;
} MODULE_TEXT_SECTION;
typedef struct _MODULE_OBJECT
{
CSHORT ObjectType;

View file

@ -78,20 +78,21 @@ STATIC BOOLEAN
print_address(PVOID address)
{
PLIST_ENTRY current_entry;
PMODULE_OBJECT current;
extern LIST_ENTRY ModuleListHead;
MODULE_TEXT_SECTION* current;
extern LIST_ENTRY ModuleTextListHead;
current_entry = ModuleListHead.Flink;
current_entry = ModuleTextListHead.Flink;
while (current_entry != &ModuleListHead &&
while (current_entry != &ModuleTextListHead &&
current_entry != NULL)
{
current = CONTAINING_RECORD(current_entry, MODULE_OBJECT, ListEntry);
current =
CONTAINING_RECORD(current_entry, MODULE_TEXT_SECTION, ListEntry);
if (address >= current->Base &&
address < (current->Base + current->Length))
if (address >= (PVOID)current->Base &&
address < (PVOID)(current->Base + current->Length))
{
DbgPrint("<%wZ: %x>", &current->FullName,
DbgPrint("<%ws: %x>", current->Name,
address - current->Base);
return(TRUE);
}
@ -194,7 +195,7 @@ KiTrapHandler(PKTRAP_FRAME Tf, ULONG ExceptionNr)
};
/* Use the address of the trap frame as approximation to the ring0 esp */
Esp0 = (ULONG)Tf;
Esp0 = (ULONG)&Tf->Eip;
/* Get CR2 */
__asm__("movl %%cr2,%0\n\t" : "=d" (cr2));

View file

@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/* $Id: main.c,v 1.84 2001/03/26 20:46:53 dwelch Exp $
/* $Id: main.c,v 1.85 2001/03/27 21:43:42 dwelch Exp $
*
* PROJECT: ReactOS kernel
* FILE: ntoskrnl/ke/main.c
@ -431,6 +431,7 @@ _main (ULONG MultiBootMagic, PLOADER_PARAMETER_BLOCK _LoaderBlock)
*/
HalInitSystem (0, (PLOADER_PARAMETER_BLOCK)&KeLoaderBlock);
KeInit1();
LdrInit1();
KeLowerIrql(DISPATCH_LEVEL);
/*

View file

@ -1,4 +1,4 @@
/* $Id: loader.c,v 1.69 2001/03/16 18:11:23 dwelch Exp $
/* $Id: loader.c,v 1.70 2001/03/27 21:43:43 dwelch Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@ -45,6 +45,9 @@ NTSTATUS IoInitializeDriver(PDRIVER_INITIALIZE DriverEntry);
LIST_ENTRY ModuleListHead;
POBJECT_TYPE EXPORTED IoDriverObjectType = NULL;
LIST_ENTRY ModuleTextListHead;
STATIC MODULE_TEXT_SECTION NtoskrnlTextSection;
/* STATIC MODULE_TEXT_SECTION HalTextSection; */
#define TAG_DRIVER_MEM TAG('D', 'R', 'V', 'M')
#define TAG_SYM_BUF TAG('S', 'Y', 'M', 'B')
@ -73,6 +76,31 @@ static PVOID LdrPEFixupForward(PCHAR ForwardName);
/* FUNCTIONS *****************************************************************/
VOID
LdrInit1(VOID)
{
PIMAGE_DOS_HEADER DosHeader;
PIMAGE_FILE_HEADER FileHeader;
PIMAGE_OPTIONAL_HEADER OptionalHeader;
PIMAGE_SECTION_HEADER SectionList;
InitializeListHead(&ModuleTextListHead);
DosHeader = (PIMAGE_DOS_HEADER) KERNEL_BASE;
FileHeader =
(PIMAGE_FILE_HEADER) ((DWORD)KERNEL_BASE +
DosHeader->e_lfanew + sizeof(ULONG));
OptionalHeader = (PIMAGE_OPTIONAL_HEADER)
((DWORD)FileHeader + sizeof(IMAGE_FILE_HEADER));
SectionList = (PIMAGE_SECTION_HEADER)
((DWORD)OptionalHeader + sizeof(IMAGE_OPTIONAL_HEADER));
NtoskrnlTextSection.Base = KERNEL_BASE;
NtoskrnlTextSection.Length = SectionList[0].Misc.VirtualSize +
SectionList[0].VirtualAddress;
NtoskrnlTextSection.Name = L"ntoskrnl.exe";
InsertTailList(&ModuleTextListHead, &NtoskrnlTextSection.ListEntry);
}
VOID LdrInitModuleManagement(VOID)
{
HANDLE DirHandle, ModuleHandle;
@ -618,6 +646,7 @@ LdrPEProcessModule(PVOID ModuleLoadBase, PUNICODE_STRING FileName)
OBJECT_ATTRIBUTES ObjectAttributes;
UNICODE_STRING ModuleName;
WCHAR NameBuffer[60];
MODULE_TEXT_SECTION* ModuleTextSection;
DPRINT("Processing PE Module at module base:%08lx\n", ModuleLoadBase);
@ -931,6 +960,16 @@ LdrPEProcessModule(PVOID ModuleLoadBase, PUNICODE_STRING FileName)
sizeof(IMAGE_FILE_HEADER) + sizeof(IMAGE_OPTIONAL_HEADER));
DPRINT("SectionList at %x\n", ModuleObject->Image.PE.SectionList);
ModuleTextSection = ExAllocatePool(NonPagedPool,
sizeof(MODULE_TEXT_SECTION));
ModuleTextSection->Base = (ULONG)DriverBase;
ModuleTextSection->Length = DriverSize;
ModuleTextSection->Name =
ExAllocatePool(NonPagedPool,
(wcslen(NameBuffer) + 1) * sizeof(WCHAR));
wcscpy(ModuleTextSection->Name, NameBuffer);
InsertTailList(&ModuleTextListHead, &ModuleTextSection->ListEntry);
return ModuleObject;
}