XTLDR Rewrite #7

Merged
belliash merged 184 commits from xtldr_rewrite into master 2024-01-09 18:51:04 +01:00
4 changed files with 30 additions and 13 deletions
Showing only changes of commit 1d61b2fb6a - Show all commits

View File

@ -172,13 +172,20 @@ typedef struct _XTBL_LOADER_PROTOCOL
} Util; } Util;
} XTBL_LOADER_PROTOCOL, *PXTBL_LOADER_PROTOCOL; } XTBL_LOADER_PROTOCOL, *PXTBL_LOADER_PROTOCOL;
/* XTLDR Module dependencies data */
typedef struct _XTBL_MODULE_DEPS
{
LIST_ENTRY Flink;
PWCHAR ModuleName;
} XTBL_MODULE_DEPS, *PXTBL_MODULE_DEPS;
/* XTLDR Module information data */ /* XTLDR Module information data */
typedef struct _XTBL_MODULE_INFO typedef struct _XTBL_MODULE_INFO
{ {
LIST_ENTRY Flink; LIST_ENTRY Flink;
PWCHAR ModuleName; PWCHAR ModuleName;
PWCHAR ModuleDescription; PWCHAR ModuleDescription;
WCHAR Dependencies[1024]; LIST_ENTRY Dependencies;
} XTBL_MODULE_INFO, *PXTBL_MODULE_INFO; } XTBL_MODULE_INFO, *PXTBL_MODULE_INFO;
/* XTLDR Status data */ /* XTLDR Status data */

View File

@ -8,9 +8,6 @@
#include <xtblapi.h> #include <xtblapi.h>
#define XTBL_MODDEP SEGMENT(".moddeps") CONST WCHAR XtBlpDeps[][8]
//XTBL_MODDEP = {L""};
/** /**
* This routine is the entry point of the XT EFI boot loader module. * This routine is the entry point of the XT EFI boot loader module.

View File

@ -213,9 +213,10 @@ BlLoadModule(IN PWCHAR ModuleName)
PPECOFF_IMAGE_SECTION_HEADER SectionHeader; PPECOFF_IMAGE_SECTION_HEADER SectionHeader;
PPECOFF_IMAGE_DOS_HEADER DosHeader; PPECOFF_IMAGE_DOS_HEADER DosHeader;
PPECOFF_IMAGE_PE_HEADER PeHeader; PPECOFF_IMAGE_PE_HEADER PeHeader;
PXTBL_MODULE_DEPS ModuleDependencies;
PXTBL_MODULE_INFO ModuleInfo; PXTBL_MODULE_INFO ModuleInfo;
PLIST_ENTRY ModuleListEntry; PLIST_ENTRY ModuleListEntry;
WCHAR ModuleFileName[1024]; WCHAR ModuleFileName[12];
USHORT SectionIndex; USHORT SectionIndex;
SIZE_T ModuleSize; SIZE_T ModuleSize;
EFI_STATUS Status; EFI_STATUS Status;
@ -285,8 +286,9 @@ BlLoadModule(IN PWCHAR ModuleName)
return Status; return Status;
} }
/* Zero module information block */ /* Zero module information block and initialize dependencies list */
RtlZeroMemory(ModuleInfo, sizeof(XTBL_MODULE_INFO)); RtlZeroMemory(ModuleInfo, sizeof(XTBL_MODULE_INFO));
RtlInitializeListHead(&ModuleInfo->Dependencies);
/* Setup PE/COFF EFI image headers */ /* Setup PE/COFF EFI image headers */
DosHeader = (PPECOFF_IMAGE_DOS_HEADER)ModuleData; DosHeader = (PPECOFF_IMAGE_DOS_HEADER)ModuleData;
@ -317,9 +319,14 @@ BlLoadModule(IN PWCHAR ModuleName)
return STATUS_EFI_UNSUPPORTED; return STATUS_EFI_UNSUPPORTED;
} }
/* Add dependency module name to the list */ /* Allocate memory for module dependency */
RtlConcatenateWideString(ModuleInfo->Dependencies, DepsData, RtlWideStringLength(DepsData, 0)); Status = BlMemoryAllocatePool(sizeof(XTBL_MODULE_DEPS), (PVOID*)&ModuleDependencies);
RtlConcatenateWideString(ModuleInfo->Dependencies, L" ", 1); if(Status == STATUS_EFI_SUCCESS)
{
/* Memory allocated successfully, store module's dependency */
ModuleDependencies->ModuleName = DepsData;
RtlInsertTailList(&ModuleInfo->Dependencies, &ModuleDependencies->Flink);
}
/* Get next dependency module name */ /* Get next dependency module name */
DepsData += 8; DepsData += 8;
@ -521,9 +528,15 @@ BlStartXtLoader(IN EFI_HANDLE ImageHandle,
BlConsolePrint(L" (%S)", ModuleInfo->ModuleDescription); BlConsolePrint(L" (%S)", ModuleInfo->ModuleDescription);
} }
if(ModuleInfo->Dependencies[0] != 0) PLIST_ENTRY DepsListEntry;
PXTBL_MODULE_DEPS DepsInfo;
BlConsolePrint(L"\n - Uses: ");
DepsListEntry = ModuleInfo->Dependencies.Flink;
while(DepsListEntry != &ModuleInfo->Dependencies)
{ {
BlConsolePrint(L"\n - Uses: %S", ModuleInfo->Dependencies); DepsInfo = CONTAIN_RECORD(DepsListEntry, XTBL_MODULE_DEPS, Flink);
BlConsolePrint(L"%S ", DepsInfo->ModuleName);
DepsListEntry = DepsListEntry->Flink;
} }
/* Move to the module */ /* Move to the module */