rust-for-linux.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v1 0/2] Fix objtool warnings with RUST on LoongArch
@ 2025-09-09  9:27 Tiezhu Yang
  2025-09-09  9:27 ` [PATCH v1 1/2] LoongArch: Make LTO case independent in Makefile Tiezhu Yang
                   ` (2 more replies)
  0 siblings, 3 replies; 15+ messages in thread
From: Tiezhu Yang @ 2025-09-09  9:27 UTC (permalink / raw)
  To: Huacai Chen, Miguel Ojeda
  Cc: WANG Rui, rust-for-linux, loongarch, linux-kernel

This series is to fix objtool warnings when compiling with LLVM and
CONFIG_RUST is set, thanks WANG Rui and Miguel for your suggestions
about RUST.

The second patch uses the option -Zno-jump-tables, here is a related
discussion:

https://github.com/rust-lang/rust/pull/145974#issuecomment-3236418282

Tiezhu Yang (2):
  LoongArch: Make LTO case independent in Makefile
  LoongArch: Handle jump tables option for RUST

 arch/loongarch/Kconfig  |  4 ++++
 arch/loongarch/Makefile | 16 +++++++++++-----
 2 files changed, 15 insertions(+), 5 deletions(-)

-- 
2.42.0


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [PATCH v1 1/2] LoongArch: Make LTO case independent in Makefile
  2025-09-09  9:27 [PATCH v1 0/2] Fix objtool warnings with RUST on LoongArch Tiezhu Yang
@ 2025-09-09  9:27 ` Tiezhu Yang
  2025-09-20  6:15   ` Nathan Chancellor
  2025-09-09  9:27 ` [PATCH v1 2/2] LoongArch: Handle jump tables option for RUST Tiezhu Yang
  2025-09-18  9:15 ` [PATCH v1 0/2] Fix objtool warnings with RUST on LoongArch Huacai Chen
  2 siblings, 1 reply; 15+ messages in thread
From: Tiezhu Yang @ 2025-09-09  9:27 UTC (permalink / raw)
  To: Huacai Chen, Miguel Ojeda
  Cc: WANG Rui, rust-for-linux, loongarch, linux-kernel

LTO is not only used for Clang, it maybe used for Rust, make LTO case out
of CONFIG_CC_HAS_ANNOTATE_TABLEJUMP in Makefile.

This is preparation for later patch, no function changes.

Suggested-by: WANG Rui <wangrui@loongson.cn>
Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
---
 arch/loongarch/Makefile | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/arch/loongarch/Makefile b/arch/loongarch/Makefile
index a3a9759414f4..9d80af7f75c8 100644
--- a/arch/loongarch/Makefile
+++ b/arch/loongarch/Makefile
@@ -102,16 +102,16 @@ KBUILD_CFLAGS			+= $(call cc-option,-mthin-add-sub) $(call cc-option,-Wa$(comma)
 
 ifdef CONFIG_OBJTOOL
 ifdef CONFIG_CC_HAS_ANNOTATE_TABLEJUMP
+KBUILD_CFLAGS			+= -mannotate-tablejump
+else
+KBUILD_CFLAGS			+= -fno-jump-tables # keep compatibility with older compilers
+endif
+ifdef CONFIG_LTO_CLANG
 # The annotate-tablejump option can not be passed to LLVM backend when LTO is enabled.
 # Ensure it is aware of linker with LTO, '--loongarch-annotate-tablejump' also needs to
 # be passed via '-mllvm' to ld.lld.
-KBUILD_CFLAGS			+= -mannotate-tablejump
-ifdef CONFIG_LTO_CLANG
 KBUILD_LDFLAGS			+= -mllvm --loongarch-annotate-tablejump
 endif
-else
-KBUILD_CFLAGS			+= -fno-jump-tables # keep compatibility with older compilers
-endif
 endif
 
 KBUILD_RUSTFLAGS		+= --target=loongarch64-unknown-none-softfloat -Ccode-model=small
-- 
2.42.0


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v1 2/2] LoongArch: Handle jump tables option for RUST
  2025-09-09  9:27 [PATCH v1 0/2] Fix objtool warnings with RUST on LoongArch Tiezhu Yang
  2025-09-09  9:27 ` [PATCH v1 1/2] LoongArch: Make LTO case independent in Makefile Tiezhu Yang
@ 2025-09-09  9:27 ` Tiezhu Yang
  2025-09-09 10:16   ` Miguel Ojeda
  2025-09-18  9:15 ` [PATCH v1 0/2] Fix objtool warnings with RUST on LoongArch Huacai Chen
  2 siblings, 1 reply; 15+ messages in thread
From: Tiezhu Yang @ 2025-09-09  9:27 UTC (permalink / raw)
  To: Huacai Chen, Miguel Ojeda
  Cc: WANG Rui, rust-for-linux, loongarch, linux-kernel

When compiling with LLVM and CONFIG_RUST is set, there exist objtool
warnings in rust/core.o and rust/kernel.o, like this:

    rust/core.o: warning: objtool:
_RNvXs1_NtNtCs5QSdWC790r4_4core5ascii10ascii_charNtB5_9AsciiCharNtNtB9_3fmt5Debug3fmt+0x54:
sibling call from callable instruction with modified stack frame

For this special case, the related object file shows that there is no
generated relocation section '.rela.discard.tablejump_annotate' for the
table jump instruction jirl, thus objtool can not know that what is the
actual destination address.

If the rustc has the option "-Cllvm-args=--loongarch-annotate-tablejump",
pass the option to enable jump tables for objtool, otherwise it should
pass "-Zno-jump-tables" to keep compatibility with older rustc.

How to test:

  $ rustup component add rust-src
  $ make LLVM=1 rustavailable
  $ make ARCH=loongarch LLVM=1 clean defconfig
  $ scripts/config -d MODVERSIONS \
    -e RUST -e SAMPLES -e SAMPLES_RUST \
    -e SAMPLE_RUST_CONFIGFS -e SAMPLE_RUST_MINIMAL \
    -e SAMPLE_RUST_MISC_DEVICE -e SAMPLE_RUST_PRINT \
    -e SAMPLE_RUST_DMA -e SAMPLE_RUST_DRIVER_PCI \
    -e SAMPLE_RUST_DRIVER_PLATFORM -e SAMPLE_RUST_DRIVER_FAUX \
    -e SAMPLE_RUST_DRIVER_AUXILIARY -e SAMPLE_RUST_HOSTPROGS
  $ make ARCH=loongarch LLVM=1 olddefconfig all

