Correct TeImage file format and Clean up PeiRebase tool to remove unused code and only relocate image.
Move two EFI_DEP_REPLACE_TRUE and DEPEX_STACK_SIZE_INCREMENT macros from MdePkg to EdkModule/DxeMain module, because these two macros are specific implementation, not defined in spec. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2249 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@@ -272,6 +272,7 @@ Returns:
|
||||
//
|
||||
// Double-check the file to make sure it's what we expect it to be
|
||||
//
|
||||
|
||||
if (CheckPE32File (InFileName, InFptr, &MachineType, &SubSystem) != STATUS_SUCCESS) {
|
||||
goto Finish;
|
||||
}
|
||||
@@ -372,7 +373,7 @@ Returns:
|
||||
|
||||
TEImageHeader.Subsystem = (UINT8) OptionalHeader32.Subsystem;
|
||||
TEImageHeader.BaseOfCode = OptionalHeader32.BaseOfCode;
|
||||
TEImageHeader.ImageBase = (UINT64) (OptionalHeader32.ImageBase + TEImageHeader.StrippedSize - sizeof (EFI_TE_IMAGE_HEADER));
|
||||
TEImageHeader.ImageBase = (UINT64) (OptionalHeader32.ImageBase);
|
||||
if (OptionalHeader32.NumberOfRvaAndSizes > EFI_IMAGE_DIRECTORY_ENTRY_BASERELOC) {
|
||||
TEImageHeader.DataDirectory[EFI_TE_IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress = OptionalHeader32.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress;
|
||||
TEImageHeader.DataDirectory[EFI_TE_IMAGE_DIRECTORY_ENTRY_BASERELOC].Size = OptionalHeader32.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_BASERELOC].Size;
|
||||
@@ -413,7 +414,7 @@ Returns:
|
||||
|
||||
TEImageHeader.Subsystem = (UINT8) OptionalHeader64.Subsystem;
|
||||
TEImageHeader.BaseOfCode = OptionalHeader32.BaseOfCode;
|
||||
TEImageHeader.ImageBase = (UINT64) (OptionalHeader64.ImageBase + TEImageHeader.StrippedSize - sizeof (EFI_TE_IMAGE_HEADER));
|
||||
TEImageHeader.ImageBase = (UINT64) (OptionalHeader64.ImageBase);
|
||||
if (OptionalHeader64.NumberOfRvaAndSizes > EFI_IMAGE_DIRECTORY_ENTRY_BASERELOC) {
|
||||
TEImageHeader.DataDirectory[EFI_TE_IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress = OptionalHeader64.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress;
|
||||
TEImageHeader.DataDirectory[EFI_TE_IMAGE_DIRECTORY_ENTRY_BASERELOC].Size = OptionalHeader64.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_BASERELOC].Size;
|
||||
@@ -620,6 +621,17 @@ Returns:
|
||||
goto Finish;
|
||||
}
|
||||
|
||||
//
|
||||
// Check FileAlginment and SectionAlignment match or not
|
||||
// Because TeImage header doesn't record filealginment and sectionalignment info,
|
||||
// TeImage is used for PEIM and PeiCore XIP module.
|
||||
// So, check alignment match before generate TeImage to check.
|
||||
//
|
||||
if (OptionalHdr.SectionAlignment != OptionalHdr.FileAlignment) {
|
||||
Error (NULL, 0, 0, FileName, "Section-Alignment and File-Alignment does not match");
|
||||
goto Finish;
|
||||
}
|
||||
|
||||
*SubSystem = OptionalHdr.Subsystem;
|
||||
if (mOptions.Verbose) {
|
||||
fprintf (stdout, " Got subsystem = 0x%X from image\n", (int) *SubSystem);
|
||||
|
Reference in New Issue
Block a user