[BOOTMGR]: ThFabba making me jealous. Fix a logic bug that Coverity *didn't* find...
authorAlex Ionescu <aionescu@gmail.com>
Sat, 4 Feb 2017 19:45:38 +0000 (19:45 +0000)
committerAlex Ionescu <aionescu@gmail.com>
Sat, 4 Feb 2017 19:45:38 +0000 (19:45 +0000)
[BOOTLIB]: Apply the "Fuck You Binutils" hack only for ld-generated files, to unbreak MSVC UEFI boot.

svn path=/trunk/; revision=73684

reactos/boot/environ/app/bootmgr/bootmgr.c
reactos/boot/environ/lib/misc/image.c

index bbd9577..0fb3c6b 100644 (file)
@@ -2276,7 +2276,7 @@ BmpTransferExecution (
                                            BcdLibraryDevice_ApplicationDevice,
                                            &AppDevice,
                                            NULL);
-            if (NT_SUCCESS(Status))
+            if (!NT_SUCCESS(Status))
             {
                 /* Force re-enumeration */
                 Status = BlFwEnumerateDevice(AppDevice);
index 3889f3e..55d9bd8 100644 (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 */