From: klu2 Date: Tue, 21 Jul 2009 16:56:35 +0000 (+0000) Subject: Hot fixing for the bug that GenFw can not convert ELF to PE format correctly, the... X-Git-Tag: edk2-stable201903~17337 X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=commitdiff_plain;h=58e4d800962d8b84ad122eceae8df2f6616f34fd Hot fixing for the bug that GenFw can not convert ELF to PE format correctly, the root cause is invalid size of OptionalHeader is computed. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8976 6f19259b-4bc3-4df7-8a09-765794883524 --- diff --git a/BaseTools/Bin/Win32/BootSectImage.exe b/BaseTools/Bin/Win32/BootSectImage.exe index a0cf0fd388..966832de32 100755 Binary files a/BaseTools/Bin/Win32/BootSectImage.exe and b/BaseTools/Bin/Win32/BootSectImage.exe differ diff --git a/BaseTools/Bin/Win32/EfiLdrImage.exe b/BaseTools/Bin/Win32/EfiLdrImage.exe index 57662bf0a3..89c655d3dc 100755 Binary files a/BaseTools/Bin/Win32/EfiLdrImage.exe and b/BaseTools/Bin/Win32/EfiLdrImage.exe differ diff --git a/BaseTools/Bin/Win32/EfiRom.exe b/BaseTools/Bin/Win32/EfiRom.exe index 9ca2fb26dc..643162e87b 100755 Binary files a/BaseTools/Bin/Win32/EfiRom.exe and b/BaseTools/Bin/Win32/EfiRom.exe differ diff --git a/BaseTools/Bin/Win32/GenBootSector.exe b/BaseTools/Bin/Win32/GenBootSector.exe index 08180b4ae4..48a17af7e6 100755 Binary files a/BaseTools/Bin/Win32/GenBootSector.exe and b/BaseTools/Bin/Win32/GenBootSector.exe differ diff --git a/BaseTools/Bin/Win32/GenCrc32.exe b/BaseTools/Bin/Win32/GenCrc32.exe index 1b9020ec52..01234aff5f 100755 Binary files a/BaseTools/Bin/Win32/GenCrc32.exe and b/BaseTools/Bin/Win32/GenCrc32.exe differ diff --git a/BaseTools/Bin/Win32/GenFfs.exe b/BaseTools/Bin/Win32/GenFfs.exe index 3ffc0fa7ee..3ee7925217 100755 Binary files a/BaseTools/Bin/Win32/GenFfs.exe and b/BaseTools/Bin/Win32/GenFfs.exe differ diff --git a/BaseTools/Bin/Win32/GenFv.exe b/BaseTools/Bin/Win32/GenFv.exe index a01bf7edec..6011dd3176 100755 Binary files a/BaseTools/Bin/Win32/GenFv.exe and b/BaseTools/Bin/Win32/GenFv.exe differ diff --git a/BaseTools/Bin/Win32/GenFw.exe b/BaseTools/Bin/Win32/GenFw.exe index 0b6333a464..f2b04ed369 100755 Binary files a/BaseTools/Bin/Win32/GenFw.exe and b/BaseTools/Bin/Win32/GenFw.exe differ diff --git a/BaseTools/Bin/Win32/GenPage.exe b/BaseTools/Bin/Win32/GenPage.exe index 9a1a566ddf..41ac4348e1 100755 Binary files a/BaseTools/Bin/Win32/GenPage.exe and b/BaseTools/Bin/Win32/GenPage.exe differ diff --git a/BaseTools/Bin/Win32/GenSec.exe b/BaseTools/Bin/Win32/GenSec.exe index aafcdcc5e0..0c828b8919 100755 Binary files a/BaseTools/Bin/Win32/GenSec.exe and b/BaseTools/Bin/Win32/GenSec.exe differ diff --git a/BaseTools/Bin/Win32/GenVtf.exe b/BaseTools/Bin/Win32/GenVtf.exe index 26e904afb4..32eb2c1c48 100755 Binary files a/BaseTools/Bin/Win32/GenVtf.exe and b/BaseTools/Bin/Win32/GenVtf.exe differ diff --git a/BaseTools/Bin/Win32/LzmaCompress.exe b/BaseTools/Bin/Win32/LzmaCompress.exe index ce231f8b7b..8ca0bbc214 100644 Binary files a/BaseTools/Bin/Win32/LzmaCompress.exe and b/BaseTools/Bin/Win32/LzmaCompress.exe differ diff --git a/BaseTools/Bin/Win32/Split.exe b/BaseTools/Bin/Win32/Split.exe index 222eccf017..4b01ebab3f 100755 Binary files a/BaseTools/Bin/Win32/Split.exe and b/BaseTools/Bin/Win32/Split.exe differ diff --git a/BaseTools/Bin/Win32/TianoCompress.exe b/BaseTools/Bin/Win32/TianoCompress.exe index 04114bdc7b..b95b67f7cb 100755 Binary files a/BaseTools/Bin/Win32/TianoCompress.exe and b/BaseTools/Bin/Win32/TianoCompress.exe differ diff --git a/BaseTools/Bin/Win32/VfrCompile.exe b/BaseTools/Bin/Win32/VfrCompile.exe index 32334155a8..e9b9977627 100755 Binary files a/BaseTools/Bin/Win32/VfrCompile.exe and b/BaseTools/Bin/Win32/VfrCompile.exe differ diff --git a/BaseTools/Bin/Win32/VolInfo.exe b/BaseTools/Bin/Win32/VolInfo.exe index 6e501746c8..ebbe39809f 100755 Binary files a/BaseTools/Bin/Win32/VolInfo.exe and b/BaseTools/Bin/Win32/VolInfo.exe differ diff --git a/BaseTools/Source/C/GenFw/GenFw.c b/BaseTools/Source/C/GenFw/GenFw.c index 2278948b3d..d570f633d5 100644 --- a/BaseTools/Source/C/GenFw/GenFw.c +++ b/BaseTools/Source/C/GenFw/GenFw.c @@ -583,7 +583,21 @@ ScanSections( // CoffOffset = sizeof(EFI_IMAGE_DOS_HEADER) + 0x40; NtHdrOffset = CoffOffset; - CoffOffset += sizeof(EFI_IMAGE_OPTIONAL_HEADER_UNION); + switch (Ehdr->e_machine) { + case EM_386: + case EM_ARM: + CoffOffset += sizeof (EFI_IMAGE_NT_HEADERS32); + break; + case EM_X86_64: + case EM_IA_64: + CoffOffset += sizeof (EFI_IMAGE_NT_HEADERS64); + break; + default: + VerboseMsg ("%s unknown e_machine type. Assume IA-32", (UINTN)Ehdr->e_machine); + CoffOffset += sizeof (EFI_IMAGE_NT_HEADERS32); + break; + } + TableOffset = CoffOffset; CoffOffset += CoffNbrSections * sizeof(EFI_IMAGE_SECTION_HEADER); @@ -1144,6 +1158,7 @@ ConvertElf ( // // Compute sections new address. // + ScanSections(); VerboseMsg ("Compute sections new address."); @@ -2660,9 +2675,12 @@ Returns: // // Init variable. // - DebugDirectoryEntryRva = 0; - ExportDirectoryEntryRva = 0; - ResourceDirectoryEntryRva = 0; + DebugDirectoryEntryRva = 0; + ExportDirectoryEntryRva = 0; + ResourceDirectoryEntryRva = 0; + DebugDirectoryEntryFileOffset = 0; + ExportDirectoryEntryFileOffset = 0; + ResourceDirectoryEntryFileOffset = 0; DosHdr = (EFI_IMAGE_DOS_HEADER *) FileBuffer; FileHdr = (EFI_IMAGE_FILE_HEADER *) (FileBuffer + DosHdr->e_lfanew + sizeof (UINT32)); @@ -2745,17 +2763,17 @@ Returns: // FileHdr->TimeDateStamp = 0; - if (ExportDirectoryEntryRva != 0) { + if (ExportDirectoryEntryFileOffset != 0) { NewTimeStamp = (UINT32 *) (FileBuffer + ExportDirectoryEntryFileOffset + sizeof (UINT32)); *NewTimeStamp = 0; } - if (ResourceDirectoryEntryRva != 0) { + if (ResourceDirectoryEntryFileOffset != 0) { NewTimeStamp = (UINT32 *) (FileBuffer + ResourceDirectoryEntryFileOffset + sizeof (UINT32)); *NewTimeStamp = 0; } - if (DebugDirectoryEntryRva != 0) { + if (DebugDirectoryEntryFileOffset != 0) { DebugEntry = (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY *) (FileBuffer + DebugDirectoryEntryFileOffset); DebugEntry->TimeDateStamp = 0; if (ZeroDebugFlag) {