Hi Arnd, On Mon, Apr 07, 2025 at 11:41:16AM +0200, Arnd Bergmann wrote: > From: Arnd Bergmann <arnd@xxxxxxxx> > > Now that gcc-8 and binutils-2.30 are the minimum versions, a lot of > the individual feature checks can go away for simplification. > > Signed-off-by: Arnd Bergmann <arnd@xxxxxxxx> To address Will's concern, I grabbed the LLVM 13.0.1 (since that's the minimum supported version) from https://www.kernel.org/pub//tools/llvm/, and using v6.15-rc1 I checked the Kconfig resulting from: # magic script that puts the toolchain in my $PATH usekorg-llvm 13.0.1 make ARCH=arm64 LLVM=1 defconfig usekorg-llvm 13.0.1 make ARCH=arm64 LLVM=1 menuconfig I then applied this series, and built a defconfig kernel with the same toolchain, which built cleanly and boots fine. The gist is that everything looks good, so: Acked-by: Mark Rutland <mark.rutland@xxxxxxx> More specifically, with that I see: CC_IS_CLANG [=y] AS_IS_LLVM [=y] LD_IS_LLD [=y] ... and I've noted each of the Kconfig options below. [...] > -config ARM64_LD_HAS_FIX_ERRATUM_843419 > - def_bool $(ld-option,--fix-cortex-a53-843419) ARM64_LD_HAS_FIX_ERRATUM_843419 [=y] > -config AS_HAS_LSE_ATOMICS > - def_bool $(as-instr,.arch_extension lse) AS_HAS_LSE_ATOMICS [=y] > -config AS_HAS_ARMV8_2 > - def_bool $(cc-option,-Wa$(comma)-march=armv8.2-a) AS_HAS_ARMV8_2 [=y] > -config AS_HAS_SHA3 > - def_bool $(as-instr,.arch armv8.2-a+sha3) AS_HAS_SHA3 [=y] > -config CC_HAS_SIGN_RETURN_ADDRESS > - # GCC 7, 8 > - def_bool $(cc-option,-msign-return-address=all) CC_HAS_SIGN_RETURN_ADDRESS [=y] > -config AS_HAS_ARMV8_3 > - def_bool $(cc-option,-Wa$(comma)-march=armv8.3-a) AS_HAS_ARMV8_3 [=y] > config AS_HAS_CFI_NEGATE_RA_STATE > + # binutils 2.34+ > def_bool $(as-instr,.cfi_startproc\n.cfi_negate_ra_state\n.cfi_endproc\n) AS_HAS_CFI_NEGATE_RA_STATE [=y] > -config AS_HAS_LDAPR > - def_bool $(as-instr,.arch_extension rcpc) AS_HAS_LDAPR [=y] > -config AS_HAS_ARMV8_4 > - def_bool $(cc-option,-Wa$(comma)-march=armv8.4-a) AS_HAS_ARMV8_4 [=y] > diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile > index 1d5dfcd1c13e..73a10f65ce8b 100644 > --- a/arch/arm64/Makefile > +++ b/arch/arm64/Makefile > @@ -16,14 +16,11 @@ ifeq ($(CONFIG_RELOCATABLE), y) > # Pass --no-apply-dynamic-relocs to restore pre-binutils-2.27 behaviour > # for relative relocs, since this leads to better Image compression > # with the relocation offsets always being zero. > -LDFLAGS_vmlinux += -shared -Bsymbolic -z notext \ > - $(call ld-option, --no-apply-dynamic-relocs) > +LDFLAGS_vmlinux += -shared -Bsymbolic -z notext --no-apply-dynamic-relocs > endif Looks good: [mark@lakrids:~/src/linux]% usekorg-llvm 13.0.1 ld.lld -shared -Bsymbolic -z notext --made-up-argument ld.lld: error: unknown argument '--made-up-argument' [mark@lakrids:~/src/linux]% usekorg-llvm 13.0.1 ld.lld -shared -Bsymbolic -z notext --no-apply-dynamic-relocs ld.lld: error: no input files > ifeq ($(CONFIG_ARM64_ERRATUM_843419),y) > - ifeq ($(CONFIG_ARM64_LD_HAS_FIX_ERRATUM_843419),y) > LDFLAGS_vmlinux += --fix-cortex-a53-843419 > - endif > endif Looks good: [mark@lakrids:~/src/linux]% usekorg-llvm 13.0.1 ld.lld --made-up-argument ld.lld: error: unknown argument '--made-up-argument' [mark@lakrids:~/src/linux]% usekorg-llvm 13.0.1 ld.lld --fix-cortex-a53-843419 ld.lld: error: no input files [...] > ifeq ($(CONFIG_AS_HAS_ARMV8_5), y) > asm-arch := armv8.5-a > -else ifeq ($(CONFIG_AS_HAS_ARMV8_4), y) > +else > asm-arch := armv8.4-a > -else ifeq ($(CONFIG_AS_HAS_ARMV8_3), y) > - asm-arch := armv8.3-a > -else ifeq ($(CONFIG_AS_HAS_ARMV8_2), y) > - asm-arch := armv8.2-a > endif Looks good; this was checked in Kconfig. [...] > archprepare: > $(Q)$(MAKE) $(build)=arch/arm64/tools kapi > -ifeq ($(CONFIG_ARM64_ERRATUM_843419),y) > - ifneq ($(CONFIG_ARM64_LD_HAS_FIX_ERRATUM_843419),y) > - @echo "warning: ld does not support --fix-cortex-a53-843419; kernel may be susceptible to erratum" >&2 > - endif > -endif > -ifeq ($(CONFIG_ARM64_USE_LSE_ATOMICS),y) > - ifneq ($(CONFIG_ARM64_LSE_ATOMICS),y) > - @echo "warning: LSE atomics not supported by binutils" >&2 > - endif > -endif Looks good; both were checked in Kconfig. [...] > -#ifdef CONFIG_AS_HAS_LDAPR > #define __LOAD_RCPC(sfx, regs...) \ > ALTERNATIVE( \ > "ldar" #sfx "\t" #regs, \ > ".arch_extension rcpc\n" \ > "ldapr" #sfx "\t" #regs, \ > ARM64_HAS_LDAPR) > -#else > -#define __LOAD_RCPC(sfx, regs...) "ldar" #sfx "\t" #regs > -#endif /* CONFIG_AS_HAS_LDAPR */ Looks good. > > /* > * When building with LTO, there is an increased risk of the compiler > diff --git a/arch/arm64/kvm/Kconfig b/arch/arm64/kvm/Kconfig > index 096e45acadb2..713248f240e0 100644 > --- a/arch/arm64/kvm/Kconfig > +++ b/arch/arm64/kvm/Kconfig > @@ -19,7 +19,6 @@ if VIRTUALIZATION > > menuconfig KVM > bool "Kernel-based Virtual Machine (KVM) support" > - depends on AS_HAS_ARMV8_4 > select KVM_COMMON > select KVM_GENERIC_HARDWARE_ENABLING > select KVM_GENERIC_MMU_NOTIFIER Looks good. > diff --git a/arch/arm64/lib/xor-neon.c b/arch/arm64/lib/xor-neon.c > index f9a53b7f9842..8fffebfa17b2 100644 > --- a/arch/arm64/lib/xor-neon.c > +++ b/arch/arm64/lib/xor-neon.c > @@ -319,7 +319,7 @@ static void xor_arm64_eor3_5(unsigned long bytes, > > static int __init xor_neon_init(void) > { > - if (IS_ENABLED(CONFIG_AS_HAS_SHA3) && cpu_have_named_feature(SHA3)) { > + if (cpu_have_named_feature(SHA3)) { Looks good. Mark.