Reported-by: Miguel Ojeda <ojeda@kernel.org>
Closes: https://lore.kernel.org/rust-for-linux/CANiq72mNeCuPkCDrG2db3w=AX+O-zYrfprisDPmRac_qh65Dmg@mail.gmail.com/
Suggested-by: WANG Rui <wangrui@loongson.cn>
Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
---
 arch/loongarch/Kconfig  | 4 ++++
 arch/loongarch/Makefile | 6 ++++++
 2 files changed, 10 insertions(+)

diff --git a/arch/loongarch/Kconfig b/arch/loongarch/Kconfig
index f0abc38c40ac..57933a717e92 100644
--- a/arch/loongarch/Kconfig
+++ b/arch/loongarch/Kconfig
@@ -298,6 +298,10 @@ config AS_HAS_LVZ_EXTENSION
 config CC_HAS_ANNOTATE_TABLEJUMP
 	def_bool $(cc-option,-mannotate-tablejump)
 
+config RUSTC_HAS_ANNOTATE_TABLEJUMP
+	depends on RUST
+	def_bool $(rustc-option,-Cllvm-args=--loongarch-annotate-tablejump)
+
 menu "Kernel type and options"
 
 source "kernel/Kconfig.hz"
diff --git a/arch/loongarch/Makefile b/arch/loongarch/Makefile
index 9d80af7f75c8..b26d47707031 100644
--- a/arch/loongarch/Makefile
+++ b/arch/loongarch/Makefile
@@ -106,6 +106,12 @@ KBUILD_CFLAGS			+= -mannotate-tablejump
 else
 KBUILD_CFLAGS			+= -fno-jump-tables # keep compatibility with older compilers
 endif
+ifdef CONFIG_RUSTC_HAS_ANNOTATE_TABLEJUMP
+# Pass '--loongarch-annotate-tablejump' via '-Cllvm-args' to rustc when RUST is enabled.
+KBUILD_RUSTFLAGS		+= -Cllvm-args=--loongarch-annotate-tablejump
+else
+KBUILD_RUSTFLAGS		+= -Zno-jump-tables # keep compatibility with older compilers
+endif
 ifdef CONFIG_LTO_CLANG
 # The annotate-tablejump option can not be passed to LLVM backend when LTO is enabled.
 # Ensure it is aware of linker with LTO, '--loongarch-annotate-tablejump' also needs to
-- 
2.42.0


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: [PATCH v1 2/2] LoongArch: Handle jump tables option for RUST
  2025-09-09  9:27 ` [PATCH v1 2/2] LoongArch: Handle jump tables option for RUST Tiezhu Yang
@ 2025-09-09 10:16   ` Miguel Ojeda
  2025-09-09 18:06     ` Matthew Maurer
  0 siblings, 1 reply; 15+ messages in thread
From: Miguel Ojeda @ 2025-09-09 10:16 UTC (permalink / raw)
  To: Tiezhu Yang, Matthew Maurer
  Cc: Huacai Chen, Miguel Ojeda, WANG Rui, rust-for-linux, loongarch,
	linux-kernel

On Tue, Sep 9, 2025 at 11:27 AM Tiezhu Yang <yangtiezhu@loongson.cn> wrote:
>
> +config RUSTC_HAS_ANNOTATE_TABLEJUMP
> +       depends on RUST
> +       def_bool $(rustc-option,-Cllvm-args=--loongarch-annotate-tablejump)

I am not sure if this needs the `depends on` -- from a quick test, it
seems to run regardless of it (and your `ifdef` below doesn't care
either). Cc'ing Matthew in case he remembers why the docs mention that
the Kconfig one should be guarded by `RUST_IS_AVAILABLE`.

In any case, it shouldn't hurt and it is only on the LoongArch Makefile.

If you will be taking this through the LoongArch tree:

Acked-by: Miguel Ojeda <ojeda@kernel.org>

Thanks again for fixing this!

Cheers,
Miguel

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v1 2/2] LoongArch: Handle jump tables option for RUST
  2025-09-09 10:16   ` Miguel Ojeda
@ 2025-09-09 18:06     ` Matthew Maurer
  2025-09-09 20:14       ` Miguel Ojeda
  0 siblings, 1 reply; 15+ messages in thread
From: Matthew Maurer @ 2025-09-09 18:06 UTC (permalink / raw)
  To: Miguel Ojeda
  Cc: Tiezhu Yang, Huacai Chen, Miguel Ojeda, WANG Rui, rust-for-linux,
	loongarch, linux-kernel

On Tue, Sep 9, 2025 at 3:16 AM Miguel Ojeda
<miguel.ojeda.sandonis@gmail.com> wrote:
>
> On Tue, Sep 9, 2025 at 11:27 AM Tiezhu Yang <yangtiezhu@loongson.cn> wrote:
> >
> > +config RUSTC_HAS_ANNOTATE_TABLEJUMP
> > +       depends on RUST
> > +       def_bool $(rustc-option,-Cllvm-args=--loongarch-annotate-tablejump)
>
> I am not sure if this needs the `depends on` -- from a quick test, it
> seems to run regardless of it (and your `ifdef` below doesn't care
> either). Cc'ing Matthew in case he remembers why the docs mention that
> the Kconfig one should be guarded by `RUST_IS_AVAILABLE`.

I think this isn't needed. I added it initially because Kconfig was
dying when `rustc` was not on the path, but I'm not sure how I managed
that, since `success,trap` should guard against that (perhaps I was
doing something wrong in earlier development, fixed it, and didn't
remove the restriction). I have tested `rustc-option` with an
intentionally missing `rustc`, and Kconfig doesn't seem to be taken
down (and it gets a no answer), so the change to the macro means that
doc warning should be removed.

>
> In any case, it shouldn't hurt and it is only on the LoongArch Makefile.
>
> If you will be taking this through the LoongArch tree:
>
> Acked-by: Miguel Ojeda <ojeda@kernel.org>
>
> Thanks again for fixing this!
>
> Cheers,
> Miguel

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v1 2/2] LoongArch: Handle jump tables option for RUST
  2025-09-09 18:06     ` Matthew Maurer
@ 2025-09-09 20:14       ` Miguel Ojeda
  0 siblings, 0 replies; 15+ messages in thread
From: Miguel Ojeda @ 2025-09-09 20:14 UTC (permalink / raw)
  To: Matthew Maurer
  Cc: Tiezhu Yang, Huacai Chen, Miguel Ojeda, WANG Rui, rust-for-linux,
	loongarch, linux-kernel

