Commit e7607f7d authored by Nathan Chancellor's avatar Nathan Chancellor Committed by Russell King (Oracle)
Browse files

ARM: 9443/1: Require linker to support KEEP within OVERLAY for DCE

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: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarNathan Chancellor <nathan@kernel.org>
Signed-off-by: default avatarRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
parent 9cac324d
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -121,7 +121,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
+6 −0
Original line number Diff line number Diff line
@@ -34,6 +34,12 @@
#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);				\
+5 −0
Original line number Diff line number Diff line
@@ -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 RUSTC_HAS_COERCE_POINTEE
	def_bool RUSTC_VERSION >= 108400