diff --git a/ArmPkg/Library/DebugAgentSymbolsBaseLib/DebugAgentSymbolsBaseLib.c b/ArmPkg/Library/DebugAgentSymbolsBaseLib/DebugAgentSymbolsBaseLib.c index a985f525d3..dad2dd9d29 100644 --- a/ArmPkg/Library/DebugAgentSymbolsBaseLib/DebugAgentSymbolsBaseLib.c +++ b/ArmPkg/Library/DebugAgentSymbolsBaseLib/DebugAgentSymbolsBaseLib.c @@ -192,7 +192,7 @@ GetImageContext ( return EFI_VOLUME_CORRUPTED; } - if ((Section->Type == EFI_SECTION_PE32) || (Section->Type == EFI_SECTION_TE)) { + if (Section->Type == EFI_SECTION_PE32) { EfiImage = (Section + 1); break; } diff --git a/ArmPlatformPkg/Scripts/Ds5/firmware_volume.py b/ArmPlatformPkg/Scripts/Ds5/firmware_volume.py index c6d1ca830a..e44dcf6ea0 100644 --- a/ArmPlatformPkg/Scripts/Ds5/firmware_volume.py +++ b/ArmPlatformPkg/Scripts/Ds5/firmware_volume.py @@ -14,7 +14,6 @@ import edk2_debugger class EfiFileSection(object): EFI_SECTION_PE32 = 0x10 EFI_SECTION_PIC = 0x11 - EFI_SECTION_TE = 0x12 EFI_IMAGE_DEBUG_TYPE_CODEVIEW = 0x2 @@ -38,58 +37,12 @@ class EfiFileSection(object): def get_debug_filepath(self): type = self.get_type() - if type == EfiFileSection.EFI_SECTION_TE: - section = EfiSectionTE(self, ec, self.base + 0x4) - elif type == EfiFileSection.EFI_SECTION_PE32: + if type == EfiFileSection.EFI_SECTION_PE32: section = EfiSectionPE32(self, ec, self.base + 0x4) else: raise Exception("EfiFileSection", "No debug section") return section.get_debug_filepath() -class EfiSectionTE: - SIZEOF_EFI_TE_IMAGE_HEADER = 0x28 - EFI_TE_IMAGE_SIGNATURE = ('V','Z') - - def __init__(self, ec, base_te): - self.ec = ec - self.base_te = int(base_te) - te_sig = struct.unpack("cc", self.ec.getMemoryService().read(self.base_te, 2, 32)) - if te_sig != EfiSectionTE.EFI_TE_IMAGE_SIGNATURE: - raise Exception("EfiFileSectionTE","TE Signature incorrect") - - def get_debug_filepath(self): - stripped_size = struct.unpack("= debug_info[0]) and (addr < debug_info[0] + debug_info[1]): - if debug_info[2] == EfiFileSection.EFI_SECTION_TE: - section = EfiSectionTE(self.ec, debug_info[0] + 0x4) - elif debug_info[2] == EfiFileSection.EFI_SECTION_PE32: + if debug_info[2] == EfiFileSection.EFI_SECTION_PE32: section = EfiSectionPE32(self.ec, debug_info[0] + 0x4) else: raise Exception('FirmwareVolume','Section Type not supported') @@ -313,9 +264,7 @@ class FirmwareVolume: self.get_debug_info() for debug_info in self.DebugInfos: - if debug_info[2] == EfiFileSection.EFI_SECTION_TE: - section = EfiSectionTE(self.ec, debug_info[0] + 0x4) - elif debug_info[2] == EfiFileSection.EFI_SECTION_PE32: + if debug_info[2] == EfiFileSection.EFI_SECTION_PE32: section = EfiSectionPE32(self.ec, debug_info[0] + 0x4) else: continue diff --git a/ArmVirtPkg/ArmVirtRules.fdf.inc b/ArmVirtPkg/ArmVirtRules.fdf.inc index b8ec040d23..5865c2ef31 100644 --- a/ArmVirtPkg/ArmVirtRules.fdf.inc +++ b/ArmVirtPkg/ArmVirtRules.fdf.inc @@ -36,24 +36,24 @@ [Rule.Common.SEC] FILE SEC = $(NAMED_GUID) RELOCS_STRIPPED FIXED { - TE TE Align = Auto $(INF_OUTPUT)/$(MODULE_NAME).efi + PE32 PE32 Align = Auto $(INF_OUTPUT)/$(MODULE_NAME).efi } [Rule.Common.SEC.SELF_RELOC] FILE SEC = $(NAMED_GUID) { - TE TE Align = Auto $(INF_OUTPUT)/$(MODULE_NAME).efi + PE32 PE32 Align = Auto $(INF_OUTPUT)/$(MODULE_NAME).efi } [Rule.Common.PEI_CORE] FILE PEI_CORE = $(NAMED_GUID) FIXED { - TE TE Align = Auto $(INF_OUTPUT)/$(MODULE_NAME).efi + PE32 PE32 Align = Auto $(INF_OUTPUT)/$(MODULE_NAME).efi UI STRING ="$(MODULE_NAME)" Optional } [Rule.Common.PEIM] FILE PEIM = $(NAMED_GUID) FIXED { PEI_DEPEX PEI_DEPEX Optional $(INF_OUTPUT)/$(MODULE_NAME).depex - TE TE Align = Auto $(INF_OUTPUT)/$(MODULE_NAME).efi + PE32 PE32 Align = Auto $(INF_OUTPUT)/$(MODULE_NAME).efi UI STRING="$(MODULE_NAME)" Optional } diff --git a/ArmVirtPkg/PrePi/PrePi.c b/ArmVirtPkg/PrePi/PrePi.c index c3c5a64a5c..1ccaf6ae78 100644 --- a/ArmVirtPkg/PrePi/PrePi.c +++ b/ArmVirtPkg/PrePi/PrePi.c @@ -156,10 +156,6 @@ RelocateUefiImage ( ASSERT_EFI_ERROR (Status); Status = FfsFindSectionData (EFI_SECTION_PE32, FileHandle, &SectionData, &SectionSize); - if (EFI_ERROR (Status)) { - Status = FfsFindSectionData (EFI_SECTION_TE, FileHandle, &SectionData, &SectionSize); - } - ASSERT_EFI_ERROR (Status); Status = UefiImageInitializeContext (&ImageContext, SectionData, SectionSize); diff --git a/BaseTools/Scripts/PackageDocumentTools/plugins/EdkPlugins/basemodel/efibinary.py b/BaseTools/Scripts/PackageDocumentTools/plugins/EdkPlugins/basemodel/efibinary.py index 1bc4938bfc..d9e1a68d6d 100644 --- a/BaseTools/Scripts/PackageDocumentTools/plugins/EdkPlugins/basemodel/efibinary.py +++ b/BaseTools/Scripts/PackageDocumentTools/plugins/EdkPlugins/basemodel/efibinary.py @@ -496,7 +496,6 @@ class EfiSectionHeader(BinaryItem): 0x02: 'EFI_SECTION_GUID_DEFINED', 0x10: 'EFI_SECTION_PE32', 0x11: 'EFI_SECTION_PIC', - 0x12: 'EFI_SECTION_TE', 0x13: 'EFI_SECTION_DXE_DEPEX', 0x14: 'EFI_SECTION_VERSION', 0x15: 'EFI_SECTION_USER_INTERFACE', diff --git a/BaseTools/Scripts/efi_debugging.py b/BaseTools/Scripts/efi_debugging.py index 9848cd5968..66e598faf7 100755 --- a/BaseTools/Scripts/efi_debugging.py +++ b/BaseTools/Scripts/efi_debugging.py @@ -167,21 +167,6 @@ class EFI_IMAGE_DATA_DIRECTORY(LittleEndianStructure): ] -class EFI_TE_IMAGE_HEADER(LittleEndianStructure): - _fields_ = [ - ('Signature', ARRAY(c_char, 2)), - ('Machine', c_uint16), - ('NumberOfSections', c_uint8), - ('Subsystem', c_uint8), - ('StrippedSize', c_uint16), - ('AddressOfEntryPoint', c_uint32), - ('BaseOfCode', c_uint32), - ('ImageBase', c_uint64), - ('DataDirectoryBaseReloc', EFI_IMAGE_DATA_DIRECTORY), - ('DataDirectoryDebug', EFI_IMAGE_DATA_DIRECTORY) - ] - - class EFI_IMAGE_DOS_HEADER(LittleEndianStructure): _fields_ = [ ('e_magic', c_uint16), @@ -1837,9 +1822,9 @@ class EfiConfigurationTable: return ImageLoad -class PeTeImage: +class PeImage: ''' - A class to abstract PE/COFF or TE image processing via passing in a + A class to abstract PE/COFF image processing via passing in a Python file like object. If you pass in an address the PE/COFF is parsed, if you pass in NULL for an address then you get a class instance you can use to search memory for a PE/COFF hader given a pc value. @@ -1872,7 +1857,6 @@ class PeTeImage: # book keeping, but public self.PeHdr = None - self.TeHdr = None self.Machine = None self.Subsystem = None self.CodeViewSig = None @@ -1888,7 +1872,6 @@ class PeTeImage: self.DataAddress = 0 self.CodeViewPdb = None self.CodeViewUuid = None - self.TeAdjust = 0 self.dir_name = { 0: 'Export Table', @@ -1914,9 +1897,9 @@ class PeTeImage: self.parse() def __str__(self): - if self.PeHdr is None and self.TeHdr is None: + if self.PeHdr is None: # no PE/COFF header found - return "" + return "" if self.CodeViewPdb: pdb = f'{self.Machine}`{self.CodeViewPdb}' @@ -1928,8 +1911,7 @@ class PeTeImage: else: guid = '' - slide = f'slide = {self.TeAdjust:d} ' if self.TeAdjust != 0 else ' ' - res = guid + f'{pdb} load = 0x{self.LoadAddress:08x} ' + slide + res = guid + f'{pdb} load = 0x{self.LoadAddress:08x} ' return res def _seek(self, offset): @@ -1989,60 +1971,46 @@ class PeTeImage: return False def maybe(self, offset=None): - """Probe to see if this offset is likely a PE/COFF or TE file """ + """Probe to see if this offset is likely a PE/COFF file """ self.LoadAddress = 0 e_magic = self._read_offset(2, offset) - header_ok = e_magic == b'MZ' or e_magic == b'VZ' + header_ok = e_magic == b'MZ' if offset is not None and header_ok: self.LoadAddress = offset return header_ok def parse(self): - """Parse PE/COFF (TE) debug directory entry """ + """Parse PE/COFF debug directory entry """ DosHdr = self._read_ctype(EFI_IMAGE_DOS_HEADER, 0) - if DosHdr.e_magic == self._unsigned(b'VZ'): - # TE image - self.TeHdr = self._read_ctype(EFI_TE_IMAGE_HEADER, 0) - - self.TeAdjust = sizeof(self.TeHdr) - self.TeHdr.StrippedSize - self.Machine = image_machine_dict.get(self.TeHdr.Machine, None) - self.Subsystem = self.TeHdr.Subsystem - self.AddressOfEntryPoint = self.TeHdr.AddressOfEntryPoint - - debug_dir_size = self.TeHdr.DataDirectoryDebug.Size - debug_dir_offset = (self.TeAdjust + - self.TeHdr.DataDirectoryDebug.VirtualAddress) + if DosHdr.e_magic == self._unsigned(b'MZ'): + self.e_lfanew = DosHdr.e_lfanew else: - if DosHdr.e_magic == self._unsigned(b'MZ'): - self.e_lfanew = DosHdr.e_lfanew - else: - self.e_lfanew = 0 + self.e_lfanew = 0 + self.PeHdr = self._read_ctype( + EFI_IMAGE_NT_HEADERS64, self.e_lfanew) + if self.PeHdr.Signature != self._unsigned(b'PE\0\0'): + return False + + if self.PeHdr.OptionalHeader.Magic == \ + EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC: self.PeHdr = self._read_ctype( - EFI_IMAGE_NT_HEADERS64, self.e_lfanew) - if self.PeHdr.Signature != self._unsigned(b'PE\0\0'): - return False + EFI_IMAGE_NT_HEADERS32, self.e_lfanew) - if self.PeHdr.OptionalHeader.Magic == \ - EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC: - self.PeHdr = self._read_ctype( - EFI_IMAGE_NT_HEADERS32, self.e_lfanew) + if self.PeHdr.OptionalHeader.NumberOfRvaAndSizes <= \ + DIRECTORY_DEBUG: + return False - if self.PeHdr.OptionalHeader.NumberOfRvaAndSizes <= \ - DIRECTORY_DEBUG: - return False + self.Machine = image_machine_dict.get( + self.PeHdr.FileHeader.Machine, None) + self.Subsystem = self.PeHdr.OptionalHeader.Subsystem + self.AddressOfEntryPoint = \ + self.PeHdr.OptionalHeader.AddressOfEntryPoint - self.Machine = image_machine_dict.get( - self.PeHdr.FileHeader.Machine, None) - self.Subsystem = self.PeHdr.OptionalHeader.Subsystem - self.AddressOfEntryPoint = \ - self.PeHdr.OptionalHeader.AddressOfEntryPoint - self.TeAdjust = 0 - - debug_dir_size = self.PeHdr.OptionalHeader.DataDirectory[ - DIRECTORY_DEBUG].Size - debug_dir_offset = self.PeHdr.OptionalHeader.DataDirectory[ - DIRECTORY_DEBUG].VirtualAddress + debug_dir_size = self.PeHdr.OptionalHeader.DataDirectory[ + DIRECTORY_DEBUG].Size + debug_dir_offset = self.PeHdr.OptionalHeader.DataDirectory[ + DIRECTORY_DEBUG].VirtualAddress if self.Machine is None or self.Subsystem not in [0, 10, 11, 12]: return False @@ -2056,10 +2024,7 @@ class PeTeImage: '''Parse the PE/COFF (TE) section table''' if self.Sections is not None: return - elif self.TeHdr is not None: - self.NumberOfSections = self.TeHdr.NumberOfSections - offset = sizeof(EFI_TE_IMAGE_HEADER) - elif self.PeHdr is not None: + if self.PeHdr is not None: self.NumberOfSections = self.PeHdr.FileHeader.NumberOfSections offset = sizeof(c_uint32) + \ sizeof(EFI_IMAGE_FILE_HEADER) @@ -2074,7 +2039,7 @@ class PeTeImage: for i in range(self.NumberOfSections): name = str(self.Sections[i].Name, 'ascii', 'ignore') addr = self.Sections[i].VirtualAddress - addr += self.LoadAddress + self.TeAdjust + addr += self.LoadAddress if name == '.text': self.TextAddress = addr elif name == '.data': @@ -2099,22 +2064,7 @@ class PeTeImage: def directory_to_str(self): result = '' - if self.TeHdr: - debug_size = self.TeHdr.DataDirectoryDebug.Size - if debug_size > 0: - debug_offset = (self.TeAdjust - + self.TeHdr.DataDirectoryDebug.VirtualAddress) - result += f"Debug 0x{debug_offset:08X} 0x{debug_size}\n" - - relocation_size = self.TeHdr.DataDirectoryBaseReloc.Size - if relocation_size > 0: - relocation_offset = ( - self.TeAdjust - + self.TeHdr.DataDirectoryBaseReloc.VirtualAddress) - result += f'Relocation 0x{relocation_offset:08X} ' - result += f' 0x{relocation_size}\n' - - elif self.PeHdr: + if self.PeHdr: for i in range(self.PeHdr.OptionalHeader.NumberOfRvaAndSizes): size = self.PeHdr.OptionalHeader.DataDirectory[i].Size if size == 0: @@ -2143,7 +2093,7 @@ class PeTeImage: continue entry = self._read_offset( - DirectoryEntry.SizeOfData, DirectoryEntry.RVA + self.TeAdjust) + DirectoryEntry.SizeOfData, DirectoryEntry.RVA) self.CodeViewSig = entry[:4] if self.CodeViewSig == b'MTOC': self.CodeViewUuid = uuid.UUID(bytes_le=entry[4:4+16]) @@ -2170,7 +2120,7 @@ def main(): '''Process arguments as PE/COFF files''' for fname in sys.argv[1:]: with open(fname, 'rb') as f: - image = PeTeImage(f) + image = PeImage(f) print(image) res = f'EntryPoint = 0x{image.AddressOfEntryPoint:08x} ' res += f'TextAddress = 0x{image.TextAddress:08x} ' diff --git a/BaseTools/Scripts/efi_gdb.py b/BaseTools/Scripts/efi_gdb.py index f3e7fd9d0c..11240ad10e 100755 --- a/BaseTools/Scripts/efi_gdb.py +++ b/BaseTools/Scripts/efi_gdb.py @@ -41,7 +41,7 @@ import shlex # so lets fix that for gdb... sys.path.append(os.path.dirname(os.path.abspath(__file__))) -from efi_debugging import PeTeImage, patch_ctypes # noqa: E402 +from efi_debugging import PeImage, patch_ctypes # noqa: E402 from efi_debugging import EfiHob, GuidNames, EfiStatusClass # noqa: E402 from efi_debugging import EfiBootMode, EfiDevicePath # noqa: E402 from efi_debugging import EfiConfigurationTable, EfiTpl # noqa: E402 @@ -155,7 +155,7 @@ class EfiSymbols: @ classmethod def address_to_symbols(cls, address, reprobe=False): ''' - Given an address search backwards for a PE/COFF (or TE) header + Given an address search backwards for a PE/COFF header and load symbols. Return a status string. ''' if not isinstance(address, int): @@ -166,12 +166,12 @@ class EfiSymbols: # skip the probe of the remote return f'{pecoff} is already loaded' - pecoff = PeTeImage(cls.file, None) + pecoff = PeImage(cls.file, None) if pecoff.pcToPeCoff(address, cls.stride, cls.range): res = cls.add_symbols_for_pecoff(pecoff) return f'{res}{pecoff}' else: - return f'0x{address:08x} not in a PE/COFF (or TE) image' + return f'0x{address:08x} not in a PE/COFF image' @ classmethod def address_in_loaded_pecoff(cls, address): @@ -289,7 +289,7 @@ class EfiDevicePathCmd (gdb.Command): def create_options(self, arg, from_tty): usage = "usage: %prog [options] [arg]" description = ( - "Command that can load EFI PE/COFF and TE image symbols. ") + "Command that can load EFI PE/COFF image symbols. ") self.parser = optparse.OptionParser( description=description, @@ -461,7 +461,7 @@ class EfiHobCmd (gdb.Command): def create_options(self, arg, from_tty): usage = "usage: %prog [options] [arg]" description = ( - "Command that can load EFI PE/COFF and TE image symbols. ") + "Command that can load EFI PE/COFF image symbols. ") self.parser = optparse.OptionParser( description=description, @@ -595,9 +595,9 @@ class EfiSymbolsCmd (gdb.Command): def create_options(self, arg, from_tty): usage = "usage: %prog [options]" description = ( - "Command that can load EFI PE/COFF and TE image symbols. " + "Command that can load EFI PE/COFF image symbols. " "If you are having trouble in PEI try adding --pei. " - "Given any address search backward for the PE/COFF (or TE header) " + "Given any address search backward for the PE/COFF " "and then parse the PE/COFF image to get debug info. " "The address can come from the current pc, pc values in the " "frame, or an address provided to the command" diff --git a/BaseTools/Scripts/efi_lldb.py b/BaseTools/Scripts/efi_lldb.py index 6487e41bf5..562583cf91 100755 --- a/BaseTools/Scripts/efi_lldb.py +++ b/BaseTools/Scripts/efi_lldb.py @@ -17,7 +17,7 @@ import os from pathlib import Path from efi_debugging import EfiDevicePath, EfiConfigurationTable, EfiTpl from efi_debugging import EfiHob, GuidNames, EfiStatusClass, EfiBootMode -from efi_debugging import PeTeImage, patch_ctypes +from efi_debugging import PeImage, patch_ctypes try: # Just try for LLDB in case PYTHONPATH is already correctly setup @@ -144,7 +144,7 @@ class EfiSymbols: str(pecoff.CodeViewUuid)) if module.IsValid(): SBError = cls.target.SetModuleLoadAddress( - module, pecoff.LoadAddress + pecoff.TeAdjust) + module, pecoff.LoadAddress) if SBError.success: cls.loaded[pecoff.LoadAddress] = (pecoff, module) return '' @@ -154,7 +154,7 @@ class EfiSymbols: @ classmethod def address_to_symbols(cls, address, reprobe=False): ''' - Given an address search backwards for a PE/COFF (or TE) header + Given an address search backwards for a PE/COFF header and load symbols. Return a status string. ''' if not isinstance(address, int): @@ -165,12 +165,12 @@ class EfiSymbols: # skip the probe of the remote return f'{pecoff} is already loaded' - pecoff = PeTeImage(cls._file, None) + pecoff = PeImage(cls._file, None) if pecoff.pcToPeCoff(address, cls.stride, cls.range): res = cls.add_symbols_for_pecoff(pecoff) return f'{res}{pecoff}' else: - return f'0x{address:08x} not in a PE/COFF (or TE) image' + return f'0x{address:08x} not in a PE/COFF image' @ classmethod def address_in_loaded_pecoff(cls, address): @@ -596,7 +596,7 @@ class EfiSymbolicateCommand(object): def create_options(self): ''' standard lldb command help/options parser''' usage = "usage: %prog [options]" - description = '''Command that can load EFI PE/COFF and TE image + description = '''Command that can load EFI PE/COFF image symbols. If you are having trouble in PEI try adding --pei. ''' diff --git a/BaseTools/Source/C/GenFfs/GenFfs.c b/BaseTools/Source/C/GenFfs/GenFfs.c index a2092f66ff..8b1f6a7bf9 100644 --- a/BaseTools/Source/C/GenFfs/GenFfs.c +++ b/BaseTools/Source/C/GenFfs/GenFfs.c @@ -285,7 +285,7 @@ Arguments: MaxAlignment - The max alignment required by all the input file datas. - PeSectionNum - Calculate the number of Pe/Te Section in this FFS file. + PeSectionNum - Calculate the number of Pe Section in this FFS file. Returns: @@ -302,8 +302,6 @@ Returns: FILE *InFile; EFI_FREEFORM_SUBTYPE_GUID_SECTION *SectHeader; EFI_COMMON_SECTION_HEADER2 TempSectHeader; - EFI_TE_IMAGE_HEADER TeHeader; - UINT32 TeOffset; EFI_GUID_DEFINED_SECTION GuidSectHeader; EFI_GUID_DEFINED_SECTION2 GuidSectHeader2; UINT32 HeaderSize; @@ -311,7 +309,6 @@ Returns: Size = 0; Offset = 0; - TeOffset = 0; MaxEncounteredAlignment = 1; // @@ -342,22 +339,15 @@ Returns: "the input section name is %s and the size is %u bytes", InputFileName[Index], (unsigned) FileSize); // - // Check this section is Te/Pe section, and Calculate the numbers of Te/Pe section. + // Check this section is Pe section, and Calculate the numbers of Pe section. // - TeOffset = 0; if (FileSize >= MAX_FFS_SIZE) { HeaderSize = sizeof (EFI_COMMON_SECTION_HEADER2); } else { HeaderSize = sizeof (EFI_COMMON_SECTION_HEADER); } fread (&TempSectHeader, 1, HeaderSize, InFile); - if (TempSectHeader.Type == EFI_SECTION_TE) { - (*PESectionNum) ++; - fread (&TeHeader, 1, sizeof (TeHeader), InFile); - if (TeHeader.Signature == EFI_TE_IMAGE_HEADER_SIGNATURE) { - TeOffset = TeHeader.StrippedSize - sizeof (TeHeader); - } - } else if (TempSectHeader.Type == EFI_SECTION_PE32) { + if (TempSectHeader.Type == EFI_SECTION_PE32) { (*PESectionNum) ++; } else if (TempSectHeader.Type == EFI_SECTION_GUID_DEFINED) { fseek (InFile, 0, SEEK_SET); @@ -376,30 +366,21 @@ Returns: } else if (TempSectHeader.Type == EFI_SECTION_COMPRESSION || TempSectHeader.Type == EFI_SECTION_FIRMWARE_VOLUME_IMAGE) { // - // for the encapsulated section, assume it contains Pe/Te section + // for the encapsulated section, assume it contains Pe section // (*PESectionNum) ++; } fseek (InFile, 0, SEEK_SET); - // - // Revert TeOffset to the converse value relative to Alignment - // This is to assure the original PeImage Header at Alignment. - // - if ((TeOffset != 0) && (InputFileAlign [Index] != 0)) { - TeOffset = InputFileAlign [Index] - (TeOffset % InputFileAlign [Index]); - TeOffset = TeOffset % InputFileAlign [Index]; - } - // // make sure section data meet its alignment requirement by adding one pad section. // But the different sections have the different section header. Necessary or not? // Based on section type to adjust offset? Todo // - if ((InputFileAlign [Index] != 0) && (((Size + HeaderSize + TeOffset) % InputFileAlign [Index]) != 0)) { - Offset = (Size + sizeof (EFI_COMMON_SECTION_HEADER) + HeaderSize + TeOffset + InputFileAlign [Index] - 1) & ~(InputFileAlign [Index] - 1); - Offset = Offset - Size - HeaderSize - TeOffset; + if ((InputFileAlign [Index] != 0) && (((Size + HeaderSize) % InputFileAlign [Index]) != 0)) { + Offset = (Size + sizeof (EFI_COMMON_SECTION_HEADER) + HeaderSize + InputFileAlign [Index] - 1) & ~(InputFileAlign [Index] - 1); + Offset = Offset - Size - HeaderSize; if (FileBuffer != NULL && ((Size + Offset) < *BufferLength)) { // @@ -959,7 +940,7 @@ Returns: if ((FfsFiletype == EFI_FV_FILETYPE_SECURITY_CORE || FfsFiletype == EFI_FV_FILETYPE_PEI_CORE || FfsFiletype == EFI_FV_FILETYPE_DXE_CORE) && (PeSectionNum != 1)) { - Error (NULL, 0, 2000, "Invalid parameter", "Fv File type %s must have one and only one Pe or Te section, but %u Pe/Te section are input", mFfsFileType [FfsFiletype], PeSectionNum); + Error (NULL, 0, 2000, "Invalid parameter", "Fv File type %s must have one and only one Pe section, but %u Pe section are input", mFfsFileType [FfsFiletype], PeSectionNum); goto Finish; } @@ -967,7 +948,7 @@ Returns: FfsFiletype == EFI_FV_FILETYPE_DRIVER || FfsFiletype == EFI_FV_FILETYPE_COMBINED_PEIM_DRIVER || FfsFiletype == EFI_FV_FILETYPE_APPLICATION) && (PeSectionNum < 1)) { - Error (NULL, 0, 2000, "Invalid parameter", "Fv File type %s must have at least one Pe or Te section, but no Pe/Te section is input", mFfsFileType [FfsFiletype]); + Error (NULL, 0, 2000, "Invalid parameter", "Fv File type %s must have at least one Pe section, but no Pe section is input", mFfsFileType [FfsFiletype]); goto Finish; } diff --git a/BaseTools/Source/C/GenFv/GenFvInternalLib.c b/BaseTools/Source/C/GenFv/GenFvInternalLib.c index 84ac8fbb34..c16498bf7f 100644 --- a/BaseTools/Source/C/GenFv/GenFvInternalLib.c +++ b/BaseTools/Source/C/GenFv/GenFvInternalLib.c @@ -759,7 +759,6 @@ Returns: UINT32 AddressOfEntryPoint; UINT32 Offset; EFI_IMAGE_OPTIONAL_HEADER_UNION *ImgHdr; - EFI_TE_IMAGE_HEADER *TEImageHeader; EFI_IMAGE_SECTION_HEADER *SectionHeader; long long TempLongAddress; UINT32 TextVirtualAddress; @@ -830,24 +829,18 @@ Returns: // // AddressOfEntryPoint and Offset in Image // - if (!pImageContext->IsTeImage) { - ImgHdr = (EFI_IMAGE_OPTIONAL_HEADER_UNION *) ((UINT8 *) pImageContext->Handle + pImageContext->PeCoffHeaderOffset); - AddressOfEntryPoint = ImgHdr->Pe32.OptionalHeader.AddressOfEntryPoint; - Offset = 0; - SectionHeader = (EFI_IMAGE_SECTION_HEADER *) ( - (UINT8 *) ImgHdr + - sizeof (UINT32) + - sizeof (EFI_IMAGE_FILE_HEADER) + - ImgHdr->Pe32.FileHeader.SizeOfOptionalHeader - ); - Index = ImgHdr->Pe32.FileHeader.NumberOfSections; - } else { - TEImageHeader = (EFI_TE_IMAGE_HEADER *) pImageContext->Handle; - AddressOfEntryPoint = TEImageHeader->AddressOfEntryPoint; - Offset = TEImageHeader->StrippedSize - sizeof (EFI_TE_IMAGE_HEADER); - SectionHeader = (EFI_IMAGE_SECTION_HEADER *) (TEImageHeader + 1); - Index = TEImageHeader->NumberOfSections; - } + assert (!pImageContext->IsTeImage); + + ImgHdr = (EFI_IMAGE_OPTIONAL_HEADER_UNION *) ((UINT8 *) pImageContext->Handle + pImageContext->PeCoffHeaderOffset); + AddressOfEntryPoint = ImgHdr->Pe32.OptionalHeader.AddressOfEntryPoint; + Offset = 0; + SectionHeader = (EFI_IMAGE_SECTION_HEADER *) ( + (UINT8 *) ImgHdr + + sizeof (UINT32) + + sizeof (EFI_IMAGE_FILE_HEADER) + + ImgHdr->Pe32.FileHeader.SizeOfOptionalHeader + ); + Index = ImgHdr->Pe32.FileHeader.NumberOfSections; // // module information output @@ -861,11 +854,7 @@ Returns: } fprintf (FvMapFile, "EntryPoint=0x%010llx, ", (unsigned long long) (ImageBaseAddress + AddressOfEntryPoint)); - if (!pImageContext->IsTeImage) { - fprintf (FvMapFile, "Type=PE"); - } else { - fprintf (FvMapFile, "Type=TE"); - } + fprintf (FvMapFile, "Type=PE"); fprintf (FvMapFile, ")\n"); fprintf (FvMapFile, "(GUID=%s", FileGuidName); @@ -1296,7 +1285,7 @@ Returns: return EFI_ABORTED; } // - // Rebase the PE or TE image in FileBuffer of FFS file for XIP + // Rebase the PE image in FileBuffer of FFS file for XIP // Rebase for the debug genfvmap tool // Status = FfsRebase (FvInfo, FvInfo->FvFiles[Index], (EFI_FFS_FILE_HEADER **)&FileBuffer, &FileSize, (UINTN) *VtfFileImage - (UINTN) FvImage->FileImage, FvMapFile); @@ -1348,7 +1337,7 @@ Returns: // if ((UINTN) (FvImage->CurrentFilePointer + FileSize) <= (UINTN) (*VtfFileImage)) { // - // Rebase the PE or TE image in FileBuffer of FFS file for XIP. + // Rebase the PE image in FileBuffer of FFS file for XIP. // Rebase Bs and Rt drivers for the debug genfvmap tool. // Status = FfsRebase (FvInfo, FvInfo->FvFiles[Index], (EFI_FFS_FILE_HEADER **)&FileBuffer, &FileSize, (UINTN) FvImage->CurrentFilePointer - (UINTN) FvImage->FileImage, FvMapFile); @@ -1579,10 +1568,6 @@ Returns: // Sec Core found, now find PE32 section // Status = GetSectionByType (SecCoreFile, EFI_SECTION_PE32, 1, &Pe32Section); - if (Status == EFI_NOT_FOUND) { - Status = GetSectionByType (SecCoreFile, EFI_SECTION_TE, 1, &Pe32Section); - } - if (EFI_ERROR (Status)) { Error (NULL, 0, 3000, "Invalid", "could not find a PE32 section in the SEC core file."); return EFI_ABORTED; @@ -1628,15 +1613,11 @@ Returns: Status = GetFileByType (EFI_FV_FILETYPE_PEI_CORE, 1, &PeiCoreFile); if (!EFI_ERROR (Status) && (PeiCoreFile != NULL)) { // - // PEI Core found, now find PE32 or TE section + // PEI Core found, now find PE32 section // Status = GetSectionByType (PeiCoreFile, EFI_SECTION_PE32, 1, &Pe32Section); - if (Status == EFI_NOT_FOUND) { - Status = GetSectionByType (PeiCoreFile, EFI_SECTION_TE, 1, &Pe32Section); - } - if (EFI_ERROR (Status)) { - Error (NULL, 0, 3000, "Invalid", "could not find either a PE32 or a TE section in PEI core file."); + Error (NULL, 0, 3000, "Invalid", "could not find either a PE32 section in PEI core file."); return EFI_ABORTED; } @@ -1785,13 +1766,9 @@ Returns: if (!EFI_ERROR(Status) && (CoreFfsFile != NULL) ) { // - // Core found, now find PE32 or TE section + // Core found, now find PE32 section // Status = GetSectionByType(CoreFfsFile, EFI_SECTION_PE32, 1, Pe32Section); - if (EFI_ERROR(Status)) { - Status = GetSectionByType(CoreFfsFile, EFI_SECTION_TE, 1, Pe32Section); - } - if (EFI_ERROR(Status)) { Error(NULL, 0, 3000, "Invalid", "could not find a PE32 section in the core file."); return EFI_ABORTED; @@ -2418,7 +2395,6 @@ Returns: { EFI_IMAGE_DOS_HEADER *DosHeader; EFI_IMAGE_OPTIONAL_HEADER_UNION *ImgHdr; - EFI_TE_IMAGE_HEADER *TeHeader; // // Verify input parameters @@ -2428,48 +2404,35 @@ Returns: } // - // First check whether it is one TE Image. + // Check whether + // First is the DOS header // - TeHeader = (EFI_TE_IMAGE_HEADER *) Pe32; - if (TeHeader->Signature == EFI_TE_IMAGE_HEADER_SIGNATURE) { - // - // By TeImage Header to get output - // - *EntryPoint = TeHeader->AddressOfEntryPoint + sizeof (EFI_TE_IMAGE_HEADER) - TeHeader->StrippedSize; - *MachineType = TeHeader->Machine; - } else { + DosHeader = (EFI_IMAGE_DOS_HEADER *) Pe32; - // - // Then check whether - // First is the DOS header - // - DosHeader = (EFI_IMAGE_DOS_HEADER *) Pe32; - - // - // Verify DOS header is expected - // - if (DosHeader->e_magic != EFI_IMAGE_DOS_SIGNATURE) { - Error (NULL, 0, 3000, "Invalid", "Unknown magic number in the DOS header, 0x%04X.", DosHeader->e_magic); - return EFI_UNSUPPORTED; - } - // - // Immediately following is the NT header. - // - ImgHdr = (EFI_IMAGE_OPTIONAL_HEADER_UNION *) ((UINTN) Pe32 + DosHeader->e_lfanew); - - // - // Verify NT header is expected - // - if (ImgHdr->Pe32.Signature != EFI_IMAGE_NT_SIGNATURE) { - Error (NULL, 0, 3000, "Invalid", "Unrecognized image signature 0x%08X.", (unsigned) ImgHdr->Pe32.Signature); - return EFI_UNSUPPORTED; - } - // - // Get output - // - *EntryPoint = ImgHdr->Pe32.OptionalHeader.AddressOfEntryPoint; - *MachineType = ImgHdr->Pe32.FileHeader.Machine; + // + // Verify DOS header is expected + // + if (DosHeader->e_magic != EFI_IMAGE_DOS_SIGNATURE) { + Error (NULL, 0, 3000, "Invalid", "Unknown magic number in the DOS header, 0x%04X.", DosHeader->e_magic); + return EFI_UNSUPPORTED; } + // + // Immediately following is the NT header. + // + ImgHdr = (EFI_IMAGE_OPTIONAL_HEADER_UNION *) ((UINTN) Pe32 + DosHeader->e_lfanew); + + // + // Verify NT header is expected + // + if (ImgHdr->Pe32.Signature != EFI_IMAGE_NT_SIGNATURE) { + Error (NULL, 0, 3000, "Invalid", "Unrecognized image signature 0x%08X.", (unsigned) ImgHdr->Pe32.Signature); + return EFI_UNSUPPORTED; + } + // + // Get output + // + *EntryPoint = ImgHdr->Pe32.OptionalHeader.AddressOfEntryPoint; + *MachineType = ImgHdr->Pe32.FileHeader.Machine; // // Verify machine type is supported @@ -3589,7 +3552,6 @@ Returns: EFI_FILE_SECTION_POINTER CurrentPe32Section; EFI_FFS_FILE_STATE SavedState; EFI_IMAGE_OPTIONAL_HEADER_UNION *ImgHdr; - EFI_TE_IMAGE_HEADER *TEImageHeader; UINT8 *MemoryImagePointer; EFI_IMAGE_SECTION_HEADER *SectionHeader; CHAR8 PeFileName [MAX_LONG_FILE_PATH]; @@ -3603,7 +3565,6 @@ Returns: Index = 0; MemoryImagePointer = NULL; - TEImageHeader = NULL; ImgHdr = NULL; SectionHeader = NULL; Cptr = NULL; @@ -3936,248 +3897,6 @@ Returns: WriteMapFile (FvMapFile, PdbPointer, *FfsFile, NewPe32BaseAddress, &ImageContext); } - if ((*FfsFile)->Type != EFI_FV_FILETYPE_SECURITY_CORE && - (*FfsFile)->Type != EFI_FV_FILETYPE_PEI_CORE && - (*FfsFile)->Type != EFI_FV_FILETYPE_PEIM && - (*FfsFile)->Type != EFI_FV_FILETYPE_COMBINED_PEIM_DRIVER && - (*FfsFile)->Type != EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE - ) { - // - // Only Peim code may have a TE section - // - return EFI_SUCCESS; - } - - // - // Now process TE sections - // - for (Index = 1;; Index++) { - NewPe32BaseAddress = 0; - - // - // Find Te Image - // - Status = GetSectionByType (*FfsFile, EFI_SECTION_TE, Index, &CurrentPe32Section); - if (EFI_ERROR (Status)) { - break; - } - - CurSecHdrSize = GetSectionHeaderLength(CurrentPe32Section.CommonHeader); - - // - // Calculate the TE base address, the FFS file base plus the offset of the TE section less the size stripped off - // by GenTEImage - // - TEImageHeader = (EFI_TE_IMAGE_HEADER *) ((UINT8 *) CurrentPe32Section.Pe32Section + CurSecHdrSize); - - // - // Initialize context, load image info. - // - memset (&ImageContext, 0, sizeof (ImageContext)); - ImageContext.Handle = (VOID *) TEImageHeader; - ImageContext.ImageRead = (PE_COFF_LOADER_READ_FILE) FfsRebaseImageRead; - Status = PeCoffLoaderGetImageInfo (&ImageContext); - if (EFI_ERROR (Status)) { - Error (NULL, 0, 3000, "Invalid TeImage", "The input file is %s and the return status is %x", FileName, (int) Status); - return Status; - } - - if ( (ImageContext.Machine == IMAGE_FILE_MACHINE_ARMTHUMB_MIXED) || - (ImageContext.Machine == IMAGE_FILE_MACHINE_ARM64) ) { - mArm = TRUE; - } - - if (ImageContext.Machine == IMAGE_FILE_MACHINE_LOONGARCH64) { - mLoongArch = TRUE; - } - - // - // Keep Image Context for TE image in FV - // - memcpy (&OrigImageContext, &ImageContext, sizeof (ImageContext)); - - // - // Get File PdbPointer - // - PdbPointer = PeCoffLoaderGetPdbPointer (ImageContext.Handle); - - // - // Set new rebased address. - // - NewPe32BaseAddress = XipBase + (UINTN) TEImageHeader + sizeof (EFI_TE_IMAGE_HEADER) \ - - TEImageHeader->StrippedSize - (UINTN) (*FfsFile); - - // - // if reloc is stripped, try to get the original efi image to get reloc info. - // - if (ImageContext.RelocationsStripped) { - // - // Construct the original efi file name - // - if (strlen (FileName) >= MAX_LONG_FILE_PATH) { - Error (NULL, 0, 2000, "Invalid", "The file name %s is too long.", FileName); - return EFI_ABORTED; - } - strncpy (PeFileName, FileName, MAX_LONG_FILE_PATH - 1); - PeFileName[MAX_LONG_FILE_PATH - 1] = 0; - Cptr = PeFileName + strlen (PeFileName); - while (*Cptr != '.') { - Cptr --; - } - - if (*Cptr != '.') { - Error (NULL, 0, 3000, "Invalid", "The file %s has no .reloc section.", FileName); - return EFI_ABORTED; - } else { - *(Cptr + 1) = 'e'; - *(Cptr + 2) = 'f'; - *(Cptr + 3) = 'i'; - *(Cptr + 4) = '\0'; - } - - PeFile = fopen (LongFilePath (PeFileName), "rb"); - if (PeFile == NULL) { - Warning (NULL, 0, 0, "Invalid", "The file %s has no .reloc section.", FileName); - //Error (NULL, 0, 3000, "Invalid", "The file %s has no .reloc section.", FileName); - //return EFI_ABORTED; - } else { - // - // Get the file size - // - PeFileSize = _filelength (fileno (PeFile)); - PeFileBuffer = (UINT8 *) malloc (PeFileSize); - if (PeFileBuffer == NULL) { - fclose (PeFile); - Error (NULL, 0, 4001, "Resource", "memory cannot be allocated on rebase of %s", FileName); - return EFI_OUT_OF_RESOURCES; - } - // - // Read Pe File - // - fread (PeFileBuffer, sizeof (UINT8), PeFileSize, PeFile); - // - // close file - // - fclose (PeFile); - // - // Append reloc section into TeImage - // - ImageContext.Handle = PeFileBuffer; - Status = PeCoffLoaderGetImageInfo (&ImageContext); - if (EFI_ERROR (Status)) { - Error (NULL, 0, 3000, "Invalid TeImage", "The input file is %s and the return status is %x", FileName, (int) Status); - return Status; - } - ImageContext.RelocationsStripped = FALSE; - } - } - // - // Relocation doesn't exist - // - if (ImageContext.RelocationsStripped) { - Warning (NULL, 0, 0, "Invalid", "The file %s has no .reloc section.", FileName); - continue; - } - - // - // Relocation exist and rebase - // - // - // Load and Relocate Image Data - // - MemoryImagePointer = (UINT8 *) malloc ((UINTN) ImageContext.ImageSize + ImageContext.SectionAlignment); - if (MemoryImagePointer == NULL) { - Error (NULL, 0, 4001, "Resource", "memory cannot be allocated on rebase of %s", FileName); - return EFI_OUT_OF_RESOURCES; - } - memset ((VOID *) MemoryImagePointer, 0, (UINTN) ImageContext.ImageSize + ImageContext.SectionAlignment); - ImageContext.ImageAddress = ((UINTN) MemoryImagePointer + ImageContext.SectionAlignment - 1) & (~((UINTN) ImageContext.SectionAlignment - 1)); - - Status = PeCoffLoaderLoadImage (&ImageContext); - if (EFI_ERROR (Status)) { - Error (NULL, 0, 3000, "Invalid", "LocateImage() call failed on rebase of %s", FileName); - free ((VOID *) MemoryImagePointer); - return Status; - } - // - // Reloacate TeImage - // - ImageContext.DestinationAddress = NewPe32BaseAddress; - Status = PeCoffLoaderRelocateImage (&ImageContext); - if (EFI_ERROR (Status)) { - Error (NULL, 0, 3000, "Invalid", "RelocateImage() call failed on rebase of TE image %s", FileName); - free ((VOID *) MemoryImagePointer); - return Status; - } - - // - // Copy the relocated image into raw image file. - // - SectionHeader = (EFI_IMAGE_SECTION_HEADER *) (TEImageHeader + 1); - for (Index = 0; Index < TEImageHeader->NumberOfSections; Index ++, SectionHeader ++) { - if (!ImageContext.IsTeImage) { - CopyMem ( - (UINT8 *) TEImageHeader + sizeof (EFI_TE_IMAGE_HEADER) - TEImageHeader->StrippedSize + SectionHeader->PointerToRawData, - (VOID*) (UINTN) (ImageContext.ImageAddress + SectionHeader->VirtualAddress), - SectionHeader->SizeOfRawData - ); - } else { - CopyMem ( - (UINT8 *) TEImageHeader + sizeof (EFI_TE_IMAGE_HEADER) - TEImageHeader->StrippedSize + SectionHeader->PointerToRawData, - (VOID*) (UINTN) (ImageContext.ImageAddress + sizeof (EFI_TE_IMAGE_HEADER) - TEImageHeader->StrippedSize + SectionHeader->VirtualAddress), - SectionHeader->SizeOfRawData - ); - } - } - - // - // Free the allocated memory resource - // - free ((VOID *) MemoryImagePointer); - MemoryImagePointer = NULL; - if (PeFileBuffer != NULL) { - free (PeFileBuffer); - PeFileBuffer = NULL; - } - - // - // Update Image Base Address - // - TEImageHeader->ImageBase = NewPe32BaseAddress; - - // - // Now update file checksum - // - if ((*FfsFile)->Attributes & FFS_ATTRIB_CHECKSUM) { - SavedState = (*FfsFile)->State; - (*FfsFile)->IntegrityCheck.Checksum.File = 0; - (*FfsFile)->State = 0; - (*FfsFile)->IntegrityCheck.Checksum.File = CalculateChecksum8 ( - (UINT8 *)((UINT8 *)(*FfsFile) + FfsHeaderSize), - GetFfsFileLength (*FfsFile) - FfsHeaderSize - ); - (*FfsFile)->State = SavedState; - } - // - // Get this module function address from ModulePeMapFile and add them into FvMap file - // - - // - // Default use FileName as map file path - // - if (PdbPointer == NULL) { - PdbPointer = FileName; - } - - WriteMapFile ( - FvMapFile, - PdbPointer, - *FfsFile, - NewPe32BaseAddress, - &OrigImageContext - ); - } - return EFI_SUCCESS; } diff --git a/BaseTools/Source/C/GenSec/GenSec.c b/BaseTools/Source/C/GenSec/GenSec.c index 479d0f77a5..fab813902b 100644 --- a/BaseTools/Source/C/GenSec/GenSec.c +++ b/BaseTools/Source/C/GenSec/GenSec.c @@ -58,7 +58,7 @@ STATIC CHAR8 *mSectionTypeName[] = { NULL, // 0x0F - reserved "EFI_SECTION_PE32", // 0x10 "EFI_SECTION_PIC", // 0x11 - "EFI_SECTION_TE", // 0x12 + NULL, // 0x12 - formerly TE "EFI_SECTION_DXE_DEPEX", // 0x13 "EFI_SECTION_VERSION", // 0x14 "EFI_SECTION_USER_INTERFACE", // 0x15 @@ -162,7 +162,7 @@ Returns: fprintf (stdout, " -s [SectionType], --sectiontype [SectionType]\n\ SectionType defined in PI spec is one type of\n\ EFI_SECTION_COMPRESSION, EFI_SECTION_GUID_DEFINED,\n\ - EFI_SECTION_PE32, EFI_SECTION_PIC, EFI_SECTION_TE,\n\ + EFI_SECTION_PE32, EFI_SECTION_PIC,\n\ EFI_SECTION_DXE_DEPEX, EFI_SECTION_COMPATIBILITY16,\n\ EFI_SECTION_USER_INTERFACE, EFI_SECTION_VERSION,\n\ EFI_SECTION_FIRMWARE_VOLUME_IMAGE, EFI_SECTION_RAW,\n\ @@ -438,8 +438,6 @@ Returns: FILE *InFile; EFI_COMMON_SECTION_HEADER *SectHeader; EFI_COMMON_SECTION_HEADER2 TempSectHeader; - EFI_TE_IMAGE_HEADER TeHeader; - UINT32 TeOffset; EFI_GUID_DEFINED_SECTION GuidSectHeader; EFI_GUID_DEFINED_SECTION2 GuidSectHeader2; UINT32 HeaderSize; @@ -456,7 +454,6 @@ Returns: Size = 0; Offset = 0; - TeOffset = 0; // // Go through our array of file names and copy their contents // to the output buffer. @@ -490,9 +487,8 @@ Returns: // if (InputFileAlign != NULL) { // - // Check this section is Te/Pe section, and Calculate the numbers of Te/Pe section. + // Check this section is Pe section, and Calculate the numbers of Pe section. // - TeOffset = 0; // // The section might be EFI_COMMON_SECTION_HEADER2 // But only Type needs to be checked @@ -503,12 +499,7 @@ Returns: HeaderSize = sizeof (EFI_COMMON_SECTION_HEADER); } fread (&TempSectHeader, 1, HeaderSize, InFile); - if (TempSectHeader.Type == EFI_SECTION_TE) { - fread (&TeHeader, 1, sizeof (TeHeader), InFile); - if (TeHeader.Signature == EFI_TE_IMAGE_HEADER_SIGNATURE) { - TeOffset = TeHeader.StrippedSize - sizeof (TeHeader); - } - } else if (TempSectHeader.Type == EFI_SECTION_GUID_DEFINED) { + if (TempSectHeader.Type == EFI_SECTION_GUID_DEFINED) { fseek (InFile, 0, SEEK_SET); if (FileSize >= MAX_SECTION_SIZE) { fread (&GuidSectHeader2, 1, sizeof (GuidSectHeader2), InFile); @@ -525,21 +516,12 @@ Returns: fseek (InFile, 0, SEEK_SET); - // - // Revert TeOffset to the converse value relative to Alignment - // This is to assure the original PeImage Header at Alignment. - // - if (TeOffset != 0) { - TeOffset = InputFileAlign [Index] - (TeOffset % InputFileAlign [Index]); - TeOffset = TeOffset % InputFileAlign [Index]; - } - // // make sure section data meet its alignment requirement by adding one raw pad section. // - if ((InputFileAlign [Index] != 0) && (((Size + HeaderSize + TeOffset) % InputFileAlign [Index]) != 0)) { - Offset = (Size + sizeof (EFI_COMMON_SECTION_HEADER) + HeaderSize + TeOffset + InputFileAlign [Index] - 1) & ~(InputFileAlign [Index] - 1); - Offset = Offset - Size - HeaderSize - TeOffset; + if ((InputFileAlign [Index] != 0) && (((Size + HeaderSize) % InputFileAlign [Index]) != 0)) { + Offset = (Size + sizeof (EFI_COMMON_SECTION_HEADER) + HeaderSize + InputFileAlign [Index] - 1) & ~(InputFileAlign [Index] - 1); + Offset = Offset - Size - HeaderSize; if (FileBuffer != NULL && ((Size + Offset) < *BufferLength)) { // @@ -1713,8 +1695,6 @@ Returns: SectType = EFI_SECTION_PE32; } else if (stricmp (SectionName, mSectionTypeName[EFI_SECTION_PIC]) == 0) { SectType = EFI_SECTION_PIC; - } else if (stricmp (SectionName, mSectionTypeName[EFI_SECTION_TE]) == 0) { - SectType = EFI_SECTION_TE; } else if (stricmp (SectionName, mSectionTypeName[EFI_SECTION_DXE_DEPEX]) == 0) { SectType = EFI_SECTION_DXE_DEPEX; } else if (stricmp (SectionName, mSectionTypeName[EFI_SECTION_SMM_DEPEX]) == 0) { diff --git a/BaseTools/Source/C/VolInfo/VolInfo.c b/BaseTools/Source/C/VolInfo/VolInfo.c index be8e30dbde..5fe962729f 100644 --- a/BaseTools/Source/C/VolInfo/VolInfo.c +++ b/BaseTools/Source/C/VolInfo/VolInfo.c @@ -665,7 +665,7 @@ Returns: // // 0x12 // - "EFI_SECTION_TE", + "Unsupported section type - formerly TE", // // 0x13 // @@ -1788,7 +1788,6 @@ Returns: switch (Type) { case EFI_SECTION_RAW: case EFI_SECTION_PIC: - case EFI_SECTION_TE: // default is no more information break; diff --git a/BaseTools/Source/Python/Common/DataType.py b/BaseTools/Source/Python/Common/DataType.py index 48dbf16495..fdbcdbc308 100644 --- a/BaseTools/Source/Python/Common/DataType.py +++ b/BaseTools/Source/Python/Common/DataType.py @@ -122,7 +122,6 @@ BINARY_FILE_TYPE_PIC = 'PIC' BINARY_FILE_TYPE_PEI_DEPEX = 'PEI_DEPEX' BINARY_FILE_TYPE_DXE_DEPEX = 'DXE_DEPEX' BINARY_FILE_TYPE_SMM_DEPEX = 'SMM_DEPEX' -BINARY_FILE_TYPE_TE = 'TE' BINARY_FILE_TYPE_VER = 'VER' BINARY_FILE_TYPE_UI = 'UI' BINARY_FILE_TYPE_BIN = 'BIN' diff --git a/BaseTools/Source/Python/FMMT/core/BiosTreeNode.py b/BaseTools/Source/Python/FMMT/core/BiosTreeNode.py index 20447766c8..e06b065bf3 100644 --- a/BaseTools/Source/Python/FMMT/core/BiosTreeNode.py +++ b/BaseTools/Source/Python/FMMT/core/BiosTreeNode.py @@ -17,7 +17,6 @@ SectionHeaderType = { 0x03:'EFI_SECTION_DISPOSABLE', 0x10:'EFI_SECTION_PE32', 0x11:'EFI_SECTION_PIC', - 0x12:'EFI_SECTION_TE', 0x13:'EFI_SECTION_DXE_DEPEX', 0x14:'EFI_SECTION_VERSION', 0x15:'EFI_SECTION_USER_INTERFACE', diff --git a/BaseTools/Source/Python/GenFds/DataSection.py b/BaseTools/Source/Python/GenFds/DataSection.py index abf75abcc7..61d162f31b 100644 --- a/BaseTools/Source/Python/GenFds/DataSection.py +++ b/BaseTools/Source/Python/GenFds/DataSection.py @@ -79,10 +79,10 @@ class DataSection (DataSectionClassObject): CopyLongFilePath(MapFile, CopyMapFile) #Get PE Section alignment when align is set to AUTO - if self.Alignment == 'Auto' and self.SecType in (BINARY_FILE_TYPE_TE, BINARY_FILE_TYPE_PE32): + if self.Alignment == 'Auto' and self.SecType in (BINARY_FILE_TYPE_PE32): self.Alignment = "0" NoStrip = True - if self.SecType in (BINARY_FILE_TYPE_TE, BINARY_FILE_TYPE_PE32): + if self.SecType in (BINARY_FILE_TYPE_PE32): if self.KeepReloc is not None: NoStrip = self.KeepReloc @@ -100,16 +100,6 @@ class DataSection (DataSectionClassObject): ) self.SectFileName = StrippedFile - if self.SecType == BINARY_FILE_TYPE_TE: - TeFile = os.path.join( OutputPath, ModuleName + 'Te.raw') - GenFdsGlobalVariable.GenerateFirmwareImage( - TeFile, - [GenFdsGlobalVariable.MacroExtend(self.SectFileName, Dict)], - Type='te', - IsMakefile = IsMakefile - ) - self.SectFileName = TeFile - OutputFile = os.path.join (OutputPath, ModuleName + SUP_MODULE_SEC + SecNum + SectionSuffix.get(self.SecType)) OutputFile = os.path.normpath(OutputFile) GenFdsGlobalVariable.GenerateSection(OutputFile, [self.SectFileName], Section.Section.SectionType.get(self.SecType), IsMakefile = IsMakefile) diff --git a/BaseTools/Source/Python/GenFds/EfiSection.py b/BaseTools/Source/Python/GenFds/EfiSection.py index cb981ef4e6..34ce17224a 100644 --- a/BaseTools/Source/Python/GenFds/EfiSection.py +++ b/BaseTools/Source/Python/GenFds/EfiSection.py @@ -62,7 +62,7 @@ class EfiSection (EfiSectionClassObject): StringData = FfsInf.__ExtendMacro__(self.StringData) ModuleNameStr = FfsInf.__ExtendMacro__('$(MODULE_NAME)') NoStrip = True - if FfsInf.ModuleType in (SUP_MODULE_SEC, SUP_MODULE_PEI_CORE, SUP_MODULE_PEIM, SUP_MODULE_MM_CORE_STANDALONE) and SectionType in (BINARY_FILE_TYPE_TE, BINARY_FILE_TYPE_PE32): + if FfsInf.ModuleType in (SUP_MODULE_SEC, SUP_MODULE_PEI_CORE, SUP_MODULE_PEIM, SUP_MODULE_MM_CORE_STANDALONE) and SectionType in (BINARY_FILE_TYPE_PE32): if FfsInf.KeepReloc is not None: NoStrip = FfsInf.KeepReloc elif FfsInf.KeepRelocFromRule is not None: @@ -259,7 +259,7 @@ class EfiSection (EfiSectionClassObject): File = GenFdsGlobalVariable.MacroExtend(File, Dict) #Get PE Section alignment when align is set to AUTO - if self.Alignment == 'Auto' and (SectionType == BINARY_FILE_TYPE_PE32 or SectionType == BINARY_FILE_TYPE_TE): + if self.Alignment == 'Auto' and (SectionType == BINARY_FILE_TYPE_PE32): Align = "0" if File[(len(File)-4):] == '.efi' and FfsInf.InfModule.BaseName == os.path.basename(File)[:-4]: MapFile = File.replace('.efi', '.map') @@ -295,18 +295,6 @@ class EfiSection (EfiSectionClassObject): ) File = StrippedFile - """For TE Section call GenFw to generate TE image""" - - if SectionType == BINARY_FILE_TYPE_TE: - TeFile = os.path.join( OutputPath, ModuleName + 'Te.raw') - GenFdsGlobalVariable.GenerateFirmwareImage( - TeFile, - [File], - Type='te', - IsMakefile = IsMakefile - ) - File = TeFile - """Call GenSection""" GenFdsGlobalVariable.GenerateSection(OutputFile, [File], diff --git a/BaseTools/Source/Python/GenFds/FdfParser.py b/BaseTools/Source/Python/GenFds/FdfParser.py index 00bf15bb41..21b97776eb 100644 --- a/BaseTools/Source/Python/GenFds/FdfParser.py +++ b/BaseTools/Source/Python/GenFds/FdfParser.py @@ -2597,7 +2597,7 @@ class FdfParser: # @staticmethod def _SectionCouldHaveRelocFlag (SectionType): - if SectionType in {BINARY_FILE_TYPE_TE, BINARY_FILE_TYPE_PE32}: + if SectionType in {BINARY_FILE_TYPE_PE32}: return True else: return False @@ -2806,7 +2806,7 @@ class FdfParser: if self._IsKeyword("VERSION"): if AlignValue == 'Auto': - raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber) + raise Warning("Auto alignment can only be used in PE32 section ", self.FileName, self.CurrentLineNumber) if not self._IsToken(TAB_EQUAL_SPLIT): raise Warning.ExpectedEquals(self.FileName, self.CurrentLineNumber) if not self._GetNextToken(): @@ -2822,7 +2822,7 @@ class FdfParser: elif self._IsKeyword(BINARY_FILE_TYPE_UI): if AlignValue == 'Auto': - raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber) + raise Warning("Auto alignment can only be used in PE32 section ", self.FileName, self.CurrentLineNumber) if not self._IsToken(TAB_EQUAL_SPLIT): raise Warning.ExpectedEquals(self.FileName, self.CurrentLineNumber) if not self._GetNextToken(): @@ -2837,7 +2837,7 @@ class FdfParser: elif self._IsKeyword("FV_IMAGE"): if AlignValue == 'Auto': - raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber) + raise Warning("Auto alignment can only be used in PE32 section ", self.FileName, self.CurrentLineNumber) if not self._IsToken(TAB_EQUAL_SPLIT): raise Warning.ExpectedEquals(self.FileName, self.CurrentLineNumber) if not self._GetNextToken(): @@ -2878,7 +2878,7 @@ class FdfParser: elif self._IsKeyword("PEI_DEPEX_EXP") or self._IsKeyword("DXE_DEPEX_EXP") or self._IsKeyword("SMM_DEPEX_EXP"): if AlignValue == 'Auto': - raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber) + raise Warning("Auto alignment can only be used in PE32 section ", self.FileName, self.CurrentLineNumber) DepexSectionObj = DepexSection() DepexSectionObj.Alignment = AlignValue DepexSectionObj.DepexType = self._Token @@ -2895,7 +2895,7 @@ class FdfParser: elif self._IsKeyword("SUBTYPE_GUID"): if AlignValue == 'Auto': - raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber) + raise Warning("Auto alignment can only be used in PE32 section ", self.FileName, self.CurrentLineNumber) SubTypeGuidValue = None if not self._GetNextGuid(): raise Warning.Expected("GUID", self.FileName, self.CurrentLineNumber) @@ -2923,11 +2923,11 @@ class FdfParser: self.SetFileBufferPos(OldPos) return False - if self._Token not in {"COMPAT16", BINARY_FILE_TYPE_PE32, BINARY_FILE_TYPE_PIC, BINARY_FILE_TYPE_TE, "FV_IMAGE", "RAW", BINARY_FILE_TYPE_DXE_DEPEX,\ + if self._Token not in {"COMPAT16", BINARY_FILE_TYPE_PE32, BINARY_FILE_TYPE_PIC, "FV_IMAGE", "RAW", BINARY_FILE_TYPE_DXE_DEPEX,\ BINARY_FILE_TYPE_UI, "VERSION", BINARY_FILE_TYPE_PEI_DEPEX, "SUBTYPE_GUID", BINARY_FILE_TYPE_SMM_DEPEX}: raise Warning("Unknown section type '%s'" % self._Token, self.FileName, self.CurrentLineNumber) - if AlignValue == 'Auto'and (not self._Token == BINARY_FILE_TYPE_PE32) and (not self._Token == BINARY_FILE_TYPE_TE): - raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber) + if AlignValue == 'Auto'and (not self._Token == BINARY_FILE_TYPE_PE32): + raise Warning("Auto alignment can only be used in PE32 section ", self.FileName, self.CurrentLineNumber) # DataSection DataSectionObj = DataSection() @@ -3726,7 +3726,7 @@ class FdfParser: if SectionName not in { "COMPAT16", BINARY_FILE_TYPE_PE32, - BINARY_FILE_TYPE_PIC, BINARY_FILE_TYPE_TE, "FV_IMAGE", + BINARY_FILE_TYPE_PIC, "FV_IMAGE", "RAW",BINARY_FILE_TYPE_DXE_DEPEX, BINARY_FILE_TYPE_UI, BINARY_FILE_TYPE_PEI_DEPEX, "VERSION", "SUBTYPE_GUID", BINARY_FILE_TYPE_SMM_DEPEX}: @@ -3743,8 +3743,8 @@ class FdfParser: if self._GetAlignment(): if self._Token not in ALIGNMENTS: raise Warning("Incorrect alignment '%s'" % self._Token, self.FileName, self.CurrentLineNumber) - if self._Token == 'Auto' and (not SectionName == BINARY_FILE_TYPE_PE32) and (not SectionName == BINARY_FILE_TYPE_TE): - raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber) + if self._Token == 'Auto' and (not SectionName == BINARY_FILE_TYPE_PE32): + raise Warning("Auto alignment can only be used in PE32 section ", self.FileName, self.CurrentLineNumber) SectAlignment = self._Token Ext = None @@ -3796,7 +3796,7 @@ class FdfParser: if SectionName not in { "COMPAT16", BINARY_FILE_TYPE_PE32, - BINARY_FILE_TYPE_PIC, BINARY_FILE_TYPE_TE, "FV_IMAGE", + BINARY_FILE_TYPE_PIC, "FV_IMAGE", "RAW",BINARY_FILE_TYPE_DXE_DEPEX, BINARY_FILE_TYPE_UI, BINARY_FILE_TYPE_PEI_DEPEX, "VERSION", "SUBTYPE_GUID", BINARY_FILE_TYPE_SMM_DEPEX, BINARY_FILE_TYPE_GUID}: @@ -3843,7 +3843,7 @@ class FdfParser: elif self._GetNextToken(): if self._Token not in { T_CHAR_BRACE_R, "COMPAT16", BINARY_FILE_TYPE_PE32, - BINARY_FILE_TYPE_PIC, BINARY_FILE_TYPE_TE, + BINARY_FILE_TYPE_PIC, "FV_IMAGE", "RAW", BINARY_FILE_TYPE_DXE_DEPEX, BINARY_FILE_TYPE_UI, "VERSION", BINARY_FILE_TYPE_PEI_DEPEX, BINARY_FILE_TYPE_GUID, @@ -3907,8 +3907,8 @@ class FdfParser: if self._GetAlignment(): if self._Token not in ALIGNMENTS: raise Warning("Incorrect alignment '%s'" % self._Token, self.FileName, self.CurrentLineNumber) - if self._Token == 'Auto' and (not SectionName == BINARY_FILE_TYPE_PE32) and (not SectionName == BINARY_FILE_TYPE_TE): - raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber) + if self._Token == 'Auto' and (not SectionName == BINARY_FILE_TYPE_PE32): + raise Warning("Auto alignment can only be used in PE32 section ", self.FileName, self.CurrentLineNumber) EfiSectionObj.Alignment = self._Token if self._IsKeyword('RELOCS_STRIPPED') or self._IsKeyword('RELOCS_RETAINED'): @@ -3928,7 +3928,7 @@ class FdfParser: elif self._GetNextToken(): if self._Token not in { T_CHAR_BRACE_R, "COMPAT16", BINARY_FILE_TYPE_PE32, - BINARY_FILE_TYPE_PIC, BINARY_FILE_TYPE_TE, + BINARY_FILE_TYPE_PIC, "FV_IMAGE", "RAW", BINARY_FILE_TYPE_DXE_DEPEX, BINARY_FILE_TYPE_UI, "VERSION", BINARY_FILE_TYPE_PEI_DEPEX, BINARY_FILE_TYPE_GUID, @@ -4020,9 +4020,6 @@ class FdfParser: elif SectionType == BINARY_FILE_TYPE_PIC: if FileType not in {BINARY_FILE_TYPE_PIC, "SEC_PIC"}: raise Warning(WarningString % FileType, self.FileName, self.CurrentLineNumber) - elif SectionType == BINARY_FILE_TYPE_TE: - if FileType not in {BINARY_FILE_TYPE_TE, "SEC_TE"}: - raise Warning(WarningString % FileType, self.FileName, self.CurrentLineNumber) elif SectionType == "RAW": if FileType not in {BINARY_FILE_TYPE_BIN, "SEC_BIN", "RAW", "ASL", "ACPI"}: raise Warning(WarningString % FileType, self.FileName, self.CurrentLineNumber) diff --git a/BaseTools/Source/Python/GenFds/Ffs.py b/BaseTools/Source/Python/GenFds/Ffs.py index 4e58df279b..64b031f33f 100644 --- a/BaseTools/Source/Python/GenFds/Ffs.py +++ b/BaseTools/Source/Python/GenFds/Ffs.py @@ -33,7 +33,6 @@ FdfFvFileTypeToFileType = { SectionSuffix = { BINARY_FILE_TYPE_PE32 : '.pe32', BINARY_FILE_TYPE_PIC : '.pic', - BINARY_FILE_TYPE_TE : '.te', BINARY_FILE_TYPE_DXE_DEPEX : '.dpx', 'VERSION' : '.ver', BINARY_FILE_TYPE_UI : '.ui', diff --git a/BaseTools/Source/Python/GenFds/FfsInfStatement.py b/BaseTools/Source/Python/GenFds/FfsInfStatement.py index 96b9c0a3ad..90ac443a02 100644 --- a/BaseTools/Source/Python/GenFds/FfsInfStatement.py +++ b/BaseTools/Source/Python/GenFds/FfsInfStatement.py @@ -769,7 +769,7 @@ class FfsInfStatement(FfsInfStatementClassObject): File = GenFdsGlobalVariable.MacroExtend(File, Dict, self.CurrentArch) #Get PE Section alignment when align is set to AUTO - if self.Alignment == 'Auto' and (SectionType == BINARY_FILE_TYPE_PE32 or SectionType == BINARY_FILE_TYPE_TE): + if self.Alignment == 'Auto' and (SectionType == BINARY_FILE_TYPE_PE32): ImageObj = PeImageClass (File) if ImageObj.SectionAlignment < 0x400: self.Alignment = str (ImageObj.SectionAlignment) @@ -792,15 +792,6 @@ class FfsInfStatement(FfsInfStatementClassObject): ) File = StrippedFile - if SectionType == BINARY_FILE_TYPE_TE: - TeFile = os.path.join( self.OutputPath, self.ModuleGuid + 'Te.raw') - GenFdsGlobalVariable.GenerateFirmwareImage( - TeFile, - [File], - Type='te', - IsMakefile=IsMakefile - ) - File = TeFile GenFdsGlobalVariable.GenerateSection(OutputFile, [File], Section.Section.SectionType[SectionType], IsMakefile=IsMakefile) OutputFileList.append(OutputFile) else: @@ -811,7 +802,7 @@ class FfsInfStatement(FfsInfStatementClassObject): GenSecInputFile = GenFdsGlobalVariable.MacroExtend(GenSecInputFile, Dict, self.CurrentArch) #Get PE Section alignment when align is set to AUTO - if self.Alignment == 'Auto' and (SectionType == BINARY_FILE_TYPE_PE32 or SectionType == BINARY_FILE_TYPE_TE): + if self.Alignment == 'Auto' and (SectionType == BINARY_FILE_TYPE_PE32): ImageObj = PeImageClass (GenSecInputFile) if ImageObj.SectionAlignment < 0x400: self.Alignment = str (ImageObj.SectionAlignment) @@ -835,15 +826,6 @@ class FfsInfStatement(FfsInfStatementClassObject): ) GenSecInputFile = StrippedFile - if SectionType == BINARY_FILE_TYPE_TE: - TeFile = os.path.join( self.OutputPath, self.ModuleGuid + 'Te.raw') - GenFdsGlobalVariable.GenerateFirmwareImage( - TeFile, - [GenSecInputFile], - Type='te', - IsMakefile=IsMakefile - ) - GenSecInputFile = TeFile GenFdsGlobalVariable.GenerateSection(OutputFile, [GenSecInputFile], Section.Section.SectionType[SectionType], IsMakefile=IsMakefile) OutputFileList.append(OutputFile) diff --git a/BaseTools/Source/Python/GenFds/GenFds.py b/BaseTools/Source/Python/GenFds/GenFds.py index 17b71b7cd3..717bcc7fa6 100644 --- a/BaseTools/Source/Python/GenFds/GenFds.py +++ b/BaseTools/Source/Python/GenFds/GenFds.py @@ -733,12 +733,12 @@ class GenFds(object): if not os.path.exists(FfsPath[0]): continue MatchDict = {} - ReFileEnds = compile('\S+(.ui)$|\S+(fv.sec.txt)$|\S+(.pe32.txt)$|\S+(.te.txt)$|\S+(.pic.txt)$|\S+(.raw.txt)$|\S+(.ffs.txt)$') + ReFileEnds = compile('\S+(.ui)$|\S+(fv.sec.txt)$|\S+(.pe32.txt)$|\S+(.pic.txt)$|\S+(.raw.txt)$|\S+(.ffs.txt)$') FileList = os.listdir(FfsPath[0]) for File in FileList: Match = ReFileEnds.search(File) if Match: - for Index in range(1, 8): + for Index in range(1, 7): if Match.group(Index) and Match.group(Index) in MatchDict: MatchDict[Match.group(Index)].append(File) elif Match.group(Index): @@ -759,8 +759,6 @@ class GenFds(object): FileList = MatchDict['fv.sec.txt'] elif '.pe32.txt' in MatchDict: FileList = MatchDict['.pe32.txt'] - elif '.te.txt' in MatchDict: - FileList = MatchDict['.te.txt'] elif '.pic.txt' in MatchDict: FileList = MatchDict['.pic.txt'] elif '.raw.txt' in MatchDict: diff --git a/BaseTools/Source/Python/GenFds/Section.py b/BaseTools/Source/Python/GenFds/Section.py index 859db7230a..d05d656417 100644 --- a/BaseTools/Source/Python/GenFds/Section.py +++ b/BaseTools/Source/Python/GenFds/Section.py @@ -26,7 +26,6 @@ class Section (SectionClassObject): 'FREEFORM' : 'EFI_SECTION_FREEFORM_SUBTYPE_GUID', BINARY_FILE_TYPE_PE32 : 'EFI_SECTION_PE32', BINARY_FILE_TYPE_PIC : 'EFI_SECTION_PIC', - BINARY_FILE_TYPE_TE : 'EFI_SECTION_TE', 'FV_IMAGE' : 'EFI_SECTION_FIRMWARE_VOLUME_IMAGE', 'COMPAT16' : 'EFI_SECTION_COMPATIBILITY16', BINARY_FILE_TYPE_DXE_DEPEX : 'EFI_SECTION_DXE_DEPEX', @@ -47,7 +46,6 @@ class Section (SectionClassObject): BINARY_FILE_TYPE_PIC : '.pic', BINARY_FILE_TYPE_PEI_DEPEX : '.depex', 'SEC_PEI_DEPEX' : '.depex', - BINARY_FILE_TYPE_TE : '.te', BINARY_FILE_TYPE_UNI_VER : '.ver', BINARY_FILE_TYPE_VER : '.ver', BINARY_FILE_TYPE_UNI_UI : '.ui', @@ -62,7 +60,6 @@ class Section (SectionClassObject): 'SEC_GUID' : '.sec' , 'SEC_PE32' : '.sec' , 'SEC_PIC' : '.sec', - 'SEC_TE' : '.sec', 'SEC_VER' : '.sec', 'SEC_UI' : '.sec', 'SEC_COMPAT16' : '.sec', @@ -124,8 +121,7 @@ class Section (SectionClassObject): for File in FfsInf.BinFileList: if File.Arch == TAB_ARCH_COMMON or FfsInf.CurrentArch == File.Arch: if File.Type == FileType or (int(FfsInf.PiSpecVersion, 16) >= 0x0001000A \ - and FileType == 'DXE_DPEX' and File.Type == BINARY_FILE_TYPE_SMM_DEPEX) \ - or (FileType == BINARY_FILE_TYPE_TE and File.Type == BINARY_FILE_TYPE_PE32): + and FileType == 'DXE_DPEX' and File.Type == BINARY_FILE_TYPE_SMM_DEPEX): if TAB_STAR in FfsInf.TargetOverrideList or File.Target == TAB_STAR or File.Target in FfsInf.TargetOverrideList or FfsInf.TargetOverrideList == []: FileList.append(FfsInf.PatchEfiFile(File.Path, File.Type)) else: diff --git a/BaseTools/Source/Python/UPT/Library/DataType.py b/BaseTools/Source/Python/UPT/Library/DataType.py index 0e47f35670..b212786a6d 100644 --- a/BaseTools/Source/Python/UPT/Library/DataType.py +++ b/BaseTools/Source/Python/UPT/Library/DataType.py @@ -424,7 +424,6 @@ BINARY_FILE_TYPE_PIC = 'PIC' BINARY_FILE_TYPE_PEI_DEPEX = 'PEI_DEPEX' BINARY_FILE_TYPE_DXE_DEPEX = 'DXE_DEPEX' BINARY_FILE_TYPE_SMM_DEPEX = 'SMM_DEPEX' -BINARY_FILE_TYPE_TE = 'TE' BINARY_FILE_TYPE_VER = 'VER' BINARY_FILE_TYPE_UI = 'UI' BINARY_FILE_TYPE_BIN = 'BIN' diff --git a/BaseTools/UserManuals/GenSec_Utility_Man_Page.rtf b/BaseTools/UserManuals/GenSec_Utility_Man_Page.rtf index 2ccaf8f65c..9a98b760d5 100644 --- a/BaseTools/UserManuals/GenSec_Utility_Man_Page.rtf +++ b/BaseTools/UserManuals/GenSec_Utility_Man_Page.rtf @@ -175,13 +175,13 @@ COMPAT16\cell \hich\af4\dbch\af31505\loch\f4 EFI_SECTION_COMPATIBILITY16\cell }\ \ltrch\fcs0 \fs18\cf1\insrsid15798865\charrsid12198464 \hich\af43\dbch\af31505\loch\f43 If no options ar}{\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid15798865 \hich\af43\dbch\af31505\loch\f43 e specified, tool prints usage.}{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid13127309 \par }{\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid11342878 \hich\af43\dbch\af31505\loch\f43 Filename1 [FilenameN] -\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid11342878 \hich\af43\dbch\af31505\loch\f43 Input PE/PE32+ image, or TE image, or other binary files. +\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid11342878 \hich\af43\dbch\af31505\loch\f43 Input PE/PE32+ image or other binary files. \par }\pard \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid11342878 \hich\af43\dbch\af31505\loch\f43 -o FileName, --outputfile FileName \par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid11342878 \hich\af43\dbch\af31505\loch\f43 The PI section file is created. This option is required. \par }\pard \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid11342878 \hich\af43\dbch\af31505\loch\f43 -s SectionType, --sectiontype SectionType \par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid11342878 \hich\af43\dbch\af31505\loch\f43 SectionType defined in PI spec is one type of EFI_SECTION_COMPRE \hich\af43\dbch\af31505\loch\f43 -SSION, EFI_SECTION_GUID_DEFINED, EFI_SECTION_PE32, EFI_SECTION_PIC, EFI_SECTION_TE, EFI_SECTION_DXE_DEPEX, EFI_SECTION_COMPATIBILITY16, EFI_SECTION_USER_INTERFACE, EFI_SECTION_VERSION, EFI_SECTION_FIRMWARE_VOLUME_IMAGE, EFI_SECTION_RAW, EFI_SECTION_FREEFO +SSION, EFI_SECTION_GUID_DEFINED, EFI_SECTION_PE32, EFI_SECTION_PIC, EFI_SECTION_DXE_DEPEX, EFI_SECTION_COMPATIBILITY16, EFI_SECTION_USER_INTERFACE, EFI_SECTION_VERSION, EFI_SECTION_FIRMWARE_VOLUME_IMAGE, EFI_SECTION_RAW, EFI_SECTION_FREEFO \hich\af43\dbch\af31505\loch\f43 R\hich\af43\dbch\af31505\loch\f43 M_SUBTYPE_GUID, EFI_SECTION_PEI_DEPEX. If sectiontype is not given, EFI_SECTION_ALL is default type to contain the input all sections to one section file. \par }\pard \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af43\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid11342878 \hich\af43\dbch\af31505\loch\f43 -c [Type], --compress [Type] \par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af43\afs18 \ltrch\fcs0 \fs18\cf1\insrsid11342878 \hich\af43\dbch\af31505\loch\f43 Compress method type can be PI_NONE, PI_STD or TIANO. If Type is not given, PI_ diff --git a/EmbeddedPkg/Scripts/LauterbachT32/EfiLoadFv.cmm b/EmbeddedPkg/Scripts/LauterbachT32/EfiLoadFv.cmm index c74ddaa6b8..7ba296c9fa 100644 --- a/EmbeddedPkg/Scripts/LauterbachT32/EfiLoadFv.cmm +++ b/EmbeddedPkg/Scripts/LauterbachT32/EfiLoadFv.cmm @@ -112,14 +112,7 @@ ProcessFvSection: ) else ( - if §iontype==0x12 ; TE - ( - do EfiProcessTeImage (&secstart+0x4) - ) - else - ( - print "unknown section type" - ) + print "unknown section type" ) return diff --git a/EmbeddedPkg/Scripts/LauterbachT32/EfiProcessTeImage.cmm b/EmbeddedPkg/Scripts/LauterbachT32/EfiProcessTeImage.cmm deleted file mode 100644 index 379e5de61e..0000000000 --- a/EmbeddedPkg/Scripts/LauterbachT32/EfiProcessTeImage.cmm +++ /dev/null @@ -1,64 +0,0 @@ -; -; Copyright (c) 2011, Hewlett-Packard Company. All rights reserved.
-; -; SPDX-License-Identifier: BSD-2-Clause-Patent -; - - LOCAL &imgstart &strippedsize &debugdirentryrva &debugtype &debugrva &dwarfsig &elfbase &elfpath &pathoffset - ENTRY &imgstart - - &imgstart=&imgstart - print "TE image found at &imgstart" - - ; determine pe header bytes removed to account for in rva references - &strippedsize=(Data.Long(a:&imgstart+0x4)&0xffff0000)>>16. - &strippedsize=&strippedsize-0x28 - - &debugdirentryrva=Data.Long(a:&imgstart+0x20) - if &debugdirentryrva==0 - ( - print "no debug dir for image at &imgstart" - enddo - ) - &debugdirentryrva=&debugdirentryrva-&strippedsize - - &debugtype=Data.Long(a:&imgstart+&debugdirentryrva+0xc) - if (&debugtype!=0xdf)&&(&debugtype!=0x02) - ( - print "debug type is not dwarf for image at &imgstart, it's &debugtype" - enddo - ) - - &debugrva=Data.Long(a:&imgstart+&debugdirentryrva+0x14) - &debugrva=&debugrva-&strippedsize; - &dwarfsig=Data.Long(a:&imgstart+&debugrva); - if &dwarfsig==0x66727764 - ( - &pathoffset=0xc - ) - else - ( - if &dwarfsig==0x3031424E - ( - &pathoffset=0x10 - ) - else - ( - print "debug signature not found for image at &imgstart, its &dwarfsig" - enddo - ) - ) - - &elfpath=Data.String(c:&imgstart+&debugrva+&pathoffset) - - ; elf base is baseofcode (we hope that for TE images it's not baseofdata) - &elfbase=&imgstart+Data.Long(a:&imgstart+0xc)-&strippedsize - - print "found path &elfpath" - ; $fprintf 50, "load /ni /np /a %s &0x%x\n",elfpath,elfbase$; - ON ERROR GOSUB - return - data.load.elf &elfpath &elfbase /NOCODE /NOCLEAR - ON error - -enddo diff --git a/EmulatorPkg/EmulatorPkg.dsc b/EmulatorPkg/EmulatorPkg.dsc index c4ca1e97da..14a5b059aa 100644 --- a/EmulatorPkg/EmulatorPkg.dsc +++ b/EmulatorPkg/EmulatorPkg.dsc @@ -210,7 +210,6 @@ [PcdsFeatureFlag] gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode|FALSE - gEfiMdeModulePkgTokenSpaceGuid.PcdPeiCoreImageLoaderSearchTeSectionFirst|FALSE gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplBuildPageTables|FALSE [PcdsFixedAtBuild] diff --git a/IntelFsp2Pkg/Tools/ConfigEditor/ConfigEditor.py b/IntelFsp2Pkg/Tools/ConfigEditor/ConfigEditor.py index 5271504282..9089bf55ef 100644 --- a/IntelFsp2Pkg/Tools/ConfigEditor/ConfigEditor.py +++ b/IntelFsp2Pkg/Tools/ConfigEditor/ConfigEditor.py @@ -419,7 +419,6 @@ class EFI_SECTION_TYPE: DISPOSABLE = 0x03 PE32 = 0x10 PIC = 0x11 - TE = 0x12 DXE_DEPEX = 0x13 VERSION = 0x14 USER_INTERFACE = 0x15 diff --git a/IntelFsp2Pkg/Tools/SplitFspBin.py b/IntelFsp2Pkg/Tools/SplitFspBin.py index 558eaf401a..2e5cec7cf6 100644 --- a/IntelFsp2Pkg/Tools/SplitFspBin.py +++ b/IntelFsp2Pkg/Tools/SplitFspBin.py @@ -145,20 +145,6 @@ class EFI_IMAGE_DATA_DIRECTORY(Structure): ('Size', c_uint32) ] -class EFI_TE_IMAGE_HEADER(Structure): - _fields_ = [ - ('Signature', ARRAY(c_char, 2)), - ('Machine', c_uint16), - ('NumberOfSections', c_uint8), - ('Subsystem', c_uint8), - ('StrippedSize', c_uint16), - ('AddressOfEntryPoint', c_uint32), - ('BaseOfCode', c_uint32), - ('ImageBase', c_uint64), - ('DataDirectoryBaseReloc', EFI_IMAGE_DATA_DIRECTORY), - ('DataDirectoryDebug', EFI_IMAGE_DATA_DIRECTORY) - ] - class EFI_IMAGE_DOS_HEADER(Structure): _fields_ = [ ('e_magic', c_uint16), @@ -326,7 +312,6 @@ class EFI_SECTION_TYPE: DISPOSABLE = 0x03 PE32 = 0x10 PIC = 0x11 - TE = 0x12 DXE_DEPEX = 0x13 VERSION = 0x14 USER_INTERFACE = 0x15 @@ -633,11 +618,8 @@ class FirmwareDevice: class PeTeImage: def __init__(self, offset, data): self.Offset = offset - tehdr = EFI_TE_IMAGE_HEADER.from_buffer (data, 0) - if tehdr.Signature == b'VZ': # TE image - self.TeHdr = tehdr - elif tehdr.Signature == b'MZ': # PE image - self.TeHdr = None + doshdr = EFI_IMAGE_DOS_HEADER.from_buffer (data, 0) + elif doshdr.e_magic == b'MZ': # PE image self.DosHdr = EFI_IMAGE_DOS_HEADER.from_buffer (data, 0) self.PeHdr = EFI_IMAGE_NT_HEADERS32.from_buffer (data, self.DosHdr.e_lfanew) if self.PeHdr.Signature != 0x4550: @@ -658,20 +640,13 @@ class PeTeImage: self.Data = data self.RelocList = [] - def IsTeImage(self): - return self.TeHdr is not None - def ParseReloc(self): - if self.IsTeImage(): - rsize = self.TeHdr.DataDirectoryBaseReloc.Size - roffset = sizeof(self.TeHdr) - self.TeHdr.StrippedSize + self.TeHdr.DataDirectoryBaseReloc.VirtualAddress - else: - # Assuming PE32 image type (self.PeHdr.OptionalHeader.PeOptHdr.Magic == 0x10b) - rsize = self.PeHdr.OptionalHeader.PeOptHdr.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY.BASERELOC].Size - roffset = self.PeHdr.OptionalHeader.PeOptHdr.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY.BASERELOC].VirtualAddress - if self.PeHdr.OptionalHeader.PePlusOptHdr.Magic == 0x20b: # PE32+ image - rsize = self.PeHdr.OptionalHeader.PePlusOptHdr.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY.BASERELOC].Size - roffset = self.PeHdr.OptionalHeader.PePlusOptHdr.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY.BASERELOC].VirtualAddress + # Assuming PE32 image type (self.PeHdr.OptionalHeader.PeOptHdr.Magic == 0x10b) + rsize = self.PeHdr.OptionalHeader.PeOptHdr.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY.BASERELOC].Size + roffset = self.PeHdr.OptionalHeader.PeOptHdr.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY.BASERELOC].VirtualAddress + if self.PeHdr.OptionalHeader.PePlusOptHdr.Magic == 0x20b: # PE32+ image + rsize = self.PeHdr.OptionalHeader.PePlusOptHdr.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY.BASERELOC].Size + roffset = self.PeHdr.OptionalHeader.PePlusOptHdr.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY.BASERELOC].VirtualAddress alignment = 4 offset = roffset @@ -692,8 +667,6 @@ class PeTeImage: raise Exception("ERROR: Unsupported relocation type %d!" % rtype) # Calculate the offset of the relocation aoff = blkhdr.PageRVA + roff - if self.IsTeImage(): - aoff += sizeof(self.TeHdr) - self.TeHdr.StrippedSize self.RelocList.append((rtype, aoff)) offset += sizeof(rdata) @@ -718,18 +691,14 @@ class PeTeImage: else: raise Exception('ERROR: Unknown relocation type %d !' % rtype) - if self.IsTeImage(): - offset = self.Offset + EFI_TE_IMAGE_HEADER.ImageBase.offset - size = EFI_TE_IMAGE_HEADER.ImageBase.size + offset = self.Offset + self.DosHdr.e_lfanew + offset += EFI_IMAGE_NT_HEADERS32.OptionalHeader.offset + if self.PeHdr.OptionalHeader.PePlusOptHdr.Magic == 0x20b: # PE32+ image + offset += EFI_IMAGE_OPTIONAL_HEADER32_PLUS.ImageBase.offset + size = EFI_IMAGE_OPTIONAL_HEADER32_PLUS.ImageBase.size else: - offset = self.Offset + self.DosHdr.e_lfanew - offset += EFI_IMAGE_NT_HEADERS32.OptionalHeader.offset - if self.PeHdr.OptionalHeader.PePlusOptHdr.Magic == 0x20b: # PE32+ image - offset += EFI_IMAGE_OPTIONAL_HEADER32_PLUS.ImageBase.offset - size = EFI_IMAGE_OPTIONAL_HEADER32_PLUS.ImageBase.size - else: - offset += EFI_IMAGE_OPTIONAL_HEADER32.ImageBase.offset - size = EFI_IMAGE_OPTIONAL_HEADER32.ImageBase.size + offset += EFI_IMAGE_OPTIONAL_HEADER32.ImageBase.offset + size = EFI_IMAGE_OPTIONAL_HEADER32.ImageBase.size value = Bytes2Val(fdbin[offset:offset+size]) + delta fdbin[offset:offset+size] = Val2Bytes(value, size) @@ -815,7 +784,7 @@ def SplitFspBin (fspfile, outdir, nametemplate): def GetImageFromFv (fd, parentfvoffset, fv, imglist): for ffs in fv.FfsList: for sec in ffs.SecList: - if sec.SecHdr.Type in [EFI_SECTION_TYPE.TE, EFI_SECTION_TYPE.PE32]: # TE or PE32 + if sec.SecHdr.Type in [EFI_SECTION_TYPE.PE32]: # PE32 offset = fd.Offset + parentfvoffset + fv.Offset + ffs.Offset + sec.Offset + sizeof(sec.SecHdr) imglist.append ((offset, len(sec.SecData) - sizeof(sec.SecHdr))) diff --git a/MdeModulePkg/Core/Pei/Image/Image.c b/MdeModulePkg/Core/Pei/Image/Image.c index ca57bfaefc..094fc80fe6 100644 --- a/MdeModulePkg/Core/Pei/Image/Image.c +++ b/MdeModulePkg/Core/Pei/Image/Image.c @@ -394,47 +394,22 @@ PeiGetPe32Data ( OUT UINT32 *Pe32DataSize ) { - EFI_STATUS Status; - EFI_SECTION_TYPE SearchType1; - EFI_SECTION_TYPE SearchType2; - UINT32 AuthenticationState; + EFI_STATUS Status; + UINT32 AuthenticationState; *Pe32Data = NULL; - if (FeaturePcdGet (PcdPeiCoreImageLoaderSearchTeSectionFirst)) { - SearchType1 = EFI_SECTION_TE; - SearchType2 = EFI_SECTION_PE32; - } else { - SearchType1 = EFI_SECTION_PE32; - SearchType2 = EFI_SECTION_TE; - } - // - // Try to find a first exe section (if PcdPeiCoreImageLoaderSearchTeSectionFirst - // is true, TE will be searched first). + // Try to find the exe section. // Status = PeiServicesFfsFindSectionData4 ( - SearchType1, + EFI_SECTION_PE32, 0, FileHandle, Pe32Data, Pe32DataSize, &AuthenticationState ); - // - // If we didn't find a first exe section, try to find the second exe section. - // - if (EFI_ERROR (Status)) { - Status = PeiServicesFfsFindSectionData4 ( - SearchType2, - 0, - FileHandle, - Pe32Data, - Pe32DataSize, - &AuthenticationState - ); - } - return Status; } @@ -472,52 +447,28 @@ PeiLoadImageLoadImage ( VOID *Pe32Data; UINT32 Pe32DataSize; EFI_PHYSICAL_ADDRESS ImageAddress; - EFI_SECTION_TYPE SearchType1; - EFI_SECTION_TYPE SearchType2; UEFI_IMAGE_LOADER_IMAGE_CONTEXT ImageContext; *EntryPoint = 0; *AuthenticationState = 0; - if (FeaturePcdGet (PcdPeiCoreImageLoaderSearchTeSectionFirst)) { - SearchType1 = EFI_SECTION_TE; - SearchType2 = EFI_SECTION_PE32; - } else { - SearchType1 = EFI_SECTION_PE32; - SearchType2 = EFI_SECTION_TE; - } - // - // Try to find a first exe section (if PcdPeiCoreImageLoaderSearchTeSectionFirst - // is true, TE will be searched first). + // Try to find the exe section. // Status = PeiServicesFfsFindSectionData4 ( - SearchType1, + EFI_SECTION_PE32, 0, FileHandle, &Pe32Data, &Pe32DataSize, AuthenticationState ); - // - // If we didn't find a first exe section, try to find the second exe section. - // if (EFI_ERROR (Status)) { - Status = PeiServicesFfsFindSectionData4 ( - SearchType2, - 0, - FileHandle, - &Pe32Data, - &Pe32DataSize, - AuthenticationState - ); - if (EFI_ERROR (Status)) { - // - // PEI core only carry the loader function for TE and PE32 executables - // If this two section does not exist, just return. - // - return Status; - } + // + // PEI core only carry the loader function for PE32 executables + // If this two section does not exist, just return. + // + return Status; } DEBUG ((DEBUG_INFO, "Loading PEIM %g\n", FileHandle)); @@ -625,7 +576,7 @@ PeiLoadImageLoadImageWrapper ( /** Check whether the input image has the relocation. - @param Pe32Data Pointer to the PE/COFF or TE image. + @param Pe32Data Pointer to the PE/COFF image. @retval TRUE Relocation is stripped. @retval FALSE Relocation is not stripped. @@ -665,13 +616,7 @@ RelocationIsStrip ( // Look at the file header to determine if relocations have been stripped, and // save this info in the image context for later use. // - if (Hdr.Te->Signature == EFI_TE_IMAGE_HEADER_SIGNATURE) { - if ((Hdr.Te->DataDirectory[0].Size == 0) && (Hdr.Te->DataDirectory[0].VirtualAddress == 0)) { - return TRUE; - } else { - return FALSE; - } - } else if (Hdr.Pe32->Signature == EFI_IMAGE_NT_SIGNATURE) { + if (Hdr.Pe32->Signature == EFI_IMAGE_NT_SIGNATURE) { if ((Hdr.Pe32->FileHeader.Characteristics & EFI_IMAGE_FILE_RELOCS_STRIPPED) != 0) { return TRUE; } else { diff --git a/MdeModulePkg/Core/Pei/PeiMain.inf b/MdeModulePkg/Core/Pei/PeiMain.inf index 47622ad2fc..2cd008fd44 100644 --- a/MdeModulePkg/Core/Pei/PeiMain.inf +++ b/MdeModulePkg/Core/Pei/PeiMain.inf @@ -102,7 +102,6 @@ [Pcd] gEfiMdeModulePkgTokenSpaceGuid.PcdPeiCoreMaxPeiStackSize ## CONSUMES - gEfiMdeModulePkgTokenSpaceGuid.PcdPeiCoreImageLoaderSearchTeSectionFirst ## CONSUMES gEfiMdeModulePkgTokenSpaceGuid.PcdLoadFixAddressPeiCodePageNumber ## SOMETIMES_CONSUMES gEfiMdeModulePkgTokenSpaceGuid.PcdLoadFixAddressBootTimeCodePageNumber ## SOMETIMES_CONSUMES gEfiMdeModulePkgTokenSpaceGuid.PcdLoadFixAddressRuntimeCodePageNumber ## SOMETIMES_CONSUMES diff --git a/MdeModulePkg/Core/PiSmmCore/Dispatcher.c b/MdeModulePkg/Core/PiSmmCore/Dispatcher.c index dc22b9a7a5..324140a0b0 100644 --- a/MdeModulePkg/Core/PiSmmCore/Dispatcher.c +++ b/MdeModulePkg/Core/PiSmmCore/Dispatcher.c @@ -328,24 +328,6 @@ SmmLoadImage ( &Size, &AuthenticationStatus ); - - if (EFI_ERROR (Status)) { - // - // Try reading TE section secondly - // - Buffer = NULL; - Size = 0; - Status = Fv->ReadSection ( - Fv, - NameGuid, - EFI_SECTION_TE, - 0, - &Buffer, - &Size, - &AuthenticationStatus - ); - } - if (EFI_ERROR (Status)) { if (Buffer != NULL) { gBS->FreePool (Buffer); diff --git a/MdeModulePkg/MdeModulePkg.dec b/MdeModulePkg/MdeModulePkg.dec index e751e62b1b..f60c463999 100644 --- a/MdeModulePkg/MdeModulePkg.dec +++ b/MdeModulePkg/MdeModulePkg.dec @@ -772,14 +772,6 @@ # @Prompt Enable ConOut UGA support. gEfiMdeModulePkgTokenSpaceGuid.PcdConOutUgaSupport|TRUE|BOOLEAN|0x00010043 - ## Indicates PeiCore will first search TE section from the PEIM to load the image, or PE32 section, when PeiCore dispatches a PEI module. - # This PCD is used to tune PEI phase performance to reduce the search image time. - # It can be set according to the generated image section type.

- # TRUE - PeiCore will first search TE section from PEIM to load the image, if TE section is not found, then PeiCore will search PE section.
- # FALSE - PeiCore will first search PE section from PEIM to load the image.
- # @Prompt PeiCore search TE section first. - gEfiMdeModulePkgTokenSpaceGuid.PcdPeiCoreImageLoaderSearchTeSectionFirst|TRUE|BOOLEAN|0x00010044 - ## Indicates if to turn off the support of legacy usb. So legacy usb device driver can not make use of SMI # interrupt to access usb device in the case of absence of usb stack. # DUET platform requires the token to be TRUE.

diff --git a/MdeModulePkg/MdeModulePkg.uni b/MdeModulePkg/MdeModulePkg.uni index a17d34d60b..2e43fcaf86 100644 --- a/MdeModulePkg/MdeModulePkg.uni +++ b/MdeModulePkg/MdeModulePkg.uni @@ -715,12 +715,6 @@ "TRUE - Installs UGA Draw Protocol on virtual handle created by ConsplitterDxe.
\n" "FALSE - Does not install UGA Draw Protocol on virtual handle created by ConsplitterDxe.
" -#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdPeiCoreImageLoaderSearchTeSectionFirst_PROMPT #language en-US "PeiCore search TE section first" - -#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdPeiCoreImageLoaderSearchTeSectionFirst_HELP #language en-US "Indicates PeiCore will first search TE section from the PEIM to load the image, or PE32 section, when PeiCore dispatches a PEI module. This PCD is used to tune PEI phase performance to reduce the search image time. It can be set according to the generated image section type.

\n" - "TRUE - PeiCore will first search TE section from PEIM to load the image, if TE section is not found, then PeiCore will search PE section.
\n" - "FALSE - PeiCore will first search PE section from PEIM to load the image.
" - #string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdTurnOffUsbLegacySupport_PROMPT #language en-US "Turn off USB legacy support" #string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdTurnOffUsbLegacySupport_HELP #language en-US "Disable legacy USB? If disabled, legacy USB device driver cannot make use of SMI interrupt to access USB device in the case of absence of a USB stack. TRUE - disable
\n" diff --git a/MdeModulePkg/Universal/FvSimpleFileSystemDxe/FvSimpleFileSystem.c b/MdeModulePkg/Universal/FvSimpleFileSystemDxe/FvSimpleFileSystem.c index 0252db19ad..43ab654c8a 100644 --- a/MdeModulePkg/Universal/FvSimpleFileSystemDxe/FvSimpleFileSystem.c +++ b/MdeModulePkg/Universal/FvSimpleFileSystemDxe/FvSimpleFileSystem.c @@ -78,7 +78,7 @@ FvFsFindExecutableSection ( UINT32 AuthenticationStatus; EFI_STATUS Status; - for (SectionType = EFI_SECTION_PE32; SectionType <= EFI_SECTION_TE; SectionType++) { + for (SectionType = EFI_SECTION_PE32; SectionType <= EFI_SECTION_PIC; SectionType++) { Status = FvProtocol->ReadSection ( FvProtocol, &FvFileInfo->NameGuid, diff --git a/MdePkg/Include/IndustryStandard/PeImage2.h b/MdePkg/Include/IndustryStandard/PeImage2.h index d5a69f7886..29c4e706e5 100644 --- a/MdePkg/Include/IndustryStandard/PeImage2.h +++ b/MdePkg/Include/IndustryStandard/PeImage2.h @@ -724,38 +724,12 @@ typedef struct { } EFI_IMAGE_RESOURCE_DATA_ENTRY; /// -/// Header format for TE images, defined in the PI Specification, 1.0. -/// -typedef struct { - UINT16 Signature; ///< The signature for TE format = "VZ". - UINT16 Machine; ///< From the original file header. - UINT8 NumberOfSections; ///< From the original file header. - UINT8 Subsystem; ///< From original optional header. - UINT16 StrippedSize; ///< Number of bytes we removed from the header. - UINT32 AddressOfEntryPoint; ///< Offset to entry point -- from original optional header. - UINT32 BaseOfCode; ///< From original image -- required for ITP debug. - UINT64 ImageBase; ///< From original file header. - EFI_IMAGE_DATA_DIRECTORY DataDirectory[2]; ///< Only base relocation and debug directory. -} EFI_TE_IMAGE_HEADER; - - -#define EFI_TE_IMAGE_HEADER_SIGNATURE SIGNATURE_16('V', 'Z') - -// -// Data directory indexes in our TE image header -// -#define EFI_TE_IMAGE_DIRECTORY_ENTRY_BASERELOC 0 -#define EFI_TE_IMAGE_DIRECTORY_ENTRY_DEBUG 1 - - -/// -/// Union of PE32, PE32+, and TE headers. +/// Union of PE32 and PE32+ headers. /// typedef union { EFI_IMAGE_NT_HEADERS_COMMON_HDR PeCommon; EFI_IMAGE_NT_HEADERS32 Pe32; EFI_IMAGE_NT_HEADERS64 Pe32Plus; - EFI_TE_IMAGE_HEADER Te; } EFI_IMAGE_OPTIONAL_HEADER_UNION; #endif // PE_COFF_IMAGE2_H_ diff --git a/MdePkg/Include/Library/DxeServicesLib.h b/MdePkg/Include/Library/DxeServicesLib.h index b5c5c4dbdf..9de8121b20 100644 --- a/MdePkg/Include/Library/DxeServicesLib.h +++ b/MdePkg/Include/Library/DxeServicesLib.h @@ -25,8 +25,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent See EFI_FIRMWARE_VOLUME2_PROTOCOL.ReadSection() for details on how sections are retrieved from an FFS file based on SectionType and SectionInstance. - If SectionType is EFI_SECTION_TE, and the search with an FFS file fails, - the search will be retried with a section type of EFI_SECTION_PE32. This function must be called with a TPL <= TPL_NOTIFY. If Buffer is NULL, then ASSERT(). @@ -73,8 +71,6 @@ GetSectionFromAnyFvByFileType ( See EFI_FIRMWARE_VOLUME2_PROTOCOL.ReadSection() for details on how sections are retrieved from an FFS file based on SectionType and SectionInstance. - If SectionType is EFI_SECTION_TE, and the search with an FFS file fails, - the search will be retried with a section type of EFI_SECTION_PE32. This function must be called with a TPL <= TPL_NOTIFY. If NameGuid is NULL, then ASSERT(). @@ -126,10 +122,6 @@ GetSectionFromAnyFv ( See EFI_FIRMWARE_VOLUME2_PROTOCOL.ReadSection() for details on how sections are retrieved from an FFS file based on SectionType and SectionInstance. - If the currently executing module was not loaded from a firmware volume, then EFI_NOT_FOUND is returned. - If SectionType is EFI_SECTION_TE, and the search with an FFS file fails, - the search will be retried with a section type of EFI_SECTION_PE32. - This function must be called with a TPL <= TPL_NOTIFY. If NameGuid is NULL, then ASSERT(). If Buffer is NULL, then ASSERT(). @@ -179,9 +171,6 @@ GetSectionFromFv ( to use FreePool() to free the allocated buffer. See EFI_FIRMWARE_VOLUME2_PROTOCOL.ReadSection() for details on how sections are retrieved from an FFS file based on SectionType and SectionInstance. - If the currently executing module was not loaded from an FFS file, then EFI_NOT_FOUND is returned. - If SectionType is EFI_SECTION_TE, and the search with an FFS file fails, - the search will be retried with a section type of EFI_SECTION_PE32. This function must be called with a TPL <= TPL_NOTIFY. If Buffer is NULL, then ASSERT(). @@ -263,8 +252,6 @@ GetFileBufferByFilePath ( The order that the firmware volumes is searched is not deterministic. For each FFS file found a search is made for FFS sections of type SectionType. - If SectionType is EFI_SECTION_TE, and the search with an FFS file fails, - the search will be retried with a section type of EFI_SECTION_PE32. This function must be called with a TPL <= TPL_NOTIFY. If NameGuid is NULL, then ASSERT(). diff --git a/MdePkg/Include/Library/PeCoffLib2.h b/MdePkg/Include/Library/PeCoffLib2.h index 0985a0bc1e..95222dfdef 100644 --- a/MdePkg/Include/Library/PeCoffLib2.h +++ b/MdePkg/Include/Library/PeCoffLib2.h @@ -55,7 +55,6 @@ /// Image type enumeration for Image format identification from the context. /// typedef enum { - PeCoffLoaderTypeTe, PeCoffLoaderTypePe32, PeCoffLoaderTypePe32Plus, PeCoffLoaderTypeMax @@ -128,11 +127,6 @@ typedef struct { /// UINT16 Machine; /// - /// The size, in Bytes, stripped from the beginning of the Image raw file - /// during TE file generation. Always 0 for PE Images. - /// - UINT16 TeStrippedOffset; - /// /// The RVA of the Relocation Directory. /// UINT32 RelocDirRva; @@ -182,7 +176,7 @@ BOOLEAN FileBuffer must remain valid for the entire lifetime of Context. @param[out] Context The context describing the Image. - @param[in] FileBuffer The file data to parse as TE or PE Image. + @param[in] FileBuffer The file data to parse as PE Image. @param[in] FileSize The size, in Bytes, of FileBuffer. @retval RETURN_SUCCESS The Image context has been initialised successfully. diff --git a/MdePkg/Include/Pi/PiFirmwareFile.h b/MdePkg/Include/Pi/PiFirmwareFile.h index f740f9cd50..f8c65762b2 100644 --- a/MdePkg/Include/Pi/PiFirmwareFile.h +++ b/MdePkg/Include/Pi/PiFirmwareFile.h @@ -212,7 +212,6 @@ typedef UINT8 EFI_SECTION_TYPE; /// #define EFI_SECTION_PE32 0x10 #define EFI_SECTION_PIC 0x11 -#define EFI_SECTION_TE 0x12 #define EFI_SECTION_DXE_DEPEX 0x13 #define EFI_SECTION_VERSION 0x14 #define EFI_SECTION_USER_INTERFACE 0x15 diff --git a/MdePkg/Library/BasePeCoffLib2/BasePeCoffLib2.inf b/MdePkg/Library/BasePeCoffLib2/BasePeCoffLib2.inf index 42b49a82bb..95cfb62beb 100644 --- a/MdePkg/Library/BasePeCoffLib2/BasePeCoffLib2.inf +++ b/MdePkg/Library/BasePeCoffLib2/BasePeCoffLib2.inf @@ -43,7 +43,6 @@ gEfiMdePkgTokenSpaceGuid.PcdImageLoaderAlignmentPolicy gEfiMdePkgTokenSpaceGuid.PcdImageLoaderWXorX gEfiMdePkgTokenSpaceGuid.PcdImageLoaderDebugSupport - gEfiMdePkgTokenSpaceGuid.PcdImageLoaderProhibitTe gEfiMdePkgTokenSpaceGuid.PcdImageLoaderAllowMisalignedOffset gEfiMdePkgTokenSpaceGuid.PcdDebugRaisePropertyMask gEfiMdePkgTokenSpaceGuid.PcdImageLoaderRemoveXForWX diff --git a/MdePkg/Library/BasePeCoffLib2/Documentation.md b/MdePkg/Library/BasePeCoffLib2/Documentation.md index 0c8ef63e07..f294b3659b 100644 --- a/MdePkg/Library/BasePeCoffLib2/Documentation.md +++ b/MdePkg/Library/BasePeCoffLib2/Documentation.md @@ -7,7 +7,6 @@ An Image Section Table is considered well-formed if and only if: 1. The Image Section Table is sorted by Image section RVA in ascending order. 2. All Image sections are disjoint in the Image memory space. 3. For PE/COFF Images, all Image sections are in bounds of the Image memory space defined by the Image headers. - * For TE Images, the Image memory space is implicitly defined by the Image Section Table. 4. All Image sections are in bounds of the raw file. Additionally, based on PCD policy values, the following constraints may be added: diff --git a/MdePkg/Library/BasePeCoffLib2/PeCoffDebug.c b/MdePkg/Library/BasePeCoffLib2/PeCoffDebug.c index 8109b65f57..48cc1ab146 100644 --- a/MdePkg/Library/BasePeCoffLib2/PeCoffDebug.c +++ b/MdePkg/Library/BasePeCoffLib2/PeCoffDebug.c @@ -34,7 +34,6 @@ PeCoffGetPdbPath ( BOOLEAN Overflow; CONST EFI_IMAGE_DATA_DIRECTORY *DebugDir; - CONST EFI_TE_IMAGE_HEADER *TeHdr; CONST EFI_IMAGE_NT_HEADERS32 *Pe32Hdr; CONST EFI_IMAGE_NT_HEADERS64 *Pe32PlusHdr; @@ -63,19 +62,6 @@ PeCoffGetPdbPath ( // Retrieve the Debug Directory of the Image. // switch (Context->ImageType) { - case PeCoffLoaderTypeTe: - if (PcdGetBool (PcdImageLoaderProhibitTe)) { - ASSERT (FALSE); - return RETURN_UNSUPPORTED; - } - - TeHdr = (CONST EFI_TE_IMAGE_HEADER *) (CONST VOID *) ( - (CONST CHAR8 *) Context->FileBuffer - ); - - DebugDir = &TeHdr->DataDirectory[1]; - break; - case PeCoffLoaderTypePe32: Pe32Hdr = (CONST EFI_IMAGE_NT_HEADERS32 *) (CONST VOID *) ( (CONST CHAR8 *) Context->FileBuffer + Context->ExeHdrOffset @@ -170,20 +156,6 @@ PeCoffGetPdbPath ( } DebugEntryFileOffset = CodeViewEntry->FileOffset; - - if (!PcdGetBool (PcdImageLoaderProhibitTe)) { - Overflow = BaseOverflowSubU32 ( - DebugEntryFileOffset, - Context->TeStrippedOffset, - &DebugEntryFileOffset - ); - if (Overflow) { - DEBUG_RAISE (); - return RETURN_VOLUME_CORRUPTED; - } - } else { - ASSERT (Context->TeStrippedOffset == 0); - } // // Verify the CodeView entry is in bounds of the raw file, and the // CodeView entry raw file offset is sufficiently aligned. diff --git a/MdePkg/Library/BasePeCoffLib2/PeCoffHash.c b/MdePkg/Library/BasePeCoffLib2/PeCoffHash.c index 12a9495d05..343647d810 100644 --- a/MdePkg/Library/BasePeCoffLib2/PeCoffHash.c +++ b/MdePkg/Library/BasePeCoffLib2/PeCoffHash.c @@ -95,7 +95,6 @@ InternalHashSections ( // // 13. Repeat steps 11 and 12 for all of the sections in the sorted table. // - ASSERT (Context->TeStrippedOffset == 0); for (SectionIndex = 0; SectionIndex < Context->NumberOfSections; ++SectionIndex) { // // Verify the Image section does not overlap with the previous one if the @@ -196,17 +195,6 @@ PeCoffHashImageAuthenticode ( // Additionally, retrieve important offsets for later steps. // switch (Context->ImageType) { - case PeCoffLoaderTypeTe: - if (PcdGetBool (PcdImageLoaderProhibitTe)) { - ASSERT (FALSE); - return FALSE; - } - // - // Authenticode does not define a hashing algorithm for TE Images. - // - DEBUG_RAISE (); - return FALSE; - case PeCoffLoaderTypePe32: Pe32 = (CONST EFI_IMAGE_NT_HEADERS32 *) (CONST VOID *) ( (CONST CHAR8 *) Context->FileBuffer + Context->ExeHdrOffset diff --git a/MdePkg/Library/BasePeCoffLib2/PeCoffHii.c b/MdePkg/Library/BasePeCoffLib2/PeCoffHii.c index a877031ca9..fab2431100 100644 --- a/MdePkg/Library/BasePeCoffLib2/PeCoffHii.c +++ b/MdePkg/Library/BasePeCoffLib2/PeCoffHii.c @@ -50,16 +50,6 @@ PeCoffGetHiiDataRva ( // Retrieve the Image's Resource Directory Table. // switch (Context->ImageType) { - case PeCoffLoaderTypeTe: - if (PcdGetBool (PcdImageLoaderProhibitTe)) { - ASSERT (FALSE); - return RETURN_UNSUPPORTED; - } - // - // TE Images do not contain a Resource Directory Table. - // - return RETURN_NOT_FOUND; - case PeCoffLoaderTypePe32: Pe32Hdr = (CONST EFI_IMAGE_NT_HEADERS32 *) (CONST VOID *) ( (CONST CHAR8 *) Context->FileBuffer + Context->ExeHdrOffset diff --git a/MdePkg/Library/BasePeCoffLib2/PeCoffInfo.c b/MdePkg/Library/BasePeCoffLib2/PeCoffInfo.c index 38211f1c89..5b36cf2794 100644 --- a/MdePkg/Library/BasePeCoffLib2/PeCoffInfo.c +++ b/MdePkg/Library/BasePeCoffLib2/PeCoffInfo.c @@ -75,23 +75,9 @@ PeCoffGetSizeOfImageInplace ( IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *Context ) { - UINT32 SizeOfImage; - ASSERT (Context != NULL); - SizeOfImage = Context->SizeOfImage; - // - // SizeOfImage is defined with the full Image header size pre-stripping. As - // XIP TE Images always have a stripped Image header, subtract the difference. - // - if (!PcdGetBool (PcdImageLoaderProhibitTe)) { - ASSERT (Context->TeStrippedOffset < SizeOfImage); - SizeOfImage -= Context->TeStrippedOffset; - } else { - ASSERT (Context->TeStrippedOffset == 0); - } - - return SizeOfImage; + return Context->SizeOfImage; } UINT64 diff --git a/MdePkg/Library/BasePeCoffLib2/PeCoffInit.c b/MdePkg/Library/BasePeCoffLib2/PeCoffInit.c index bde745ff38..897b168fdd 100644 --- a/MdePkg/Library/BasePeCoffLib2/PeCoffInit.c +++ b/MdePkg/Library/BasePeCoffLib2/PeCoffInit.c @@ -58,12 +58,10 @@ InternalVerifySections ( BOOLEAN Overflow; UINT32 NextSectRva; UINT32 SectRawEnd; - UINT32 EffectiveSectRawEnd; UINT16 SectionIndex; CONST EFI_IMAGE_SECTION_HEADER *Sections; ASSERT (Context != NULL); - ASSERT (Context->TeStrippedOffset <= Context->SizeOfHeaders); ASSERT (IS_POW2 (Context->SectionAlignment)); ASSERT (StartAddress != NULL); // @@ -83,19 +81,6 @@ InternalVerifySections ( // if (Sections[0].VirtualAddress == 0) { // FIXME: Add PCD to disallow. - // - // TE Images cannot support loading the Image Headers as part of the first - // Image section due to its StrippedSize sematics. - // - if (!PcdGetBool (PcdImageLoaderProhibitTe)) { - if (Context->ImageType == PeCoffLoaderTypeTe) { - DEBUG_RAISE (); - return RETURN_VOLUME_CORRUPTED; - } - } else { - ASSERT (Context->ImageType != PeCoffLoaderTypeTe); - } - NextSectRva = 0; } else { // @@ -174,15 +159,6 @@ InternalVerifySections ( // Verify the Image sections with data are in bounds of the file buffer. // if (Sections[SectionIndex].SizeOfRawData > 0) { - if (!PcdGetBool (PcdImageLoaderProhibitTe)) { - if (Context->TeStrippedOffset > Sections[SectionIndex].PointerToRawData) { - DEBUG_RAISE (); - return RETURN_VOLUME_CORRUPTED; - } - } else { - ASSERT (Context->TeStrippedOffset == 0); - } - Overflow = BaseOverflowAddU32 ( Sections[SectionIndex].PointerToRawData, Sections[SectionIndex].SizeOfRawData, @@ -193,14 +169,7 @@ InternalVerifySections ( return RETURN_VOLUME_CORRUPTED; } - if (!PcdGetBool (PcdImageLoaderProhibitTe)) { - EffectiveSectRawEnd = SectRawEnd - Context->TeStrippedOffset; - } else { - ASSERT (Context->TeStrippedOffset == 0); - EffectiveSectRawEnd = SectRawEnd; - } - - if (EffectiveSectRawEnd > FileSize) { + if (SectRawEnd > FileSize) { DEBUG_RAISE (); return RETURN_VOLUME_CORRUPTED; } @@ -353,131 +322,6 @@ InternalValidateRelocInfo ( return RETURN_SUCCESS; } -/** - Verify the TE Image and initialise Context. - - Used offsets and ranges must be aligned and in the bounds of the raw file. - Image section Headers and basic Relocation information must be well-formed. - - @param[in,out] Context The context describing the Image. Must have been - initialised by PeCoffInitializeContext(). - @param[in] FileSize The size, in Bytes, of Context->FileBuffer. - - @retval RETURN_SUCCESS The TE Image is well-formed. - @retval other The TE Image is malformed. -**/ -STATIC -RETURN_STATUS -InternalInitializeTe ( - IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *Context, - IN UINT32 FileSize - ) -{ - RETURN_STATUS Status; - BOOLEAN Overflow; - CONST EFI_TE_IMAGE_HEADER *TeHdr; - UINT32 StartAddress; - - ASSERT (Context != NULL); - ASSERT (Context->ExeHdrOffset == 0); - ASSERT (sizeof (EFI_TE_IMAGE_HEADER) <= FileSize); - - if (PcdGetBool (PcdImageLoaderProhibitTe)) { - ASSERT (FALSE); - return RETURN_UNSUPPORTED; - } - - TeHdr = (CONST EFI_TE_IMAGE_HEADER *) (CONST VOID *) ( - (CONST CHAR8 *) Context->FileBuffer - ); - - Context->ImageType = PeCoffLoaderTypeTe; - // - // Calculate the size, in Bytes, stripped from the Image Headers. - // - Overflow = BaseOverflowSubU16 ( - TeHdr->StrippedSize, - sizeof (*TeHdr), - &Context->TeStrippedOffset - ); - if (Overflow) { - DEBUG_RAISE (); - return RETURN_VOLUME_CORRUPTED; - } - - STATIC_ASSERT ( - MAX_UINT8 * sizeof (EFI_IMAGE_SECTION_HEADER) <= MAX_UINT32 - MAX_UINT16, - "The following arithmetic may overflow." - ); - // - // Calculate SizeOfHeaders in a way that is equivalent to what the size would - // be if this was the original (unstripped) PE32 binary. As the TE image - // creation doesn't fix fields up, values work the same way as for PE32. - // When referencing raw data however, the TE stripped size must be subracted. - // - Context->SizeOfHeaders = (UINT32) TeHdr->StrippedSize + (UINT32) TeHdr->NumberOfSections * sizeof (EFI_IMAGE_SECTION_HEADER); - // - // Verify that the Image Headers are in bounds of the file buffer. - // - if (Context->SizeOfHeaders - Context->TeStrippedOffset > FileSize) { - DEBUG_RAISE (); - return RETURN_VOLUME_CORRUPTED; - } - - STATIC_ASSERT ( - IS_ALIGNED (sizeof (*TeHdr), ALIGNOF (EFI_IMAGE_SECTION_HEADER)), - "The Image section alignment requirements are violated." - ); - // - // TE Image sections start right after the Image Headers. - // - Context->SectionsOffset = sizeof (EFI_TE_IMAGE_HEADER); - // - // TE Images do not store their section alignment. Assume the UEFI Page size - // by default, as it is the minimum to guarantee memory permission support. - // - Context->SectionAlignment = EFI_PAGE_SIZE; - Context->NumberOfSections = TeHdr->NumberOfSections; - // - // Validate the sections. - // TE images do not have a field to explicitly describe the image size. - // Set it to the top of the Image's memory space. - // - Status = InternalVerifySections ( - Context, - FileSize, - &StartAddress - ); - if (Status != RETURN_SUCCESS) { - DEBUG_RAISE (); - return Status; - } - // - // Verify the Image entry point is in bounds of the Image buffer. - // - if (TeHdr->AddressOfEntryPoint >= Context->SizeOfImage) { - DEBUG_RAISE (); - return RETURN_VOLUME_CORRUPTED; - } - - Context->Machine = TeHdr->Machine; - Context->Subsystem = TeHdr->Subsystem; - Context->ImageBase = TeHdr->ImageBase; - Context->AddressOfEntryPoint = TeHdr->AddressOfEntryPoint; - Context->RelocDirRva = TeHdr->DataDirectory[0].VirtualAddress; - Context->RelocDirSize = TeHdr->DataDirectory[0].Size; - // - // TE Images do not explicitly store whether their Relocations have been - // stripped. Relocations have been stripped if and only if both the RVA and - // size of the Relocation Directory are zero. - // - Context->RelocsStripped = TeHdr->DataDirectory[0].VirtualAddress == 0 && TeHdr->DataDirectory[0].Size == 0; - // - // Verify basic sanity of the Relocation Directory. - // - return InternalValidateRelocInfo (Context, StartAddress); -} - /** Verify the PE32 or PE32+ Image and initialise Context. @@ -771,8 +615,6 @@ InternalInitializePe ( ASSERT (Context->SecDirOffset == 0); ASSERT (Context->SecDirSize == 0); } - - ASSERT (Context->TeStrippedOffset == 0); // // Verify the Image sections are Well-formed. // @@ -848,24 +690,6 @@ PeCoffInitializeContext ( && !IS_ALIGNED (Context->ExeHdrOffset, ALIGNOF (EFI_IMAGE_NT_HEADERS_COMMON_HDR))) { return RETURN_UNSUPPORTED; } - } else if (!PcdGetBool (PcdImageLoaderProhibitTe)) { - // - // Assume the Image starts with the Executable Header, determine whether it - // is a TE Image. - // - if (sizeof (EFI_TE_IMAGE_HEADER) <= FileSize - && *(CONST UINT16 *) (CONST VOID *) FileBuffer == EFI_TE_IMAGE_HEADER_SIGNATURE) { - // - // Verify the TE Image Header is well-formed. - // - Status = InternalInitializeTe (Context, FileSize); - if (Status != RETURN_SUCCESS) { - DEBUG_RAISE (); - return Status; - } - - return RETURN_SUCCESS; - } } // // Verify the file buffer can hold a PE Common Header. diff --git a/MdePkg/Library/BasePeCoffLib2/PeCoffLoad.c b/MdePkg/Library/BasePeCoffLib2/PeCoffLoad.c index 6aa1acb38f..e6cdc80399 100644 --- a/MdePkg/Library/BasePeCoffLib2/PeCoffLoad.c +++ b/MdePkg/Library/BasePeCoffLib2/PeCoffLoad.c @@ -75,12 +75,7 @@ InternalLoadSections ( // // Load the current Image section into the memory space. // - if (!PcdGetBool (PcdImageLoaderProhibitTe)) { - EffectivePointerToRawData = Sections[SectionIndex].PointerToRawData - Context->TeStrippedOffset; - } else { - ASSERT (Context->TeStrippedOffset == 0); - EffectivePointerToRawData = Sections[SectionIndex].PointerToRawData; - } + EffectivePointerToRawData = Sections[SectionIndex].PointerToRawData; CopyMem ( (CHAR8 *) Context->ImageBuffer + Sections[SectionIndex].VirtualAddress, @@ -122,7 +117,7 @@ PeCoffLoadImage ( (CONST CHAR8 *) Context->FileBuffer + Context->SectionsOffset ); if (PcdGetBool (PcdImageLoaderLoadHeader) && Sections[0].VirtualAddress != 0) { - LoadedHeaderSize = Context->SizeOfHeaders - Context->TeStrippedOffset; + LoadedHeaderSize = Context->SizeOfHeaders; CopyMem (Context->ImageBuffer, Context->FileBuffer, LoadedHeaderSize); } else { LoadedHeaderSize = 0; @@ -144,7 +139,6 @@ PeCoffLoadImageInplaceNoBase ( CONST EFI_IMAGE_SECTION_HEADER *Sections; UINT32 AlignedSize; UINT16 SectionIndex; - CHAR8 *ImageBuffer; ASSERT (Context != NULL); @@ -164,22 +158,7 @@ PeCoffLoadImageInplaceNoBase ( } } - ImageBuffer = (CHAR8 *) Context->FileBuffer; - if (!PcdGetBool (PcdImageLoaderProhibitTe)) { - // FIXME: Abstract all accesses to ImageBuffer for safety? - // - // TE XIP Images are padded to be aligned such that their Image sections - // are correctly aligned. ImageBuffer is used exclusively to accesses RVAs, - // which for TE XIP Images are always off by Context->TeStrippedOffset. - // There is no other way but to treat the data in front of the TE Image - // Header as a part of the TE Image Header. - // - ImageBuffer -= Context->TeStrippedOffset; - } else { - ASSERT (Context->ImageType != PeCoffLoaderTypeTe); - } - - Context->ImageBuffer = ImageBuffer; + Context->ImageBuffer = (CHAR8 *) Context->FileBuffer; return RETURN_SUCCESS; } @@ -194,12 +173,6 @@ PeCoffImageIsInplace ( ASSERT (Context != NULL); ImageBase = PeCoffGetImageBase (Context); - - if (!PcdGetBool (PcdImageLoaderProhibitTe)) { - ImageBase += Context->TeStrippedOffset; - } else { - ASSERT (Context->TeStrippedOffset == 0); - } // // Verify the Image is located at its preferred load address. // diff --git a/MdePkg/Library/BaseUefiImageLib/BaseUefiImageLibPeCoff.inf b/MdePkg/Library/BaseUefiImageLib/BaseUefiImageLibPeCoff.inf index a533706604..4e1cfe6058 100644 --- a/MdePkg/Library/BaseUefiImageLib/BaseUefiImageLibPeCoff.inf +++ b/MdePkg/Library/BaseUefiImageLib/BaseUefiImageLibPeCoff.inf @@ -1,5 +1,5 @@ ## @file -# UEFI Image Loader library implementation for PE/COFF and TE Images. +# UEFI Image Loader library implementation for PE/COFF Images. # # Copyright (c) 2021, Marvin Häuser. All rights reserved.
# @@ -37,6 +37,5 @@ [FixedPcd] gEfiMdePkgTokenSpaceGuid.PcdImageLoaderAlignmentPolicy gEfiMdePkgTokenSpaceGuid.PcdImageLoaderLoadHeader - gEfiMdePkgTokenSpaceGuid.PcdImageLoaderProhibitTe gEfiMdePkgTokenSpaceGuid.PcdDebugRaisePropertyMask gEfiMdePkgTokenSpaceGuid.PcdImageLoaderRemoveXForWX diff --git a/MdePkg/Library/BaseUefiImageLib/PeCoffSupport.c b/MdePkg/Library/BaseUefiImageLib/PeCoffSupport.c index 683ee0a9af..926914e7c9 100644 --- a/MdePkg/Library/BaseUefiImageLib/PeCoffSupport.c +++ b/MdePkg/Library/BaseUefiImageLib/PeCoffSupport.c @@ -1,5 +1,5 @@ /** @file - UEFI Image Loader library implementation for PE/COFF and TE Images. + UEFI Image Loader library implementation for PE/COFF Images. Copyright (c) 2021, Marvin Häuser. All rights reserved.
@@ -318,16 +318,14 @@ InternalDebugLocateImage ( // // Search for the Image Header in 4 Byte steps. All dynamically loaded // Images start at a page boundary to allow for Image section protection, - // but XIP Images may not. As all Image Headers are at least 4 Byte aligned - // due to natural alignment, even XIP TE Image Headers should start at a - // 4 Byte boundary. + // but XIP Images may not. // // Do not attempt to access memory of the first page as it may be protected as // part of NULL dereference detection. // for (; EFI_PAGE_SIZE <= (UINTN) Buffer; Buffer -= 4) { // - // Try to parse the current memory as PE/COFF or TE Image. Pass MAX_UINT32 + // Try to parse the current memory as PE/COFF Image. Pass MAX_UINT32 // as the file size as there isn't any more information available. Only the // Image Header memory will be accessed as part of initialisation. // @@ -348,11 +346,7 @@ InternalDebugLocateImage ( // is a part of, if existent. Allow one level of recursion to find a lower // Image Base including the DOS Image Header. // - if ((PcdGetBool (PcdImageLoaderProhibitTe) - || Context->ImageType != PeCoffLoaderTypeTe) - && Context->ExeHdrOffset == 0) { - ASSERT (Context->ImageType != PeCoffLoaderTypeTe); - + if (Context->ExeHdrOffset == 0) { DosStatus = InternalDebugLocateImage ( &DosContext, Buffer - 4, @@ -368,7 +362,6 @@ InternalDebugLocateImage ( // // We know that (UINTN) Buffer <= Address from the initialisation. // - // FIXME: Set to non-stripped base for XIP TE Images. if (Address < (UINTN) Buffer + PeCoffGetSizeOfImage (Context)) { Context->ImageBuffer = Buffer; // @@ -381,7 +374,7 @@ InternalDebugLocateImage ( return RETURN_SUCCESS; } // - // Continue for the unlikely case that a PE/COFF or TE Image embeds another + // Continue for the unlikely case that a PE/COFF Image embeds another // one within its data, the outer Image may still follow. // } diff --git a/MdePkg/Library/BaseUefiImageLib/PeCoffSupport.h b/MdePkg/Library/BaseUefiImageLib/PeCoffSupport.h index 102e09375f..6c5098362d 100644 --- a/MdePkg/Library/BaseUefiImageLib/PeCoffSupport.h +++ b/MdePkg/Library/BaseUefiImageLib/PeCoffSupport.h @@ -1,5 +1,5 @@ /** @file - UEFI Image Loader library implementation for PE/COFF and TE Images. + UEFI Image Loader library implementation for PE/COFF Images. Copyright (c) 2021, Marvin Häuser. All rights reserved.
diff --git a/MdePkg/Library/BaseUefiImageLib/UefiImageLibPeCoff.c b/MdePkg/Library/BaseUefiImageLib/UefiImageLibPeCoff.c index 76b43f228a..3350c92466 100644 --- a/MdePkg/Library/BaseUefiImageLib/UefiImageLibPeCoff.c +++ b/MdePkg/Library/BaseUefiImageLib/UefiImageLibPeCoff.c @@ -1,5 +1,5 @@ /** @file - UEFI Image Loader library implementation for PE/COFF and TE Images. + UEFI Image Loader library implementation for PE/COFF Images. Copyright (c) 2021, Marvin Häuser. All rights reserved.
diff --git a/MdePkg/Library/DxeServicesLib/DxeServicesLib.c b/MdePkg/Library/DxeServicesLib/DxeServicesLib.c index 8f5a15dedc..942ef2a19e 100644 --- a/MdePkg/Library/DxeServicesLib/DxeServicesLib.c +++ b/MdePkg/Library/DxeServicesLib/DxeServicesLib.c @@ -76,10 +76,6 @@ InternalImageHandleToFvHandle ( The details of this search order is defined in description of EFI_FIRMWARE_VOLUME2_PROTOCOL.ReadSection () found in PI Specification. - If SectionType is EFI_SECTION_TE, EFI_SECTION_TE is used as section type to start the search. If EFI_SECTION_TE section - is not found, EFI_SECTION_PE32 will be used to try the search again. If no EFI_SECTION_PE32 section is found, EFI_NOT_FOUND - is returned. - The data and size is returned by Buffer and Size. The caller is responsible to free the Buffer allocated by this function. This function can be only called at TPL_NOTIFY and below. @@ -157,23 +153,6 @@ InternalGetSectionFromFv ( &AuthenticationStatus ); - if (EFI_ERROR (Status) && (SectionType == EFI_SECTION_TE)) { - // - // Try reading PE32 section, if the required section is TE type - // - *Buffer = NULL; - *Size = 0; - Status = Fv->ReadSection ( - Fv, - NameGuid, - EFI_SECTION_PE32, - SectionInstance, - Buffer, - Size, - &AuthenticationStatus - ); - } - return Status; } @@ -191,8 +170,6 @@ InternalGetSectionFromFv ( See EFI_FIRMWARE_VOLUME2_PROTOCOL.ReadSection() for details on how sections are retrieved from an FFS file based on SectionType and SectionInstance. - If SectionType is EFI_SECTION_TE, and the search with an FFS file fails, - the search will be retried with a section type of EFI_SECTION_PE32. This function must be called with a TPL <= TPL_NOTIFY. If Buffer is NULL, then ASSERT(). @@ -338,8 +315,6 @@ Done: See EFI_FIRMWARE_VOLUME2_PROTOCOL.ReadSection() for details on how sections are retrieved from an FFS file based on SectionType and SectionInstance. - If SectionType is EFI_SECTION_TE, and the search with an FFS file fails, - the search will be retried with a section type of EFI_SECTION_PE32. This function must be called with a TPL <= TPL_NOTIFY. If NameGuid is NULL, then ASSERT(). @@ -461,10 +436,6 @@ Done: See EFI_FIRMWARE_VOLUME2_PROTOCOL.ReadSection() for details on how sections are retrieved from an FFS file based on SectionType and SectionInstance. - If the currently executing module was not loaded from a firmware volume, then EFI_NOT_FOUND is returned. - If SectionType is EFI_SECTION_TE, and the search with an FFS file fails, - the search will be retried with a section type of EFI_SECTION_PE32. - This function must be called with a TPL <= TPL_NOTIFY. If NameGuid is NULL, then ASSERT(). If Buffer is NULL, then ASSERT(). @@ -524,9 +495,6 @@ GetSectionFromFv ( to use FreePool() to free the allocated buffer. See EFI_FIRMWARE_VOLUME2_PROTOCOL.ReadSection() for details on how sections are retrieved from an FFS file based on SectionType and SectionInstance. - If the currently executing module was not loaded from an FFS file, then EFI_NOT_FOUND is returned. - If SectionType is EFI_SECTION_TE, and the search with an FFS file fails, - the search will be retried with a section type of EFI_SECTION_PE32. This function must be called with a TPL <= TPL_NOTIFY. If Buffer is NULL, then ASSERT(). @@ -951,8 +919,6 @@ Finish: The order that the firmware volumes is searched is not deterministic. For each FFS file found a search is made for FFS sections of type SectionType. - If SectionType is EFI_SECTION_TE, and the search with an FFS file fails, - the search will be retried with a section type of EFI_SECTION_PE32. This function must be called with a TPL <= TPL_NOTIFY. If NameGuid is NULL, then ASSERT(). diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec index 5fdfbb9896..2e05e95890 100644 --- a/MdePkg/MdePkg.dec +++ b/MdePkg/MdePkg.dec @@ -2289,12 +2289,6 @@ # @Prompt Image Loader Alignment Policy. gEfiMdePkgTokenSpaceGuid.PcdImageLoaderAlignmentPolicy|0xFFFFFFFF|UINT32|0x4000101E - ## Indicates whether TE Images are allowed.

- # TRUE - TE Images are forbidden.
- # FALSE - TE Images are allowed.
- # @Prompt Prohibit TE Images Loading. - gEfiMdePkgTokenSpaceGuid.PcdImageLoaderProhibitTe|FALSE|BOOLEAN|0x4000101F - ## Indicates whether PE32+ header offset is sufficiently aligned.

# TRUE - Execution Header offset may be not aligned.
# FALSE - Execution Header offset must be sufficiently aligned.
diff --git a/OvmfPkg/Sec/SecMain.c b/OvmfPkg/Sec/SecMain.c index 4fe0128a47..48821c31de 100644 --- a/OvmfPkg/Sec/SecMain.c +++ b/OvmfPkg/Sec/SecMain.c @@ -502,16 +502,8 @@ FindPeiCoreImageBaseInFv ( &Section ); if (EFI_ERROR (Status)) { - Status = FindFfsFileAndSection ( - Fv, - EFI_FV_FILETYPE_PEI_CORE, - EFI_SECTION_TE, - &Section - ); - if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "Unable to find PEI Core image\n")); - return Status; - } + DEBUG ((DEBUG_ERROR, "Unable to find PEI Core image\n")); + return Status; } *PeiCoreImageBase = (EFI_PHYSICAL_ADDRESS)(UINTN)(Section + 1); @@ -681,7 +673,7 @@ FindImageBase ( // // Look for executable sections // - if ((Section->Type == EFI_SECTION_PE32) || (Section->Type == EFI_SECTION_TE)) { + if (Section->Type == EFI_SECTION_PE32) { if (File->Type == EFI_FV_FILETYPE_SECURITY_CORE) { *SecCoreImageBase = (PHYSICAL_ADDRESS)(UINTN)(Section + 1); *SecCoreImageSize = Size - sizeof (*Section); diff --git a/PrmPkg/Library/DxePrmPeCoffLib/DxePrmPeCoffLib.c b/PrmPkg/Library/DxePrmPeCoffLib/DxePrmPeCoffLib.c index 15792777b7..5cc1867d40 100644 --- a/PrmPkg/Library/DxePrmPeCoffLib/DxePrmPeCoffLib.c +++ b/PrmPkg/Library/DxePrmPeCoffLib/DxePrmPeCoffLib.c @@ -205,7 +205,7 @@ GetExportDirectoryInPeCoffImage ( ); // - // Check the PE/COFF Header Signature. Determine if the image is valid and/or a TE image. + // Check the PE/COFF Header Signature. Determine if the image is valid image. // if (OptionalHeaderPtrUnion.Pe32->Signature != EFI_IMAGE_NT_SIGNATURE) { DEBUG ((DEBUG_ERROR, "%a %a: The PE signature is not valid for the current image.\n", _DBGMSGID_, __func__)); @@ -330,7 +330,7 @@ GetImageVersionInPeCoffImage ( PeCoffLoaderImageContext->PeCoffHeaderOffset ); // - // Check the PE/COFF Header Signature. Determine if the image is valid and/or a TE image. + // Check the PE/COFF Header Signature. Determine if the image is valid image. // if (OptionalHeaderPtrUnion.Pe32->Signature != EFI_IMAGE_NT_SIGNATURE) { DEBUG ((DEBUG_ERROR, "%a %a: The PE signature is not valid for the current image.\n", _DBGMSGID_, __func__)); diff --git a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/SetPermissions.c b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/SetPermissions.c index 70ba054e2f..241975e4d0 100644 --- a/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/SetPermissions.c +++ b/StandaloneMmPkg/Library/StandaloneMmCoreEntryPoint/Arm/SetPermissions.c @@ -64,15 +64,12 @@ LocateStandaloneMmCoreUefiImage ( Status = FfsFindSectionData (EFI_SECTION_PE32, FileHeader, UefiImage, UefiImageSize); if (EFI_ERROR (Status)) { - Status = FfsFindSectionData (EFI_SECTION_TE, FileHeader, UefiImage, UefiImageSize); - if (EFI_ERROR (Status)) { - DEBUG (( - DEBUG_ERROR, - "Unable to locate Standalone MM Section data - %r\n", - Status - )); - return Status; - } + DEBUG (( + DEBUG_ERROR, + "Unable to locate Standalone MM Section data - %r\n", + Status + )); + return Status; } DEBUG ((DEBUG_INFO, "Found Standalone MM PE data - 0x%x\n", *UefiImage)); diff --git a/UefiCpuPkg/ResetVector/Vtf0/Ia32/SearchForSecEntry.asm b/UefiCpuPkg/ResetVector/Vtf0/Ia32/SearchForSecEntry.asm index 904c22df2f..c65f5497e6 100644 --- a/UefiCpuPkg/ResetVector/Vtf0/Ia32/SearchForSecEntry.asm +++ b/UefiCpuPkg/ResetVector/Vtf0/Ia32/SearchForSecEntry.asm @@ -109,7 +109,6 @@ secCoreEntryPointWasFound: OneTimeCallRet Flat32SearchForSecEntryPoint %define EFI_SECTION_PE32 0x10 -%define EFI_SECTION_TE 0x12 ; ; Input: @@ -134,9 +133,6 @@ getEntryPointOfFfsFileLoopForSections: cmp byte [eax + 3], EFI_SECTION_PE32 je getEntryPointOfFfsFileFoundPe32Section - cmp byte [eax + 3], EFI_SECTION_TE - je getEntryPointOfFfsFileFoundTeSection - ; ; The section type was not PE32 or TE, so move to next section ; @@ -170,22 +166,6 @@ getEntryPointOfFfsFileFoundPe32Section: add eax, [ebx + 0x4 + 0x14 + 0x10] jmp getEntryPointOfFfsFileReturn -getEntryPointOfFfsFileFoundTeSection: - add eax, 4 ; EAX = Start of TE image - mov ebx, eax - - ; if (Hdr.Te->Signature == EFI_TE_IMAGE_HEADER_SIGNATURE) - cmp word [ebx], 'VZ' - jne getEntryPointOfFfsFileErrorReturn - ; *EntryPoint = (VOID *)((UINTN)Pe32Data + - ; (UINTN)(Hdr.Te->AddressOfEntryPoint & 0x0ffffffff) + - ; sizeof(EFI_TE_IMAGE_HEADER) - Hdr.Te->StrippedSize); - add eax, [ebx + 0x8] - add eax, 0x28 - movzx ebx, word [ebx + 0x6] - sub eax, ebx - jmp getEntryPointOfFfsFileReturn - getEntryPointOfFfsFileErrorReturn: mov eax, 0 diff --git a/UefiCpuPkg/SecCore/FindPeiCore.c b/UefiCpuPkg/SecCore/FindPeiCore.c index 3187dcf60f..3cded940d3 100644 --- a/UefiCpuPkg/SecCore/FindPeiCore.c +++ b/UefiCpuPkg/SecCore/FindPeiCore.c @@ -107,7 +107,7 @@ FindImageBase ( // // Look for executable sections // - if ((Section->Type == EFI_SECTION_PE32) || (Section->Type == EFI_SECTION_TE)) { + if (Section->Type == EFI_SECTION_PE32) { if (File->Type == FileType) { if (IS_SECTION2 (Section)) { *CoreImageBase = (PHYSICAL_ADDRESS)(UINTN)((UINT8 *)Section + sizeof (EFI_COMMON_SECTION_HEADER2));