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;
} 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 */
typedef struct _XTBL_MODULE_INFO
{
LIST_ENTRY Flink;
PWCHAR ModuleName;
PWCHAR ModuleDescription;
WCHAR Dependencies[1024];
LIST_ENTRY Dependencies;
} XTBL_MODULE_INFO, *PXTBL_MODULE_INFO;
/* XTLDR Status data */

View File

@ -31,5 +31,5 @@ EFI_STATUS
XtLdrModuleMain(IN EFI_HANDLE ImageHandle,
IN PEFI_SYSTEM_TABLE SystemTable)
{
return STATUS_EFI_SUCCESS;
return STATUS_EFI_SUCCESS;
}

View File

@ -8,9 +8,6 @@
#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.
@ -30,5 +27,5 @@ EFI_STATUS
XtLdrModuleMain(IN EFI_HANDLE ImageHandle,
IN PEFI_SYSTEM_TABLE SystemTable)
{
return STATUS_EFI_SUCCESS;
return STATUS_EFI_SUCCESS;
}

View File

@ -213,9 +213,10 @@ BlLoadModule(IN PWCHAR ModuleName)
PPECOFF_IMAGE_SECTION_HEADER SectionHeader;
PPECOFF_IMAGE_DOS_HEADER DosHeader;
PPECOFF_IMAGE_PE_HEADER PeHeader;
PXTBL_MODULE_DEPS ModuleDependencies;
PXTBL_MODULE_INFO ModuleInfo;
PLIST_ENTRY ModuleListEntry;
WCHAR ModuleFileName[1024];
WCHAR ModuleFileName[12];
USHORT SectionIndex;
SIZE_T ModuleSize;
EFI_STATUS Status;
@ -285,8 +286,9 @@ BlLoadModule(IN PWCHAR ModuleName)
return Status;
}
/* Zero module information block */
/* Zero module information block and initialize dependencies list */
RtlZeroMemory(ModuleInfo, sizeof(XTBL_MODULE_INFO));
RtlInitializeListHead(&ModuleInfo->Dependencies);
/* Setup PE/COFF EFI image headers */
DosHeader = (PPECOFF_IMAGE_DOS_HEADER)ModuleData;
@ -317,9 +319,14 @@ BlLoadModule(IN PWCHAR ModuleName)
return STATUS_EFI_UNSUPPORTED;
}
/* Add dependency module name to the list */
RtlConcatenateWideString(ModuleInfo->Dependencies, DepsData, RtlWideStringLength(DepsData, 0));
RtlConcatenateWideString(ModuleInfo->Dependencies, L" ", 1);
/* Allocate memory for module dependency */
Status = BlMemoryAllocatePool(sizeof(XTBL_MODULE_DEPS), (PVOID*)&ModuleDependencies);
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 */
DepsData += 8;
@ -521,9 +528,15 @@ BlStartXtLoader(IN EFI_HANDLE ImageHandle,
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 */