diff --git a/reactos/drivers/dd/ide/ide.c b/reactos/drivers/dd/ide/ide.c index eed24c9eef6..d6c2c4e5459 100644 --- a/reactos/drivers/dd/ide/ide.c +++ b/reactos/drivers/dd/ide/ide.c @@ -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; } diff --git a/reactos/ntoskrnl/include/internal/ldr.h b/reactos/ntoskrnl/include/internal/ldr.h index 20af1babcd3..9da6f7a2fd8 100644 --- a/reactos/ntoskrnl/include/internal/ldr.h +++ b/reactos/ntoskrnl/include/internal/ldr.h @@ -73,7 +73,8 @@ RtlImageDirectoryEntryToData ( IN BOOLEAN ImageLoaded, IN ULONG Directory, OUT PULONG Size); - +VOID +LdrInit1(VOID); #endif /* __INCLUDE_INTERNAL_LDR_H */ diff --git a/reactos/ntoskrnl/include/internal/module.h b/reactos/ntoskrnl/include/internal/module.h index ae29fbb2fef..aceda8057c5 100644 --- a/reactos/ntoskrnl/include/internal/module.h +++ b/reactos/ntoskrnl/include/internal/module.h @@ -5,6 +5,14 @@ #include #include +typedef struct _MODULE_TEXT_SECTION +{ + ULONG Base; + ULONG Length; + LIST_ENTRY ListEntry; + PWCH Name; +} MODULE_TEXT_SECTION; + typedef struct _MODULE_OBJECT { CSHORT ObjectType; diff --git a/reactos/ntoskrnl/ke/i386/exp.c b/reactos/ntoskrnl/ke/i386/exp.c index 1baf3a35c7a..24d866a20f1 100644 --- a/reactos/ntoskrnl/ke/i386/exp.c +++ b/reactos/ntoskrnl/ke/i386/exp.c @@ -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>", ¤t->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)); diff --git a/reactos/ntoskrnl/ke/main.c b/reactos/ntoskrnl/ke/main.c index 9a6d03d7f17..9993ff9860e 100644 --- a/reactos/ntoskrnl/ke/main.c +++ b/reactos/ntoskrnl/ke/main.c @@ -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); /* diff --git a/reactos/ntoskrnl/ldr/loader.c b/reactos/ntoskrnl/ldr/loader.c index 2270d7d4607..57d3cbbd410 100644 --- a/reactos/ntoskrnl/ldr/loader.c +++ b/reactos/ntoskrnl/ldr/loader.c @@ -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; }