On Wed, Aug 7, 2024, at 17:36, Harith George wrote:
On 07-08-2024 20:52, liuyuntao (F) wrote:
Thanks, I reproduce the link error with toolchainThanks for confirming.
gcc version 9.3.0
GNU ld (GNU Binutils) 2.33.1
with same gcc version, just upgrading ld version to 2.36.1, it does not
segfault and build completes. there should be bugs in low version of ld,
and the ".reloc .text, R_ARM_NONE, ." triggers that.
I guess we need to add something like
#if !CONFIG_CC_IS_GCC || CONFIG_LD_VERSION >= 23600
around the entry-armv.S changes and maybe select
HAVE_LD_DEAD_CODE_DATA_ELIMINATION in arch/arm/Kconfig only if the same
conditions are met ??
I think it makes most sense to have a minimum LD
version as a dependency for HAVE_LD_DEAD_CODE_DATA_ELIMINATION.
Are you sure that 2.36 is the first one that works, and it's
not just 2.33 specifically that is broken?
If so, we could use
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -117,7 +117,7 @@ config ARM
select HAVE_KERNEL_XZ
select HAVE_KPROBES if !XIP_KERNEL && !CPU_ENDIAN_BE32 && !CPU_V7M && !CPU_32v3
select HAVE_KRETPROBES if HAVE_KPROBES
- select HAVE_LD_DEAD_CODE_DATA_ELIMINATION
+ select HAVE_LD_DEAD_CODE_DATA_ELIMINATION if (LD_VERSION >= 23600 || LD_IS_LLD)
select HAVE_MOD_ARCH_SPECIFIC
select HAVE_NMI
select HAVE_OPTPROBES if !THUMB2_KERNEL
binutils only takes a few seconds to build from source, so
you could just try all version from 2.25 (the oldest supported)
to 2.36) to see which ones work.
Arnd