Merge tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux
[platform/kernel/linux-starfive.git] / drivers / firmware / efi / libstub / arm64-stub.c
index 2bba0c9..fc9f8ab 100644 (file)
@@ -6,17 +6,11 @@
  * Adapted from ARM version by Mark Salter <msalter@redhat.com>
  */
 
-/*
- * To prevent the compiler from emitting GOT-indirected (and thus absolute)
- * references to the section markers, override their visibility as 'hidden'
- */
-#pragma GCC visibility push(hidden)
-#include <asm/sections.h>
-#pragma GCC visibility pop
 
 #include <linux/efi.h>
 #include <asm/efi.h>
 #include <asm/memory.h>
+#include <asm/sections.h>
 #include <asm/sysreg.h>
 
 #include "efistub.h"
@@ -49,7 +43,6 @@ efi_status_t handle_kernel_image(unsigned long *image_addr,
 {
        efi_status_t status;
        unsigned long kernel_size, kernel_memsize = 0;
-       void *old_image_addr = (void *)*image_addr;
        unsigned long preferred_offset;
        u64 phys_seed = 0;
 
@@ -121,6 +114,7 @@ efi_status_t handle_kernel_image(unsigned long *image_addr,
                 * Mustang), we can still place the kernel at the address
                 * 'dram_base + TEXT_OFFSET'.
                 */
+               *image_addr = (unsigned long)_text;
                if (*image_addr == preferred_offset)
                        return EFI_SUCCESS;
 
@@ -145,7 +139,11 @@ efi_status_t handle_kernel_image(unsigned long *image_addr,
                }
                *image_addr = *reserve_addr + TEXT_OFFSET;
        }
-       memcpy((void *)*image_addr, old_image_addr, kernel_size);
+
+       if (image->image_base != _text)
+               pr_efi_err("FIRMWARE BUG: efi_loaded_image_t::image_base has bogus value\n");
+
+       memcpy((void *)*image_addr, _text, kernel_size);
 
        return EFI_SUCCESS;
 }