* Re: [PATCH] kbuild: Fix lto build issue for aarch64
[not found] <20250130222208.4109974-1-yonghong.song@linux.dev>
@ 2025-01-31 14:08 ` Masahiro Yamada
2025-01-31 17:03 ` Yonghong Song
0 siblings, 1 reply; 2+ messages in thread
From: Masahiro Yamada @ 2025-01-31 14:08 UTC (permalink / raw)
To: Yonghong Song
Cc: linux-kbuild, Borislav Petkov, Josh Poimboeuf, kernel-team,
Marco Elver, Nathan Chancellor, Nikolay Borisov, Paul Menzel,
Song Liu
On Fri, Jan 31, 2025 at 7:25 AM Yonghong Song <yonghong.song@linux.dev> wrote:
>
> Commit bede169618c6 ("kbuild: enable objtool for *.mod.o and additional kernel objects")
> added objtool support for various files like *.mod.o, vmlinux.export.o, etc.
> But unfortunately it also breaks lto build for aarch64 where a common source file,
> e.g., kernel/bpf/syscall.c, is compiled with command:
> clang ... -flto=thin ... -c -o kernel/bpf/syscall.o /home/yhs/work/bpf-next/kernel/bpf/syscall.c ;
> ld.lld -EL -maarch64elf -z norelro -mllvm -import-instr-limit=5 -z noexecstack \
> -r -o kernel/bpf/.tmp_syscall.o kernel/bpf/syscall.o;
> mv kernel/bpf/.tmp_syscall.o kernel/bpf/syscall.o
>
> The above command line completely destroyed thin-lto since file kernel/bpf/syscall.o
> is expected to be a llvm bitcode file and later ld.lld can do cross-file inlining.
>
> The issue has been reported in [1] and Masahiro actually provided a suggested fix.
> But unfortunately that suggested fix does not work.
Thanks for the report, but your patch does not fix the real issue.
I think my original [1] worked, although it was a bit redundant
(extra $(LD) is executed where it is unnecessary).
> This patch made improvement on top of [2] and the issue for aarch64 lto is fixed.
> The x86_64 is also tested without any issue.
You are not fixing the issue.
You are just disabling objtool (i.e. reverting bede169618c6).
>
> In [1], commit 1b466b29a3bf ("kbuild: re-enable KCSAN for autogenerated *.mod.c intermediaries")
> enabled kcsan for *.mod.c files. This patch actually disabled that.
> Should we revert commit 1b466b29a3bf as well?
No.
I do not want to revert 1b466b29a3bf.
If 1b466b29a3bf were reverted, there would be no point
in applying bede169618c6.
>
> [1] https://lore.kernel.org/lkml/20241113234526.402738-1-masahiroy@kernel.org/
> [2] https://lore.kernel.org/lkml/CAK7LNATpu5zYwx7kmaknsPGLXt8n8uCXyFpdi5vZeFZiBxYkGw@mail.gmail.com/
>
> Fixes: bede169618c6 ("kbuild: enable objtool for *.mod.o and additional kernel objects")
> Signed-off-by: Yonghong Song <yonghong.song@linux.dev>
> ---
> scripts/Makefile.build | 2 ++
> scripts/Makefile.lib | 4 +---
> 2 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/scripts/Makefile.build b/scripts/Makefile.build
> index c16e4cf54d77..e9ae38b71a08 100644
> --- a/scripts/Makefile.build
> +++ b/scripts/Makefile.build
> @@ -129,6 +129,8 @@ $(obj)/%.ll: $(obj)/%.c FORCE
>
> is-single-obj-m = $(and $(part-of-module),$(filter $@, $(obj-m)),y)
>
> +need-ld-single = $(is-single-obj-m)
> +
> ifdef CONFIG_MODVERSIONS
> # When module versioning is enabled the following steps are executed:
> # o compile a <file>.o from <file>.c
> diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
> index 7395200538da..f04672bfe068 100644
> --- a/scripts/Makefile.lib
> +++ b/scripts/Makefile.lib
> @@ -302,11 +302,9 @@ endef
> # ===========================================================================
> # These are shared by some Makefile.* files.
>
> -objtool-enabled := y
> -
This is wrong.
You are simply disabling objtool for *.mod.o
I am pretty sure the problem reported by 54babdc
will come back.
I submitted a proper fix.
> ifdef CONFIG_LTO_CLANG
> # objtool cannot process LLVM IR. Make $(LD) covert LLVM IR to ELF here.
> -cmd_ld_single = $(if $(objtool-enabled), ; $(LD) $(ld_flags) -r -o $(tmp-target) $@; mv $(tmp-target) $@)
> +cmd_ld_single = $(if $(need-ld-single), ; $(LD) $(ld_flags) -r -o $(tmp-target) $@; mv $(tmp-target) $@)
> endif
>
> quiet_cmd_cc_o_c = CC $(quiet_modtag) $@
> --
> 2.43.5
>
--
Best Regards
Masahiro Yamada
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] kbuild: Fix lto build issue for aarch64
2025-01-31 14:08 ` [PATCH] kbuild: Fix lto build issue for aarch64 Masahiro Yamada
@ 2025-01-31 17:03 ` Yonghong Song
0 siblings, 0 replies; 2+ messages in thread
From: Yonghong Song @ 2025-01-31 17:03 UTC (permalink / raw)
To: Masahiro Yamada
Cc: linux-kbuild, Borislav Petkov, Josh Poimboeuf, kernel-team,
Marco Elver, Nathan Chancellor, Nikolay Borisov, Paul Menzel,
Song Liu
On 1/31/25 6:08 AM, Masahiro Yamada wrote:
> On Fri, Jan 31, 2025 at 7:25 AM Yonghong Song <yonghong.song@linux.dev> wrote:
>> Commit bede169618c6 ("kbuild: enable objtool for *.mod.o and additional kernel objects")
>> added objtool support for various files like *.mod.o, vmlinux.export.o, etc.
>> But unfortunately it also breaks lto build for aarch64 where a common source file,
>> e.g., kernel/bpf/syscall.c, is compiled with command:
>> clang ... -flto=thin ... -c -o kernel/bpf/syscall.o /home/yhs/work/bpf-next/kernel/bpf/syscall.c ;
>> ld.lld -EL -maarch64elf -z norelro -mllvm -import-instr-limit=5 -z noexecstack \
>> -r -o kernel/bpf/.tmp_syscall.o kernel/bpf/syscall.o;
>> mv kernel/bpf/.tmp_syscall.o kernel/bpf/syscall.o
>>
>> The above command line completely destroyed thin-lto since file kernel/bpf/syscall.o
>> is expected to be a llvm bitcode file and later ld.lld can do cross-file inlining.
>>
>> The issue has been reported in [1] and Masahiro actually provided a suggested fix.
>> But unfortunately that suggested fix does not work.
> Thanks for the report, but your patch does not fix the real issue.
>
> I think my original [1] worked, although it was a bit redundant
> (extra $(LD) is executed where it is unnecessary).
>
>
>> This patch made improvement on top of [2] and the issue for aarch64 lto is fixed.
>> The x86_64 is also tested without any issue.
> You are not fixing the issue.
> You are just disabling objtool (i.e. reverting bede169618c6).
You are correct. Essentially my patch just reverted bede169618c6
since I am not familar with Makefile.build and Makefile.lib so
won't be able to come up with a proper solution.
>
>
>> In [1], commit 1b466b29a3bf ("kbuild: re-enable KCSAN for autogenerated *.mod.c intermediaries")
>> enabled kcsan for *.mod.c files. This patch actually disabled that.
>> Should we revert commit 1b466b29a3bf as well?
> No.
> I do not want to revert 1b466b29a3bf.
>
> If 1b466b29a3bf were reverted, there would be no point
> in applying bede169618c6.
>
>
>> [1] https://lore.kernel.org/lkml/20241113234526.402738-1-masahiroy@kernel.org/
>> [2] https://lore.kernel.org/lkml/CAK7LNATpu5zYwx7kmaknsPGLXt8n8uCXyFpdi5vZeFZiBxYkGw@mail.gmail.com/
>>
>> Fixes: bede169618c6 ("kbuild: enable objtool for *.mod.o and additional kernel objects")
>> Signed-off-by: Yonghong Song <yonghong.song@linux.dev>
>> ---
>> scripts/Makefile.build | 2 ++
>> scripts/Makefile.lib | 4 +---
>> 2 files changed, 3 insertions(+), 3 deletions(-)
>>
>> diff --git a/scripts/Makefile.build b/scripts/Makefile.build
>> index c16e4cf54d77..e9ae38b71a08 100644
>> --- a/scripts/Makefile.build
>> +++ b/scripts/Makefile.build
>> @@ -129,6 +129,8 @@ $(obj)/%.ll: $(obj)/%.c FORCE
>>
>> is-single-obj-m = $(and $(part-of-module),$(filter $@, $(obj-m)),y)
>>
>> +need-ld-single = $(is-single-obj-m)
>> +
>> ifdef CONFIG_MODVERSIONS
>> # When module versioning is enabled the following steps are executed:
>> # o compile a <file>.o from <file>.c
>> diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
>> index 7395200538da..f04672bfe068 100644
>> --- a/scripts/Makefile.lib
>> +++ b/scripts/Makefile.lib
>> @@ -302,11 +302,9 @@ endef
>> # ===========================================================================
>> # These are shared by some Makefile.* files.
>>
>> -objtool-enabled := y
>> -
> This is wrong.
>
> You are simply disabling objtool for *.mod.o
>
> I am pretty sure the problem reported by 54babdc
> will come back.
>
>
> I submitted a proper fix.
I tested the patch with arm64/x86_64 + lto/no-lto. Everything works fine.
I have replied with my Tested-by tag. Thanks!
>
>
>
>> ifdef CONFIG_LTO_CLANG
>> # objtool cannot process LLVM IR. Make $(LD) covert LLVM IR to ELF here.
>> -cmd_ld_single = $(if $(objtool-enabled), ; $(LD) $(ld_flags) -r -o $(tmp-target) $@; mv $(tmp-target) $@)
>> +cmd_ld_single = $(if $(need-ld-single), ; $(LD) $(ld_flags) -r -o $(tmp-target) $@; mv $(tmp-target) $@)
>> endif
>>
>> quiet_cmd_cc_o_c = CC $(quiet_modtag) $@
>> --
>> 2.43.5
>>
>
> --
> Best Regards
>
> Masahiro Yamada
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2025-01-31 17:03 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20250130222208.4109974-1-yonghong.song@linux.dev>
2025-01-31 14:08 ` [PATCH] kbuild: Fix lto build issue for aarch64 Masahiro Yamada
2025-01-31 17:03 ` Yonghong Song
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox