From fd7f3b94b13d06d67797e9cbf7261c2bd8cf2afe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20Ha=CC=88user?= <8659494+mhaeuser@users.noreply.github.com> Date: Fri, 28 Apr 2023 19:36:44 +0200 Subject: [PATCH] BaseTools: Introduce new HII section design --- BaseTools/Conf/build_rule.template | 43 +---- BaseTools/Conf/tools_def.template | 29 +++- BaseTools/ImageTool/ImageTool.c | 75 ++++++++- BaseTools/Scripts/Base.lds | 6 +- BaseTools/Scripts/Merge.lds | 6 +- BaseTools/Source/Python/AutoGen/GenC.py | 8 + MdeModulePkg/Logo/Logo.c | 25 +-- .../HiiResourcesSample.c | 20 +-- NetworkPkg/Application/VConfig/VConfig.c | 24 +-- .../LinuxInitrdDynamicShellCommand.c | 23 +-- PrmPkg/Application/PrmInfo/PrmInfo.c | 20 +-- ShellPkg/Application/Shell/ShellManParser.c | 151 ++---------------- ShellPkg/DynamicCommand/DpDynamicCommand/Dp.c | 23 +-- .../DynamicCommand/HttpDynamicCommand/Http.c | 23 +-- .../DynamicCommand/TftpDynamicCommand/Tftp.c | 23 +-- 15 files changed, 141 insertions(+), 358 deletions(-) diff --git a/BaseTools/Conf/build_rule.template b/BaseTools/Conf/build_rule.template index a0142a5c47..2b9ce81b40 100755 --- a/BaseTools/Conf/build_rule.template +++ b/BaseTools/Conf/build_rule.template @@ -379,45 +379,6 @@ $(CP) ${dst} $(BIN_DIR)(+)$(MODULE_NAME_GUID).efi -$(CP) $(DEBUG_DIR)(+)*.map $(OUTPUT_DIR) -[Dynamic-Library-File.UEFI_HII] - - ?.dll - - - $(OUTPUT_DIR)(+)$(MODULE_NAME).efi - $(DEBUG_DIR)(+)$(MODULE_NAME).efi - $(OUTPUT_DIR)(+)$(MODULE_NAME).map - - - $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc - - - ImageTool GenImage -c PE -t $(MODULE_TYPE) -h $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc -o ${dst} ${src} - $(CP) ${dst} $(DEBUG_DIR) - $(CP) ${dst} $(BIN_DIR)(+)$(MODULE_NAME_GUID).efi - -$(CP) $(DEBUG_DIR)(+)*.map $(OUTPUT_DIR) - -$(CP) $(DEBUG_DIR)(+)*.pdb $(OUTPUT_DIR) - - - $(CP) ${src} $(DEBUG_DIR)(+)$(MODULE_NAME).strip - $(OBJCOPY) $(OBJCOPY_STRIPFLAG) $(DEBUG_DIR)(+)$(MODULE_NAME).strip - - ImageTool GenImage -c PE -t $(MODULE_TYPE) -h $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc -o ${dst} $(DEBUG_DIR)(+)$(MODULE_NAME).strip - - $(CP) ${dst} $(DEBUG_DIR) - $(CP) ${dst} $(BIN_DIR)(+)$(MODULE_NAME_GUID).efi - -$(CP) $(DEBUG_DIR)(+)*.map $(OUTPUT_DIR) - - - # tool to convert Mach-O to PE/COFF - "$(MTOC)" -subsystem $(MODULE_TYPE) $(MTOC_FLAGS) ${src} $(DEBUG_DIR)(+)$(MODULE_NAME).pecoff - # create symbol file for GDB debug - -$(DSYMUTIL) ${src} - ImageTool GenImage -c PE -t $(MODULE_TYPE) -h $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc -o ${dst} $(DEBUG_DIR)(+)$(MODULE_NAME).pecoff - $(CP) ${dst} $(DEBUG_DIR) - $(CP) ${dst} $(BIN_DIR)(+)$(MODULE_NAME_GUID).efi - -$(CP) $(DEBUG_DIR)(+)*.map $(OUTPUT_DIR) - [Dependency-Expression-File] ?.dxs, ?.Dxs, ?.DXS @@ -643,7 +604,7 @@ *.hpk - $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc + $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.c - ImageTool HiiBin $(MODULE_GUID) -o $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc $(HII_BINARY_PACKAGES) + ImageTool HiiSrc $(MODULE_GUID) -o $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.c $(HII_BINARY_PACKAGES) diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_def.template index 498499c4f6..31353e96f6 100755 --- a/BaseTools/Conf/tools_def.template +++ b/BaseTools/Conf/tools_def.template @@ -20,6 +20,19 @@ IDENTIFIER = Default TOOL_CHAIN_CONF +# +# FIXME: For GCC, the linker script must be utilized to merge image sections. +# Currently, there is no easy way to perform conditional merges due to the lack +# of conditions or preprocessing. +# +!ifdef $(EDK2_SEPARATE_HII) +DEFINE MSFT_HII = +DEFINE XCODE_HII = +!else +DEFINE MSFT_HII = /MERGE:.hii=.rdata +DEFINE XCODE_HII = -rename_section __HII __hii __DATA_CONST __hii +!endif + !ifdef $(EDK2_MERGE_RODATA_INTO_TEXT) DEFINE DLINK_SCRIPT = -Wl,--script=$(EDK_TOOLS_PATH)/Scripts/Merge.lds DEFINE MSFT_MERGE = /MERGE:.rdata=.text @@ -110,7 +123,7 @@ DEFINE MSFT_DEPS_FLAGS = /showIncludes DEFINE MSFT_ASLPP_FLAGS = /nologo /E /C /FIAutoGen.h DEFINE MSFT_ASLCC_FLAGS = /nologo /c /FIAutoGen.h /TC /Dmain=ReferenceAcpiTable DEFINE MSFT_ASLDLINK_FLAGS = /NODEFAULTLIB /ENTRY:ReferenceAcpiTable /SUBSYSTEM:CONSOLE -DEFINE MSFT_DLINK_COMMON = /NOLOGO /NODEFAULTLIB /IGNORE:4001 /OPT:REF /OPT:ICF=10 /MAP /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER DEF(MSFT_ALIGN) DEF(MSFT_MERGE) +DEFINE MSFT_DLINK_COMMON = /NOLOGO /NODEFAULTLIB /IGNORE:4001 /OPT:REF /OPT:ICF=10 /MAP /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER DEF(MSFT_ALIGN) DEF(MSFT_HII) DEF(MSFT_MERGE) DEFINE DTCPP_BIN = ENV(DTCPP_PREFIX)cpp DEFINE DTC_BIN = ENV(DTC_PREFIX)dtc @@ -1316,7 +1329,7 @@ RELEASE_CLANGDWARF_AARCH64_DLINK_FLAGS = DEF(CLANGDWARF_AARCH64_DLINK_FLAGS) -fl # image. This also makes the usage of "-read_only_relocs suppress" safe, as # relocations can now target __TEXT without triggering the same issue. # -DEFINE XCODE5_RORELOCS_ARGS = -segprot __RO_RELOCS rw- rw- -segment_order __RO_RELOCS:__TEXT:__DATA_CONST:__DATA -rename_section __TEXT __text __RO_RELOCS __text -rename_section __RO_RELOCS __text __TEXT __text +DEFINE XCODE5_RORELOCS_ARGS = -segprot __RO_RELOCS rw- rw- -segment_order __RO_RELOCS:__TEXT:__DATA_CONST:__DATA:__HII -rename_section __TEXT __text __RO_RELOCS __text -rename_section __RO_RELOCS __text __TEXT __text DEFINE XCODE5_RODATA_ARGS = DEF(XCODE5_RORELOCS_ARGS) -segprot __DATA_CONST r-- r-- -rename_section __DATA __const __DATA_CONST __const -rename_section __TEXT __const __DATA_CONST __text_const -rename_section __TEXT __cstring __DATA_CONST __cstring -rename_section __TEXT __ustring __DATA_CONST __ustring ################## @@ -1339,9 +1352,9 @@ RELEASE_XCODE5_*_MTOC_FLAGS = -align DEF(XCODE_ALIGN) -require_read_only_relocs #################### # IA-32 definitions #################### - DEBUG_XCODE5_IA32_DLINK_FLAGS = DEF(XCODE5_RODATA_ARGS) -arch i386 -u _$(IMAGE_ENTRY_POINT) -e _$(IMAGE_ENTRY_POINT) -preload -segalign DEF(XCODE_ALIGN) -pie -all_load -dead_strip -seg1addr DEF(XCODE_ADDR) -read_only_relocs suppress -map $(DEST_DIR_DEBUG)/$(BASE_NAME).map DEF(XCODE_MERGE) - NOOPT_XCODE5_IA32_DLINK_FLAGS = DEF(XCODE5_RODATA_ARGS) -arch i386 -u _$(IMAGE_ENTRY_POINT) -e _$(IMAGE_ENTRY_POINT) -preload -segalign DEF(XCODE_ALIGN) -pie -all_load -dead_strip -seg1addr DEF(XCODE_ADDR) -read_only_relocs suppress -map $(DEST_DIR_DEBUG)/$(BASE_NAME).map DEF(XCODE_MERGE) -RELEASE_XCODE5_IA32_DLINK_FLAGS = DEF(XCODE5_RODATA_ARGS) -arch i386 -u _$(IMAGE_ENTRY_POINT) -e _$(IMAGE_ENTRY_POINT) -preload -segalign DEF(XCODE_ALIGN) -pie -all_load -dead_strip -seg1addr DEF(XCODE_ADDR) -read_only_relocs suppress -map $(DEST_DIR_DEBUG)/$(BASE_NAME).map DEF(XCODE_MERGE) + DEBUG_XCODE5_IA32_DLINK_FLAGS = DEF(XCODE5_RODATA_ARGS) -arch i386 -u _$(IMAGE_ENTRY_POINT) -e _$(IMAGE_ENTRY_POINT) -preload -segalign DEF(XCODE_ALIGN) -pie -all_load -dead_strip -seg1addr DEF(XCODE_ADDR) -read_only_relocs suppress -map $(DEST_DIR_DEBUG)/$(BASE_NAME).map DEF(XCODE_HII) DEF(XCODE_MERGE) + NOOPT_XCODE5_IA32_DLINK_FLAGS = DEF(XCODE5_RODATA_ARGS) -arch i386 -u _$(IMAGE_ENTRY_POINT) -e _$(IMAGE_ENTRY_POINT) -preload -segalign DEF(XCODE_ALIGN) -pie -all_load -dead_strip -seg1addr DEF(XCODE_ADDR) -read_only_relocs suppress -map $(DEST_DIR_DEBUG)/$(BASE_NAME).map DEF(XCODE_HII) DEF(XCODE_MERGE) +RELEASE_XCODE5_IA32_DLINK_FLAGS = DEF(XCODE5_RODATA_ARGS) -arch i386 -u _$(IMAGE_ENTRY_POINT) -e _$(IMAGE_ENTRY_POINT) -preload -segalign DEF(XCODE_ALIGN) -pie -all_load -dead_strip -seg1addr DEF(XCODE_ADDR) -read_only_relocs suppress -map $(DEST_DIR_DEBUG)/$(BASE_NAME).map DEF(XCODE_HII) DEF(XCODE_MERGE) *_XCODE5_IA32_SLINK_FLAGS = -static -o DEBUG_XCODE5_IA32_ASM_FLAGS = -arch i386 -g @@ -1357,9 +1370,9 @@ RELEASE_XCODE5_IA32_CC_FLAGS = -arch i386 -c -Os -Wall -Werror -inclu ################## # X64 definitions ################## - DEBUG_XCODE5_X64_DLINK_FLAGS = DEF(XCODE5_RODATA_ARGS) -arch x86_64 -u _$(IMAGE_ENTRY_POINT) -e _$(IMAGE_ENTRY_POINT) -preload -segalign DEF(XCODE_ALIGN) -pie -all_load -dead_strip -seg1addr DEF(XCODE_ADDR) -read_only_relocs suppress -map $(DEST_DIR_DEBUG)/$(BASE_NAME).map DEF(XCODE_MERGE) - NOOPT_XCODE5_X64_DLINK_FLAGS = DEF(XCODE5_RODATA_ARGS) -arch x86_64 -u _$(IMAGE_ENTRY_POINT) -e _$(IMAGE_ENTRY_POINT) -preload -segalign DEF(XCODE_ALIGN) -pie -all_load -dead_strip -seg1addr DEF(XCODE_ADDR) -read_only_relocs suppress -map $(DEST_DIR_DEBUG)/$(BASE_NAME).map DEF(XCODE_MERGE) -RELEASE_XCODE5_X64_DLINK_FLAGS = DEF(XCODE5_RODATA_ARGS) -arch x86_64 -u _$(IMAGE_ENTRY_POINT) -e _$(IMAGE_ENTRY_POINT) -preload -segalign DEF(XCODE_ALIGN) -pie -all_load -dead_strip -seg1addr DEF(XCODE_ADDR) -read_only_relocs suppress -map $(DEST_DIR_DEBUG)/$(BASE_NAME).map DEF(XCODE_MERGE) + DEBUG_XCODE5_X64_DLINK_FLAGS = DEF(XCODE5_RODATA_ARGS) -arch x86_64 -u _$(IMAGE_ENTRY_POINT) -e _$(IMAGE_ENTRY_POINT) -preload -segalign DEF(XCODE_ALIGN) -pie -all_load -dead_strip -seg1addr DEF(XCODE_ADDR) -read_only_relocs suppress -map $(DEST_DIR_DEBUG)/$(BASE_NAME).map DEF(XCODE_HII) DEF(XCODE_MERGE) + NOOPT_XCODE5_X64_DLINK_FLAGS = DEF(XCODE5_RODATA_ARGS) -arch x86_64 -u _$(IMAGE_ENTRY_POINT) -e _$(IMAGE_ENTRY_POINT) -preload -segalign DEF(XCODE_ALIGN) -pie -all_load -dead_strip -seg1addr DEF(XCODE_ADDR) -read_only_relocs suppress -map $(DEST_DIR_DEBUG)/$(BASE_NAME).map DEF(XCODE_HII) DEF(XCODE_MERGE) +RELEASE_XCODE5_X64_DLINK_FLAGS = DEF(XCODE5_RODATA_ARGS) -arch x86_64 -u _$(IMAGE_ENTRY_POINT) -e _$(IMAGE_ENTRY_POINT) -preload -segalign DEF(XCODE_ALIGN) -pie -all_load -dead_strip -seg1addr DEF(XCODE_ADDR) -read_only_relocs suppress -map $(DEST_DIR_DEBUG)/$(BASE_NAME).map DEF(XCODE_HII) DEF(XCODE_MERGE) *_XCODE5_X64_SLINK_FLAGS = -static -o DEBUG_XCODE5_X64_ASM_FLAGS = -arch x86_64 -g diff --git a/BaseTools/ImageTool/ImageTool.c b/BaseTools/ImageTool/ImageTool.c index 2527526b86..5d93b009bd 100644 --- a/BaseTools/ImageTool/ImageTool.c +++ b/BaseTools/ImageTool/ImageTool.c @@ -16,9 +16,14 @@ #define EFI_ACPI_1_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_VERSION 0x0 +#define DO_NOT_EDIT_HEADER \ + "//\n" \ + "// DO NOT EDIT -- auto-generated file\n" \ + "//\n" + static RETURN_STATUS -HiiBin ( +HiiSrc ( IN const char *HiiName, IN const char *Guid, IN const char *FileNames[], @@ -29,6 +34,8 @@ HiiBin ( void *Hii; UINT32 HiiSize; GUID HiiGuid; + FILE *FilePtr; + UINT32 Index; assert (FileNames != NULL); assert (HiiName != NULL); @@ -42,11 +49,69 @@ HiiBin ( Status = ConstructHii (FileNames, NumOfFiles, &HiiGuid, &Hii, &HiiSize); if (RETURN_ERROR (Status)) { - fprintf (stderr, "ImageTool: Could not construct HiiBin\n"); + fprintf (stderr, "ImageTool: Could not construct HiiSrc\n"); return Status; } - UserWriteFile (HiiName, Hii, HiiSize); + FilePtr = fopen (HiiName, "w"); + if (FilePtr == NULL) { + free (Hii); + return RETURN_NO_MEDIA; + } + + fprintf ( + FilePtr, + DO_NOT_EDIT_HEADER + "\n" + "#include \"AutoGen.h\"\n" + "\n" + "typedef struct {\n" + " UINT32 Size;\n" + " UINT8 Data[%u];\n" + "} MODULE_HII_PACKAGE_LIST_%u;\n" + "\n" + "STATIC_ASSERT (\n" + " OFFSET_OF (MODULE_HII_PACKAGE_LIST_%u, Size) == OFFSET_OF (MODULE_HII_PACKAGE_LIST, Size) &&\n" + " OFFSET_OF (MODULE_HII_PACKAGE_LIST_%u, Data) == OFFSET_OF (MODULE_HII_PACKAGE_LIST, Header) &&\n" + " sizeof (MODULE_HII_PACKAGE_LIST) == sizeof (UINT32) + sizeof (EFI_HII_PACKAGE_LIST_HEADER),\n" + " \"MODULE_HII_PACKAGE_LIST does not have the expected structure.\"\n" + " );\n" + "\n" + "#if defined (__APPLE__)\n" + "__attribute__ ((section (\"__HII,__hii\")))\n" + "#elif defined (__GNUC__) || defined (__clang__)\n" + "__attribute__ ((section (\".hii\")))\n" + "#elif defined (_MSC_EXTENSIONS)\n" + "#pragma section (\".hii\", read)\n" + "__declspec (allocate(\".hii\"))\n" + "#endif\n" + "STATIC CONST MODULE_HII_PACKAGE_LIST_%u mModuleHiiPackageList = {\n" + " %u,\n" + " {", + HiiSize, + HiiSize, + HiiSize, + HiiSize, + HiiSize, + HiiSize + ); + + for (Index = 0; Index < HiiSize; ++Index) { + if (Index % 12 == 0) { + fprintf (FilePtr, "\n "); + } + fprintf (FilePtr, " 0x%02X,", ((const uint8_t *)Hii)[Index]); + } + + fprintf ( + FilePtr, + "\n" + " }\n" + "};\n" + "\n" + "GLOBAL_REMOVE_IF_UNREFERENCED CONST MODULE_HII_PACKAGE_LIST *gModuleHiiPackageList =\n" + " (CONST MODULE_HII_PACKAGE_LIST *)&mModuleHiiPackageList;\n" + ); free (Hii); @@ -496,7 +561,7 @@ int main (int argc, const char *argv[]) raise (); return -1; } - } else if (strcmp (argv[1], "HiiBin") == 0) { + } else if (strcmp (argv[1], "HiiSrc") == 0) { if (argc < 5 || strcmp (argv[3], "-o") != 0) { fprintf (stderr, "ImageTool: Command arguments are missing\n"); fprintf (stderr, " Usage: ImageTool HiiBin GUID -o OutputFile InputFile1 InputFile2 ...\n"); @@ -506,7 +571,7 @@ int main (int argc, const char *argv[]) NumOfFiles = (UINT32)argc - 5U; - Status = HiiBin (argv[4], argv[2], &argv[5], NumOfFiles); + Status = HiiSrc (argv[4], argv[2], &argv[5], NumOfFiles); if (RETURN_ERROR (Status)) { raise (); return -1; diff --git a/BaseTools/Scripts/Base.lds b/BaseTools/Scripts/Base.lds index 8823db55c2..b8318facdb 100644 --- a/BaseTools/Scripts/Base.lds +++ b/BaseTools/Scripts/Base.lds @@ -20,7 +20,7 @@ SECTIONS { } .rodata : ALIGN(CONSTANT(MAXPAGESIZE)) { - *(.rodata .rodata.* .data.rel.ro .data.rel.ro.* .gnu.linkonce.r.*) + *(.rodata .rodata.* .data.rel.ro .data.rel.ro.* .gnu.linkonce.r.* .hii) *(.got .got.*) /* @@ -39,10 +39,6 @@ SECTIONS { *(.bss .bss.*) } - .hii : ALIGN(CONSTANT(MAXPAGESIZE)) { - KEEP (*(.hii)) - } - .eh_frame : ALIGN(CONSTANT(MAXPAGESIZE)) { KEEP (*(.eh_frame)) } diff --git a/BaseTools/Scripts/Merge.lds b/BaseTools/Scripts/Merge.lds index bc5132180b..51c3c2ef43 100644 --- a/BaseTools/Scripts/Merge.lds +++ b/BaseTools/Scripts/Merge.lds @@ -17,7 +17,7 @@ SECTIONS { .text : ALIGN(CONSTANT(MAXPAGESIZE)) { *(.text .text.* .stub .gnu.linkonce.t.*) - *(.rodata .rodata.* .data.rel.ro .data.rel.ro.* .gnu.linkonce.r.*) + *(.rodata .rodata.* .data.rel.ro .data.rel.ro.* .gnu.linkonce.r.* .hii) *(.got .got.*) /* @@ -36,10 +36,6 @@ SECTIONS { *(.bss .bss.*) } - .hii : ALIGN(CONSTANT(MAXPAGESIZE)) { - KEEP (*(.hii)) - } - .eh_frame : ALIGN(CONSTANT(MAXPAGESIZE)) { KEEP (*(.eh_frame)) } diff --git a/BaseTools/Source/Python/AutoGen/GenC.py b/BaseTools/Source/Python/AutoGen/GenC.py index a2053d5485..8cc0687f17 100755 --- a/BaseTools/Source/Python/AutoGen/GenC.py +++ b/BaseTools/Source/Python/AutoGen/GenC.py @@ -1983,6 +1983,14 @@ def CreateHeaderCode(Info, AutoGenC, AutoGenH): AutoGenH.Append('\nextern GUID gEdkiiDscPlatformGuid;') AutoGenH.Append('\nextern CHAR8 *gEfiCallerBaseName;\n\n') + if Info.BuildType == 'UEFI_HII': + AutoGenH.Append('typedef struct {\n') + AutoGenH.Append(' UINT32 Size;\n') + AutoGenH.Append(' EFI_HII_PACKAGE_LIST_HEADER Header;\n') + AutoGenH.Append('} MODULE_HII_PACKAGE_LIST;\n') + + AutoGenH.Append('\nextern CONST MODULE_HII_PACKAGE_LIST *gModuleHiiPackageList;\n\n') + if Info.IsLibrary: return diff --git a/MdeModulePkg/Logo/Logo.c b/MdeModulePkg/Logo/Logo.c index 8ab874d2da..90e32c7165 100644 --- a/MdeModulePkg/Logo/Logo.c +++ b/MdeModulePkg/Logo/Logo.c @@ -99,10 +99,9 @@ InitializeLogo ( IN EFI_SYSTEM_TABLE *SystemTable ) { - EFI_STATUS Status; - EFI_HII_PACKAGE_LIST_HEADER *PackageList; - EFI_HII_DATABASE_PROTOCOL *HiiDatabase; - EFI_HANDLE Handle; + EFI_STATUS Status; + EFI_HII_DATABASE_PROTOCOL *HiiDatabase; + EFI_HANDLE Handle; Status = gBS->LocateProtocol ( &gEfiHiiDatabaseProtocolGuid, @@ -118,28 +117,12 @@ InitializeLogo ( ); ASSERT_EFI_ERROR (Status); - // - // Retrieve HII package list from ImageHandle - // - Status = gBS->OpenProtocol ( - ImageHandle, - &gEfiHiiPackageListProtocolGuid, - (VOID **)&PackageList, - ImageHandle, - NULL, - EFI_OPEN_PROTOCOL_GET_PROTOCOL - ); - if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "HII Image Package with logo not found in PE/COFF resource section\n")); - return Status; - } - // // Publish HII package list to HII Database. // Status = HiiDatabase->NewPackageList ( HiiDatabase, - PackageList, + &gModuleHiiPackageList->Header, NULL, &mHiiHandle ); diff --git a/MdeModulePkg/Universal/HiiResourcesSampleDxe/HiiResourcesSample.c b/MdeModulePkg/Universal/HiiResourcesSampleDxe/HiiResourcesSample.c index dd0ae5001d..6a3fc2273d 100644 --- a/MdeModulePkg/Universal/HiiResourcesSampleDxe/HiiResourcesSample.c +++ b/MdeModulePkg/Universal/HiiResourcesSampleDxe/HiiResourcesSample.c @@ -67,23 +67,7 @@ HiiResourcesSampleInit ( IN EFI_SYSTEM_TABLE *SystemTable ) { - EFI_STATUS Status; - EFI_HII_PACKAGE_LIST_HEADER *PackageList; - - // - // Retrieve HII package list from ImageHandle - // - Status = gBS->OpenProtocol ( - ImageHandle, - &gEfiHiiPackageListProtocolGuid, - (VOID **)&PackageList, - ImageHandle, - NULL, - EFI_OPEN_PROTOCOL_GET_PROTOCOL - ); - if (EFI_ERROR (Status)) { - return Status; - } + EFI_STATUS Status; // // Publish sample Fromset @@ -103,7 +87,7 @@ HiiResourcesSampleInit ( // Status = gHiiDatabase->NewPackageList ( gHiiDatabase, - PackageList, + &gModuleHiiPackageList->Header, mDriverHandle, &mHiiHandle ); diff --git a/NetworkPkg/Application/VConfig/VConfig.c b/NetworkPkg/Application/VConfig/VConfig.c index 2c323e377b..8004f5380f 100644 --- a/NetworkPkg/Application/VConfig/VConfig.c +++ b/NetworkPkg/Application/VConfig/VConfig.c @@ -606,34 +606,18 @@ VlanConfigMain ( IN EFI_SYSTEM_TABLE *SystemTable ) { - LIST_ENTRY *List; - CONST CHAR16 *Str; - EFI_HII_PACKAGE_LIST_HEADER *PackageList; - EFI_STATUS Status; + LIST_ENTRY *List; + CONST CHAR16 *Str; + EFI_STATUS Status; mImageHandle = ImageHandle; - // - // Retrieve HII package list from ImageHandle - // - Status = gBS->OpenProtocol ( - ImageHandle, - &gEfiHiiPackageListProtocolGuid, - (VOID **)&PackageList, - ImageHandle, - NULL, - EFI_OPEN_PROTOCOL_GET_PROTOCOL - ); - if (EFI_ERROR (Status)) { - return Status; - } - // // Publish HII package list to HII Database. // Status = gHiiDatabase->NewPackageList ( gHiiDatabase, - PackageList, + &gModuleHiiPackageList->Header, NULL, &mHiiHandle ); diff --git a/OvmfPkg/LinuxInitrdDynamicShellCommand/LinuxInitrdDynamicShellCommand.c b/OvmfPkg/LinuxInitrdDynamicShellCommand/LinuxInitrdDynamicShellCommand.c index 40c464ce16..0b30492cf3 100644 --- a/OvmfPkg/LinuxInitrdDynamicShellCommand/LinuxInitrdDynamicShellCommand.c +++ b/OvmfPkg/LinuxInitrdDynamicShellCommand/LinuxInitrdDynamicShellCommand.c @@ -441,32 +441,15 @@ InitializeHiiPackage ( EFI_HANDLE ImageHandle ) { - EFI_STATUS Status; - EFI_HII_PACKAGE_LIST_HEADER *PackageList; - EFI_HII_HANDLE HiiHandle; - - // - // Retrieve HII package list from ImageHandle - // - Status = gBS->OpenProtocol ( - ImageHandle, - &gEfiHiiPackageListProtocolGuid, - (VOID **)&PackageList, - ImageHandle, - NULL, - EFI_OPEN_PROTOCOL_GET_PROTOCOL - ); - ASSERT_EFI_ERROR (Status); - if (EFI_ERROR (Status)) { - return NULL; - } + EFI_STATUS Status; + EFI_HII_HANDLE HiiHandle; // // Publish HII package list to HII Database. // Status = gHiiDatabase->NewPackageList ( gHiiDatabase, - PackageList, + &gModuleHiiPackageList->Header, NULL, &HiiHandle ); diff --git a/PrmPkg/Application/PrmInfo/PrmInfo.c b/PrmPkg/Application/PrmInfo/PrmInfo.c index 0cde2fad3b..86b0e9d905 100644 --- a/PrmPkg/Application/PrmInfo/PrmInfo.c +++ b/PrmPkg/Application/PrmInfo/PrmInfo.c @@ -678,30 +678,14 @@ UefiMain ( IN EFI_SYSTEM_TABLE *SystemTable ) { - EFI_STATUS Status; - EFI_HII_PACKAGE_LIST_HEADER *PackageList; - - // - // Retrieve the HII package list from ImageHandle - // - Status = gBS->OpenProtocol ( - ImageHandle, - &gEfiHiiPackageListProtocolGuid, - (VOID **)&PackageList, - ImageHandle, - NULL, - EFI_OPEN_PROTOCOL_GET_PROTOCOL - ); - if (EFI_ERROR (Status)) { - return Status; - } + EFI_STATUS Status; // // Publish the HII package list to the HII Database // Status = gHiiDatabase->NewPackageList ( gHiiDatabase, - PackageList, + &gModuleHiiPackageList->Header, NULL, &mPrmInfoHiiHandle ); diff --git a/ShellPkg/Application/Shell/ShellManParser.c b/ShellPkg/Application/Shell/ShellManParser.c index 5c823cd7f5..4ef8d48bf0 100644 --- a/ShellPkg/Application/Shell/ShellManParser.c +++ b/ShellPkg/Application/Shell/ShellManParser.c @@ -560,19 +560,14 @@ ProcessManFile ( OUT CHAR16 **HelpText ) { - CHAR16 *TempString; - SHELL_FILE_HANDLE FileHandle; - EFI_HANDLE CmdFileImgHandle; - EFI_STATUS Status; - UINTN HelpSize; - UINTN BriefSize; - UINTN StringIdWalker; - BOOLEAN Ascii; - CHAR16 *CmdFileName; - CHAR16 *CmdFilePathName; - EFI_DEVICE_PATH_PROTOCOL *FileDevPath; - EFI_DEVICE_PATH_PROTOCOL *DevPath; - EFI_HII_PACKAGE_LIST_HEADER *PackageListHeader; + CHAR16 *TempString; + SHELL_FILE_HANDLE FileHandle; + EFI_STATUS Status; + UINTN HelpSize; + UINTN BriefSize; + BOOLEAN Ascii; + EFI_DEVICE_PATH_PROTOCOL *FileDevPath; + EFI_DEVICE_PATH_PROTOCOL *DevPath; if ( (ManFileName == NULL) || (Command == NULL) @@ -582,17 +577,12 @@ ProcessManFile ( return (EFI_INVALID_PARAMETER); } - HelpSize = 0; - BriefSize = 0; - StringIdWalker = 0; - TempString = NULL; - Ascii = FALSE; - CmdFileName = NULL; - CmdFilePathName = NULL; - CmdFileImgHandle = NULL; - PackageListHeader = NULL; - FileDevPath = NULL; - DevPath = NULL; + HelpSize = 0; + BriefSize = 0; + TempString = NULL; + Ascii = FALSE; + FileDevPath = NULL; + DevPath = NULL; // // See if it's in HII first @@ -646,113 +636,6 @@ ProcessManFile ( goto Done; } } - - // - // Load the app image to check EFI_HII_PACKAGE_LIST_PROTOCOL. - // - CmdFileName = GetExecuatableFileName (TempString); - if (CmdFileName == NULL) { - Status = EFI_OUT_OF_RESOURCES; - goto Done; - } - - // - // If the file in CWD then use the file name, else use the full - // path name. - // - CmdFilePathName = ShellFindFilePath (CmdFileName); - if (CmdFilePathName == NULL) { - Status = EFI_NOT_FOUND; - goto Done; - } - - DevPath = ShellInfoObject.NewEfiShellProtocol->GetDevicePathFromFilePath (CmdFilePathName); - Status = gBS->LoadImage (FALSE, gImageHandle, DevPath, NULL, 0, &CmdFileImgHandle); - if (EFI_ERROR (Status)) { - // - // With EFI_SECURITY_VIOLATION retval, the Image was loaded and an ImageHandle was created - // with a valid EFI_LOADED_IMAGE_PROTOCOL, but the image can not be started right now. - // If the caller doesn't have the option to defer the execution of an image, we should - // unload image for the EFI_SECURITY_VIOLATION to avoid the resource leak. - // - if (Status == EFI_SECURITY_VIOLATION) { - gBS->UnloadImage (CmdFileImgHandle); - } - - *HelpText = NULL; - goto Done; - } - - Status = gBS->OpenProtocol ( - CmdFileImgHandle, - &gEfiHiiPackageListProtocolGuid, - (VOID **)&PackageListHeader, - gImageHandle, - NULL, - EFI_OPEN_PROTOCOL_GET_PROTOCOL - ); - if (EFI_ERROR (Status)) { - *HelpText = NULL; - goto Done; - } - - // - // If get package list on image handle, install it on HiiDatabase. - // - Status = gBS->InstallProtocolInterface ( - &mShellManDriverHandle, - &gEfiDevicePathProtocolGuid, - EFI_NATIVE_INTERFACE, - &mShellManHiiDevicePath - ); - if (EFI_ERROR (Status)) { - goto Done; - } - - Status = gHiiDatabase->NewPackageList ( - gHiiDatabase, - PackageListHeader, - mShellManDriverHandle, - &mShellManHiiHandle - ); - if (EFI_ERROR (Status)) { - goto Done; - } - - StringIdWalker = 1; - do { - SHELL_FREE_NON_NULL (TempString); - if (BriefDesc != NULL) { - SHELL_FREE_NON_NULL (*BriefDesc); - } - - TempString = HiiGetString (mShellManHiiHandle, (EFI_STRING_ID)StringIdWalker, NULL); - if (TempString == NULL) { - Status = EFI_NOT_FOUND; - goto Done; - } - - FileHandle = ConvertEfiFileProtocolToShellHandle (CreateFileInterfaceMem (TRUE), NULL); - HelpSize = StrLen (TempString) * sizeof (CHAR16); - ShellWriteFile (FileHandle, &HelpSize, TempString); - ShellSetFilePosition (FileHandle, 0); - HelpSize = 0; - BriefSize = 0; - Status = ManFileFindTitleSection (FileHandle, Command, BriefDesc, &BriefSize, &Ascii); - if (!EFI_ERROR (Status) && (HelpText != NULL)) { - Status = ManFileFindSections (FileHandle, Sections, HelpText, &HelpSize, Ascii); - } - - ShellCloseFile (&FileHandle); - if (!EFI_ERROR (Status)) { - // - // Found what we need and return - // - goto Done; - } - - StringIdWalker += 1; - } while (StringIdWalker < 0xFFFF && TempString != NULL); } Done: @@ -770,13 +653,7 @@ Done: mShellManHiiHandle = NULL; } - if (CmdFileImgHandle != NULL) { - Status = gBS->UnloadImage (CmdFileImgHandle); - } - SHELL_FREE_NON_NULL (TempString); - SHELL_FREE_NON_NULL (CmdFileName); - SHELL_FREE_NON_NULL (CmdFilePathName); SHELL_FREE_NON_NULL (FileDevPath); SHELL_FREE_NON_NULL (DevPath); diff --git a/ShellPkg/DynamicCommand/DpDynamicCommand/Dp.c b/ShellPkg/DynamicCommand/DpDynamicCommand/Dp.c index 1799ab176a..1b7ca6c0c9 100644 --- a/ShellPkg/DynamicCommand/DpDynamicCommand/Dp.c +++ b/ShellPkg/DynamicCommand/DpDynamicCommand/Dp.c @@ -974,32 +974,15 @@ InitializeHiiPackage ( EFI_HANDLE ImageHandle ) { - EFI_STATUS Status; - EFI_HII_PACKAGE_LIST_HEADER *PackageList; - EFI_HII_HANDLE HiiHandle; - - // - // Retrieve HII package list from ImageHandle - // - Status = gBS->OpenProtocol ( - ImageHandle, - &gEfiHiiPackageListProtocolGuid, - (VOID **)&PackageList, - ImageHandle, - NULL, - EFI_OPEN_PROTOCOL_GET_PROTOCOL - ); - ASSERT_EFI_ERROR (Status); - if (EFI_ERROR (Status)) { - return NULL; - } + EFI_STATUS Status; + EFI_HII_HANDLE HiiHandle; // // Publish HII package list to HII Database. // Status = gHiiDatabase->NewPackageList ( gHiiDatabase, - PackageList, + &gModuleHiiPackageList->Header, NULL, &HiiHandle ); diff --git a/ShellPkg/DynamicCommand/HttpDynamicCommand/Http.c b/ShellPkg/DynamicCommand/HttpDynamicCommand/Http.c index b4e88e7635..615fb08d04 100644 --- a/ShellPkg/DynamicCommand/HttpDynamicCommand/Http.c +++ b/ShellPkg/DynamicCommand/HttpDynamicCommand/Http.c @@ -1866,32 +1866,15 @@ InitializeHiiPackage ( IN EFI_HANDLE ImageHandle ) { - EFI_STATUS Status; - EFI_HII_PACKAGE_LIST_HEADER *PackageList; - EFI_HII_HANDLE HiiHandle; - - // - // Retrieve HII package list from ImageHandle. - // - Status = gBS->OpenProtocol ( - ImageHandle, - &gEfiHiiPackageListProtocolGuid, - (VOID **)&PackageList, - ImageHandle, - NULL, - EFI_OPEN_PROTOCOL_GET_PROTOCOL - ); - ASSERT_EFI_ERROR (Status); - if (EFI_ERROR (Status)) { - return NULL; - } + EFI_STATUS Status; + EFI_HII_HANDLE HiiHandle; // // Publish HII package list to HII Database. // Status = gHiiDatabase->NewPackageList ( gHiiDatabase, - PackageList, + &gModuleHiiPackageList->Header, NULL, &HiiHandle ); diff --git a/ShellPkg/DynamicCommand/TftpDynamicCommand/Tftp.c b/ShellPkg/DynamicCommand/TftpDynamicCommand/Tftp.c index 7e5c73b3da..006ed90c5a 100644 --- a/ShellPkg/DynamicCommand/TftpDynamicCommand/Tftp.c +++ b/ShellPkg/DynamicCommand/TftpDynamicCommand/Tftp.c @@ -1210,32 +1210,15 @@ InitializeHiiPackage ( EFI_HANDLE ImageHandle ) { - EFI_STATUS Status; - EFI_HII_PACKAGE_LIST_HEADER *PackageList; - EFI_HII_HANDLE HiiHandle; - - // - // Retrieve HII package list from ImageHandle - // - Status = gBS->OpenProtocol ( - ImageHandle, - &gEfiHiiPackageListProtocolGuid, - (VOID **)&PackageList, - ImageHandle, - NULL, - EFI_OPEN_PROTOCOL_GET_PROTOCOL - ); - ASSERT_EFI_ERROR (Status); - if (EFI_ERROR (Status)) { - return NULL; - } + EFI_STATUS Status; + EFI_HII_HANDLE HiiHandle; // // Publish HII package list to HII Database. // Status = gHiiDatabase->NewPackageList ( gHiiDatabase, - PackageList, + &gModuleHiiPackageList->Header, NULL, &HiiHandle );