On Tue, Sep 9, 2025 at 8:06 PM Matthew Maurer <mmaurer@google.com> wrote:
>
> I think this isn't needed. I added it initially because Kconfig was
> dying when `rustc` was not on the path, but I'm not sure how I managed
> that, since `success,trap` should guard against that (perhaps I was
> doing something wrong in earlier development, fixed it, and didn't
> remove the restriction). I have tested `rustc-option` with an
> intentionally missing `rustc`, and Kconfig doesn't seem to be taken
> down (and it gets a no answer), so the change to the macro means that
> doc warning should be removed.

Yeah, that matches my test then, thanks! (and for the patch)

Cheers,
Miguel

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v1 0/2] Fix objtool warnings with RUST on LoongArch
  2025-09-09  9:27 [PATCH v1 0/2] Fix objtool warnings with RUST on LoongArch Tiezhu Yang
  2025-09-09  9:27 ` [PATCH v1 1/2] LoongArch: Make LTO case independent in Makefile Tiezhu Yang
  2025-09-09  9:27 ` [PATCH v1 2/2] LoongArch: Handle jump tables option for RUST Tiezhu Yang
@ 2025-09-18  9:15 ` Huacai Chen
  2 siblings, 0 replies; 15+ messages in thread
From: Huacai Chen @ 2025-09-18  9:15 UTC (permalink / raw)
  To: Tiezhu Yang
  Cc: Miguel Ojeda, WANG Rui, rust-for-linux, loongarch, linux-kernel

Applied, thanks.

Huacai

On Tue, Sep 9, 2025 at 5:27 PM Tiezhu Yang <yangtiezhu@loongson.cn> wrote:
>
> This series is to fix objtool warnings when compiling with LLVM and
> CONFIG_RUST is set, thanks WANG Rui and Miguel for your suggestions
> about RUST.
>
> The second patch uses the option -Zno-jump-tables, here is a related
> discussion:
>
> https://github.com/rust-lang/rust/pull/145974#issuecomment-3236418282
>
> Tiezhu Yang (2):
>   LoongArch: Make LTO case independent in Makefile
>   LoongArch: Handle jump tables option for RUST
>
>  arch/loongarch/Kconfig  |  4 ++++
>  arch/loongarch/Makefile | 16 +++++++++++-----
>  2 files changed, 15 insertions(+), 5 deletions(-)
>
> --
> 2.42.0
>

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v1 1/2] LoongArch: Make LTO case independent in Makefile
  2025-09-09  9:27 ` [PATCH v1 1/2] LoongArch: Make LTO case independent in Makefile Tiezhu Yang
@ 2025-09-20  6:15   ` Nathan Chancellor
  2025-09-20  8:23     ` Huacai Chen
  0 siblings, 1 reply; 15+ messages in thread
From: Nathan Chancellor @ 2025-09-20  6:15 UTC (permalink / raw)
  To: Tiezhu Yang
  Cc: Huacai Chen, Miguel Ojeda, WANG Rui, rust-for-linux, loongarch,
	linux-kernel, llvm

Hi Tiezhu,

On Tue, Sep 09, 2025 at 05:27:06PM +0800, Tiezhu Yang wrote:
> LTO is not only used for Clang, it maybe used for Rust, make LTO case out
> of CONFIG_CC_HAS_ANNOTATE_TABLEJUMP in Makefile.
> 
> This is preparation for later patch, no function changes.
> 
> Suggested-by: WANG Rui <wangrui@loongson.cn>
> Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
> ---
>  arch/loongarch/Makefile | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/arch/loongarch/Makefile b/arch/loongarch/Makefile
> index a3a9759414f4..9d80af7f75c8 100644
> --- a/arch/loongarch/Makefile
> +++ b/arch/loongarch/Makefile
> @@ -102,16 +102,16 @@ KBUILD_CFLAGS			+= $(call cc-option,-mthin-add-sub) $(call cc-option,-Wa$(comma)
>  
>  ifdef CONFIG_OBJTOOL
>  ifdef CONFIG_CC_HAS_ANNOTATE_TABLEJUMP
> +KBUILD_CFLAGS			+= -mannotate-tablejump
> +else
> +KBUILD_CFLAGS			+= -fno-jump-tables # keep compatibility with older compilers
> +endif
> +ifdef CONFIG_LTO_CLANG
>  # The annotate-tablejump option can not be passed to LLVM backend when LTO is enabled.
>  # Ensure it is aware of linker with LTO, '--loongarch-annotate-tablejump' also needs to
>  # be passed via '-mllvm' to ld.lld.
> -KBUILD_CFLAGS			+= -mannotate-tablejump
> -ifdef CONFIG_LTO_CLANG
>  KBUILD_LDFLAGS			+= -mllvm --loongarch-annotate-tablejump
>  endif
> -else
> -KBUILD_CFLAGS			+= -fno-jump-tables # keep compatibility with older compilers
> -endif
>  endif
>  
>  KBUILD_RUSTFLAGS		+= --target=loongarch64-unknown-none-softfloat -Ccode-model=small
> -- 
> 2.42.0
> 

This change is now in -next as commit b15212824a01 ("LoongArch: Make LTO
case independent in Makefile"), where it breaks the build for clang-18,
as '--loongarch-annotate-tablejump' is unimplemented there but there is
no version check before using it.

  $ make -skj"$(nproc)" ARCH=loongarch LLVM=1 mrproper defconfig

  $ scripts/config -d LTO_NONE -e LTO_CLANG_THIN

  $ make -skj"$(nproc)" ARCH=loongarch LLVM=1 olddefconfig vmlinuz.efi
  ld.lld: error: -mllvm: ld.lld: Unknown command line argument '--loongarch-annotate-tablejump'.
  ...

  $ scripts/config -s CC_HAS_ANNOTATE_TABLEJUMP
  undef

Cheers,
Nathan

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v1 1/2] LoongArch: Make LTO case independent in Makefile
  2025-09-20  6:15   ` Nathan Chancellor
@ 2025-09-20  8:23     ` Huacai Chen
  2025-09-20  9:19       ` Tiezhu Yang
  0 siblings, 1 reply; 15+ messages in thread
From: Huacai Chen @ 2025-09-20  8:23 UTC (permalink / raw)
  To: Nathan Chancellor
  Cc: Tiezhu Yang, Miguel Ojeda, WANG Rui, rust-for-linux, loongarch,
	linux-kernel, llvm

On Sat, Sep 20, 2025 at 2:15 PM Nathan Chancellor <nathan@kernel.org> wrote:
>
> Hi Tiezhu,
>
> On Tue, Sep 09, 2025 at 05:27:06PM +0800, Tiezhu Yang wrote:
> > LTO is not only used for Clang, it maybe used for Rust, make LTO case out
> > of CONFIG_CC_HAS_ANNOTATE_TABLEJUMP in Makefile.
> >
> > This is preparation for later patch, no function changes.
> >
> > Suggested-by: WANG Rui <wangrui@loongson.cn>
> > Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
> > ---
> >  arch/loongarch/Makefile | 10 +++++-----
> >  1 file changed, 5 insertions(+), 5 deletions(-)
> >
> > diff --git a/arch/loongarch/Makefile b/arch/loongarch/Makefile
> > index a3a9759414f4..9d80af7f75c8 100644
> > --- a/arch/loongarch/Makefile
> > +++ b/arch/loongarch/Makefile
> > @@ -102,16 +102,16 @@ KBUILD_CFLAGS                   += $(call cc-option,-mthin-add-sub) $(call cc-option,-Wa$(comma)
> >
> >  ifdef CONFIG_OBJTOOL
> >  ifdef CONFIG_CC_HAS_ANNOTATE_TABLEJUMP
> > +KBUILD_CFLAGS                        += -mannotate-tablejump
> > +else
> > +KBUILD_CFLAGS                        += -fno-jump-tables # keep compatibility with older compilers
> > +endif
> > +ifdef CONFIG_LTO_CLANG
> >  # The annotate-tablejump option can not be passed to LLVM backend when LTO is enabled.
> >  # Ensure it is aware of linker with LTO, '--loongarch-annotate-tablejump' also needs to
> >  # be passed via '-mllvm' to ld.lld.
> > -KBUILD_CFLAGS                        += -mannotate-tablejump
> > -ifdef CONFIG_LTO_CLANG
> >  KBUILD_LDFLAGS                       += -mllvm --loongarch-annotate-tablejump
> >  endif
> > -else
> > -KBUILD_CFLAGS                        += -fno-jump-tables # keep compatibility with older compilers
> > -endif
> >  endif
> >
> >  KBUILD_RUSTFLAGS             += --target=loongarch64-unknown-none-softfloat -Ccode-model=small
> > --
> > 2.42.0
> >
>
> This change is now in -next as commit b15212824a01 ("LoongArch: Make LTO
> case independent in Makefile"), where it breaks the build for clang-18,
> as '--loongarch-annotate-tablejump' is unimplemented there but there is
> no version check before using it.
>
>   $ make -skj"$(nproc)" ARCH=loongarch LLVM=1 mrproper defconfig
>
>   $ scripts/config -d LTO_NONE -e LTO_CLANG_THIN
>
>   $ make -skj"$(nproc)" ARCH=loongarch LLVM=1 olddefconfig vmlinuz.efi
>   ld.lld: error: -mllvm: ld.lld: Unknown command line argument '--loongarch-annotate-tablejump'.
>   ...
>
>   $ scripts/config -s CC_HAS_ANNOTATE_TABLEJUMP
>   undef
Hmm, maybe we need this?
diff --git a/arch/loongarch/Makefile b/arch/loongarch/Makefile
index ae419e32f22e..fcfa793f9bb0 100644
--- a/arch/loongarch/Makefile
+++ b/arch/loongarch/Makefile
@@ -115,7 +115,7 @@ ifdef CONFIG_LTO_CLANG
 # The annotate-tablejump option can not be passed to LLVM backend
when LTO is enabled.
 # Ensure it is aware of linker with LTO,
'--loongarch-annotate-tablejump' also needs to
 # be passed via '-mllvm' to ld.lld.
-KBUILD_LDFLAGS                 += -mllvm
--loongarch-annotate-tablejump
+KBUILD_LDFLAGS                 += $(call ld-option,-mllvm
--loongarch-annotate-tablejump)
 endif
 endif
>
> Cheers,
> Nathan

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: [PATCH v1 1/2] LoongArch: Make LTO case independent in Makefile
  2025-09-20  8:23     ` Huacai Chen
@ 2025-09-20  9:19       ` Tiezhu Yang
  2025-09-20 10:22         ` Tiezhu Yang
  0 siblings, 1 reply; 15+ messages in thread
From: Tiezhu Yang @ 2025-09-20  9:19 UTC (permalink / raw)
  To: Huacai Chen, Nathan Chancellor
  Cc: Miguel Ojeda, WANG Rui, rust-for-linux, loongarch, linux-kernel,
	llvm

On 9/20/25 16:23, Huacai Chen wrote:
> On Sat, Sep 20, 2025 at 2:15 PM Nathan Chancellor <nathan@kernel.org> wrote:
>>
>> Hi Tiezhu,
>>
>> On Tue, Sep 09, 2025 at 05:27:06PM +0800, Tiezhu Yang wrote:
>>> LTO is not only used for Clang, it maybe used for Rust, make LTO case out
>>> of CONFIG_CC_HAS_ANNOTATE_TABLEJUMP in Makefile.
>>>
>>> This is preparation for later patch, no function changes.
>>>
>>> Suggested-by: WANG Rui <wangrui@loongson.cn>
>>> Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
>>> ---
>>>   arch/loongarch/Makefile | 10 +++++-----
>>>   1 file changed, 5 insertions(+), 5 deletions(-)
>>>
>>> diff --git a/arch/loongarch/Makefile b/arch/loongarch/Makefile
>>> index a3a9759414f4..9d80af7f75c8 100644
>>> --- a/arch/loongarch/Makefile
>>> +++ b/arch/loongarch/Makefile
>>> @@ -102,16 +102,16 @@ KBUILD_CFLAGS                   += $(call cc-option,-mthin-add-sub) $(call cc-option,-Wa$(comma)
>>>
>>>   ifdef CONFIG_OBJTOOL
>>>   ifdef CONFIG_CC_HAS_ANNOTATE_TABLEJUMP
>>> +KBUILD_CFLAGS                        += -mannotate-tablejump
>>> +else
>>> +KBUILD_CFLAGS                        += -fno-jump-tables # keep compatibility with older compilers
>>> +endif
>>> +ifdef CONFIG_LTO_CLANG
>>>   # The annotate-tablejump option can not be passed to LLVM backend when LTO is enabled.
>>>   # Ensure it is aware of linker with LTO, '--loongarch-annotate-tablejump' also needs to
>>>   # be passed via '-mllvm' to ld.lld.
>>> -KBUILD_CFLAGS                        += -mannotate-tablejump
>>> -ifdef CONFIG_LTO_CLANG
>>>   KBUILD_LDFLAGS                       += -mllvm --loongarch-annotate-tablejump
>>>   endif
>>> -else
>>> -KBUILD_CFLAGS                        += -fno-jump-tables # keep compatibility with older compilers
>>> -endif
>>>   endif
>>>
>>>   KBUILD_RUSTFLAGS             += --target=loongarch64-unknown-none-softfloat -Ccode-model=small
>>> --
>>> 2.42.0
>>>
>>
>> This change is now in -next as commit b15212824a01 ("LoongArch: Make LTO
>> case independent in Makefile"), where it breaks the build for clang-18,
>> as '--loongarch-annotate-tablejump' is unimplemented there but there is
>> no version check before using it.
>>
>>    $ make -skj"$(nproc)" ARCH=loongarch LLVM=1 mrproper defconfig
>>
>>    $ scripts/config -d LTO_NONE -e LTO_CLANG_THIN
>>
>>    $ make -skj"$(nproc)" ARCH=loongarch LLVM=1 olddefconfig vmlinuz.efi
>>    ld.lld: error: -mllvm: ld.lld: Unknown command line argument '--loongarch-annotate-tablejump'.
>>    ...
>>
>>    $ scripts/config -s CC_HAS_ANNOTATE_TABLEJUMP
>>    undef
> Hmm, maybe we need this?
> diff --git a/arch/loongarch/Makefile b/arch/loongarch/Makefile
> index ae419e32f22e..fcfa793f9bb0 100644
> --- a/arch/loongarch/Makefile
> +++ b/arch/loongarch/Makefile
> @@ -115,7 +115,7 @@ ifdef CONFIG_LTO_CLANG
>   # The annotate-tablejump option can not be passed to LLVM backend
> when LTO is enabled.
>   # Ensure it is aware of linker with LTO,
> '--loongarch-annotate-tablejump' also needs to
>   # be passed via '-mllvm' to ld.lld.
> -KBUILD_LDFLAGS                 += -mllvm
> --loongarch-annotate-tablejump
> +KBUILD_LDFLAGS                 += $(call ld-option,-mllvm
> --loongarch-annotate-tablejump)
>   endif
>   endif

We need to handle the other case to use -fno-jump-tables if llvm does
not support -loongarch-annotate-tablejump.

So, it is better to update the minimal version of llvm to 20, which
includes the following two important commits:

[LoongArch] Add options for annotate tablejump
https://github.com/llvm/llvm-project/commit/4c2c17756739

[LoongArch] Avoid indirect branch jumps using the ra register
https://github.com/llvm/llvm-project/commit/21ef17c62645

If you are OK, I will send a patch to modify the following file:

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/scripts/min-tool-version.sh#n29

and keep arch/loongarch/Makefile as is.

Thanks,
Tiezhu


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v1 1/2] LoongArch: Make LTO case independent in Makefile
  2025-09-20  9:19       ` Tiezhu Yang
@ 2025-09-20 10:22         ` Tiezhu Yang
  2025-09-20 11:41           ` Huacai Chen
  0 siblings, 1 reply; 15+ messages in thread
From: Tiezhu Yang @ 2025-09-20 10:22 UTC (permalink / raw)
  To: Huacai Chen, Nathan Chancellor
  Cc: Miguel Ojeda, WANG Rui, rust-for-linux, loongarch, linux-kernel,
	llvm

On 9/20/25 17:19, Tiezhu Yang wrote:
> On 9/20/25 16:23, Huacai Chen wrote:
>> On Sat, Sep 20, 2025 at 2:15 PM Nathan Chancellor <nathan@kernel.org> 
>> wrote:
>>>
>>> Hi Tiezhu,
>>>
>>> On Tue, Sep 09, 2025 at 05:27:06PM +0800, Tiezhu Yang wrote:
>>>> LTO is not only used for Clang, it maybe used for Rust, make LTO 
>>>> case out
>>>> of CONFIG_CC_HAS_ANNOTATE_TABLEJUMP in Makefile.
>>>>
>>>> This is preparation for later patch, no function changes.
>>>>
>>>> Suggested-by: WANG Rui <wangrui@loongson.cn>
>>>> Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
>>>> ---
>>>>   arch/loongarch/Makefile | 10 +++++-----
>>>>   1 file changed, 5 insertions(+), 5 deletions(-)
>>>>
>>>> diff --git a/arch/loongarch/Makefile b/arch/loongarch/Makefile
>>>> index a3a9759414f4..9d80af7f75c8 100644
>>>> --- a/arch/loongarch/Makefile
>>>> +++ b/arch/loongarch/Makefile
>>>> @@ -102,16 +102,16 @@ KBUILD_CFLAGS                   += $(call 
>>>> cc-option,-mthin-add-sub) $(call cc-option,-Wa$(comma)
>>>>
>>>>   ifdef CONFIG_OBJTOOL
>>>>   ifdef CONFIG_CC_HAS_ANNOTATE_TABLEJUMP
>>>> +KBUILD_CFLAGS                        += -mannotate-tablejump
>>>> +else
>>>> +KBUILD_CFLAGS                        += -fno-jump-tables # keep 
>>>> compatibility with older compilers
>>>> +endif
>>>> +ifdef CONFIG_LTO_CLANG
>>>>   # The annotate-tablejump option can not be passed to LLVM backend 
>>>> when LTO is enabled.
>>>>   # Ensure it is aware of linker with LTO, 
>>>> '--loongarch-annotate-tablejump' also needs to
>>>>   # be passed via '-mllvm' to ld.lld.
>>>> -KBUILD_CFLAGS                        += -mannotate-tablejump
>>>> -ifdef CONFIG_LTO_CLANG
>>>>   KBUILD_LDFLAGS                       += -mllvm 
>>>> --loongarch-annotate-tablejump
>>>>   endif
>>>> -else
>>>> -KBUILD_CFLAGS                        += -fno-jump-tables # keep 
>>>> compatibility with older compilers
>>>> -endif
>>>>   endif
>>>>
>>>>   KBUILD_RUSTFLAGS             += 
>>>> --target=loongarch64-unknown-none-softfloat -Ccode-model=small
>>>> -- 
>>>> 2.42.0
>>>>
>>>
>>> This change is now in -next as commit b15212824a01 ("LoongArch: Make LTO
>>> case independent in Makefile"), where it breaks the build for clang-18,
>>> as '--loongarch-annotate-tablejump' is unimplemented there but there is
>>> no version check before using it.
>>>
>>>    $ make -skj"$(nproc)" ARCH=loongarch LLVM=1 mrproper defconfig
>>>
>>>    $ scripts/config -d LTO_NONE -e LTO_CLANG_THIN
>>>
>>>    $ make -skj"$(nproc)" ARCH=loongarch LLVM=1 olddefconfig vmlinuz.efi
>>>    ld.lld: error: -mllvm: ld.lld: Unknown command line argument 
>>> '--loongarch-annotate-tablejump'.
>>>    ...
>>>
>>>    $ scripts/config -s CC_HAS_ANNOTATE_TABLEJUMP
>>>    undef
>> Hmm, maybe we need this?
>> diff --git a/arch/loongarch/Makefile b/arch/loongarch/Makefile
>> index ae419e32f22e..fcfa793f9bb0 100644
>> --- a/arch/loongarch/Makefile
>> +++ b/arch/loongarch/Makefile
>> @@ -115,7 +115,7 @@ ifdef CONFIG_LTO_CLANG
>>   # The annotate-tablejump option can not be passed to LLVM backend
>> when LTO is enabled.
>>   # Ensure it is aware of linker with LTO,
>> '--loongarch-annotate-tablejump' also needs to
>>   # be passed via '-mllvm' to ld.lld.
>> -KBUILD_LDFLAGS                 += -mllvm
>> --loongarch-annotate-tablejump
>> +KBUILD_LDFLAGS                 += $(call ld-option,-mllvm
>> --loongarch-annotate-tablejump)
>>   endif
>>   endif
> 
> We need to handle the other case to use -fno-jump-tables if llvm does
> not support -loongarch-annotate-tablejump.
> 
> So, it is better to update the minimal version of llvm to 20, which
> includes the following two important commits:
> 
> [LoongArch] Add options for annotate tablejump
> https://github.com/llvm/llvm-project/commit/4c2c17756739
> 
> [LoongArch] Avoid indirect branch jumps using the ra register
> https://github.com/llvm/llvm-project/commit/21ef17c62645
> 
> If you are OK, I will send a patch to modify the following file:
> 
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/scripts/min-tool-version.sh#n29 
> 
> 
> and keep arch/loongarch/Makefile as is.

The other way is to keep scripts/min-tool-version.sh as is, and only
modify arch/loongarch/Makefile, something like this (not tested):

config LLD_HAS_ANNOTATE_TABLEJUMP
	def_bool LLD_VERSION >= 200000

ifdef CONFIG_LTO_CLANG
ifdef CONFIG_LLD_HAS_ANNOTATE_TABLEJUMP
KBUILD_LDFLAGS			+= -mllvm --loongarch-annotate-tablejump
else
KBUILD_LDFLAGS			+= -mllvm --no-jump-tables
endif

Update the minimal llvm version or change Makefile to compat various
llvm versions, which one do you prefer? Pease let me know.

Thanks,
Tiezhu


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v1 1/2] LoongArch: Make LTO case independent in Makefile
  2025-09-20 10:22         ` Tiezhu Yang
@ 2025-09-20 11:41           ` Huacai Chen
  2025-09-20 12:52             ` Tiezhu Yang
  0 siblings, 1 reply; 15+ messages in thread
From: Huacai Chen @ 2025-09-20 11:41 UTC (permalink / raw)
  To: Tiezhu Yang
  Cc: Nathan Chancellor, Miguel Ojeda, WANG Rui, rust-for-linux,
	loongarch, linux-kernel, llvm

On Sat, Sep 20, 2025 at 6:22 PM Tiezhu Yang <yangtiezhu@loongson.cn> wrote:
>
> On 9/20/25 17:19, Tiezhu Yang wrote:
> > On 9/20/25 16:23, Huacai Chen wrote:
> >> On Sat, Sep 20, 2025 at 2:15 PM Nathan Chancellor <nathan@kernel.org>
> >> wrote:
> >>>
> >>> Hi Tiezhu,
> >>>
> >>> On Tue, Sep 09, 2025 at 05:27:06PM +0800, Tiezhu Yang wrote:
> >>>> LTO is not only used for Clang, it maybe used for Rust, make LTO
> >>>> case out
> >>>> of CONFIG_CC_HAS_ANNOTATE_TABLEJUMP in Makefile.
> >>>>
> >>>> This is preparation for later patch, no function changes.
> >>>>
> >>>> Suggested-by: WANG Rui <wangrui@loongson.cn>
> >>>> Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
> >>>> ---
> >>>>   arch/loongarch/Makefile | 10 +++++-----
> >>>>   1 file changed, 5 insertions(+), 5 deletions(-)
> >>>>
> >>>> diff --git a/arch/loongarch/Makefile b/arch/loongarch/Makefile
> >>>> index a3a9759414f4..9d80af7f75c8 100644
> >>>> --- a/arch/loongarch/Makefile
> >>>> +++ b/arch/loongarch/Makefile
> >>>> @@ -102,16 +102,16 @@ KBUILD_CFLAGS                   += $(call
> >>>> cc-option,-mthin-add-sub) $(call cc-option,-Wa$(comma)
> >>>>
> >>>>   ifdef CONFIG_OBJTOOL
> >>>>   ifdef CONFIG_CC_HAS_ANNOTATE_TABLEJUMP
> >>>> +KBUILD_CFLAGS                        += -mannotate-tablejump
> >>>> +else
> >>>> +KBUILD_CFLAGS                        += -fno-jump-tables # keep
> >>>> compatibility with older compilers
> >>>> +endif
> >>>> +ifdef CONFIG_LTO_CLANG
> >>>>   # The annotate-tablejump option can not be passed to LLVM backend
> >>>> when LTO is enabled.
> >>>>   # Ensure it is aware of linker with LTO,
> >>>> '--loongarch-annotate-tablejump' also needs to
> >>>>   # be passed via '-mllvm' to ld.lld.
> >>>> -KBUILD_CFLAGS                        += -mannotate-tablejump
> >>>> -ifdef CONFIG_LTO_CLANG
> >>>>   KBUILD_LDFLAGS                       += -mllvm
> >>>> --loongarch-annotate-tablejump
> >>>>   endif
> >>>> -else
> >>>> -KBUILD_CFLAGS                        += -fno-jump-tables # keep
> >>>> compatibility with older compilers
> >>>> -endif
> >>>>   endif
> >>>>
> >>>>   KBUILD_RUSTFLAGS             +=
> >>>> --target=loongarch64-unknown-none-softfloat -Ccode-model=small
> >>>> --
> >>>> 2.42.0
> >>>>
> >>>
> >>> This change is now in -next as commit b15212824a01 ("LoongArch: Make LTO
> >>> case independent in Makefile"), where it breaks the build for clang-18,
> >>> as '--loongarch-annotate-tablejump' is unimplemented there but there is
> >>> no version check before using it.
> >>>
> >>>    $ make -skj"$(nproc)" ARCH=loongarch LLVM=1 mrproper defconfig
> >>>
> >>>    $ scripts/config -d LTO_NONE -e LTO_CLANG_THIN
> >>>
> >>>    $ make -skj"$(nproc)" ARCH=loongarch LLVM=1 olddefconfig vmlinuz.efi
> >>>    ld.lld: error: -mllvm: ld.lld: Unknown command line argument
> >>> '--loongarch-annotate-tablejump'.
> >>>    ...
> >>>
> >>>    $ scripts/config -s CC_HAS_ANNOTATE_TABLEJUMP
> >>>    undef
> >> Hmm, maybe we need this?
> >> diff --git a/arch/loongarch/Makefile b/arch/loongarch/Makefile
> >> index ae419e32f22e..fcfa793f9bb0 100644
> >> --- a/arch/loongarch/Makefile
> >> +++ b/arch/loongarch/Makefile
> >> @@ -115,7 +115,7 @@ ifdef CONFIG_LTO_CLANG
> >>   # The annotate-tablejump option can not be passed to LLVM backend
> >> when LTO is enabled.
> >>   # Ensure it is aware of linker with LTO,
> >> '--loongarch-annotate-tablejump' also needs to
> >>   # be passed via '-mllvm' to ld.lld.
> >> -KBUILD_LDFLAGS                 += -mllvm
> >> --loongarch-annotate-tablejump
> >> +KBUILD_LDFLAGS                 += $(call ld-option,-mllvm
> >> --loongarch-annotate-tablejump)
> >>   endif
> >>   endif
> >
> > We need to handle the other case to use -fno-jump-tables if llvm does
> > not support -loongarch-annotate-tablejump.
> >
> > So, it is better to update the minimal version of llvm to 20, which
> > includes the following two important commits:
> >
> > [LoongArch] Add options for annotate tablejump
> > https://github.com/llvm/llvm-project/commit/4c2c17756739
> >
> > [LoongArch] Avoid indirect branch jumps using the ra register
> > https://github.com/llvm/llvm-project/commit/21ef17c62645
> >
> > If you are OK, I will send a patch to modify the following file:
> >
> > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/scripts/min-tool-version.sh#n29
> >
> >
> > and keep arch/loongarch/Makefile as is.
>
> The other way is to keep scripts/min-tool-version.sh as is, and only
> modify arch/loongarch/Makefile, something like this (not tested):
>
> config LLD_HAS_ANNOTATE_TABLEJUMP
>         def_bool LLD_VERSION >= 200000
>
> ifdef CONFIG_LTO_CLANG
> ifdef CONFIG_LLD_HAS_ANNOTATE_TABLEJUMP
> KBUILD_LDFLAGS                  += -mllvm --loongarch-annotate-tablejump
> else
> KBUILD_LDFLAGS                  += -mllvm --no-jump-tables
> endif
So complicated?

I think below is enough, no?
ifdef CONFIG_LTO_CLANG
# The annotate-tablejump option can not be passed to LLVM backend when
LTO is enabled.
# Ensure it is aware of linker with LTO,
'--loongarch-annotate-tablejump' also needs to
# be passed via '-mllvm' to ld.lld.
KBUILD_LDFLAGS                  += $(call ld-option,-mllvm
--loongarch-annotate-tablejump,-mllvm --no-jump-tables)
endif

Huacai
>
> Update the minimal llvm version or change Makefile to compat various
> llvm versions, which one do you prefer? Pease let me know.
>
> Thanks,
> Tiezhu
>

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v1 1/2] LoongArch: Make LTO case independent in Makefile
  2025-09-20 11:41           ` Huacai Chen
@ 2025-09-20 12:52             ` Tiezhu Yang
  2025-09-23  1:10               ` Nathan Chancellor
  0 siblings, 1 reply; 15+ messages in thread
From: Tiezhu Yang @ 2025-09-20 12:52 UTC (permalink / raw)
  To: Huacai Chen
  Cc: Nathan Chancellor, Miguel Ojeda, WANG Rui, rust-for-linux,
	loongarch, linux-kernel, llvm

On 9/20/25 19:41, Huacai Chen wrote:
...

>>> We need to handle the other case to use -fno-jump-tables if llvm does
>>> not support -loongarch-annotate-tablejump.
>>>
>>> So, it is better to update the minimal version of llvm to 20, which
>>> includes the following two important commits:
>>>
>>> [LoongArch] Add options for annotate tablejump
>>> https://github.com/llvm/llvm-project/commit/4c2c17756739
>>>
>>> [LoongArch] Avoid indirect branch jumps using the ra register
>>> https://github.com/llvm/llvm-project/commit/21ef17c62645
>>>
>>> If you are OK, I will send a patch to modify the following file:
>>>
>>> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/scripts/min-tool-version.sh#n29
>>>
>>>
>>> and keep arch/loongarch/Makefile as is.
>>
>> The other way is to keep scripts/min-tool-version.sh as is, and only
>> modify arch/loongarch/Makefile, something like this (not tested):
>>
>> config LLD_HAS_ANNOTATE_TABLEJUMP
>>          def_bool LLD_VERSION >= 200000
>>
>> ifdef CONFIG_LTO_CLANG
>> ifdef CONFIG_LLD_HAS_ANNOTATE_TABLEJUMP
>> KBUILD_LDFLAGS                  += -mllvm --loongarch-annotate-tablejump
>> else
>> KBUILD_LDFLAGS                  += -mllvm --no-jump-tables
>> endif
> So complicated?
> 
> I think below is enough, no?
> ifdef CONFIG_LTO_CLANG
> # The annotate-tablejump option can not be passed to LLVM backend when
> LTO is enabled.
> # Ensure it is aware of linker with LTO,
> '--loongarch-annotate-tablejump' also needs to
> # be passed via '-mllvm' to ld.lld.
> KBUILD_LDFLAGS                  += $(call ld-option,-mllvm
> --loongarch-annotate-tablejump,-mllvm --no-jump-tables)
> endif

I do not know whether this is valid, you can test it with llvm 18
and llvm 20 if you think it is a proper way.

But IIRC, there is objtool warning with llvm 18, I reported to llvm
developer Wang Lei and he fixed it as the following commit:

[LoongArch] Avoid indirect branch jumps using the ra register
https://github.com/llvm/llvm-project/commit/21ef17c62645

Actually, the above commit solved a performance issue of llvm compiler,
so I prefer to update the minimal llvm version to 20 for LoongArch.

Thanks,
Tiezhu


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v1 1/2] LoongArch: Make LTO case independent in Makefile
  2025-09-20 12:52             ` Tiezhu Yang
@ 2025-09-23  1:10               ` Nathan Chancellor
  2025-09-23  3:13                 ` Tiezhu Yang
  0 siblings, 1 reply; 15+ messages in thread
From: Nathan Chancellor @ 2025-09-23  1:10 UTC (permalink / raw)
  To: Tiezhu Yang
  Cc: Huacai Chen, Miguel Ojeda, WANG Rui, rust-for-linux, loongarch,
	linux-kernel, llvm

> > > ifdef CONFIG_LTO_CLANG
> > > ifdef CONFIG_LLD_HAS_ANNOTATE_TABLEJUMP
> > > KBUILD_LDFLAGS                  += -mllvm --loongarch-annotate-tablejump
> > > else
> > > KBUILD_LDFLAGS                  += -mllvm --no-jump-tables
> > > endif

There is no '--no-jump-tables' LLVM option so this will not work.
Shouldn't -fno-jump-tables and -Zno-jump-tables take care of generating
jump tables?

> I do not know whether this is valid, you can test it with llvm 18
> and llvm 20 if you think it is a proper way.

For what it's worth, Huacai's original suggestion of

    KBUILD_LDFLAGS += $(call ld-option,-mllvm --loongarch-annotate-tablejump)

appears to work for me and I do not see any objtool warnings with LTO
enabled but I might be missing something.

> But IIRC, there is objtool warning with llvm 18, I reported to llvm
> developer Wang Lei and he fixed it as the following commit:
> 
> [LoongArch] Avoid indirect branch jumps using the ra register
> https://github.com/llvm/llvm-project/commit/21ef17c62645
> 
> Actually, the above commit solved a performance issue of llvm compiler,
> so I prefer to update the minimal llvm version to 20 for LoongArch.

I tend to let architecture maintainers make the call around minimum
supported versions of compilers, so if that is how you would like to
proceed, I am fine with that. I will say LLVM 20 is pretty new (released
on March 4th, 2025) but I expect most of your users to probably be using
bleeding edge tools for all the changes you make in the compiler and
lower level libraries?

Cheers,
Nathan

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v1 1/2] LoongArch: Make LTO case independent in Makefile
  2025-09-23  1:10               ` Nathan Chancellor
@ 2025-09-23  3:13                 ` Tiezhu Yang
  0 siblings, 0 replies; 15+ messages in thread
From: Tiezhu Yang @ 2025-09-23  3:13 UTC (permalink / raw)
  To: Nathan Chancellor
  Cc: Huacai Chen, Miguel Ojeda, WANG Rui, rust-for-linux, loongarch,
	linux-kernel, llvm

On 2025/9/23 上午9:10, Nathan Chancellor wrote:
>>>> ifdef CONFIG_LTO_CLANG
>>>> ifdef CONFIG_LLD_HAS_ANNOTATE_TABLEJUMP
>>>> KBUILD_LDFLAGS                  += -mllvm --loongarch-annotate-tablejump
>>>> else
>>>> KBUILD_LDFLAGS                  += -mllvm --no-jump-tables
>>>> endif
> 
> There is no '--no-jump-tables' LLVM option so this will not work.
> Shouldn't -fno-jump-tables and -Zno-jump-tables take care of generating
> jump tables?
> 
>> I do not know whether this is valid, you can test it with llvm 18
>> and llvm 20 if you think it is a proper way.
> 
> For what it's worth, Huacai's original suggestion of
> 
>      KBUILD_LDFLAGS += $(call ld-option,-mllvm --loongarch-annotate-tablejump)
> 
> appears to work for me and I do not see any objtool warnings with LTO
> enabled but I might be missing something.

As discussed offline, Huacai will test this change and submit a patch
later.

>> But IIRC, there is objtool warning with llvm 18, I reported to llvm
>> developer Wang Lei and he fixed it as the following commit:
>>
>> [LoongArch] Avoid indirect branch jumps using the ra register
>> https://github.com/llvm/llvm-project/commit/21ef17c62645
>>
>> Actually, the above commit solved a performance issue of llvm compiler,
>> so I prefer to update the minimal llvm version to 20 for LoongArch.
> 
> I tend to let architecture maintainers make the call around minimum
> supported versions of compilers, so if that is how you would like to
> proceed, I am fine with that. I will say LLVM 20 is pretty new (released
> on March 4th, 2025) but I expect most of your users to probably be using
> bleeding edge tools for all the changes you make in the compiler and
> lower level libraries?

Usually, I like to use the latest LLVM upstream version to test the
kernel, but maybe somebody only uses the lower version, so keep the
minimal version as is.

Thanks,
Tiezhu


^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2025-09-23  3:14 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-09-09  9:27 [PATCH v1 0/2] Fix objtool warnings with RUST on LoongArch Tiezhu Yang
2025-09-09  9:27 ` [PATCH v1 1/2] LoongArch: Make LTO case independent in Makefile Tiezhu Yang
2025-09-20  6:15   ` Nathan Chancellor
2025-09-20  8:23     ` Huacai Chen
2025-09-20  9:19       ` Tiezhu Yang
2025-09-20 10:22         ` Tiezhu Yang
2025-09-20 11:41           ` Huacai Chen
2025-09-20 12:52             ` Tiezhu Yang
2025-09-23  1:10               ` Nathan Chancellor
2025-09-23  3:13                 ` Tiezhu Yang
2025-09-09  9:27 ` [PATCH v1 2/2] LoongArch: Handle jump tables option for RUST Tiezhu Yang
2025-09-09 10:16   ` Miguel Ojeda
2025-09-09 18:06     ` Matthew Maurer
2025-09-09 20:14       ` Miguel Ojeda
2025-09-18  9:15 ` [PATCH v1 0/2] Fix objtool warnings with RUST on LoongArch Huacai Chen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).