* [build fail] v6.11-rc2 from "ARM: 9404/1: arm32: enable HAVE_LD_DEAD_CODE_DATA_ELIMINATION"
@ 2024-08-07 5:12 Harith George
2024-08-07 6:42 ` liuyuntao (F)
` (2 more replies)
0 siblings, 3 replies; 13+ messages in thread
From: Harith George @ 2024-08-07 5:12 UTC (permalink / raw)
To: liuyuntao12, arnd, linus.walleij, rmk+kernel, ardb, harith.g
Cc: linux-arm-kernel, linux-kernel
Hi,
I am seeing a regression in "make xipImage" builds in mainline tree
v6.11-rc2 with LD segmentation fault.
$ make V=1 xipImage
...
+ arm-poky-linux-musleabi-ld -EL -z noexecstack --no-undefined -X
--pic-veneer -z norelro --build-id=sha1 --orphan-handling=warn
--script=./arch/arm/kernel/vmlinux.lds -o vmlinux --whole-archive
vmlinux.a init/version-timestamp.o --no-whole-archive --start-group
arch/arm/lib/lib.a lib/lib.a --end-group
scripts/link-vmlinux.sh: line 49: 3371164 Segmentation fault (core
dumped) ${ld} ${ldflags} -o ${output} ${wl}--whole-archive ${objs}
${wl}--no-whole-archive ${wl}--start-group ${libs} ${wl}--end-group
${kallsymso} ${btf_vmlinux_bin_o} ${ldlibs}
make[2]: *** [scripts/Makefile.vmlinux:34: vmlinux] Error 139
make[2]: *** Deleting file 'vmlinux'
make[1]: *** [/home/amol/hgg/mainline/linux/Makefile:1156: vmlinux] Error 2
make: *** [Makefile:224: __sub-make] Error 2
git bisect pointed to ed0f941022515ff40473("ARM: 9404/1: arm32: enable
HAVE_LD_DEAD_CODE_DATA_ELIMINATION")
"CONFIG_HAVE_LD_DEAD_CODE_DATA_ELIMINATION=y" is getting set with the
commit in my .config.
But, my .config is _not_ enabling the "LD_DEAD_CODE_DATA_ELIMINATION" flag.
Reverting commit ed0f94102251, resolves the linking fail.
Infact, reverting just the ".reloc .text, R_ARM_NONE, ." additions in
arch/arm/kernel/entry-armv.S resolves the linking fail.
My toolchain is
arm-poky-linux-musleabi-gcc (GCC) 9.2.0
GNU ld (GNU Binutils) 2.32.0.20190204
I am working on a new platform. Hence my .config/code has other platform
related additions which would not make sense on current mainline, which
is why I have not added it here. Do let me know if you would still like
to have the .config file.
Thanks,
Warm Regards,
Harith
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [build fail] v6.11-rc2 from "ARM: 9404/1: arm32: enable HAVE_LD_DEAD_CODE_DATA_ELIMINATION"
2024-08-07 5:12 [build fail] v6.11-rc2 from "ARM: 9404/1: arm32: enable HAVE_LD_DEAD_CODE_DATA_ELIMINATION" Harith George
@ 2024-08-07 6:42 ` liuyuntao (F)
2024-08-07 9:49 ` liuyuntao (F)
2024-08-07 10:10 ` Arnd Bergmann
2 siblings, 0 replies; 13+ messages in thread
From: liuyuntao (F) @ 2024-08-07 6:42 UTC (permalink / raw)
To: Harith George, arnd, linus.walleij, rmk+kernel, ardb, harith.g
Cc: linux-arm-kernel, linux-kernel
OK,I am currently troubleshooting this issue.
On 2024/8/7 13:12, Harith George wrote:
> Hi,
>
> I am seeing a regression in "make xipImage" builds in mainline tree
> v6.11-rc2 with LD segmentation fault.
>
> $ make V=1 xipImage
> ...
> + arm-poky-linux-musleabi-ld -EL -z noexecstack --no-undefined -X
> --pic-veneer -z norelro --build-id=sha1 --orphan-handling=warn
> --script=./arch/arm/kernel/vmlinux.lds -o vmlinux --whole-archive
> vmlinux.a init/version-timestamp.o --no-whole-archive --start-group
> arch/arm/lib/lib.a lib/lib.a --end-group
> scripts/link-vmlinux.sh: line 49: 3371164 Segmentation fault (core
> dumped) ${ld} ${ldflags} -o ${output} ${wl}--whole-archive ${objs}
> ${wl}--no-whole-archive ${wl}--start-group ${libs} ${wl}--end-group
> ${kallsymso} ${btf_vmlinux_bin_o} ${ldlibs}
> make[2]: *** [scripts/Makefile.vmlinux:34: vmlinux] Error 139
> make[2]: *** Deleting file 'vmlinux'
> make[1]: *** [/home/amol/hgg/mainline/linux/Makefile:1156: vmlinux] Error 2
> make: *** [Makefile:224: __sub-make] Error 2
>
> git bisect pointed to ed0f941022515ff40473("ARM: 9404/1: arm32: enable
> HAVE_LD_DEAD_CODE_DATA_ELIMINATION")
>
> "CONFIG_HAVE_LD_DEAD_CODE_DATA_ELIMINATION=y" is getting set with the
> commit in my .config.
> But, my .config is _not_ enabling the "LD_DEAD_CODE_DATA_ELIMINATION" flag.
>
> Reverting commit ed0f94102251, resolves the linking fail.
> Infact, reverting just the ".reloc .text, R_ARM_NONE, ." additions in
> arch/arm/kernel/entry-armv.S resolves the linking fail.
>
> My toolchain is
> arm-poky-linux-musleabi-gcc (GCC) 9.2.0
> GNU ld (GNU Binutils) 2.32.0.20190204
>
> I am working on a new platform. Hence my .config/code has other platform
> related additions which would not make sense on current mainline, which
> is why I have not added it here. Do let me know if you would still like
> to have the .config file.
>
>
> Thanks,
> Warm Regards,
> Harith
>
>
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [build fail] v6.11-rc2 from "ARM: 9404/1: arm32: enable HAVE_LD_DEAD_CODE_DATA_ELIMINATION"
2024-08-07 5:12 [build fail] v6.11-rc2 from "ARM: 9404/1: arm32: enable HAVE_LD_DEAD_CODE_DATA_ELIMINATION" Harith George
2024-08-07 6:42 ` liuyuntao (F)
@ 2024-08-07 9:49 ` liuyuntao (F)
2024-08-07 11:51 ` Harith George
2024-08-07 10:10 ` Arnd Bergmann
2 siblings, 1 reply; 13+ messages in thread
From: liuyuntao (F) @ 2024-08-07 9:49 UTC (permalink / raw)
To: Harith George, arnd, linus.walleij, rmk+kernel, ardb, harith.g
Cc: linux-arm-kernel, linux-kernel
It seems to be ok with vexpress_defconfig in mainline tree v6.11-rc2,
I may need your .config/code file for further testing.
On 2024/8/7 13:12, Harith George wrote:
> Hi,
>
> I am seeing a regression in "make xipImage" builds in mainline tree
> v6.11-rc2 with LD segmentation fault.
>
> $ make V=1 xipImage
> ...
> + arm-poky-linux-musleabi-ld -EL -z noexecstack --no-undefined -X
> --pic-veneer -z norelro --build-id=sha1 --orphan-handling=warn
> --script=./arch/arm/kernel/vmlinux.lds -o vmlinux --whole-archive
> vmlinux.a init/version-timestamp.o --no-whole-archive --start-group
> arch/arm/lib/lib.a lib/lib.a --end-group
> scripts/link-vmlinux.sh: line 49: 3371164 Segmentation fault (core
> dumped) ${ld} ${ldflags} -o ${output} ${wl}--whole-archive ${objs}
> ${wl}--no-whole-archive ${wl}--start-group ${libs} ${wl}--end-group
> ${kallsymso} ${btf_vmlinux_bin_o} ${ldlibs}
> make[2]: *** [scripts/Makefile.vmlinux:34: vmlinux] Error 139
> make[2]: *** Deleting file 'vmlinux'
> make[1]: *** [/home/amol/hgg/mainline/linux/Makefile:1156: vmlinux] Error 2
> make: *** [Makefile:224: __sub-make] Error 2
>
> git bisect pointed to ed0f941022515ff40473("ARM: 9404/1: arm32: enable
> HAVE_LD_DEAD_CODE_DATA_ELIMINATION")
>
> "CONFIG_HAVE_LD_DEAD_CODE_DATA_ELIMINATION=y" is getting set with the
> commit in my .config.
> But, my .config is _not_ enabling the "LD_DEAD_CODE_DATA_ELIMINATION" flag.
>
> Reverting commit ed0f94102251, resolves the linking fail.
> Infact, reverting just the ".reloc .text, R_ARM_NONE, ." additions in
> arch/arm/kernel/entry-armv.S resolves the linking fail.
>
> My toolchain is
> arm-poky-linux-musleabi-gcc (GCC) 9.2.0
> GNU ld (GNU Binutils) 2.32.0.20190204
>
> I am working on a new platform. Hence my .config/code has other platform
> related additions which would not make sense on current mainline, which
> is why I have not added it here. Do let me know if you would still like
> to have the .config file.
>
>
> Thanks,
> Warm Regards,
> Harith
>
>
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [build fail] v6.11-rc2 from "ARM: 9404/1: arm32: enable HAVE_LD_DEAD_CODE_DATA_ELIMINATION"
2024-08-07 5:12 [build fail] v6.11-rc2 from "ARM: 9404/1: arm32: enable HAVE_LD_DEAD_CODE_DATA_ELIMINATION" Harith George
2024-08-07 6:42 ` liuyuntao (F)
2024-08-07 9:49 ` liuyuntao (F)
@ 2024-08-07 10:10 ` Arnd Bergmann
2024-08-07 11:21 ` Harith George
2 siblings, 1 reply; 13+ messages in thread
From: Arnd Bergmann @ 2024-08-07 10:10 UTC (permalink / raw)
To: Harith George, Yuntao Liu, Linus Walleij, Russell King,
Ard Biesheuvel, harith.g
Cc: linux-arm-kernel, linux-kernel
On Wed, Aug 7, 2024, at 07:12, Harith George wrote:
> Hi,
>
> I am seeing a regression in "make xipImage" builds in mainline tree
> v6.11-rc2 with LD segmentation fault.
>
> $ make V=1 xipImage
> ...
> + arm-poky-linux-musleabi-ld -EL -z noexecstack --no-undefined -X
> --pic-veneer -z norelro --build-id=sha1 --orphan-handling=warn
> --script=./arch/arm/kernel/vmlinux.lds -o vmlinux --whole-archive
> vmlinux.a init/version-timestamp.o --no-whole-archive --start-group
> arch/arm/lib/lib.a lib/lib.a --end-group
> scripts/link-vmlinux.sh: line 49: 3371164 Segmentation fault (core
> dumped) ${ld} ${ldflags} -o ${output} ${wl}--whole-archive ${objs}
> ${wl}--no-whole-archive ${wl}--start-group ${libs} ${wl}--end-group
> ${kallsymso} ${btf_vmlinux_bin_o} ${ldlibs}
> make[2]: *** [scripts/Makefile.vmlinux:34: vmlinux] Error 139
> make[2]: *** Deleting file 'vmlinux'
> make[1]: *** [/home/amol/hgg/mainline/linux/Makefile:1156: vmlinux] Error 2
> make: *** [Makefile:224: __sub-make] Error 2
>
> git bisect pointed to ed0f941022515ff40473("ARM: 9404/1: arm32: enable
> HAVE_LD_DEAD_CODE_DATA_ELIMINATION")
>
> "CONFIG_HAVE_LD_DEAD_CODE_DATA_ELIMINATION=y" is getting set with the
> commit in my .config.
> But, my .config is _not_ enabling the "LD_DEAD_CODE_DATA_ELIMINATION" flag.
>
> Reverting commit ed0f94102251, resolves the linking fail.
> Infact, reverting just the ".reloc .text, R_ARM_NONE, ." additions in
> arch/arm/kernel/entry-armv.S resolves the linking fail.
>
> My toolchain is
> arm-poky-linux-musleabi-gcc (GCC) 9.2.0
> GNU ld (GNU Binutils) 2.32.0.20190204
Obviously 'ld' should not segfault, so there is at least one bug
there, possibly also a kernel bug that triggered this. Can you
try with newer binutils? This should hopefully either solve your
problem or produce a more useful error message if there is still a
kernel problem.
Any of the binary toolchains below should work in general,
the latest one is the gcc-14.2/binutils-2.43 version I uploaded
to kernel.org the other day.
https://mirrors.edge.kernel.org/pub/tools/crosstool/index.html
https://toolchains.bootlin.com/releases_armv7-eabihf.html
https://musl.cc/
Arnd
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [build fail] v6.11-rc2 from "ARM: 9404/1: arm32: enable HAVE_LD_DEAD_CODE_DATA_ELIMINATION"
2024-08-07 10:10 ` Arnd Bergmann
@ 2024-08-07 11:21 ` Harith George
0 siblings, 0 replies; 13+ messages in thread
From: Harith George @ 2024-08-07 11:21 UTC (permalink / raw)
To: Arnd Bergmann, Yuntao Liu, Linus Walleij, Russell King,
Ard Biesheuvel, harith.g
Cc: linux-arm-kernel, linux-kernel
On 07-08-2024 15:40, Arnd Bergmann wrote:
> Obviously 'ld' should not segfault, so there is at least one bug
> there, possibly also a kernel bug that triggered this. Can you
> try with newer binutils? This should hopefully either solve your
> problem or produce a more useful error message if there is still a
> kernel problem.
>
> Any of the binary toolchains below should work in general,
> the latest one is the gcc-14.2/binutils-2.43 version I uploaded
> to kernel.org the other day.
So, I tested with 3 more gcc builds.
gcc14.2 (x86_64-gcc-14.2.0-nolibc-arm-linux-gnueabi.tar.xz) and gcc9.5
(x86_64-gcc-9.5.0-nolibc-arm-linux-gnueabi.tar.xz) from
https://mirrors.edge.kernel.org/pub/tools/crosstool/index.html
works and in both these ld does not segfault and build completes.
But gcc9.3 (armv7-eabihf--musl--stable-2020.08-1.tar.bz2) from
(https://toolchains.bootlin.com/releases_armv7-eabihf.html) resulted in
the same LD segfault below.
+ arm-buildroot-linux-musleabihf-ld -EL -z noexecstack --no-undefined -X
--pic-veneer -z norelro --build-id=sha1 --orphan-handling=warn
--script=./arch/arm/kernel/vmlinux.lds --strip-debug -o .tmp_vmlinux1
--whole-archive vmlinux.a init/version-timestamp.o --no-whole-archive
--start-group arch/arm/lib/lib.a lib/lib.a --end-group
.tmp_vmlinux0.kallsyms.o
scripts/link-vmlinux.sh: line 49: 3802905 Segmentation fault ${ld}
${ldflags} -o ${output} ${wl}--whole-archive ${objs}
${wl}--no-whole-archive ${wl}--start-group ${libs} ${wl}--end-group
${kallsymso} ${btf_vmlinux_bin_o} ${ldlibs}
make[2]: *** [scripts/Makefile.vmlinux:34: vmlinux] Error 139
make[1]: *** [/home/amol/hgg/mainline/linux/Makefile:1156: vmlinux] Error 2
Thanks,
Warm Regards,
Harith
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [build fail] v6.11-rc2 from "ARM: 9404/1: arm32: enable HAVE_LD_DEAD_CODE_DATA_ELIMINATION"
2024-08-07 9:49 ` liuyuntao (F)
@ 2024-08-07 11:51 ` Harith George
2024-08-07 15:22 ` liuyuntao (F)
0 siblings, 1 reply; 13+ messages in thread
From: Harith George @ 2024-08-07 11:51 UTC (permalink / raw)
To: liuyuntao (F), arnd, linus.walleij, rmk+kernel, ardb, harith.g
Cc: linux-arm-kernel-join, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 319 bytes --]
On 07-08-2024 15:19, liuyuntao (F) wrote:
> It seems to be ok with vexpress_defconfig in mainline tree v6.11-rc2,
> I may need your .config/code file for further testing.
>
Please find attached minimal patches just for your testing. "make
ARCH=arm e7_defconfig; make ARCH=arm xipImage"
Thanks,
Warm Regards,
Harith
[-- Attachment #2: ldissue.tar.gz --]
[-- Type: application/x-gzip, Size: 5741 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [build fail] v6.11-rc2 from "ARM: 9404/1: arm32: enable HAVE_LD_DEAD_CODE_DATA_ELIMINATION"
2024-08-07 11:51 ` Harith George
@ 2024-08-07 15:22 ` liuyuntao (F)
2024-08-07 15:36 ` Harith George
0 siblings, 1 reply; 13+ messages in thread
From: liuyuntao (F) @ 2024-08-07 15:22 UTC (permalink / raw)
To: Harith George, arnd, linus.walleij, rmk+kernel, ardb, harith.g
Cc: linux-arm-kernel-join, linux-kernel
Thanks, I reproduce the link error with toolchain
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.
On 2024/8/7 19:51, Harith George wrote:
>
>
> On 07-08-2024 15:19, liuyuntao (F) wrote:
>> It seems to be ok with vexpress_defconfig in mainline tree v6.11-rc2,
>> I may need your .config/code file for further testing.
>>
> Please find attached minimal patches just for your testing. "make
> ARCH=arm e7_defconfig; make ARCH=arm xipImage"
>
> Thanks,
> Warm Regards,
> Harith
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [build fail] v6.11-rc2 from "ARM: 9404/1: arm32: enable HAVE_LD_DEAD_CODE_DATA_ELIMINATION"
2024-08-07 15:22 ` liuyuntao (F)
@ 2024-08-07 15:36 ` Harith George
2024-08-07 15:41 ` Arnd Bergmann
0 siblings, 1 reply; 13+ messages in thread
From: Harith George @ 2024-08-07 15:36 UTC (permalink / raw)
To: liuyuntao (F), arnd, linus.walleij, rmk+kernel, ardb, harith.g
Cc: linux-kernel, linux-arm-kernel
On 07-08-2024 20:52, liuyuntao (F) wrote:
> Thanks, I reproduce the link error with toolchain
> 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.
>
Thanks for confirming.
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 had screwed up the CC list when I last replied and LAK list got
changed to lak-join email id by mistake. Fixing that in this reply as well.
Thanks,
Warm Regards,
Harith
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [build fail] v6.11-rc2 from "ARM: 9404/1: arm32: enable HAVE_LD_DEAD_CODE_DATA_ELIMINATION"
2024-08-07 15:36 ` Harith George
@ 2024-08-07 15:41 ` Arnd Bergmann
2024-08-07 15:47 ` liuyuntao (F)
` (2 more replies)
0 siblings, 3 replies; 13+ messages in thread
From: Arnd Bergmann @ 2024-08-07 15:41 UTC (permalink / raw)
To: Harith George, Yuntao Liu, Linus Walleij, Russell King,
Ard Biesheuvel, harith.g
Cc: linux-kernel, linux-arm-kernel
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 toolchain
>> 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.
>>
> Thanks for confirming.
>
> 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
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [build fail] v6.11-rc2 from "ARM: 9404/1: arm32: enable HAVE_LD_DEAD_CODE_DATA_ELIMINATION"
2024-08-07 15:41 ` Arnd Bergmann
@ 2024-08-07 15:47 ` liuyuntao (F)
2024-08-07 15:48 ` Harith George
2024-08-08 8:31 ` liuyuntao (F)
2 siblings, 0 replies; 13+ messages in thread
From: liuyuntao (F) @ 2024-08-07 15:47 UTC (permalink / raw)
To: Arnd Bergmann, Harith George, Linus Walleij, Russell King,
Ard Biesheuvel, harith.g
Cc: linux-kernel, linux-arm-kernel
OK, i will test these version soon.
On 2024/8/7 23:41, Arnd Bergmann wrote:
> 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 toolchain
>>> 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.
>>>
>> Thanks for confirming.
>>
>> 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
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [build fail] v6.11-rc2 from "ARM: 9404/1: arm32: enable HAVE_LD_DEAD_CODE_DATA_ELIMINATION"
2024-08-07 15:41 ` Arnd Bergmann
2024-08-07 15:47 ` liuyuntao (F)
@ 2024-08-07 15:48 ` Harith George
2024-08-08 8:43 ` liuyuntao (F)
2024-08-08 8:31 ` liuyuntao (F)
2 siblings, 1 reply; 13+ messages in thread
From: Harith George @ 2024-08-07 15:48 UTC (permalink / raw)
To: Arnd Bergmann, Yuntao Liu, Linus Walleij, Russell King,
Ard Biesheuvel, harith.g
Cc: linux-kernel, linux-arm-kernel
On 07-08-2024 21:11, Arnd Bergmann wrote:
> 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 toolchain
>>> 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.
>>>
>> Thanks for confirming.
>>
>> 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
>
The select alone may not be enough. Wont the changes in
arch/arm/kernel/entry-armv.S still result in LD Segfaults even if the
HAVE_LD_DEAD_CODE_DATA_ELIMINATION flag is not set in .config for older
toolchains?
Thanks,
Warm Regards,
Harith
>
> 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
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [build fail] v6.11-rc2 from "ARM: 9404/1: arm32: enable HAVE_LD_DEAD_CODE_DATA_ELIMINATION"
2024-08-07 15:41 ` Arnd Bergmann
2024-08-07 15:47 ` liuyuntao (F)
2024-08-07 15:48 ` Harith George
@ 2024-08-08 8:31 ` liuyuntao (F)
2 siblings, 0 replies; 13+ messages in thread
From: liuyuntao (F) @ 2024-08-08 8:31 UTC (permalink / raw)
To: Arnd Bergmann, Harith George, Linus Walleij, Russell King,
Ard Biesheuvel, harith.g
Cc: linux-kernel, linux-arm-kernel
On 2024/8/7 23:41, Arnd Bergmann wrote:
> 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 toolchain
>>> 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.
>>>
>> Thanks for confirming.
>>
>> 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.
After testing, all version of ld with version earlier than 2.36 has a
build issue.
as Harith mentioned:
> The select alone may not be enough. Wont the changes in arch/arm/kernel/entry-armv.S still result in LD Segfaults even if the HAVE_LD_DEAD_CODE_DATA_ELIMINATION flag is not set in .config for older toolchains?
I think we could eliminate the impact of ".reloc .text, R_ARM_NONE, ."
when CONFIG_LD_DEAD_CODE_DATA_ELIMINATION is not enabled.
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 54b2bb817a7f..173159e93c99 100644
--- 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
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
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S
index f01d23a220e6..cd443faf8645 100644
--- a/arch/arm/kernel/entry-armv.S
+++ b/arch/arm/kernel/entry-armv.S
@@ -29,6 +29,12 @@
#include "entry-header.S"
#include <asm/probes.h>
+#ifdef CONFIG_HAVE_LD_DEAD_CODE_DATA_ELIMINATION
+#define RELOC_TEXT_NONE (.reloc .text, R_ARM_NONE, .)
+#else
+#define RELOC_TEXT_NONE
+#endif
+
/*
* Interrupt handling.
*/
@@ -1065,7 +1071,7 @@ vector_addrexcptn:
.globl vector_fiq
.section .vectors, "ax", %progbits
- .reloc .text, R_ARM_NONE, .
+ RELOC_TEXT_NONE
W(b) vector_rst
W(b) vector_und
ARM( .reloc ., R_ARM_LDR_PC_G0, .L__vector_swi )
@@ -1079,7 +1085,7 @@ THUMB( .reloc ., R_ARM_THM_PC12,
.L__vector_swi )
#ifdef CONFIG_HARDEN_BRANCH_HISTORY
.section .vectors.bhb.loop8, "ax", %progbits
- .reloc .text, R_ARM_NONE, .
+ RELOC_TEXT_NONE
W(b) vector_rst
W(b) vector_bhb_loop8_und
ARM( .reloc ., R_ARM_LDR_PC_G0, .L__vector_bhb_loop8_swi )
@@ -1092,7 +1098,7 @@ THUMB( .reloc ., R_ARM_THM_PC12,
.L__vector_bhb_loop8_swi )
W(b) vector_bhb_loop8_fiq
.section .vectors.bhb.bpiall, "ax", %progbits
- .reloc .text, R_ARM_NONE, .
+ RELOC_TEXT_NONE
W(b) vector_rst
W(b) vector_bhb_bpiall_und
ARM( .reloc ., R_ARM_LDR_PC_G0, .L__vector_bhb_bpiall_swi )
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [build fail] v6.11-rc2 from "ARM: 9404/1: arm32: enable HAVE_LD_DEAD_CODE_DATA_ELIMINATION"
2024-08-07 15:48 ` Harith George
@ 2024-08-08 8:43 ` liuyuntao (F)
0 siblings, 0 replies; 13+ messages in thread
From: liuyuntao (F) @ 2024-08-08 8:43 UTC (permalink / raw)
To: Harith George, Arnd Bergmann, Linus Walleij, Russell King,
Ard Biesheuvel, harith.g
Cc: linux-kernel, linux-arm-kernel
On 2024/8/7 23:48, Harith George wrote:
>
>
> On 07-08-2024 21:11, Arnd Bergmann wrote:
>> 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 toolchain
>>>> 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.
>>>>
>>> Thanks for confirming.
>>>
>>> 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
>>
> The select alone may not be enough. Wont the changes in
> arch/arm/kernel/entry-armv.S still result in LD Segfaults even if the
> HAVE_LD_DEAD_CODE_DATA_ELIMINATION flag is not set in .config for older
> toolchains?
>
Yes, that is it.
apply this patch, it should sovle the build issue with older version GUN ld.
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 54b2bb817a7f..173159e93c99 100644
--- 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
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
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S
index f01d23a220e6..cd443faf8645 100644
--- a/arch/arm/kernel/entry-armv.S
+++ b/arch/arm/kernel/entry-armv.S
@@ -29,6 +29,12 @@
#include "entry-header.S"
#include <asm/probes.h>
+#ifdef CONFIG_HAVE_LD_DEAD_CODE_DATA_ELIMINATION
+#define RELOC_TEXT_NONE (.reloc .text, R_ARM_NONE, .)
+#else
+#define RELOC_TEXT_NONE
+#endif
+
/*
* Interrupt handling.
*/
@@ -1065,7 +1071,7 @@ vector_addrexcptn:
.globl vector_fiq
.section .vectors, "ax", %progbits
- .reloc .text, R_ARM_NONE, .
+ RELOC_TEXT_NONE
W(b) vector_rst
W(b) vector_und
ARM( .reloc ., R_ARM_LDR_PC_G0, .L__vector_swi )
@@ -1079,7 +1085,7 @@ THUMB( .reloc ., R_ARM_THM_PC12, .L__vector_swi )
#ifdef CONFIG_HARDEN_BRANCH_HISTORY
.section .vectors.bhb.loop8, "ax", %progbits
- .reloc .text, R_ARM_NONE, .
+ RELOC_TEXT_NONE
W(b) vector_rst
W(b) vector_bhb_loop8_und
ARM( .reloc ., R_ARM_LDR_PC_G0, .L__vector_bhb_loop8_swi )
@@ -1092,7 +1098,7 @@ THUMB( .reloc ., R_ARM_THM_PC12,
.L__vector_bhb_loop8_swi )
W(b) vector_bhb_loop8_fiq
.section .vectors.bhb.bpiall, "ax", %progbits
- .reloc .text, R_ARM_NONE, .
+ RELOC_TEXT_NONE
W(b) vector_rst
W(b) vector_bhb_bpiall_und
ARM( .reloc ., R_ARM_LDR_PC_G0, .L__vector_bhb_bpiall_swi )
> Thanks,
> Warm Regards,
> Harith
>>
>> 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
>
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2024-08-08 8:43 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-08-07 5:12 [build fail] v6.11-rc2 from "ARM: 9404/1: arm32: enable HAVE_LD_DEAD_CODE_DATA_ELIMINATION" Harith George
2024-08-07 6:42 ` liuyuntao (F)
2024-08-07 9:49 ` liuyuntao (F)
2024-08-07 11:51 ` Harith George
2024-08-07 15:22 ` liuyuntao (F)
2024-08-07 15:36 ` Harith George
2024-08-07 15:41 ` Arnd Bergmann
2024-08-07 15:47 ` liuyuntao (F)
2024-08-07 15:48 ` Harith George
2024-08-08 8:43 ` liuyuntao (F)
2024-08-08 8:31 ` liuyuntao (F)
2024-08-07 10:10 ` Arnd Bergmann
2024-08-07 11:21 ` Harith George
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®