]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ARM: 9443/1: Require linker to support KEEP within OVERLAY for DCE
authorNathan Chancellor <nathan@kernel.org>
Thu, 20 Mar 2025 21:33:49 +0000 (22:33 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 10 Apr 2025 12:39:40 +0000 (14:39 +0200)
commit e7607f7d6d81af71dcc5171278aadccc94d277cd upstream.

ld.lld prior to 21.0.0 does not support using the KEEP keyword within an
overlay description, which may be needed to avoid discarding necessary
sections within an overlay with '--gc-sections', which can be enabled
for the kernel via CONFIG_LD_DEAD_CODE_DATA_ELIMINATION.

Disallow CONFIG_LD_DEAD_CODE_DATA_ELIMINATION without support for KEEP
within OVERLAY and introduce a macro, OVERLAY_KEEP, that can be used to
conditionally add KEEP when it is properly supported to avoid breaking
old versions of ld.lld.

Cc: stable@vger.kernel.org
Link: https://github.com/llvm/llvm-project/commit/381599f1fe973afad3094e55ec99b1620dba7d8c
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
[nathan: Fix conflict in init/Kconfig due to lack of RUSTC symbols]
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/arm/Kconfig
arch/arm/include/asm/vmlinux.lds.h
init/Kconfig

index 202397be76d8037b531b34dee16c7dfcfd0124ef..d0040fb67c36f37040a2dd3532f16dfdaf6f19fb 100644 (file)
@@ -118,7 +118,7 @@ config ARM
        select HAVE_KERNEL_XZ
        select HAVE_KPROBES if !XIP_KERNEL && !CPU_ENDIAN_BE32 && !CPU_V7M
        select HAVE_KRETPROBES if HAVE_KPROBES
-       select HAVE_LD_DEAD_CODE_DATA_ELIMINATION if (LD_VERSION >= 23600 || LD_IS_LLD)
+       select HAVE_LD_DEAD_CODE_DATA_ELIMINATION if (LD_VERSION >= 23600 || LD_CAN_USE_KEEP_IN_OVERLAY)
        select HAVE_MOD_ARCH_SPECIFIC
        select HAVE_NMI
        select HAVE_OPTPROBES if !THUMB2_KERNEL
index f6623fc6cc39858eda69848c0f7a707ee0254d0a..14811b4f48ec8ae5868113039703d661a6343f03 100644 (file)
 #define NOCROSSREFS
 #endif
 
+#ifdef CONFIG_LD_CAN_USE_KEEP_IN_OVERLAY
+#define OVERLAY_KEEP(x)                KEEP(x)
+#else
+#define OVERLAY_KEEP(x)                x
+#endif
+
 /* Set start/end symbol names to the LMA for the section */
 #define ARM_LMA(sym, section)                                          \
        sym##_start = LOADADDR(section);                                \
index 293c565c62168e29d539caa4930d3c76244c31b2..243d0087f944584fccd57f874c7a7a5b71275a5c 100644 (file)
@@ -129,6 +129,11 @@ config CC_HAS_COUNTED_BY
        # https://github.com/llvm/llvm-project/pull/112636
        depends on !(CC_IS_CLANG && CLANG_VERSION < 190103)
 
+config LD_CAN_USE_KEEP_IN_OVERLAY
+       # ld.lld prior to 21.0.0 did not support KEEP within an overlay description
+       # https://github.com/llvm/llvm-project/pull/130661
+       def_bool LD_IS_BFD || LLD_VERSION >= 210000
+
 config PAHOLE_VERSION
        int
        default $(shell,$(srctree)/scripts/pahole-version.sh $(PAHOLE))