]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/CCode/Source/GenTEImage/GenTEImage.c
Correct TeImage file format and Clean up PeiRebase tool to remove unused code and...
[mirror_edk2.git] / Tools / CCode / Source / GenTEImage / GenTEImage.c
index 39b83326e2fb09f865a296ce50262001eeadd704..665498ac2c8099f9abc7f8128cce7d5c3c2d1533 100644 (file)
@@ -272,6 +272,7 @@ Returns:
   //\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
@@ -372,7 +373,7 @@ Returns:
 \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
@@ -413,7 +414,7 @@ Returns:
 \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
@@ -620,6 +621,17 @@ Returns:
     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