Revision: 17603
http://sourceforge.net/p/edk2/code/17603
Author: jyao1
Date: 2015-06-10 00:26:48 +0000 (Wed, 10 Jun 2015)
Log Message:
-----------
Fix logic error on SectionAlignment calculation.
The correct logic should be:
- The SectionAlignment is got from Magic number.
- The Magic number is got from PE header and machine type.
The original code mix them.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: "Yao, Jiewen" <[email protected]>
Reviewed-by: "Ard Biesheuvel" <[email protected]>
Modified Paths:
--------------
trunk/edk2/MdeModulePkg/Core/Dxe/Misc/PropertiesTable.c
Modified: trunk/edk2/MdeModulePkg/Core/Dxe/Misc/PropertiesTable.c
===================================================================
--- trunk/edk2/MdeModulePkg/Core/Dxe/Misc/PropertiesTable.c 2015-06-09
18:20:51 UTC (rev 17602)
+++ trunk/edk2/MdeModulePkg/Core/Dxe/Misc/PropertiesTable.c 2015-06-10
00:26:48 UTC (rev 17603)
@@ -1115,6 +1115,7 @@
IMAGE_PROPERTIES_RECORD *ImageRecord;
CHAR8 *PdbPointer;
IMAGE_PROPERTIES_RECORD_CODE_SECTION *ImageRecordCodeSection;
+ UINT16 Magic;
DEBUG ((EFI_D_VERBOSE, "InsertImageRecord - 0x%x\n", RuntimeImage));
DEBUG ((EFI_D_VERBOSE, "InsertImageRecord - 0x%016lx - 0x%016lx\n",
(EFI_PHYSICAL_ADDRESS)(UINTN)RuntimeImage->ImageBase, RuntimeImage->ImageSize));
@@ -1152,13 +1153,12 @@
Hdr.Pe32 = (EFI_IMAGE_NT_HEADERS32 *)((UINT8 *) (UINTN) ImageAddress +
PeCoffHeaderOffset);
if (Hdr.Pe32->Signature != EFI_IMAGE_NT_SIGNATURE) {
DEBUG ((EFI_D_VERBOSE, "Hdr.Pe32->Signature invalid - 0x%x\n",
Hdr.Pe32->Signature));
- // It might be image in SMM.
+ // It might be image in SMM.
goto Finish;
}
//
- // Measuring PE/COFF Image Header;
- // But CheckSum field and SECURITY data directory (certificate) are excluded
+ // Get SectionAlignment
//
if (Hdr.Pe32->FileHeader.Machine == IMAGE_FILE_MACHINE_IA64 &&
Hdr.Pe32->OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) {
//
@@ -1167,11 +1167,16 @@
// Magic value in the OptionalHeader is
EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC
// then override the magic value to EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC
//
- SectionAlignment = Hdr.Pe32->OptionalHeader.SectionAlignment;
+ Magic = EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC;
} else {
//
// Get the magic value from the PE/COFF Optional Header
//
+ Magic = Hdr.Pe32->OptionalHeader.Magic;
+ }
+ if (Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) {
+ SectionAlignment = Hdr.Pe32->OptionalHeader.SectionAlignment;
+ } else {
SectionAlignment = Hdr.Pe32Plus->OptionalHeader.SectionAlignment;
}
------------------------------------------------------------------------------
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits