• Ard Biesheuvel's avatar
    efi/arm: Fix absolute relocation detection for older toolchains · b0dddf6c
    Ard Biesheuvel authored
    When building the ARM kernel with CONFIG_EFI=y, the following build
    error may occur when using a less recent version of binutils (2.23 or
    older):
    
       STUBCPY drivers/firmware/efi/libstub/lib-sort.stub.o
     00000000 R_ARM_ABS32       sort
     00000004 R_ARM_ABS32       __ksymtab_strings
     drivers/firmware/efi/libstub/lib-sort.stub.o: absolute symbol references not allowed in the EFI stub
    
    (and when building with debug symbols, the list above is much longer, and
    contains all the internal references between the .debug sections and the
    actual code)
    
    This issue is caused by the fact that objcopy v2.23 or earlier does not
    support wildcards in its -R and -j options, which means the following
    line from the Makefile:
    
      STUBCOPY_FLAGS-y		:= -R .debug* -R *ksymtab* -R *kcrctab*
    
    fails to take effect, leaving harmless absolute relocations in the binary
    that are indistinguishable from relocations that may cause crashes at
    runtime due to the fact that these relocations are resolved at link time
    using the virtual address of the kernel, which is always different from
    the address at which the EFI firmware loads and invokes the stub.
    
    So, as a workaround, disable debug symbols explicitly when building the
    stub for ARM, and strip the ksymtab and kcrctab symbols for the only
    exported symbol we currently reuse in the stub, which is 'sort'.
    Tested-by: default avatarJon Hunter <jonathanh@nvidia.com>
    Signed-off-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
    Reviewed-by: default avatarMatt Fleming <matt@codeblueprint.co.uk>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: linux-efi@vger.kernel.org
    Link: http://lkml.kernel.org/r/1476805991-7160-2-git-send-email-ard.biesheuvel@linaro.orgSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    b0dddf6c
Makefile 3.36 KB