Message ID | 20250304162124.it.785-kees@kernel.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [v2] kbuild: clang: Support building UM with SUBARCH=i386 | expand |
On Tue, Mar 04, 2025 at 08:21:29AM -0800, Kees Cook wrote: > The UM builds distinguish i386 from x86_64 via SUBARCH, but we don't > support building i386 directly with Clang. To make SUBARCH work for > i386 UM, we need to explicitly test for it. > > This lets me run i386 KUnit tests with Clang: > > $ ./tools/testing/kunit/kunit.py run \ > --make_options LLVM=1 \ > --make_options SUBARCH=i386 > ... > > Fixes: c7500c1b53bf ("um: Allow builds with Clang") > Signed-off-by: Kees Cook <kees@kernel.org> Reviewed-by: Nathan Chancellor <nathan@kernel.org> > --- > Cc: Nathan Chancellor <nathan@kernel.org> > Cc: Thomas Weißschuh <linux@weissschuh.net> > Cc: Bill Wendling <morbo@google.com> > Cc: Justin Stitt <justinstitt@google.com> > Cc: Masahiro Yamada <masahiroy@kernel.org> > Cc: Nicolas Schier <nicolas@fjasle.eu> > Cc: llvm@lists.linux.dev > Cc: linux-kbuild@vger.kernel.org > --- > scripts/Makefile.clang | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/scripts/Makefile.clang b/scripts/Makefile.clang > index 2435efae67f5..b67636b28c35 100644 > --- a/scripts/Makefile.clang > +++ b/scripts/Makefile.clang > @@ -12,6 +12,8 @@ CLANG_TARGET_FLAGS_riscv := riscv64-linux-gnu > CLANG_TARGET_FLAGS_s390 := s390x-linux-gnu > CLANG_TARGET_FLAGS_sparc := sparc64-linux-gnu > CLANG_TARGET_FLAGS_x86 := x86_64-linux-gnu > +# This is only for i386 UM builds, which need the 32-bit target not -m32 > +CLANG_TARGET_FLAGS_i386 := i386-linux-gnu > CLANG_TARGET_FLAGS_um := $(CLANG_TARGET_FLAGS_$(SUBARCH)) > CLANG_TARGET_FLAGS := $(CLANG_TARGET_FLAGS_$(SRCARCH)) > > -- > 2.34.1 >
On Tue, 04 Mar 2025 08:21:29 -0800, Kees Cook wrote: > The UM builds distinguish i386 from x86_64 via SUBARCH, but we don't > support building i386 directly with Clang. To make SUBARCH work for > i386 UM, we need to explicitly test for it. > > This lets me run i386 KUnit tests with Clang: > > $ ./tools/testing/kunit/kunit.py run \ > --make_options LLVM=1 \ > --make_options SUBARCH=i386 > ... > > [...] Applied to for-next/hardening, thanks! [1/1] kbuild: clang: Support building UM with SUBARCH=i386 https://git.kernel.org/kees/c/a48d9ebdbb5a Take care,
On Wed, 5 Mar 2025 at 00:21, Kees Cook <kees@kernel.org> wrote: > > The UM builds distinguish i386 from x86_64 via SUBARCH, but we don't > support building i386 directly with Clang. To make SUBARCH work for > i386 UM, we need to explicitly test for it. > > This lets me run i386 KUnit tests with Clang: > > $ ./tools/testing/kunit/kunit.py run \ > --make_options LLVM=1 \ > --make_options SUBARCH=i386 > ... > > Fixes: c7500c1b53bf ("um: Allow builds with Clang") > Signed-off-by: Kees Cook <kees@kernel.org> > --- Thanks for this -- I'd been using `--kconfig_add CONFIG_64BIT=n` as a way to build i386 UML kernels, which seems to work even without this patch -- but this is definitely an improvement. It may be worth noting that CONFIG_FORTIFY_SOURCE is incompatible with clang + i386, which seems to affect UML as well. (That might actually not be required, as I think UML doesn't use any of the strange -mregparm calling convention stuff which appears to be what breaks FORTIFY_SOURCE here.) Regardless, Tested-by: David Gow <davidgow@google.com> Cheers, -- David > Cc: Nathan Chancellor <nathan@kernel.org> > Cc: Thomas Weißschuh <linux@weissschuh.net> > Cc: Bill Wendling <morbo@google.com> > Cc: Justin Stitt <justinstitt@google.com> > Cc: Masahiro Yamada <masahiroy@kernel.org> > Cc: Nicolas Schier <nicolas@fjasle.eu> > Cc: llvm@lists.linux.dev > Cc: linux-kbuild@vger.kernel.org > --- > scripts/Makefile.clang | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/scripts/Makefile.clang b/scripts/Makefile.clang > index 2435efae67f5..b67636b28c35 100644 > --- a/scripts/Makefile.clang > +++ b/scripts/Makefile.clang > @@ -12,6 +12,8 @@ CLANG_TARGET_FLAGS_riscv := riscv64-linux-gnu > CLANG_TARGET_FLAGS_s390 := s390x-linux-gnu > CLANG_TARGET_FLAGS_sparc := sparc64-linux-gnu > CLANG_TARGET_FLAGS_x86 := x86_64-linux-gnu > +# This is only for i386 UM builds, which need the 32-bit target not -m32 > +CLANG_TARGET_FLAGS_i386 := i386-linux-gnu > CLANG_TARGET_FLAGS_um := $(CLANG_TARGET_FLAGS_$(SUBARCH)) > CLANG_TARGET_FLAGS := $(CLANG_TARGET_FLAGS_$(SRCARCH)) > > -- > 2.34.1 >
On Thu, Mar 06, 2025 at 04:59:53PM +0800, David Gow wrote: > On Wed, 5 Mar 2025 at 00:21, Kees Cook <kees@kernel.org> wrote: > > > > The UM builds distinguish i386 from x86_64 via SUBARCH, but we don't > > support building i386 directly with Clang. To make SUBARCH work for > > i386 UM, we need to explicitly test for it. > > > > This lets me run i386 KUnit tests with Clang: > > > > $ ./tools/testing/kunit/kunit.py run \ > > --make_options LLVM=1 \ > > --make_options SUBARCH=i386 > > ... > > > > Fixes: c7500c1b53bf ("um: Allow builds with Clang") > > Signed-off-by: Kees Cook <kees@kernel.org> > > --- > > Thanks for this -- I'd been using `--kconfig_add CONFIG_64BIT=n` as a > way to build i386 UML kernels, which seems to work even without this > patch -- but this is definitely an improvement. Thanks! Yeah, I figured there must have been a way to get at it. I wanted to make it work the "normal" way. > It may be worth noting that CONFIG_FORTIFY_SOURCE is incompatible with > clang + i386, which seems to affect UML as well. (That might actually > not be required, as I think UML doesn't use any of the strange > -mregparm calling convention stuff which appears to be what breaks > FORTIFY_SOURCE here.) Also fixed! :) https://lore.kernel.org/lkml/20250303214929.work.499-kees@kernel.org/ > Tested-by: David Gow <davidgow@google.com> Thanks for testing; I've updated the trailers in my tree. -Kees
diff --git a/scripts/Makefile.clang b/scripts/Makefile.clang index 2435efae67f5..b67636b28c35 100644 --- a/scripts/Makefile.clang +++ b/scripts/Makefile.clang @@ -12,6 +12,8 @@ CLANG_TARGET_FLAGS_riscv := riscv64-linux-gnu CLANG_TARGET_FLAGS_s390 := s390x-linux-gnu CLANG_TARGET_FLAGS_sparc := sparc64-linux-gnu CLANG_TARGET_FLAGS_x86 := x86_64-linux-gnu +# This is only for i386 UM builds, which need the 32-bit target not -m32 +CLANG_TARGET_FLAGS_i386 := i386-linux-gnu CLANG_TARGET_FLAGS_um := $(CLANG_TARGET_FLAGS_$(SUBARCH)) CLANG_TARGET_FLAGS := $(CLANG_TARGET_FLAGS_$(SRCARCH))
The UM builds distinguish i386 from x86_64 via SUBARCH, but we don't support building i386 directly with Clang. To make SUBARCH work for i386 UM, we need to explicitly test for it. This lets me run i386 KUnit tests with Clang: $ ./tools/testing/kunit/kunit.py run \ --make_options LLVM=1 \ --make_options SUBARCH=i386 ... Fixes: c7500c1b53bf ("um: Allow builds with Clang") Signed-off-by: Kees Cook <kees@kernel.org> --- Cc: Nathan Chancellor <nathan@kernel.org> Cc: Thomas Weißschuh <linux@weissschuh.net> Cc: Bill Wendling <morbo@google.com> Cc: Justin Stitt <justinstitt@google.com> Cc: Masahiro Yamada <masahiroy@kernel.org> Cc: Nicolas Schier <nicolas@fjasle.eu> Cc: llvm@lists.linux.dev Cc: linux-kbuild@vger.kernel.org --- scripts/Makefile.clang | 2 ++ 1 file changed, 2 insertions(+)