powerpc/64: Force ELFv2 when building with LLVM linker
authorNicholas Piggin <npiggin@gmail.com>
Tue, 6 Jun 2023 09:38:29 +0000 (19:38 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 14 Jun 2023 02:46:42 +0000 (12:46 +1000)
The LLVM linker does not support ELFv1 at all, so BE kernels must be
built with ELFv2. The LLD version check was added to be conservative,
LLD simply fails to link ELFv1 entirely, effectively requiring LLD >= 15
and ELFv2 for BE builds. Instead remove that restriction until proven
otherwise (LLD 14.0 links a booting ELFv2 BE vmlinux for me).

The minimum GNU binutils has increased such that ELFv2 is always
supported, so remove that check while we're here.

Reviewed-by: Nathan Chancellor <nathan@kernel.org>
Tested-by: Nathan Chancellor <nathan@kernel.org>
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20230606093832.199712-2-npiggin@gmail.com
arch/powerpc/Kconfig

index 9111daf9d5f5e1871c0cb49b55e959bd88c3d579..ac593330337fb50549bf1f3bc92131d4088934e4 100644 (file)
@@ -624,10 +624,10 @@ config ARCH_HAS_KEXEC_PURGATORY
        def_bool KEXEC_FILE
 
 config PPC64_BIG_ENDIAN_ELF_ABI_V2
-       bool "Build big-endian kernel using ELF ABI V2 (EXPERIMENTAL)"
+       prompt "Build big-endian kernel using ELF ABI V2 (EXPERIMENTAL)" if LD_IS_BFD
+       def_bool y if LD_IS_LLD
        depends on PPC64 && CPU_BIG_ENDIAN
        depends on CC_HAS_ELFV2
-       depends on LD_VERSION >= 22400 || LLD_VERSION >= 150000
        help
          This builds the kernel image using the "Power Architecture 64-Bit ELF
          V2 ABI Specification", which has a reduced stack overhead and faster
@@ -638,8 +638,6 @@ config PPC64_BIG_ENDIAN_ELF_ABI_V2
          it is less well tested by kernel and toolchain. However some distros
          build userspace this way, and it can produce a functioning kernel.
 
-         This requires GCC and binutils 2.24 or newer.
-
 config RELOCATABLE
        bool "Build a relocatable kernel"
        depends on PPC64 || (FLATMEM && (44x || PPC_85xx))