[BOOTMGR]: ThFabba making me jealous. Fix a logic bug that Coverity *didn't* find. Ha. I'm better.

[BOOTLIB]: Apply the "Fuck You Binutils" hack only for ld-generated files, to unbreak MSVC UEFI boot.

svn path=/trunk/; revision=73684
This commit is contained in:
Alex Ionescu
2017-02-04 19:45:38 +00:00
parent bdabc81718
commit 81ddcd09c3
2 changed files with 14 additions and 12 deletions
+1 -1
View File
@@ -2276,7 +2276,7 @@ BmpTransferExecution (
BcdLibraryDevice_ApplicationDevice,
&AppDevice,
NULL);
if (NT_SUCCESS(Status))
if (!NT_SUCCESS(Status))
{
/* Force re-enumeration */
Status = BlFwEnumerateDevice(AppDevice);
+13 -11
View File
@@ -883,7 +883,6 @@ ImgpLoadPEImage (
/* Record our current position (right after the headers) */
EndOfHeaders = (ULONG_PTR)VirtualAddress + HeaderSize;
EfiPrintf(L"here\r\n");
/* Get the first section and iterate through each one */
Section = IMAGE_FIRST_SECTION(NtHeaders);
@@ -981,17 +980,20 @@ ImgpLoadPEImage (
if (!First)
{
/* FUCK YOU BINUTILS */
if ((*(PULONG)&Section->Name == 'ler.') && (RawSize < AlignSize))
if (NtHeaders->OptionalHeader.MajorLinkerVersion < 7)
{
/* Piece of shit won't build relocations when you tell it to,
* either by using --emit-relocs or --dynamicbase. People online
* have found out that by using -pie-executable you can get this
* to happen, but then it turns out that the .reloc section is
* incorrectly sized, and results in a corrupt PE. However, they
* still compute the checksum using the correct value. What idiots.
*/
WorkaroundForBinutils = AlignSize - RawSize;
AlignSize -= WorkaroundForBinutils;
if ((*(PULONG)&Section->Name == 'ler.') && (RawSize < AlignSize))
{
/* Piece of shit won't build relocations when you tell it to,
* either by using --emit-relocs or --dynamicbase. People online
* have found out that by using -pie-executable you can get this
* to happen, but then it turns out that the .reloc section is
* incorrectly sized, and results in a corrupt PE. However, they
* still compute the checksum using the correct value. What idiots.
*/
WorkaroundForBinutils = AlignSize - RawSize;
AlignSize -= WorkaroundForBinutils;
}
}
/* Yes, read the section data */