aboutsummaryrefslogtreecommitdiffstats
path: root/rust/compiler_builtins.rs
diff options
context:
space:
mode:
authorChristian Schrrefl <[email protected]>2025-01-30 23:03:45 +0000
committerRussell King (Oracle) <[email protected]>2025-03-26 13:31:16 +0000
commitccb8ce526807fcbd4578d6619100d8ec48769ea8 (patch)
treeed5866eb6449aa0faca7adaef095eebcf46ae051 /rust/compiler_builtins.rs
parentARM: 9439/1: arm32: simplify ARM_MMU_KEEP usage (diff)
downloadkernel-ccb8ce526807fcbd4578d6619100d8ec48769ea8.tar.gz
kernel-ccb8ce526807fcbd4578d6619100d8ec48769ea8.zip
ARM: 9441/1: rust: Enable Rust support for ARMv7
This commit allows building ARMv7 kernels with Rust support. The rust core library expects some __eabi_... functions that are not implemented in the kernel. Those functions are some float operations and __aeabi_uldivmod. For now those are implemented with define_panicking_intrinsics!. This is based on the code by Sven Van Asbroeck from the original rust branch and inspired by the AArch version by Jamie Cunliffe. I have tested the rust samples and a custom simple MMIO module on hardware (De1SoC FPGA + Arm A9 CPU). Tested-by: Rudraksha Gupta <[email protected]> Reviewed-by: Alice Ryhl <[email protected]> Acked-by: Miguel Ojeda <[email protected]> Tested-by: Miguel Ojeda <[email protected]> Acked-by: Ard Biesheuvel <[email protected]> Signed-off-by: Christian Schrefl <[email protected]> Signed-off-by: Russell King (Oracle) <[email protected]>
Diffstat (limited to 'rust/compiler_builtins.rs')
-rw-r--r--rust/compiler_builtins.rs24
1 files changed, 24 insertions, 0 deletions
diff --git a/rust/compiler_builtins.rs b/rust/compiler_builtins.rs
index f14b8d7caf89..dd16c1dc899c 100644
--- a/rust/compiler_builtins.rs
+++ b/rust/compiler_builtins.rs
@@ -73,5 +73,29 @@ define_panicking_intrinsics!("`u128` should not be used", {
__umodti3,
});
+#[cfg(target_arch = "arm")]
+define_panicking_intrinsics!("`f32` should not be used", {
+ __aeabi_fadd,
+ __aeabi_fmul,
+ __aeabi_fcmpeq,
+ __aeabi_fcmple,
+ __aeabi_fcmplt,
+ __aeabi_fcmpun,
+});
+
+#[cfg(target_arch = "arm")]
+define_panicking_intrinsics!("`f64` should not be used", {
+ __aeabi_dadd,
+ __aeabi_dmul,
+ __aeabi_dcmple,
+ __aeabi_dcmplt,
+ __aeabi_dcmpun,
+});
+
+#[cfg(target_arch = "arm")]
+define_panicking_intrinsics!("`u64` division/modulo should not be used", {
+ __aeabi_uldivmod,
+});
+
// NOTE: if you are adding a new intrinsic here, you should also add it to
// `redirect-intrinsics` in `rust/Makefile`.