//\r
// Double-check the file to make sure it's what we expect it to be\r
//\r
+\r
if (CheckPE32File (InFileName, InFptr, &MachineType, &SubSystem) != STATUS_SUCCESS) {\r
goto Finish;\r
}\r
\r
TEImageHeader.Subsystem = (UINT8) OptionalHeader32.Subsystem;\r
TEImageHeader.BaseOfCode = OptionalHeader32.BaseOfCode;\r
- TEImageHeader.ImageBase = (UINT64) (OptionalHeader32.ImageBase + TEImageHeader.StrippedSize - sizeof (EFI_TE_IMAGE_HEADER));\r
+ TEImageHeader.ImageBase = (UINT64) (OptionalHeader32.ImageBase);\r
if (OptionalHeader32.NumberOfRvaAndSizes > EFI_IMAGE_DIRECTORY_ENTRY_BASERELOC) {\r
TEImageHeader.DataDirectory[EFI_TE_IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress = OptionalHeader32.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress;\r
TEImageHeader.DataDirectory[EFI_TE_IMAGE_DIRECTORY_ENTRY_BASERELOC].Size = OptionalHeader32.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_BASERELOC].Size;\r
\r
TEImageHeader.Subsystem = (UINT8) OptionalHeader64.Subsystem;\r
TEImageHeader.BaseOfCode = OptionalHeader32.BaseOfCode;\r
- TEImageHeader.ImageBase = (UINT64) (OptionalHeader64.ImageBase + TEImageHeader.StrippedSize - sizeof (EFI_TE_IMAGE_HEADER));\r
+ TEImageHeader.ImageBase = (UINT64) (OptionalHeader64.ImageBase);\r
if (OptionalHeader64.NumberOfRvaAndSizes > EFI_IMAGE_DIRECTORY_ENTRY_BASERELOC) {\r
TEImageHeader.DataDirectory[EFI_TE_IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress = OptionalHeader64.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress;\r
TEImageHeader.DataDirectory[EFI_TE_IMAGE_DIRECTORY_ENTRY_BASERELOC].Size = OptionalHeader64.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_BASERELOC].Size;\r
goto Finish;\r
}\r
\r
+ //\r
+ // Check FileAlginment and SectionAlignment match or not\r
+ // Because TeImage header doesn't record filealginment and sectionalignment info, \r
+ // TeImage is used for PEIM and PeiCore XIP module. \r
+ // So, check alignment match before generate TeImage to check.\r
+ //\r
+ if (OptionalHdr.SectionAlignment != OptionalHdr.FileAlignment) {\r
+ Error (NULL, 0, 0, FileName, "Section-Alignment and File-Alignment does not match");\r
+ goto Finish;\r
+ }\r
+\r
*SubSystem = OptionalHdr.Subsystem;\r
if (mOptions.Verbose) {\r
fprintf (stdout, " Got subsystem = 0x%X from image\n", (int) *SubSystem);\r