lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAAhV-H4xx-C28-a8H7yJTK30+r90zL9XTSAb87Jr4zLc5ShBoA@mail.gmail.com>
Date: Sat, 20 Sep 2025 19:41:03 +0800
From: Huacai Chen <chenhuacai@...nel.org>
To: Tiezhu Yang <yangtiezhu@...ngson.cn>
Cc: Nathan Chancellor <nathan@...nel.org>, Miguel Ojeda <ojeda@...nel.org>, WANG Rui <wangrui@...ngson.cn>, 
	rust-for-linux@...r.kernel.org, loongarch@...ts.linux.dev, 
	linux-kernel@...r.kernel.org, llvm@...ts.linux.dev
Subject: Re: [PATCH v1 1/2] LoongArch: Make LTO case independent in Makefile

On Sat, Sep 20, 2025 at 6:22 PM Tiezhu Yang <yangtiezhu@...ngson.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@...nel.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@...ngson.cn>
> >>>> Signed-off-by: Tiezhu Yang <yangtiezhu@...ngson.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
>

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