* [PATCH v6 0/4] RISC-V: re-enable gcc + rust builds
@ 2025-12-30 16:47 Asuna Yang
2025-12-30 16:47 ` [PATCH v6 1/4] rust: export BINDGEN_TARGET from a separate Makefile Asuna Yang
` (5 more replies)
0 siblings, 6 replies; 17+ messages in thread
From: Asuna Yang @ 2025-12-30 16:47 UTC (permalink / raw)
To: Nathan Chancellor, Nicolas Schier, Miguel Ojeda, Boqun Feng,
Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg,
Alice Ryhl, Trevor Gross, Danilo Krummrich, Nick Desaulniers,
Bill Wendling, Justin Stitt, Paul Walmsley, Palmer Dabbelt,
Albert Ou, Alexandre Ghiti, Jonathan Corbet, Conor Dooley,
Mingcong Bai, Han Gao, Vivian Wang, Jason Montleon
Cc: linux-kbuild, linux-kernel, rust-for-linux, llvm, linux-riscv,
linux-doc, Asuna Yang
Previous v5 patch:
https://lore.kernel.org/20251204-gcc-rust-v5-v5-0-2d4f20d86c24@gmail.com
Changes in v6:
- Simplified `bindgen-backend-option` Kconfig function by using
`/dev/null` with clang option `-x c` instead of `touch`ing a new temp
file.
- Moved the `BINDGEN_TARGET` check to `rust/Makefile` so it only
performs the check when Rust is enabled, avoiding breaking targets that
do not support Rust builds.
- Updated my git email to the institutional email address.
Signed-off-by: Asuna Yang <xinrui.riscv@isrc.iscas.ac.cn>
---
Asuna Yang (4):
rust: export BINDGEN_TARGET from a separate Makefile
rust: generate a fatal error if BINDGEN_TARGET is undefined
rust: add a Kconfig function to test for support of bindgen options
RISC-V: handle extension configs for bindgen, re-enable gcc + rust builds
Documentation/rust/arch-support.rst | 2 +-
Makefile | 3 ++-
arch/riscv/Kconfig | 35 ++++++++++++++++++++++++++++++++++-
rust/Makefile | 17 ++++++++---------
scripts/Kconfig.include | 5 +++++
scripts/Makefile.rust | 10 ++++++++++
6 files changed, 60 insertions(+), 12 deletions(-)
---
base-commit: 8640b74557fc8b4c300030f6ccb8cd078f665ec8
change-id: 20251204-gcc-rust-v5-aafcede31ea3
Best regards,
--
Asuna Yang <xinrui.riscv@isrc.iscas.ac.cn>
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH v6 1/4] rust: export BINDGEN_TARGET from a separate Makefile
2025-12-30 16:47 [PATCH v6 0/4] RISC-V: re-enable gcc + rust builds Asuna Yang
@ 2025-12-30 16:47 ` Asuna Yang
2026-01-29 22:35 ` Nathan Chancellor
2025-12-30 16:47 ` [PATCH v6 2/4] rust: generate a fatal error if BINDGEN_TARGET is undefined Asuna Yang
` (4 subsequent siblings)
5 siblings, 1 reply; 17+ messages in thread
From: Asuna Yang @ 2025-12-30 16:47 UTC (permalink / raw)
To: Nathan Chancellor, Nicolas Schier, Miguel Ojeda, Boqun Feng,
Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg,
Alice Ryhl, Trevor Gross, Danilo Krummrich, Nick Desaulniers,
Bill Wendling, Justin Stitt, Paul Walmsley, Palmer Dabbelt,
Albert Ou, Alexandre Ghiti, Jonathan Corbet, Conor Dooley,
Mingcong Bai, Han Gao, Vivian Wang, Jason Montleon
Cc: linux-kbuild, linux-kernel, rust-for-linux, llvm, linux-riscv,
linux-doc, Asuna Yang
A subsequent commit will add a new function `bindgen-option` to
`scripts/Kconfig.include`. The bindgen backend requires the `--target`
option for cross compiling, but variable `BINDGEN_TARGET` in
`rust/Makefile` cannot be exported to `scripts/Kconfig.include`.
Therefore, move this variable to a separate new `Makefile.rust` file and
include it from `scripts/Makefile` to make the exported variable
available for use in Kconfig. Place the include in the `need-compiler`
branch to avoid including it in irrelevant make targets.
Since the new file name is `Makefile.rust`, it matches an existing
MAINTAINERS rule `scripts/*rust*`, so no modification to the MAINTAINERS
file is needed.
Signed-off-by: Asuna Yang <xinrui.riscv@isrc.iscas.ac.cn>
---
Makefile | 3 ++-
rust/Makefile | 8 --------
scripts/Makefile.rust | 9 +++++++++
3 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/Makefile b/Makefile
index 27ce077520fe..9754d7add947 100644
--- a/Makefile
+++ b/Makefile
@@ -718,9 +718,10 @@ ifneq ($(findstring clang,$(CC_VERSION_TEXT)),)
include $(srctree)/scripts/Makefile.clang
endif
+ifdef need-compiler
+include $(srctree)/scripts/Makefile.rust
# Include this also for config targets because some architectures need
# cc-cross-prefix to determine CROSS_COMPILE.
-ifdef need-compiler
include $(srctree)/scripts/Makefile.compiler
endif
diff --git a/rust/Makefile b/rust/Makefile
index 5d357dce1704..2603b34f9833 100644
--- a/rust/Makefile
+++ b/rust/Makefile
@@ -385,14 +385,6 @@ bindgen_skip_c_flags := -mno-fp-ret-in-387 -mpreferred-stack-boundary=% \
-fzero-init-padding-bits=% -mno-fdpic \
--param=% --param asan-% -fno-isolate-erroneous-paths-dereference
-# Derived from `scripts/Makefile.clang`.
-BINDGEN_TARGET_x86 := x86_64-linux-gnu
-BINDGEN_TARGET_arm64 := aarch64-linux-gnu
-BINDGEN_TARGET_arm := arm-linux-gnueabi
-BINDGEN_TARGET_loongarch := loongarch64-linux-gnusf
-BINDGEN_TARGET_um := $(BINDGEN_TARGET_$(SUBARCH))
-BINDGEN_TARGET := $(BINDGEN_TARGET_$(SRCARCH))
-
# All warnings are inhibited since GCC builds are very experimental,
# many GCC warnings are not supported by Clang, they may only appear in
# some configurations, with new GCC versions, etc.
diff --git a/scripts/Makefile.rust b/scripts/Makefile.rust
new file mode 100644
index 000000000000..5c12b4b8c8b6
--- /dev/null
+++ b/scripts/Makefile.rust
@@ -0,0 +1,9 @@
+# Derived from `scripts/Makefile.clang`.
+BINDGEN_TARGET_x86 := x86_64-linux-gnu
+BINDGEN_TARGET_arm64 := aarch64-linux-gnu
+BINDGEN_TARGET_arm := arm-linux-gnueabi
+BINDGEN_TARGET_loongarch := loongarch64-linux-gnusf
+BINDGEN_TARGET_um := $(BINDGEN_TARGET_$(SUBARCH))
+BINDGEN_TARGET := $(BINDGEN_TARGET_$(SRCARCH))
+
+export BINDGEN_TARGET
--
2.51.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH v6 2/4] rust: generate a fatal error if BINDGEN_TARGET is undefined
2025-12-30 16:47 [PATCH v6 0/4] RISC-V: re-enable gcc + rust builds Asuna Yang
2025-12-30 16:47 ` [PATCH v6 1/4] rust: export BINDGEN_TARGET from a separate Makefile Asuna Yang
@ 2025-12-30 16:47 ` Asuna Yang
2026-01-29 22:40 ` Nathan Chancellor
2025-12-30 16:47 ` [PATCH v6 3/4] rust: add a Kconfig function to test for support of bindgen options Asuna Yang
` (3 subsequent siblings)
5 siblings, 1 reply; 17+ messages in thread
From: Asuna Yang @ 2025-12-30 16:47 UTC (permalink / raw)
To: Nathan Chancellor, Nicolas Schier, Miguel Ojeda, Boqun Feng,
Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg,
Alice Ryhl, Trevor Gross, Danilo Krummrich, Nick Desaulniers,
Bill Wendling, Justin Stitt, Paul Walmsley, Palmer Dabbelt,
Albert Ou, Alexandre Ghiti, Jonathan Corbet, Conor Dooley,
Mingcong Bai, Han Gao, Vivian Wang, Jason Montleon
Cc: linux-kbuild, linux-kernel, rust-for-linux, llvm, linux-riscv,
linux-doc, Asuna Yang
Generate a friendly fatal error if the target triplet is undefined for
bindgen, rather than having the compiler generate obscure error messages
during the build stage.
`BINDGEN_TARGET` is actually defined in `scripts/Makefile.rust`, but the
file is included regardless of whether Rust is enabled, so perform this
check in `rust/Makefile` to avoid breaking targets that do not yet
support Rust builds.
This piece of code is copied from `scripts/Makefile.clang`.
Before this commit, error messages might look like:
error: unknown argument: '-mno-riscv-attribute'
error: unsupported argument 'medany' to option '-mcmodel=' for target
'unknown'
error: unsupported option '-march=' for target ''
error: unsupported option '-mno-save-restore' for target ''
error: unknown target triple 'unknown'
panicked at bindgen/ir/context.rs:562:15:
libclang error; possible causes include:
- Invalid flag syntax
- Unrecognized flags
- Invalid flag arguments
- File I/O errors
- Host vs. target architecture mismatch
Acked-by: Miguel Ojeda <ojeda@kernel.org>
Signed-off-by: Asuna Yang <xinrui.riscv@isrc.iscas.ac.cn>
---
rust/Makefile | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/rust/Makefile b/rust/Makefile
index 2603b34f9833..37b4205afb70 100644
--- a/rust/Makefile
+++ b/rust/Makefile
@@ -385,6 +385,12 @@ bindgen_skip_c_flags := -mno-fp-ret-in-387 -mpreferred-stack-boundary=% \
-fzero-init-padding-bits=% -mno-fdpic \
--param=% --param asan-% -fno-isolate-erroneous-paths-dereference
+# Because scripts/Makefile.rust is included regardless of whether Rust is enabled,
+# we perform this check here to avoid breaking targets that do not yet support Rust builds.
+ifeq ($(BINDGEN_TARGET),)
+$(error add '--target=' option to scripts/Makefile.rust)
+endif
+
# All warnings are inhibited since GCC builds are very experimental,
# many GCC warnings are not supported by Clang, they may only appear in
# some configurations, with new GCC versions, etc.
--
2.51.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH v6 3/4] rust: add a Kconfig function to test for support of bindgen options
2025-12-30 16:47 [PATCH v6 0/4] RISC-V: re-enable gcc + rust builds Asuna Yang
2025-12-30 16:47 ` [PATCH v6 1/4] rust: export BINDGEN_TARGET from a separate Makefile Asuna Yang
2025-12-30 16:47 ` [PATCH v6 2/4] rust: generate a fatal error if BINDGEN_TARGET is undefined Asuna Yang
@ 2025-12-30 16:47 ` Asuna Yang
2026-01-29 22:41 ` Nathan Chancellor
2025-12-30 16:47 ` [PATCH v6 4/4] RISC-V: handle extension configs for bindgen, re-enable gcc + rust builds Asuna Yang
` (2 subsequent siblings)
5 siblings, 1 reply; 17+ messages in thread
From: Asuna Yang @ 2025-12-30 16:47 UTC (permalink / raw)
To: Nathan Chancellor, Nicolas Schier, Miguel Ojeda, Boqun Feng,
Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg,
Alice Ryhl, Trevor Gross, Danilo Krummrich, Nick Desaulniers,
Bill Wendling, Justin Stitt, Paul Walmsley, Palmer Dabbelt,
Albert Ou, Alexandre Ghiti, Jonathan Corbet, Conor Dooley,
Mingcong Bai, Han Gao, Vivian Wang, Jason Montleon
Cc: linux-kbuild, linux-kernel, rust-for-linux, llvm, linux-riscv,
linux-doc, Asuna Yang
Add a new `bindgen-backend-option` Kconfig function to test whether the
bindgen backend supports a given flag.
A subsequent commit will use this function to test for RISC-V extension
flags.
Signed-off-by: Asuna Yang <xinrui.riscv@isrc.iscas.ac.cn>
---
scripts/Kconfig.include | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/scripts/Kconfig.include b/scripts/Kconfig.include
index d42042b6c9e2..9954b8093fab 100644
--- a/scripts/Kconfig.include
+++ b/scripts/Kconfig.include
@@ -78,3 +78,8 @@ rustc-llvm-version := $(shell,$(srctree)/scripts/rustc-llvm-version.sh $(RUSTC))
# If you are testing for unstable features, consider testing RUSTC_VERSION
# instead, as features may have different completeness while available.
rustc-option = $(success,trap "rm -rf .tmp_$$" EXIT; mkdir .tmp_$$; $(RUSTC) $(1) --crate-type=rlib /dev/null --out-dir=.tmp_$$ -o .tmp_$$/tmp.rlib)
+
+# $(bindgen-backend-option,<flag>)
+# Return y if bindgen backend supports <flag>, n otherwise
+# For now, the backend refers only to libclang, so more specifically, this function tests whether the given flag is recognized by the libclang used by bindgen.
+bindgen-backend-option = $(success,$(BINDGEN) /dev/null -- -x c --target=$(BINDGEN_TARGET) $(1))
--
2.51.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH v6 4/4] RISC-V: handle extension configs for bindgen, re-enable gcc + rust builds
2025-12-30 16:47 [PATCH v6 0/4] RISC-V: re-enable gcc + rust builds Asuna Yang
` (2 preceding siblings ...)
2025-12-30 16:47 ` [PATCH v6 3/4] rust: add a Kconfig function to test for support of bindgen options Asuna Yang
@ 2025-12-30 16:47 ` Asuna Yang
2026-01-29 13:49 ` Charalampos Mitrodimas
2025-12-30 16:58 ` [PATCH v6 0/4] RISC-V: " Asuna Yang
2026-01-22 7:20 ` Asuna Yang
5 siblings, 1 reply; 17+ messages in thread
From: Asuna Yang @ 2025-12-30 16:47 UTC (permalink / raw)
To: Nathan Chancellor, Nicolas Schier, Miguel Ojeda, Boqun Feng,
Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg,
Alice Ryhl, Trevor Gross, Danilo Krummrich, Nick Desaulniers,
Bill Wendling, Justin Stitt, Paul Walmsley, Palmer Dabbelt,
Albert Ou, Alexandre Ghiti, Jonathan Corbet, Conor Dooley,
Mingcong Bai, Han Gao, Vivian Wang, Jason Montleon
Cc: linux-kbuild, linux-kernel, rust-for-linux, llvm, linux-riscv,
linux-doc, Asuna Yang
Commit 33549fcf37ec ("RISC-V: disallow gcc + rust builds") disabled GCC
+ Rust builds for RISC-V due to differences in extension handling
compared to LLVM. This commit enables GCC + Rust builds again.
Add `bindgen-option` conditions for the availability of libclang to the
RISC-V extension Kconfig symbols that depend on the `cc-option`
function.
For Zicsr/Zifencei special handling, since LLVM/Clang always enables
these two extensions, either don't pass them to `-march`, or pass them
explicitly and Rust bindgen libclang must recognize them.
Clang does not support `-mno-riscv-attribute` flag, filter it out to
resolve error: unknown argument: '-mno-riscv-attribute'.
Define `BINDGEN_TARGET_riscv` to pass the target triplet to Rust bindgen
libclang for RISC-V to resolve error: unsupported argument 'medany' to
option '-mcmodel=' for target 'unknown'.
Update the documentation, GCC + Rust builds for RISC-V are now
maintained.
Acked-by: Miguel Ojeda <ojeda@kernel.org>
Signed-off-by: Asuna Yang <xinrui.riscv@isrc.iscas.ac.cn>
---
Documentation/rust/arch-support.rst | 2 +-
arch/riscv/Kconfig | 35 ++++++++++++++++++++++++++++++++++-
rust/Makefile | 3 ++-
scripts/Makefile.rust | 1 +
4 files changed, 38 insertions(+), 3 deletions(-)
diff --git a/Documentation/rust/arch-support.rst b/Documentation/rust/arch-support.rst
index 6e6a515d0899..5282e0e174e8 100644
--- a/Documentation/rust/arch-support.rst
+++ b/Documentation/rust/arch-support.rst
@@ -18,7 +18,7 @@ Architecture Level of support Constraints
``arm`` Maintained ARMv7 Little Endian only.
``arm64`` Maintained Little Endian only.
``loongarch`` Maintained \-
-``riscv`` Maintained ``riscv64`` and LLVM/Clang only.
+``riscv`` Maintained ``riscv64`` only.
``um`` Maintained \-
``x86`` Maintained ``x86_64`` only.
============= ================ ==============================================
diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
index 6b39f37f769a..c869ee07117e 100644
--- a/arch/riscv/Kconfig
+++ b/arch/riscv/Kconfig
@@ -195,7 +195,7 @@ config RISCV
select HAVE_REGS_AND_STACK_ACCESS_API
select HAVE_RETHOOK if !XIP_KERNEL
select HAVE_RSEQ
- select HAVE_RUST if RUSTC_SUPPORTS_RISCV && CC_IS_CLANG
+ select HAVE_RUST if RUSTC_SUPPORTS_RISCV && TOOLCHAIN_MATCHES_ZICSR_ZIFENCEI
select HAVE_SAMPLE_FTRACE_DIRECT
select HAVE_SAMPLE_FTRACE_DIRECT_MULTI
select HAVE_STACKPROTECTOR
@@ -619,6 +619,8 @@ config TOOLCHAIN_HAS_V
depends on !32BIT || $(cc-option,-mabi=ilp32 -march=rv32imv)
depends on LD_IS_LLD || LD_VERSION >= 23800
depends on AS_HAS_OPTION_ARCH
+ depends on !RUST || !64BIT || $(bindgen-backend-option,-mabi=lp64 -march=rv64imv)
+ depends on !RUST || !32BIT || $(bindgen-backend-option,-mabi=ilp32 -march=rv32imv)
config RISCV_ISA_V
bool "Vector extension support"
@@ -683,6 +685,8 @@ config TOOLCHAIN_HAS_ZABHA
depends on !64BIT || $(cc-option,-mabi=lp64 -march=rv64ima_zabha)
depends on !32BIT || $(cc-option,-mabi=ilp32 -march=rv32ima_zabha)
depends on AS_HAS_OPTION_ARCH
+ depends on !RUST || !64BIT || $(bindgen-backend-option,-mabi=lp64 -march=rv64ima_zabha)
+ depends on !RUST || !32BIT || $(bindgen-backend-option,-mabi=ilp32 -march=rv32ima_zabha)
config RISCV_ISA_ZABHA
bool "Zabha extension support for atomic byte/halfword operations"
@@ -701,6 +705,8 @@ config TOOLCHAIN_HAS_ZACAS
depends on !64BIT || $(cc-option,-mabi=lp64 -march=rv64ima_zacas)
depends on !32BIT || $(cc-option,-mabi=ilp32 -march=rv32ima_zacas)
depends on AS_HAS_OPTION_ARCH
+ depends on !RUST || !64BIT || $(bindgen-backend-option,-mabi=lp64 -march=rv64ima_zacas)
+ depends on !RUST || !32BIT || $(bindgen-backend-option,-mabi=ilp32 -march=rv32ima_zacas)
config RISCV_ISA_ZACAS
bool "Zacas extension support for atomic CAS"
@@ -719,6 +725,8 @@ config TOOLCHAIN_HAS_ZBB
depends on !32BIT || $(cc-option,-mabi=ilp32 -march=rv32ima_zbb)
depends on LD_IS_LLD || LD_VERSION >= 23900
depends on AS_HAS_OPTION_ARCH
+ depends on !RUST || !64BIT || $(bindgen-backend-option,-mabi=lp64 -march=rv64ima_zbb)
+ depends on !RUST || !32BIT || $(bindgen-backend-option,-mabi=ilp32 -march=rv32ima_zbb)
# This symbol indicates that the toolchain supports all v1.0 vector crypto
# extensions, including Zvk*, Zvbb, and Zvbc. LLVM added all of these at once.
@@ -734,6 +742,8 @@ config TOOLCHAIN_HAS_ZBA
depends on !32BIT || $(cc-option,-mabi=ilp32 -march=rv32ima_zba)
depends on LD_IS_LLD || LD_VERSION >= 23900
depends on AS_HAS_OPTION_ARCH
+ depends on !RUST || !64BIT || $(bindgen-backend-option,-mabi=lp64 -march=rv64ima_zba)
+ depends on !RUST || !32BIT || $(bindgen-backend-option,-mabi=ilp32 -march=rv32ima_zba)
config RISCV_ISA_ZBA
bool "Zba extension support for bit manipulation instructions"
@@ -769,6 +779,8 @@ config TOOLCHAIN_HAS_ZBC
depends on !32BIT || $(cc-option,-mabi=ilp32 -march=rv32ima_zbc)
depends on LD_IS_LLD || LD_VERSION >= 23900
depends on AS_HAS_OPTION_ARCH
+ depends on !RUST || !64BIT || $(bindgen-backend-option,-mabi=lp64 -march=rv64ima_zbc)
+ depends on !RUST || !32BIT || $(bindgen-backend-option,-mabi=ilp32 -march=rv32ima_zbc)
config RISCV_ISA_ZBC
bool "Zbc extension support for carry-less multiplication instructions"
@@ -792,6 +804,8 @@ config TOOLCHAIN_HAS_ZBKB
depends on !32BIT || $(cc-option,-mabi=ilp32 -march=rv32ima_zbkb)
depends on LD_IS_LLD || LD_VERSION >= 23900
depends on AS_HAS_OPTION_ARCH
+ depends on !RUST || !64BIT || $(bindgen-backend-option,-mabi=lp64 -march=rv64ima_zbkb)
+ depends on !RUST || !32BIT || $(bindgen-backend-option,-mabi=ilp32 -march=rv32ima_zbkb)
config RISCV_ISA_ZBKB
bool "Zbkb extension support for bit manipulation instructions"
@@ -893,6 +907,25 @@ config TOOLCHAIN_NEEDS_OLD_ISA_SPEC
versions of clang and GCC to be passed to GAS, which has the same result
as passing zicsr and zifencei to -march.
+config RUST_BINDGEN_HAS_ZICSR_ZIFENCEI
+ def_bool y
+ depends on !64BIT || $(bindgen-backend-option,-mabi=lp64 -march=rv64ima_zicsr_zifencei)
+ depends on !32BIT || $(bindgen-backend-option,-mabi=ilp32 -march=rv32ima_zicsr_zifencei)
+
+config TOOLCHAIN_MATCHES_ZICSR_ZIFENCEI
+ def_bool y
+ # https://github.com/llvm/llvm-project/commit/22e199e6afb1263c943c0c0d4498694e15bf8a16
+ depends on TOOLCHAIN_NEEDS_OLD_ISA_SPEC || !TOOLCHAIN_NEEDS_EXPLICIT_ZICSR_ZIFENCEI || RUST_BINDGEN_HAS_ZICSR_ZIFENCEI
+ help
+ LLVM/Clang >= 17.0.0 starts recognizing Zicsr/Zifencei in -march, passing
+ them to -march doesn't generate an error anymore, and passing them or not
+ doesn't have any real difference, it still follows ISA before version
+ 20190608 - Zicsr/Zifencei are included in base ISA.
+
+ The current latest version of LLVM/Clang still does not require explicit
+ Zicsr/Zifencei to enable these two extensions, Clang just accepts them in
+ -march and then silently ignores them.
+
config FPU
bool "FPU support"
default y
diff --git a/rust/Makefile b/rust/Makefile
index 37b4205afb70..d8b6a570cb84 100644
--- a/rust/Makefile
+++ b/rust/Makefile
@@ -383,7 +383,8 @@ bindgen_skip_c_flags := -mno-fp-ret-in-387 -mpreferred-stack-boundary=% \
-fno-inline-functions-called-once -fsanitize=bounds-strict \
-fstrict-flex-arrays=% -fmin-function-alignment=% \
-fzero-init-padding-bits=% -mno-fdpic \
- --param=% --param asan-% -fno-isolate-erroneous-paths-dereference
+ --param=% --param asan-% -fno-isolate-erroneous-paths-dereference \
+ -mno-riscv-attribute
# Because scripts/Makefile.rust is included regardless of whether Rust is enabled,
# we perform this check here to avoid breaking targets that do not yet support Rust builds.
diff --git a/scripts/Makefile.rust b/scripts/Makefile.rust
index 5c12b4b8c8b6..bfdad4a0a3ce 100644
--- a/scripts/Makefile.rust
+++ b/scripts/Makefile.rust
@@ -3,6 +3,7 @@ BINDGEN_TARGET_x86 := x86_64-linux-gnu
BINDGEN_TARGET_arm64 := aarch64-linux-gnu
BINDGEN_TARGET_arm := arm-linux-gnueabi
BINDGEN_TARGET_loongarch := loongarch64-linux-gnusf
+BINDGEN_TARGET_riscv := riscv64-linux-gnu
BINDGEN_TARGET_um := $(BINDGEN_TARGET_$(SUBARCH))
BINDGEN_TARGET := $(BINDGEN_TARGET_$(SRCARCH))
--
2.51.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [PATCH v6 0/4] RISC-V: re-enable gcc + rust builds
2025-12-30 16:47 [PATCH v6 0/4] RISC-V: re-enable gcc + rust builds Asuna Yang
` (3 preceding siblings ...)
2025-12-30 16:47 ` [PATCH v6 4/4] RISC-V: handle extension configs for bindgen, re-enable gcc + rust builds Asuna Yang
@ 2025-12-30 16:58 ` Asuna Yang
2026-01-22 7:20 ` Asuna Yang
5 siblings, 0 replies; 17+ messages in thread
From: Asuna Yang @ 2025-12-30 16:58 UTC (permalink / raw)
To: xinrui.riscv
Cc: a.hindborg, alex, aliceryhl, aou, bjorn3_gh, boqun.feng, conor,
corbet, dakr, gary, jeffbai, jmontleo, justinstitt, linux-doc,
linux-kbuild, linux-kernel, linux-riscv, llvm, lossin, morbo,
nathan, nick.desaulniers+lkml, nsc, ojeda, palmer, pjw,
rabenda.cn, rust-for-linux, tmgross, wangruikang
I am replying using my previous personal email address to cross-verify
that <xinrui.riscv@isrc.iscas.ac.cn> is indeed my own.
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v6 0/4] RISC-V: re-enable gcc + rust builds
2025-12-30 16:47 [PATCH v6 0/4] RISC-V: re-enable gcc + rust builds Asuna Yang
` (4 preceding siblings ...)
2025-12-30 16:58 ` [PATCH v6 0/4] RISC-V: " Asuna Yang
@ 2026-01-22 7:20 ` Asuna Yang
2026-01-24 7:47 ` Paul Walmsley
5 siblings, 1 reply; 17+ messages in thread
From: Asuna Yang @ 2026-01-22 7:20 UTC (permalink / raw)
To: Nathan Chancellor, Nicolas Schier, Miguel Ojeda, Boqun Feng,
Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg,
Alice Ryhl, Trevor Gross, Danilo Krummrich, Nick Desaulniers,
Bill Wendling, Justin Stitt, Paul Walmsley, Palmer Dabbelt,
Albert Ou, Alexandre Ghiti, Jonathan Corbet, Conor Dooley,
Mingcong Bai, Han Gao, Vivian Wang, Jason Montleon
Cc: linux-kbuild, linux-kernel, rust-for-linux, llvm, linux-riscv,
linux-doc
Gently ping. I think this patch is ready for review. Is there anything
else I need to do before merging?
Best regards,
Asuna Yang
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v6 0/4] RISC-V: re-enable gcc + rust builds
2026-01-22 7:20 ` Asuna Yang
@ 2026-01-24 7:47 ` Paul Walmsley
2026-01-29 9:30 ` Conor Dooley
0 siblings, 1 reply; 17+ messages in thread
From: Paul Walmsley @ 2026-01-24 7:47 UTC (permalink / raw)
To: Asuna Yang
Cc: Nathan Chancellor, Nicolas Schier, Miguel Ojeda, Boqun Feng,
Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg,
Alice Ryhl, Trevor Gross, Danilo Krummrich, Nick Desaulniers,
Bill Wendling, Justin Stitt, Paul Walmsley, Palmer Dabbelt,
Albert Ou, Alexandre Ghiti, Jonathan Corbet, Conor Dooley,
Mingcong Bai, Han Gao, Vivian Wang, Jason Montleon, linux-kbuild,
linux-kernel, rust-for-linux, llvm, linux-riscv, linux-doc
Hi Asuna,
On Thu, 22 Jan 2026, Asuna Yang wrote:
> Gently ping. I think this patch is ready for review. Is there anything else I
> need to do before merging?
I guess this should probably go in via the arch/riscv tree? If you agree,
then from a maintenance point of view, it would be good to get some acks
for the first and third patches from the relevant maintainers.
thanks,
- Paul
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v6 0/4] RISC-V: re-enable gcc + rust builds
2026-01-24 7:47 ` Paul Walmsley
@ 2026-01-29 9:30 ` Conor Dooley
0 siblings, 0 replies; 17+ messages in thread
From: Conor Dooley @ 2026-01-29 9:30 UTC (permalink / raw)
To: Paul Walmsley
Cc: Asuna Yang, Nathan Chancellor, Nicolas Schier, Miguel Ojeda,
Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin,
Andreas Hindborg, Alice Ryhl, Trevor Gross, Danilo Krummrich,
Nick Desaulniers, Bill Wendling, Justin Stitt, Palmer Dabbelt,
Albert Ou, Alexandre Ghiti, Jonathan Corbet, Mingcong Bai,
Han Gao, Vivian Wang, Jason Montleon, linux-kbuild, linux-kernel,
rust-for-linux, llvm, linux-riscv, linux-doc
[-- Attachment #1: Type: text/plain, Size: 1053 bytes --]
On Sat, Jan 24, 2026 at 12:47:26AM -0700, Paul Walmsley wrote:
> Hi Asuna,
>
> On Thu, 22 Jan 2026, Asuna Yang wrote:
>
> > Gently ping. I think this patch is ready for review. Is there anything else I
> > need to do before merging?
>
> I guess this should probably go in via the arch/riscv tree? If you agree,
> then from a maintenance point of view, it would be good to get some acks
> for the first and third patches from the relevant maintainers.
Not a rust maintainer of course, but from a "I was involved in this and
haven't replied in a while to the versions" point of view:
Acked-by: Conor Dooley <conor.dooley@microchip.com>
I've just not had the time to test this and so I've been putting off
replying, but the idea is what I wanted to have done and I appreciate
the work done on it by Asuna, so I'm acking it now rather than stalling
until I can test and give an r-b. It's the right thing to do for a !gcc
point of view too in my opinion, even if the possible issues are
unlikely to manifest.
Cheers,
Conor.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v6 4/4] RISC-V: handle extension configs for bindgen, re-enable gcc + rust builds
2025-12-30 16:47 ` [PATCH v6 4/4] RISC-V: handle extension configs for bindgen, re-enable gcc + rust builds Asuna Yang
@ 2026-01-29 13:49 ` Charalampos Mitrodimas
2026-01-29 23:25 ` Nathan Chancellor
2026-02-06 12:13 ` Asuna Yang
0 siblings, 2 replies; 17+ messages in thread
From: Charalampos Mitrodimas @ 2026-01-29 13:49 UTC (permalink / raw)
To: Asuna Yang
Cc: Nathan Chancellor, Nicolas Schier, Miguel Ojeda, Boqun Feng,
Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg,
Alice Ryhl, Trevor Gross, Danilo Krummrich, Nick Desaulniers,
Bill Wendling, Justin Stitt, Paul Walmsley, Palmer Dabbelt,
Albert Ou, Alexandre Ghiti, Jonathan Corbet, Conor Dooley,
Mingcong Bai, Han Gao, Vivian Wang, Jason Montleon, linux-kbuild,
linux-kernel, rust-for-linux, llvm, linux-riscv, linux-doc
Asuna Yang <xinrui.riscv@isrc.iscas.ac.cn> writes:
> Commit 33549fcf37ec ("RISC-V: disallow gcc + rust builds") disabled GCC
> + Rust builds for RISC-V due to differences in extension handling
> compared to LLVM. This commit enables GCC + Rust builds again.
>
> Add `bindgen-option` conditions for the availability of libclang to the
> RISC-V extension Kconfig symbols that depend on the `cc-option`
> function.
>
> For Zicsr/Zifencei special handling, since LLVM/Clang always enables
> these two extensions, either don't pass them to `-march`, or pass them
> explicitly and Rust bindgen libclang must recognize them.
>
> Clang does not support `-mno-riscv-attribute` flag, filter it out to
> resolve error: unknown argument: '-mno-riscv-attribute'.
>
> Define `BINDGEN_TARGET_riscv` to pass the target triplet to Rust bindgen
> libclang for RISC-V to resolve error: unsupported argument 'medany' to
> option '-mcmodel=' for target 'unknown'.
>
> Update the documentation, GCC + Rust builds for RISC-V are now
> maintained.
>
> Acked-by: Miguel Ojeda <ojeda@kernel.org>
> Signed-off-by: Asuna Yang <xinrui.riscv@isrc.iscas.ac.cn>
> ---
> Documentation/rust/arch-support.rst | 2 +-
> arch/riscv/Kconfig | 35 ++++++++++++++++++++++++++++++++++-
> rust/Makefile | 3 ++-
> scripts/Makefile.rust | 1 +
> 4 files changed, 38 insertions(+), 3 deletions(-)
>
> diff --git a/Documentation/rust/arch-support.rst b/Documentation/rust/arch-support.rst
> index 6e6a515d0899..5282e0e174e8 100644
> --- a/Documentation/rust/arch-support.rst
> +++ b/Documentation/rust/arch-support.rst
> @@ -18,7 +18,7 @@ Architecture Level of support Constraints
> ``arm`` Maintained ARMv7 Little Endian only.
> ``arm64`` Maintained Little Endian only.
> ``loongarch`` Maintained \-
> -``riscv`` Maintained ``riscv64`` and LLVM/Clang only.
> +``riscv`` Maintained ``riscv64`` only.
> ``um`` Maintained \-
> ``x86`` Maintained ``x86_64`` only.
> ============= ================ ==============================================
> diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
> index 6b39f37f769a..c869ee07117e 100644
> --- a/arch/riscv/Kconfig
> +++ b/arch/riscv/Kconfig
> @@ -195,7 +195,7 @@ config RISCV
> select HAVE_REGS_AND_STACK_ACCESS_API
> select HAVE_RETHOOK if !XIP_KERNEL
> select HAVE_RSEQ
> - select HAVE_RUST if RUSTC_SUPPORTS_RISCV && CC_IS_CLANG
> + select HAVE_RUST if RUSTC_SUPPORTS_RISCV && TOOLCHAIN_MATCHES_ZICSR_ZIFENCEI
> select HAVE_SAMPLE_FTRACE_DIRECT
> select HAVE_SAMPLE_FTRACE_DIRECT_MULTI
> select HAVE_STACKPROTECTOR
> @@ -619,6 +619,8 @@ config TOOLCHAIN_HAS_V
> depends on !32BIT || $(cc-option,-mabi=ilp32 -march=rv32imv)
> depends on LD_IS_LLD || LD_VERSION >= 23800
> depends on AS_HAS_OPTION_ARCH
> + depends on !RUST || !64BIT || $(bindgen-backend-option,-mabi=lp64 -march=rv64imv)
> + depends on !RUST || !32BIT || $(bindgen-backend-option,-mabi=ilp32 -march=rv32imv)
Hi Asuna!
I'm under the impression that the `!RUST ||` guard here doesn't
actually prevent the `$(bindgen-backend-option,...)` call from being
executed. `$(...)` shell expansions should happen during the textual
substitution phase, before symbol dependency evaluation occurs, check
documentation at kconfig-macro-language.rst lines 228-229.
I did this test:
$ cat /tmp/fake_bindgen
#!/bin/bash
echo "[BINDGEN INVOKED] $(date '+%H:%M:%S') args: $@" >> /tmp/bindgen_calls.log
# Call real bindgen
exec /home/charmitro/.cargo/bin/bindgen "$@"
$ make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- BINDGEN=/tmp/fake_bindgen defconfig
HOSTCC scripts/basic/fixdep
...
*** Default configuration is based on 'defconfig'
#
# configuration written to .config
#
$ linux git:(master) rg CONFIG_RUST .config
...
283:# CONFIG_RUST is not set
...
$ cat /tmp/bindgen_calls.log
[BINDGEN INVOKED] 15:44:44 args: --version workaround-for-0.69.0
[BINDGEN INVOKED] 15:44:44 args: ./scripts/rust_is_available_bindgen_libclang.h
[BINDGEN INVOKED] 15:44:44 args: --version workaround-for-0.69.0
[BINDGEN INVOKED] 15:44:44 args: /dev/null -- -x c --target=riscv64-linux-gnu -mabi=lp64 -march=rv64imv
[BINDGEN INVOKED] 15:44:44 args: /dev/null -- -x c --target=riscv64-linux-gnu -mabi=ilp32 -march=rv32imv
[BINDGEN INVOKED] 15:44:44 args: /dev/null -- -x c --target=riscv64-linux-gnu -mabi=lp64 -march=rv64ima_zabha
[BINDGEN INVOKED] 15:44:44 args: /dev/null -- -x c --target=riscv64-linux-gnu -mabi=ilp32 -march=rv32ima_zabha
[BINDGEN INVOKED] 15:44:45 args: /dev/null -- -x c --target=riscv64-linux-gnu -mabi=lp64 -march=rv64ima_zacas
[BINDGEN INVOKED] 15:44:45 args: /dev/null -- -x c --target=riscv64-linux-gnu -mabi=ilp32 -march=rv32ima_zacas
[BINDGEN INVOKED] 15:44:45 args: /dev/null -- -x c --target=riscv64-linux-gnu -mabi=lp64 -march=rv64ima_zbb
[BINDGEN INVOKED] 15:44:45 args: /dev/null -- -x c --target=riscv64-linux-gnu -mabi=ilp32 -march=rv32ima_zbb
[BINDGEN INVOKED] 15:44:45 args: /dev/null -- -x c --target=riscv64-linux-gnu -mabi=lp64 -march=rv64ima_zba
[BINDGEN INVOKED] 15:44:45 args: /dev/null -- -x c --target=riscv64-linux-gnu -mabi=ilp32 -march=rv32ima_zba
[BINDGEN INVOKED] 15:44:45 args: /dev/null -- -x c --target=riscv64-linux-gnu -mabi=lp64 -march=rv64ima_zbc
[BINDGEN INVOKED] 15:44:46 args: /dev/null -- -x c --target=riscv64-linux-gnu -mabi=ilp32 -march=rv32ima_zbc
[BINDGEN INVOKED] 15:44:46 args: /dev/null -- -x c --target=riscv64-linux-gnu -mabi=lp64 -march=rv64ima_zbkb
[BINDGEN INVOKED] 15:44:46 args: /dev/null -- -x c --target=riscv64-linux-gnu -mabi=ilp32 -march=rv32ima_zbkb
[BINDGEN INVOKED] 15:44:46 args: /dev/null -- -x c --target=riscv64-linux-gnu -mabi=lp64 -march=rv64ima_zicsr_zifencei
[BINDGEN INVOKED] 15:44:46 args: /dev/null -- -x c --target=riscv64-linux-gnu -mabi=ilp32 -march=rv32ima_zicsr_zifencei
So, CONFIG_RUST not set, yet bindgen was invoked. Not sure if that is
intentional though.
Cheers,
C. Mitrodimas
>
> config RISCV_ISA_V
> bool "Vector extension support"
> @@ -683,6 +685,8 @@ config TOOLCHAIN_HAS_ZABHA
> depends on !64BIT || $(cc-option,-mabi=lp64 -march=rv64ima_zabha)
> depends on !32BIT || $(cc-option,-mabi=ilp32 -march=rv32ima_zabha)
> depends on AS_HAS_OPTION_ARCH
> + depends on !RUST || !64BIT || $(bindgen-backend-option,-mabi=lp64 -march=rv64ima_zabha)
> + depends on !RUST || !32BIT || $(bindgen-backend-option,-mabi=ilp32 -march=rv32ima_zabha)
>
> config RISCV_ISA_ZABHA
> bool "Zabha extension support for atomic byte/halfword operations"
> @@ -701,6 +705,8 @@ config TOOLCHAIN_HAS_ZACAS
> depends on !64BIT || $(cc-option,-mabi=lp64 -march=rv64ima_zacas)
> depends on !32BIT || $(cc-option,-mabi=ilp32 -march=rv32ima_zacas)
> depends on AS_HAS_OPTION_ARCH
> + depends on !RUST || !64BIT || $(bindgen-backend-option,-mabi=lp64 -march=rv64ima_zacas)
> + depends on !RUST || !32BIT || $(bindgen-backend-option,-mabi=ilp32 -march=rv32ima_zacas)
>
> config RISCV_ISA_ZACAS
> bool "Zacas extension support for atomic CAS"
> @@ -719,6 +725,8 @@ config TOOLCHAIN_HAS_ZBB
> depends on !32BIT || $(cc-option,-mabi=ilp32 -march=rv32ima_zbb)
> depends on LD_IS_LLD || LD_VERSION >= 23900
> depends on AS_HAS_OPTION_ARCH
> + depends on !RUST || !64BIT || $(bindgen-backend-option,-mabi=lp64 -march=rv64ima_zbb)
> + depends on !RUST || !32BIT || $(bindgen-backend-option,-mabi=ilp32 -march=rv32ima_zbb)
>
> # This symbol indicates that the toolchain supports all v1.0 vector crypto
> # extensions, including Zvk*, Zvbb, and Zvbc. LLVM added all of these at once.
> @@ -734,6 +742,8 @@ config TOOLCHAIN_HAS_ZBA
> depends on !32BIT || $(cc-option,-mabi=ilp32 -march=rv32ima_zba)
> depends on LD_IS_LLD || LD_VERSION >= 23900
> depends on AS_HAS_OPTION_ARCH
> + depends on !RUST || !64BIT || $(bindgen-backend-option,-mabi=lp64 -march=rv64ima_zba)
> + depends on !RUST || !32BIT || $(bindgen-backend-option,-mabi=ilp32 -march=rv32ima_zba)
>
> config RISCV_ISA_ZBA
> bool "Zba extension support for bit manipulation instructions"
> @@ -769,6 +779,8 @@ config TOOLCHAIN_HAS_ZBC
> depends on !32BIT || $(cc-option,-mabi=ilp32 -march=rv32ima_zbc)
> depends on LD_IS_LLD || LD_VERSION >= 23900
> depends on AS_HAS_OPTION_ARCH
> + depends on !RUST || !64BIT || $(bindgen-backend-option,-mabi=lp64 -march=rv64ima_zbc)
> + depends on !RUST || !32BIT || $(bindgen-backend-option,-mabi=ilp32 -march=rv32ima_zbc)
>
> config RISCV_ISA_ZBC
> bool "Zbc extension support for carry-less multiplication instructions"
> @@ -792,6 +804,8 @@ config TOOLCHAIN_HAS_ZBKB
> depends on !32BIT || $(cc-option,-mabi=ilp32 -march=rv32ima_zbkb)
> depends on LD_IS_LLD || LD_VERSION >= 23900
> depends on AS_HAS_OPTION_ARCH
> + depends on !RUST || !64BIT || $(bindgen-backend-option,-mabi=lp64 -march=rv64ima_zbkb)
> + depends on !RUST || !32BIT || $(bindgen-backend-option,-mabi=ilp32 -march=rv32ima_zbkb)
>
> config RISCV_ISA_ZBKB
> bool "Zbkb extension support for bit manipulation instructions"
> @@ -893,6 +907,25 @@ config TOOLCHAIN_NEEDS_OLD_ISA_SPEC
> versions of clang and GCC to be passed to GAS, which has the same result
> as passing zicsr and zifencei to -march.
>
> +config RUST_BINDGEN_HAS_ZICSR_ZIFENCEI
> + def_bool y
> + depends on !64BIT || $(bindgen-backend-option,-mabi=lp64 -march=rv64ima_zicsr_zifencei)
> + depends on !32BIT || $(bindgen-backend-option,-mabi=ilp32 -march=rv32ima_zicsr_zifencei)
> +
> +config TOOLCHAIN_MATCHES_ZICSR_ZIFENCEI
> + def_bool y
> + # https://github.com/llvm/llvm-project/commit/22e199e6afb1263c943c0c0d4498694e15bf8a16
> + depends on TOOLCHAIN_NEEDS_OLD_ISA_SPEC || !TOOLCHAIN_NEEDS_EXPLICIT_ZICSR_ZIFENCEI || RUST_BINDGEN_HAS_ZICSR_ZIFENCEI
> + help
> + LLVM/Clang >= 17.0.0 starts recognizing Zicsr/Zifencei in -march, passing
> + them to -march doesn't generate an error anymore, and passing them or not
> + doesn't have any real difference, it still follows ISA before version
> + 20190608 - Zicsr/Zifencei are included in base ISA.
> +
> + The current latest version of LLVM/Clang still does not require explicit
> + Zicsr/Zifencei to enable these two extensions, Clang just accepts them in
> + -march and then silently ignores them.
> +
> config FPU
> bool "FPU support"
> default y
> diff --git a/rust/Makefile b/rust/Makefile
> index 37b4205afb70..d8b6a570cb84 100644
> --- a/rust/Makefile
> +++ b/rust/Makefile
> @@ -383,7 +383,8 @@ bindgen_skip_c_flags := -mno-fp-ret-in-387 -mpreferred-stack-boundary=% \
> -fno-inline-functions-called-once -fsanitize=bounds-strict \
> -fstrict-flex-arrays=% -fmin-function-alignment=% \
> -fzero-init-padding-bits=% -mno-fdpic \
> - --param=% --param asan-% -fno-isolate-erroneous-paths-dereference
> + --param=% --param asan-% -fno-isolate-erroneous-paths-dereference \
> + -mno-riscv-attribute
>
> # Because scripts/Makefile.rust is included regardless of whether Rust is enabled,
> # we perform this check here to avoid breaking targets that do not yet support Rust builds.
> diff --git a/scripts/Makefile.rust b/scripts/Makefile.rust
> index 5c12b4b8c8b6..bfdad4a0a3ce 100644
> --- a/scripts/Makefile.rust
> +++ b/scripts/Makefile.rust
> @@ -3,6 +3,7 @@ BINDGEN_TARGET_x86 := x86_64-linux-gnu
> BINDGEN_TARGET_arm64 := aarch64-linux-gnu
> BINDGEN_TARGET_arm := arm-linux-gnueabi
> BINDGEN_TARGET_loongarch := loongarch64-linux-gnusf
> +BINDGEN_TARGET_riscv := riscv64-linux-gnu
> BINDGEN_TARGET_um := $(BINDGEN_TARGET_$(SUBARCH))
> BINDGEN_TARGET := $(BINDGEN_TARGET_$(SRCARCH))
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v6 1/4] rust: export BINDGEN_TARGET from a separate Makefile
2025-12-30 16:47 ` [PATCH v6 1/4] rust: export BINDGEN_TARGET from a separate Makefile Asuna Yang
@ 2026-01-29 22:35 ` Nathan Chancellor
0 siblings, 0 replies; 17+ messages in thread
From: Nathan Chancellor @ 2026-01-29 22:35 UTC (permalink / raw)
To: Asuna Yang
Cc: Nicolas Schier, Miguel Ojeda, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
Trevor Gross, Danilo Krummrich, Nick Desaulniers, Bill Wendling,
Justin Stitt, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Alexandre Ghiti, Jonathan Corbet, Conor Dooley, Mingcong Bai,
Han Gao, Vivian Wang, Jason Montleon, linux-kbuild, linux-kernel,
rust-for-linux, llvm, linux-riscv, linux-doc
On Tue, Dec 30, 2025 at 05:47:54PM +0100, Asuna Yang wrote:
> A subsequent commit will add a new function `bindgen-option` to
> `scripts/Kconfig.include`. The bindgen backend requires the `--target`
> option for cross compiling, but variable `BINDGEN_TARGET` in
> `rust/Makefile` cannot be exported to `scripts/Kconfig.include`.
>
> Therefore, move this variable to a separate new `Makefile.rust` file and
> include it from `scripts/Makefile` to make the exported variable
> available for use in Kconfig. Place the include in the `need-compiler`
> branch to avoid including it in irrelevant make targets.
>
> Since the new file name is `Makefile.rust`, it matches an existing
> MAINTAINERS rule `scripts/*rust*`, so no modification to the MAINTAINERS
> file is needed.
>
> Signed-off-by: Asuna Yang <xinrui.riscv@isrc.iscas.ac.cn>
Acked-by: Nathan Chancellor <nathan@kernel.org>
> ---
> Makefile | 3 ++-
> rust/Makefile | 8 --------
> scripts/Makefile.rust | 9 +++++++++
> 3 files changed, 11 insertions(+), 9 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index 27ce077520fe..9754d7add947 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -718,9 +718,10 @@ ifneq ($(findstring clang,$(CC_VERSION_TEXT)),)
> include $(srctree)/scripts/Makefile.clang
> endif
>
> +ifdef need-compiler
> +include $(srctree)/scripts/Makefile.rust
> # Include this also for config targets because some architectures need
> # cc-cross-prefix to determine CROSS_COMPILE.
> -ifdef need-compiler
> include $(srctree)/scripts/Makefile.compiler
Not that it is a big deal but it would make the diff simpler if the Rust
makefile was added after the compiler one, both for alphabetical reasons
and it would not necessitate moving the comment (even if it mostly
applies just to the compiler include).
> endif
>
> diff --git a/rust/Makefile b/rust/Makefile
> index 5d357dce1704..2603b34f9833 100644
> --- a/rust/Makefile
> +++ b/rust/Makefile
> @@ -385,14 +385,6 @@ bindgen_skip_c_flags := -mno-fp-ret-in-387 -mpreferred-stack-boundary=% \
> -fzero-init-padding-bits=% -mno-fdpic \
> --param=% --param asan-% -fno-isolate-erroneous-paths-dereference
>
> -# Derived from `scripts/Makefile.clang`.
> -BINDGEN_TARGET_x86 := x86_64-linux-gnu
> -BINDGEN_TARGET_arm64 := aarch64-linux-gnu
> -BINDGEN_TARGET_arm := arm-linux-gnueabi
> -BINDGEN_TARGET_loongarch := loongarch64-linux-gnusf
> -BINDGEN_TARGET_um := $(BINDGEN_TARGET_$(SUBARCH))
> -BINDGEN_TARGET := $(BINDGEN_TARGET_$(SRCARCH))
> -
> # All warnings are inhibited since GCC builds are very experimental,
> # many GCC warnings are not supported by Clang, they may only appear in
> # some configurations, with new GCC versions, etc.
> diff --git a/scripts/Makefile.rust b/scripts/Makefile.rust
> new file mode 100644
> index 000000000000..5c12b4b8c8b6
> --- /dev/null
> +++ b/scripts/Makefile.rust
> @@ -0,0 +1,9 @@
> +# Derived from `scripts/Makefile.clang`.
> +BINDGEN_TARGET_x86 := x86_64-linux-gnu
> +BINDGEN_TARGET_arm64 := aarch64-linux-gnu
> +BINDGEN_TARGET_arm := arm-linux-gnueabi
> +BINDGEN_TARGET_loongarch := loongarch64-linux-gnusf
> +BINDGEN_TARGET_um := $(BINDGEN_TARGET_$(SUBARCH))
> +BINDGEN_TARGET := $(BINDGEN_TARGET_$(SRCARCH))
> +
> +export BINDGEN_TARGET
>
> --
> 2.51.1
>
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v6 2/4] rust: generate a fatal error if BINDGEN_TARGET is undefined
2025-12-30 16:47 ` [PATCH v6 2/4] rust: generate a fatal error if BINDGEN_TARGET is undefined Asuna Yang
@ 2026-01-29 22:40 ` Nathan Chancellor
2026-02-06 12:41 ` Asuna Yang
0 siblings, 1 reply; 17+ messages in thread
From: Nathan Chancellor @ 2026-01-29 22:40 UTC (permalink / raw)
To: Asuna Yang
Cc: Nicolas Schier, Miguel Ojeda, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
Trevor Gross, Danilo Krummrich, Nick Desaulniers, Bill Wendling,
Justin Stitt, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Alexandre Ghiti, Jonathan Corbet, Conor Dooley, Mingcong Bai,
Han Gao, Vivian Wang, Jason Montleon, linux-kbuild, linux-kernel,
rust-for-linux, llvm, linux-riscv, linux-doc
On Tue, Dec 30, 2025 at 05:47:55PM +0100, Asuna Yang wrote:
> Generate a friendly fatal error if the target triplet is undefined for
> bindgen, rather than having the compiler generate obscure error messages
> during the build stage.
>
> `BINDGEN_TARGET` is actually defined in `scripts/Makefile.rust`, but the
> file is included regardless of whether Rust is enabled, so perform this
> check in `rust/Makefile` to avoid breaking targets that do not yet
> support Rust builds.
>
> This piece of code is copied from `scripts/Makefile.clang`.
>
> Before this commit, error messages might look like:
>
> error: unknown argument: '-mno-riscv-attribute'
> error: unsupported argument 'medany' to option '-mcmodel=' for target
> 'unknown'
> error: unsupported option '-march=' for target ''
> error: unsupported option '-mno-save-restore' for target ''
> error: unknown target triple 'unknown'
> panicked at bindgen/ir/context.rs:562:15:
> libclang error; possible causes include:
> - Invalid flag syntax
> - Unrecognized flags
> - Invalid flag arguments
> - File I/O errors
> - Host vs. target architecture mismatch
>
> Acked-by: Miguel Ojeda <ojeda@kernel.org>
> Signed-off-by: Asuna Yang <xinrui.riscv@isrc.iscas.ac.cn>
> ---
> rust/Makefile | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/rust/Makefile b/rust/Makefile
> index 2603b34f9833..37b4205afb70 100644
> --- a/rust/Makefile
> +++ b/rust/Makefile
> @@ -385,6 +385,12 @@ bindgen_skip_c_flags := -mno-fp-ret-in-387 -mpreferred-stack-boundary=% \
> -fzero-init-padding-bits=% -mno-fdpic \
> --param=% --param asan-% -fno-isolate-erroneous-paths-dereference
>
> +# Because scripts/Makefile.rust is included regardless of whether Rust is enabled,
> +# we perform this check here to avoid breaking targets that do not yet support Rust builds.
This might read a little better if it were
scripts/Makefile.rust is included ..., so we perform ...
instead of
Because ..., we perform ...
or at the very least reversing the phrases
We perform ... because ...
But that could just be personal preference.
> +ifeq ($(BINDGEN_TARGET),)
> +$(error add '--target=' option to scripts/Makefile.rust)
> +endif
> +
> # All warnings are inhibited since GCC builds are very experimental,
> # many GCC warnings are not supported by Clang, they may only appear in
> # some configurations, with new GCC versions, etc.
>
> --
> 2.51.1
>
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v6 3/4] rust: add a Kconfig function to test for support of bindgen options
2025-12-30 16:47 ` [PATCH v6 3/4] rust: add a Kconfig function to test for support of bindgen options Asuna Yang
@ 2026-01-29 22:41 ` Nathan Chancellor
0 siblings, 0 replies; 17+ messages in thread
From: Nathan Chancellor @ 2026-01-29 22:41 UTC (permalink / raw)
To: Asuna Yang
Cc: Nicolas Schier, Miguel Ojeda, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
Trevor Gross, Danilo Krummrich, Nick Desaulniers, Bill Wendling,
Justin Stitt, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Alexandre Ghiti, Jonathan Corbet, Conor Dooley, Mingcong Bai,
Han Gao, Vivian Wang, Jason Montleon, linux-kbuild, linux-kernel,
rust-for-linux, llvm, linux-riscv, linux-doc
On Tue, Dec 30, 2025 at 05:47:56PM +0100, Asuna Yang wrote:
> Add a new `bindgen-backend-option` Kconfig function to test whether the
> bindgen backend supports a given flag.
>
> A subsequent commit will use this function to test for RISC-V extension
> flags.
>
> Signed-off-by: Asuna Yang <xinrui.riscv@isrc.iscas.ac.cn>
> ---
Acked-by: Nathan Chancellor <nathan@kernel.org>
> scripts/Kconfig.include | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/scripts/Kconfig.include b/scripts/Kconfig.include
> index d42042b6c9e2..9954b8093fab 100644
> --- a/scripts/Kconfig.include
> +++ b/scripts/Kconfig.include
> @@ -78,3 +78,8 @@ rustc-llvm-version := $(shell,$(srctree)/scripts/rustc-llvm-version.sh $(RUSTC))
> # If you are testing for unstable features, consider testing RUSTC_VERSION
> # instead, as features may have different completeness while available.
> rustc-option = $(success,trap "rm -rf .tmp_$$" EXIT; mkdir .tmp_$$; $(RUSTC) $(1) --crate-type=rlib /dev/null --out-dir=.tmp_$$ -o .tmp_$$/tmp.rlib)
> +
> +# $(bindgen-backend-option,<flag>)
> +# Return y if bindgen backend supports <flag>, n otherwise
> +# For now, the backend refers only to libclang, so more specifically, this function tests whether the given flag is recognized by the libclang used by bindgen.
> +bindgen-backend-option = $(success,$(BINDGEN) /dev/null -- -x c --target=$(BINDGEN_TARGET) $(1))
>
> --
> 2.51.1
>
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v6 4/4] RISC-V: handle extension configs for bindgen, re-enable gcc + rust builds
2026-01-29 13:49 ` Charalampos Mitrodimas
@ 2026-01-29 23:25 ` Nathan Chancellor
2026-02-06 12:13 ` Asuna Yang
1 sibling, 0 replies; 17+ messages in thread
From: Nathan Chancellor @ 2026-01-29 23:25 UTC (permalink / raw)
To: Charalampos Mitrodimas
Cc: Asuna Yang, Nicolas Schier, Miguel Ojeda, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
Trevor Gross, Danilo Krummrich, Nick Desaulniers, Bill Wendling,
Justin Stitt, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Alexandre Ghiti, Jonathan Corbet, Conor Dooley, Mingcong Bai,
Han Gao, Vivian Wang, Jason Montleon, linux-kbuild, linux-kernel,
rust-for-linux, llvm, linux-riscv, linux-doc
On Thu, Jan 29, 2026 at 01:49:56PM +0000, Charalampos Mitrodimas wrote:
> I'm under the impression that the `!RUST ||` guard here doesn't
> actually prevent the `$(bindgen-backend-option,...)` call from being
> executed. `$(...)` shell expansions should happen during the textual
> substitution phase, before symbol dependency evaluation occurs, check
> documentation at kconfig-macro-language.rst lines 228-229.
>
> I did this test:
> $ cat /tmp/fake_bindgen
> #!/bin/bash
> echo "[BINDGEN INVOKED] $(date '+%H:%M:%S') args: $@" >> /tmp/bindgen_calls.log
> # Call real bindgen
> exec /home/charmitro/.cargo/bin/bindgen "$@"
>
> $ make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- BINDGEN=/tmp/fake_bindgen defconfig
> HOSTCC scripts/basic/fixdep
> ...
> *** Default configuration is based on 'defconfig'
> #
> # configuration written to .config
> #
>
> $ linux git:(master) rg CONFIG_RUST .config
> ...
> 283:# CONFIG_RUST is not set
> ...
>
> $ cat /tmp/bindgen_calls.log
> [BINDGEN INVOKED] 15:44:44 args: --version workaround-for-0.69.0
> [BINDGEN INVOKED] 15:44:44 args: ./scripts/rust_is_available_bindgen_libclang.h
> [BINDGEN INVOKED] 15:44:44 args: --version workaround-for-0.69.0
> [BINDGEN INVOKED] 15:44:44 args: /dev/null -- -x c --target=riscv64-linux-gnu -mabi=lp64 -march=rv64imv
> [BINDGEN INVOKED] 15:44:44 args: /dev/null -- -x c --target=riscv64-linux-gnu -mabi=ilp32 -march=rv32imv
> [BINDGEN INVOKED] 15:44:44 args: /dev/null -- -x c --target=riscv64-linux-gnu -mabi=lp64 -march=rv64ima_zabha
> [BINDGEN INVOKED] 15:44:44 args: /dev/null -- -x c --target=riscv64-linux-gnu -mabi=ilp32 -march=rv32ima_zabha
> [BINDGEN INVOKED] 15:44:45 args: /dev/null -- -x c --target=riscv64-linux-gnu -mabi=lp64 -march=rv64ima_zacas
> [BINDGEN INVOKED] 15:44:45 args: /dev/null -- -x c --target=riscv64-linux-gnu -mabi=ilp32 -march=rv32ima_zacas
> [BINDGEN INVOKED] 15:44:45 args: /dev/null -- -x c --target=riscv64-linux-gnu -mabi=lp64 -march=rv64ima_zbb
> [BINDGEN INVOKED] 15:44:45 args: /dev/null -- -x c --target=riscv64-linux-gnu -mabi=ilp32 -march=rv32ima_zbb
> [BINDGEN INVOKED] 15:44:45 args: /dev/null -- -x c --target=riscv64-linux-gnu -mabi=lp64 -march=rv64ima_zba
> [BINDGEN INVOKED] 15:44:45 args: /dev/null -- -x c --target=riscv64-linux-gnu -mabi=ilp32 -march=rv32ima_zba
> [BINDGEN INVOKED] 15:44:45 args: /dev/null -- -x c --target=riscv64-linux-gnu -mabi=lp64 -march=rv64ima_zbc
> [BINDGEN INVOKED] 15:44:46 args: /dev/null -- -x c --target=riscv64-linux-gnu -mabi=ilp32 -march=rv32ima_zbc
> [BINDGEN INVOKED] 15:44:46 args: /dev/null -- -x c --target=riscv64-linux-gnu -mabi=lp64 -march=rv64ima_zbkb
> [BINDGEN INVOKED] 15:44:46 args: /dev/null -- -x c --target=riscv64-linux-gnu -mabi=ilp32 -march=rv32ima_zbkb
> [BINDGEN INVOKED] 15:44:46 args: /dev/null -- -x c --target=riscv64-linux-gnu -mabi=lp64 -march=rv64ima_zicsr_zifencei
> [BINDGEN INVOKED] 15:44:46 args: /dev/null -- -x c --target=riscv64-linux-gnu -mabi=ilp32 -march=rv32ima_zicsr_zifencei
>
> So, CONFIG_RUST not set, yet bindgen was invoked. Not sure if that is
> intentional though.
While I have only recently adopted Kconfig, the section you pointed to
in kconfig-macro-language.rst makes it seem like this is expected. I
read that to mean all shell commands are going to be evaluated and
effectively turned into "y" and "n" before dependencies are evaluated.
You can test this with something like:
if RUST
config RUST_FOOBAR
def_bool $(bindgen-backend-option,-obviously-not-supported)
endif
added in init/Kconfig and running your fake bindgen.
While this is obviously a little wasteful, I suspect this drastically
simplifies the shell commands part of Kconfig for no change in runtime
behavior. The way that the dependency is currently written ensures that
either the result of bindgen-backend-option matters for the sake of
saying an extension is fully supported by the toolchain (when Rust is
enabled) or it does not matter (because Rust is not enabled).
Cheers,
Nathan
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v6 4/4] RISC-V: handle extension configs for bindgen, re-enable gcc + rust builds
2026-01-29 13:49 ` Charalampos Mitrodimas
2026-01-29 23:25 ` Nathan Chancellor
@ 2026-02-06 12:13 ` Asuna Yang
2026-02-06 12:24 ` Charalampos Mitrodimas
1 sibling, 1 reply; 17+ messages in thread
From: Asuna Yang @ 2026-02-06 12:13 UTC (permalink / raw)
To: Charalampos Mitrodimas
Cc: Nathan Chancellor, Nicolas Schier, Miguel Ojeda, Boqun Feng,
Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg,
Alice Ryhl, Trevor Gross, Danilo Krummrich, Nick Desaulniers,
Bill Wendling, Justin Stitt, Paul Walmsley, Palmer Dabbelt,
Albert Ou, Alexandre Ghiti, Jonathan Corbet, Conor Dooley,
Mingcong Bai, Han Gao, Vivian Wang, Jason Montleon, linux-kbuild,
linux-kernel, rust-for-linux, llvm, linux-riscv, linux-doc
On 1/29/26 21:49, Charalampos Mitrodimas wrote:
> I'm under the impression that the `!RUST ||` guard here doesn't
> actually prevent the `$(bindgen-backend-option,...)` call from being
> executed. `$(...)` shell expansions should happen during the textual
> substitution phase, before symbol dependency evaluation occurs, check
> documentation at kconfig-macro-language.rst lines 228-229.
I suppose this is unavoidable if we decide to probe options rather than
rely on version numbers.
Similar issue also occurs in `cc-option`, for example:
depends on !64BIT || $(cc-option,-mabi=lp64 -march=rv64imv)
depends on !32BIT || $(cc-option,-mabi=ilp32 -march=rv32imv)
For 64-bit builds, `-march=rv32imv` will still be probed; for 32-bit
builds, `-march=rv64imv` will still be probed.
I agree with Nathan that this trivial waste is worth it for the sake of
simplicity.
Best regards,
Asuna
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v6 4/4] RISC-V: handle extension configs for bindgen, re-enable gcc + rust builds
2026-02-06 12:13 ` Asuna Yang
@ 2026-02-06 12:24 ` Charalampos Mitrodimas
0 siblings, 0 replies; 17+ messages in thread
From: Charalampos Mitrodimas @ 2026-02-06 12:24 UTC (permalink / raw)
To: Asuna Yang
Cc: Nathan Chancellor, Nicolas Schier, Miguel Ojeda, Boqun Feng,
Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg,
Alice Ryhl, Trevor Gross, Danilo Krummrich, Nick Desaulniers,
Bill Wendling, Justin Stitt, Paul Walmsley, Palmer Dabbelt,
Albert Ou, Alexandre Ghiti, Jonathan Corbet, Conor Dooley,
Mingcong Bai, Han Gao, Vivian Wang, Jason Montleon, linux-kbuild,
linux-kernel, rust-for-linux, llvm, linux-riscv, linux-doc
Asuna Yang <xinrui.riscv@isrc.iscas.ac.cn> writes:
> On 1/29/26 21:49, Charalampos Mitrodimas wrote:
>
>> I'm under the impression that the `!RUST ||` guard here doesn't
>> actually prevent the `$(bindgen-backend-option,...)` call from being
>> executed. `$(...)` shell expansions should happen during the textual
>> substitution phase, before symbol dependency evaluation occurs, check
>> documentation at kconfig-macro-language.rst lines 228-229.
>
> I suppose this is unavoidable if we decide to probe options rather
> than rely on version numbers.
>
> Similar issue also occurs in `cc-option`, for example:
>
> depends on !64BIT || $(cc-option,-mabi=lp64 -march=rv64imv)
> depends on !32BIT || $(cc-option,-mabi=ilp32 -march=rv32imv)
>
> For 64-bit builds, `-march=rv32imv` will still be probed; for 32-bit
> builds, `-march=rv64imv` will still be probed.
>
> I agree with Nathan that this trivial waste is worth it for the sake
> of simplicity.
Understood. Seems not worth it at all.
>
> Best regards,
> Asuna
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v6 2/4] rust: generate a fatal error if BINDGEN_TARGET is undefined
2026-01-29 22:40 ` Nathan Chancellor
@ 2026-02-06 12:41 ` Asuna Yang
0 siblings, 0 replies; 17+ messages in thread
From: Asuna Yang @ 2026-02-06 12:41 UTC (permalink / raw)
To: Nathan Chancellor
Cc: xinrui.riscv, Nicolas Schier, Miguel Ojeda, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
Trevor Gross, Danilo Krummrich, Nick Desaulniers, Bill Wendling,
Justin Stitt, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Alexandre Ghiti, Jonathan Corbet, Conor Dooley, Mingcong Bai,
Han Gao, Vivian Wang, Jason Montleon, linux-kbuild, linux-kernel,
rust-for-linux, llvm, linux-riscv, linux-doc
On 1/30/26 06:40, Nathan Chancellor wrote:
> This might read a little better if it were
>
> scripts/Makefile.rust is included ..., so we perform ...
>
> instead of
>
> Because ..., we perform ...
>
> or at the very least reversing the phrases
>
> We perform ... because ...
>
> But that could just be personal preference.
I think you're right. Since I'm not a native English speaker, some of my
phrasing might not sound quite natural.
However, considering this isn't really a big deal, I'd prefer to skip
submitting a new patch to fix it. Unlike GitHub, I'm concerned that a
new patch might make too much noise on the mailing list and interrupt
the thread.
Or if someone could help modify it when merging this patch, that would
be better! I've read the docs, and the kernel tree seems to allow this
practice.
Best regards,
Asuna
^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2026-02-06 12:42 UTC | newest]
Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-30 16:47 [PATCH v6 0/4] RISC-V: re-enable gcc + rust builds Asuna Yang
2025-12-30 16:47 ` [PATCH v6 1/4] rust: export BINDGEN_TARGET from a separate Makefile Asuna Yang
2026-01-29 22:35 ` Nathan Chancellor
2025-12-30 16:47 ` [PATCH v6 2/4] rust: generate a fatal error if BINDGEN_TARGET is undefined Asuna Yang
2026-01-29 22:40 ` Nathan Chancellor
2026-02-06 12:41 ` Asuna Yang
2025-12-30 16:47 ` [PATCH v6 3/4] rust: add a Kconfig function to test for support of bindgen options Asuna Yang
2026-01-29 22:41 ` Nathan Chancellor
2025-12-30 16:47 ` [PATCH v6 4/4] RISC-V: handle extension configs for bindgen, re-enable gcc + rust builds Asuna Yang
2026-01-29 13:49 ` Charalampos Mitrodimas
2026-01-29 23:25 ` Nathan Chancellor
2026-02-06 12:13 ` Asuna Yang
2026-02-06 12:24 ` Charalampos Mitrodimas
2025-12-30 16:58 ` [PATCH v6 0/4] RISC-V: " Asuna Yang
2026-01-22 7:20 ` Asuna Yang
2026-01-24 7:47 ` Paul Walmsley
2026-01-29 9:30 ` Conor Dooley
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox