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
// 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
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
//\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