diff --git a/xtldr2/modules/xtos_o/amd64/memory.c b/xtldr2/modules/xtos_o/amd64/memory.c index 3a21055..cc7a16b 100644 --- a/xtldr2/modules/xtos_o/amd64/memory.c +++ b/xtldr2/modules/xtos_o/amd64/memory.c @@ -38,7 +38,8 @@ XtEnablePaging(IN PLIST_ENTRY MemoryMappings, PLOADER_MEMORY_MAPPING Mapping; EFI_PHYSICAL_ADDRESS Address; PEFI_MEMORY_MAP MemoryMap; - PLIST_ENTRY ListEntry; + PLIST_ENTRY ListEntry, ModulesList, ModulesListEntry; + PXTBL_MODULE_INFO ModuleInfo; EFI_STATUS Status; /* Allocate pages for PML4 */ @@ -53,6 +54,28 @@ XtEnablePaging(IN PLIST_ENTRY MemoryMappings, *PtePointer = (PVOID)(UINT_PTR)Address; RtlZeroMemory(*PtePointer, EFI_PAGE_SIZE); + /* Get list of XTLDR modules */ + ModulesList = XtLdrProtocol->Protocol.GetModulesList(); + ModulesListEntry = ModulesList->Flink; + while(ModulesListEntry != ModulesList) + { + /* Get module info */ + ModuleInfo = CONTAIN_RECORD(ModulesListEntry, XTBL_MODULE_INFO, Flink); + + /* Map module code */ + XtAddVirtualMemoryMapping(MemoryMappings, ModuleInfo->ModuleBase, ModuleInfo->ModuleBase, + EFI_SIZE_TO_PAGES(ModuleInfo->ModuleSize), LoaderFirmwareTemporary); + + if(Status != STATUS_EFI_SUCCESS) + { + /* Mapping module code failed */ + return Status; + } + + /* Get next module */ + ModulesListEntry = ModulesListEntry->Flink; + } + /* Map XTLDR code */ Status = XtAddVirtualMemoryMapping(MemoryMappings, ImageProtocol->ImageBase, ImageProtocol->ImageBase, EFI_SIZE_TO_PAGES(ImageProtocol->ImageSize), LoaderFirmwareTemporary); diff --git a/xtldr2/modules/xtos_o/i686/memory.c b/xtldr2/modules/xtos_o/i686/memory.c index f0d1354..141fe42 100644 --- a/xtldr2/modules/xtos_o/i686/memory.c +++ b/xtldr2/modules/xtos_o/i686/memory.c @@ -41,7 +41,8 @@ XtEnablePaging(IN PLIST_ENTRY MemoryMappings, PEFI_MEMORY_DESCRIPTOR Descriptor; PLOADER_MEMORY_MAPPING Mapping; PEFI_MEMORY_MAP MemoryMap; - PLIST_ENTRY ListEntry; + PLIST_ENTRY ListEntry, ModulesList, ModulesListEntry; + PXTBL_MODULE_INFO ModuleInfo; EFI_STATUS Status; UINT Index; @@ -151,6 +152,28 @@ XtEnablePaging(IN PLIST_ENTRY MemoryMappings, Address += EFI_PAGE_SIZE; } + /* Get list of XTLDR modules */ + ModulesList = XtLdrProtocol->Protocol.GetModulesList(); + ModulesListEntry = ModulesList->Flink; + while(ModulesListEntry != ModulesList) + { + /* Get module info */ + ModuleInfo = CONTAIN_RECORD(ModulesListEntry, XTBL_MODULE_INFO, Flink); + + /* Map module code */ + XtAddVirtualMemoryMapping(MemoryMappings, ModuleInfo->ModuleBase, ModuleInfo->ModuleBase, + EFI_SIZE_TO_PAGES(ModuleInfo->ModuleSize), LoaderFirmwareTemporary); + + if(Status != STATUS_EFI_SUCCESS) + { + /* Mapping module code failed */ + return Status; + } + + /* Get next module */ + ModulesListEntry = ModulesListEntry->Flink; + } + /* Map XTLDR code */ Status = XtAddVirtualMemoryMapping(MemoryMappings, ImageProtocol->ImageBase, ImageProtocol->ImageBase, EFI_SIZE_TO_PAGES(ImageProtocol->ImageSize), LoaderFirmwareTemporary);