]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
x86/boot/compressed: Move efi32_pe_entry into .text section
authorArd Biesheuvel <ardb@kernel.org>
Tue, 22 Nov 2022 16:10:04 +0000 (17:10 +0100)
committerBorislav Petkov <bp@suse.de>
Tue, 22 Nov 2022 18:23:01 +0000 (19:23 +0100)
Move efi32_pe_entry() into the .text section, so that it can be moved
out of head_64.S and into a separate compilation unit in a subsequent
patch.

Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Signed-off-by: Borislav Petkov <bp@suse.de>
Link: https://lore.kernel.org/r/20221122161017.2426828-5-ardb@kernel.org
arch/x86/boot/compressed/head_64.S

index f3d7de52e252ad266279c49d1d9f56ae25909fe2..9dd9010042b9287070ab1924b157152117ba4c31 100644 (file)
@@ -770,7 +770,7 @@ SYM_DATA(efi_is64, .byte 1)
 #define BS32_handle_protocol   88 // offsetof(efi_boot_services_32_t, handle_protocol)
 #define LI32_image_base                32 // offsetof(efi_loaded_image_32_t, image_base)
 
-       __HEAD
+       .text
        .code32
 SYM_FUNC_START(efi32_pe_entry)
 /*
@@ -792,12 +792,11 @@ SYM_FUNC_START(efi32_pe_entry)
 
        call    1f
 1:     pop     %ebx
-       subl    $ rva(1b), %ebx
 
        /* Get the loaded image protocol pointer from the image handle */
        leal    -4(%ebp), %eax
        pushl   %eax                            // &loaded_image
-       leal    rva(loaded_image_proto)(%ebx), %eax
+       leal    (loaded_image_proto - 1b)(%ebx), %eax
        pushl   %eax                            // pass the GUID address
        pushl   8(%ebp)                         // pass the image handle
 
@@ -826,13 +825,13 @@ SYM_FUNC_START(efi32_pe_entry)
        movl    12(%ebp), %edx                  // sys_table
        movl    -4(%ebp), %esi                  // loaded_image
        movl    LI32_image_base(%esi), %esi     // loaded_image->image_base
-       movl    %ebx, %ebp                      // startup_32 for efi32_pe_stub_entry
+       leal    (startup_32 - 1b)(%ebx), %ebp   // runtime address of startup_32
        /*
         * We need to set the image_offset variable here since startup_32() will
         * use it before we get to the 64-bit efi_pe_entry() in C code.
         */
-       subl    %esi, %ebx
-       movl    %ebx, rva(image_offset)(%ebp)   // save image_offset
+       subl    %esi, %ebp                      // calculate image_offset
+       movl    %ebp, (image_offset - 1b)(%ebx) // save image_offset
        xorl    %esi, %esi
        jmp     efi32_entry                     // pass %ecx, %edx, %esi
                                                // no other registers remain live