]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/CCode/Source/PeiRebase/PeiRebaseExe.c
Merged back the Yizhong's fix which was overwritten by check-in of r2157,2158.
[mirror_edk2.git] / Tools / CCode / Source / PeiRebase / PeiRebaseExe.c
index 7519a55e4888c2ab659c80bb010c3481754c587c..5f7dfc25c71cd47a3e78d2c8baedd4e5fa87bc84 100644 (file)
@@ -545,7 +545,7 @@ Returns:
   printf ("  Where:\n");\r
   printf ("    InputFileName is the name of the EFI FV file to rebase.\n");\r
   printf ("    OutputFileName is the desired output file name.\n");\r
-  printf ("    BaseAddress is the FV base address to rebase agains.\n");\r
+  printf ("    BaseAddress is the FV base address to rebase against.\n");\r
   printf ("  Argument pair may be in any order.\n\n");\r
 }\r
 \r
@@ -749,14 +749,14 @@ Returns:
     // Allocate a buffer for the image to be loaded into.\r
     //\r
     Pe32ImageSize       = GetLength (CurrentPe32Section.Pe32Section->CommonHeader.Size) - sizeof (EFI_PE32_SECTION);\r
-    MemoryImagePointer  = (UINTN) (malloc (Pe32ImageSize + 0x1000));\r
+    MemoryImagePointer  = (UINTN) (malloc (Pe32ImageSize + 0x10000));\r
     if (MemoryImagePointer == 0) {\r
       Error (NULL, 0, 0, "memory allocation failure", NULL);\r
       return EFI_OUT_OF_RESOURCES;\r
     }\r
-    memset ((void *) MemoryImagePointer, 0, Pe32ImageSize + 0x1000);\r
-    MemoryImagePointerAligned = (MemoryImagePointer + 0x0FFF) & (-1 << 12);\r
-\r
+    memset ((void *) MemoryImagePointer, 0, Pe32ImageSize + 0x10000);\r
+    MemoryImagePointerAligned = (MemoryImagePointer + 0x0FFFF) & (-1 << 16);\r
+    \r
 \r
     ImageContext.ImageAddress = MemoryImagePointerAligned;\r
 \r
@@ -766,6 +766,24 @@ Returns:
       free ((VOID *) MemoryImagePointer);\r
       return Status;\r
     }\r
+    \r
+    //\r
+    // Check if section-alignment and file-alignment match or not\r
+    //\r
+    if (!(ImageContext.IsTeImage)) {\r
+      PeHdr = (EFI_IMAGE_NT_HEADERS *)((UINTN)ImageContext.ImageAddress + \r
+                                              ImageContext.PeCoffHeaderOffset);\r
+      if (PeHdr->OptionalHeader.SectionAlignment != PeHdr->OptionalHeader.FileAlignment) {\r
+        Error (NULL, 0, 0, "Section-Alignment and File-Alignment does not match", FileGuidString);\r
+        free ((VOID *) MemoryImagePointer);\r
+        return EFI_ABORTED;\r
+      }\r
+    }\r
+    else {\r
+      //\r
+      // BUGBUG: TE Image Header lack section-alignment and file-alignment info\r
+      //\r
+    }\r
 \r
     ImageContext.DestinationAddress = NewPe32BaseAddress;\r
     Status                          = PeCoffLoaderRelocateImage (&ImageContext);\r
@@ -1060,15 +1078,15 @@ Returns:
     //\r
     // Allocate a buffer for the image to be loaded into.\r
     //\r
-    MemoryImagePointer = (UINTN) (malloc (Pe32ImageSize + 0x1000));\r
+    MemoryImagePointer = (UINTN) (malloc (Pe32ImageSize + 0x10000));\r
     if (MemoryImagePointer == 0) {\r
       Error (NULL, 0, 0, "memory allocation error on rebase of TE image", FileGuidString);\r
       free (TEBuffer);\r
       return EFI_OUT_OF_RESOURCES;\r
     }\r
-    memset ((void *) MemoryImagePointer, 0, Pe32ImageSize + 0x1000);\r
-    MemoryImagePointerAligned = (MemoryImagePointer + 0x0FFF) & (-1 << 12);\r
-\r
+    memset ((void *) MemoryImagePointer, 0, Pe32ImageSize + 0x10000);\r
+    MemoryImagePointerAligned = (MemoryImagePointer + 0x0FFFF) & (-1 << 16);\r
+    \r
 \r
     ImageContext.ImageAddress = MemoryImagePointerAligned;\r
     Status                    = PeCoffLoaderLoadImage (&ImageContext);\r