[PATCH v3 5/6] ARM: rust: Enable Rust support for ARMv4T
Karl Mehltretter
kmehltretter at gmail.com
Tue Oct 13 13:31:39 PDT 2026
The armv5te target emits clz and blx, which ARMv4T lacks. Use rustc's
armv4t-unknown-linux-gnueabi target for CPU_32v4T. A combined ARMv4T and
ARMv5 kernel then uses ARMv4T code for both C and Rust.
Plain ARMv4 remains excluded because rustc has no matching Linux target.
This also depends on the preceding 16-bit xchg() support for pre-ARMv6
CPUs.
Tested the Rust samples, KUnit suites and doctests in QEMU sx1 (ARM925T)
with omap1_defconfig and on a Microchip SAM9X75 Curiosity board with
at91_dt_defconfig.
Assisted-by: LLM
Signed-off-by: Karl Mehltretter <kmehltretter at gmail.com>
---
Documentation/rust/arch-support.rst | 8 ++++----
arch/arm/Kconfig | 2 +-
arch/arm/Makefile | 1 +
3 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/Documentation/rust/arch-support.rst b/Documentation/rust/arch-support.rst
index d6d1bef44c8f..3f39cf55b6f4 100644
--- a/Documentation/rust/arch-support.rst
+++ b/Documentation/rust/arch-support.rst
@@ -12,15 +12,15 @@ which uses ``libclang``.
Below is a general summary of architectures that currently work. Level of
support corresponds to ``S`` values in the ``MAINTAINERS`` file.
-============= ================ ==============================================
+============= ================ ======================================================
Architecture Level of support Constraints
-============= ================ ==============================================
-``arm`` Maintained ARMv5TE, ARMv6K and ARMv7, Little Endian only.
+============= ================ ======================================================
+``arm`` Maintained ARMv4T, ARMv5TE, ARMv6K and ARMv7, Little Endian only.
``arm64`` Maintained Little Endian only.
``loongarch`` Maintained \-
``riscv`` Maintained ``riscv64`` and LLVM/Clang only.
``s390`` Maintained ``CONFIG_EXPOLINE`` must be disabled.
``um`` Maintained \-
``x86`` Maintained ``x86_64`` only.
-============= ================ ==============================================
+============= ================ ======================================================
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 9275a85f95e9..cf782fc04872 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -176,7 +176,7 @@ config ARM
config ARM_RUST_TARGET
def_bool y
depends on (CPU_32v6K && !CPU_V6) || \
- (CPU_32v5 && !CPU_32v4T && !CPU_32v4)
+ ((CPU_32v5 || CPU_32v4T) && !CPU_32v4)
config ARM_HAS_GROUP_RELOCS
def_bool !COMPILE_TEST
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index 168779e9e93d..a72843890241 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -77,6 +77,7 @@ arch-$(CONFIG_CPU_32v3) :=-march=armv3m
# the +v6 of the generic target, so older CPUs need their own target.
rust-target-y :=arm-unknown-linux-gnueabi
rust-target-$(CONFIG_CPU_32v5) :=armv5te-unknown-linux-gnueabi
+rust-target-$(CONFIG_CPU_32v4T) :=armv4t-unknown-linux-gnueabi
# Note that GCC does not numerically define an architecture version
# macro, but instead defines a whole series of macros which makes
--
2.39.5 (Apple Git-154)
More information about the linux-arm-kernel
mailing list