diff --git a/BaseTools/Conf/build_rule.template b/BaseTools/Conf/build_rule.template index a18d3f58a4..a218dad9d8 100755 --- a/BaseTools/Conf/build_rule.template +++ b/BaseTools/Conf/build_rule.template @@ -408,45 +408,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 @@ -672,7 +633,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 bee52d1cd7..2e55ba9a83 100755 --- a/BaseTools/Conf/tools_def.template +++ b/BaseTools/Conf/tools_def.template @@ -27,6 +27,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 @@ -129,7 +142,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 @@ -1923,7 +1936,7 @@ RELEASE_CLANGDWARF_RISCV64_DLINK_FLAGS = DEF(CLANGDWARF_RISCV64_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 ################## @@ -1946,9 +1959,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 @@ -1964,9 +1977,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 866a369a9a..4a39ab3cab 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); @@ -290,7 +355,6 @@ GenExecutable ( IN const char *InputFileName, IN const char *FormatName, IN const char *TypeName, - IN const char *HiiFileName, IN const char *BaseAddress, IN bool Strip, IN bool FixedAddress @@ -300,8 +364,6 @@ GenExecutable ( VOID *InputFile; int8_t Format; int32_t Type; - UINT32 HiiFileSize; - VOID *HiiFile; RETURN_STATUS Status; UINT64 NewBaseAddress; void *OutputFile; @@ -340,24 +402,12 @@ GenExecutable ( return RETURN_ABORTED; } - HiiFile = NULL; - HiiFileSize = 0; - if (HiiFileName != NULL) { - HiiFile = UserReadFile (HiiFileName, &HiiFileSize); - if (HiiFile == NULL) { - fprintf (stderr, "ImageTool: Could not open %s: %s\n", HiiFileName, strerror (errno)); - return RETURN_ABORTED; - } - } - OutputFile = ToolImageEmit ( &OutputFileSize, InputFile, InputFileSize, Format, Type, - HiiFile, - HiiFileSize, BaseAddress != NULL, NewBaseAddress, InputFileName, @@ -366,7 +416,6 @@ GenExecutable ( ); if (OutputFile == NULL) { - free (HiiFile); return RETURN_ABORTED; } @@ -385,7 +434,6 @@ int main (int argc, const char *argv[]) const char *InputName; const char *FormatName; const char *TypeName; - const char *HiiFileName; const char *BaseAddress; bool Strip; bool FixedAddress; @@ -404,7 +452,7 @@ int main (int argc, const char *argv[]) if (strcmp (argv[1], "GenImage") == 0) { if (argc < 5) { fprintf (stderr, "ImageTool: Command arguments are missing\n"); - fprintf (stderr, " Usage: ImageTool GenImage [-c Format] [-t ModuleType] [-h HiiRc] [-b BaseAddress] [-s] [-f] -o OutputFile InputFile\n"); + fprintf (stderr, " Usage: ImageTool GenImage [-c Format] [-t ModuleType] [-b BaseAddress] [-s] [-f] -o OutputFile InputFile\n"); raise (); return -1; } @@ -413,7 +461,6 @@ int main (int argc, const char *argv[]) InputName = NULL; FormatName = NULL; TypeName = NULL; - HiiFileName = NULL; BaseAddress = NULL; Strip = false; FixedAddress = false; @@ -442,14 +489,6 @@ int main (int argc, const char *argv[]) } TypeName = argv[ArgIndex]; - } else if (strcmp (argv[ArgIndex], "-h") == 0) { - ++ArgIndex; - if (ArgIndex == argc) { - fprintf (stderr, "Must specify an argument to -h\n"); - return -1; - } - - HiiFileName = argv[ArgIndex]; } else if (strcmp (argv[ArgIndex], "-b") == 0) { ++ArgIndex; if (ArgIndex == argc) { @@ -487,7 +526,6 @@ int main (int argc, const char *argv[]) InputName, FormatName, TypeName, - HiiFileName, BaseAddress, Strip, FixedAddress @@ -496,7 +534,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 +544,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/ImageTool/ImageToolEmit.c b/BaseTools/ImageTool/ImageToolEmit.c index 338ac0fce2..043e949dc2 100644 --- a/BaseTools/ImageTool/ImageToolEmit.c +++ b/BaseTools/ImageTool/ImageToolEmit.c @@ -91,8 +91,6 @@ ToolImageEmit ( IN uint32_t BufferSize, IN int8_t Format, IN int32_t Type, - IN void *HiiFile, - IN uint32_t HiiFileSize, IN bool Relocate, IN uint64_t BaseAddress, IN const char *SymbolsPath OPTIONAL, @@ -136,13 +134,6 @@ ToolImageEmit ( ImageInfo.HeaderInfo.Subsystem = (uint16_t)Type; } - if (HiiFile != NULL) { - free (ImageInfo.HiiInfo.Data); - - ImageInfo.HiiInfo.Data = HiiFile; - ImageInfo.HiiInfo.DataSize = HiiFileSize; - } - ToolImageSortRelocs (&ImageInfo); Success = CheckToolImage (&ImageInfo); diff --git a/BaseTools/ImageTool/ImageToolEmit.h b/BaseTools/ImageTool/ImageToolEmit.h index 6bf7493f3f..ae803fcd3a 100644 --- a/BaseTools/ImageTool/ImageToolEmit.h +++ b/BaseTools/ImageTool/ImageToolEmit.h @@ -17,8 +17,6 @@ ToolImageEmit ( IN uint32_t BufferSize, IN int8_t Format, IN int32_t Type, - IN void *HiiFile, - IN uint32_t HiiFileSize, IN bool Relocate, IN uint64_t BaseAddress, IN const char *SymbolsPath OPTIONAL, 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 d9514283a9..6a4a75cccf 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/C/GenFv/GenFvInternalLib.c b/BaseTools/Source/C/GenFv/GenFvInternalLib.c index 091d469890..3584552e99 100644 --- a/BaseTools/Source/C/GenFv/GenFvInternalLib.c +++ b/BaseTools/Source/C/GenFv/GenFvInternalLib.c @@ -3732,8 +3732,6 @@ Returns: UefiImageFileSize, ImageFormat, -1, - NULL, - 0, true, NewBaseAddress, NULL, diff --git a/BaseTools/Source/C/VolInfo/VolInfo.c b/BaseTools/Source/C/VolInfo/VolInfo.c index c16d07ca11..d36b1c83e9 100644 --- a/BaseTools/Source/C/VolInfo/VolInfo.c +++ b/BaseTools/Source/C/VolInfo/VolInfo.c @@ -1453,8 +1453,6 @@ Returns: FileBufferSize, -1, -1, - NULL, - 0, true, NewBaseAddress, NULL, diff --git a/BaseTools/Source/Python/AutoGen/GenC.py b/BaseTools/Source/Python/AutoGen/GenC.py index 86991e7675..feea54492a 100755 --- a/BaseTools/Source/Python/AutoGen/GenC.py +++ b/BaseTools/Source/Python/AutoGen/GenC.py @@ -1994,6 +1994,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/BaseTools/Source/Python/GenFds/FfsInfStatement.py b/BaseTools/Source/Python/GenFds/FfsInfStatement.py index b68f363b39..6fdb295441 100644 --- a/BaseTools/Source/Python/GenFds/FfsInfStatement.py +++ b/BaseTools/Source/Python/GenFds/FfsInfStatement.py @@ -789,7 +789,7 @@ class FfsInfStatement(FfsInfStatementClassObject): if not os.path.exists(FileBeforeStrip) or \ (os.path.getmtime(File) > os.path.getmtime(FileBeforeStrip)): CopyLongFilePath(File, FileBeforeStrip) - StrippedFile = os.path.join(self.OutputPath, ModuleName + '.stipped') + StrippedFile = os.path.join(self.OutputPath, ModuleName + '.stripped') GenFdsGlobalVariable.GenerateFirmwareImage( StrippedFile, File, @@ -823,7 +823,7 @@ class FfsInfStatement(FfsInfStatementClassObject): (os.path.getmtime(GenSecInputFile) > os.path.getmtime(FileBeforeStrip)): CopyLongFilePath(GenSecInputFile, FileBeforeStrip) - StrippedFile = os.path.join(self.OutputPath, ModuleName + '.stipped') + StrippedFile = os.path.join(self.OutputPath, ModuleName + '.stripped') GenFdsGlobalVariable.GenerateFirmwareImage( StrippedFile, GenSecInputFile, 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 2edd92c754..f548ca85ce 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 d7ce0d03be..27e6ffda7a 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 f7082467c7..06993d994e 100644 --- a/ShellPkg/Application/Shell/ShellManParser.c +++ b/ShellPkg/Application/Shell/ShellManParser.c @@ -561,19 +561,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) @@ -583,17 +578,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 @@ -662,118 +652,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); - if (FileHandle == NULL) { - Status = EFI_OUT_OF_RESOURCES; - goto Done; - } - - 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: @@ -791,13 +669,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 98c84d2ef9..1db179a3ef 100644 --- a/ShellPkg/DynamicCommand/DpDynamicCommand/Dp.c +++ b/ShellPkg/DynamicCommand/DpDynamicCommand/Dp.c @@ -993,32 +993,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 d67f9af3b7..bd98923371 100644 --- a/ShellPkg/DynamicCommand/HttpDynamicCommand/Http.c +++ b/ShellPkg/DynamicCommand/HttpDynamicCommand/Http.c @@ -1870,32 +1870,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 a60d6be2d6..3a72a549df 100644 --- a/ShellPkg/DynamicCommand/TftpDynamicCommand/Tftp.c +++ b/ShellPkg/DynamicCommand/TftpDynamicCommand/Tftp.c @@ -1214,32 +1214,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 );