]> git.ipfire.org Git - thirdparty/linux.git/blame - rust/compiler_builtins.rs
btrfs: fix data races when accessing the reserved amount of block reserves
[thirdparty/linux.git] / rust / compiler_builtins.rs
CommitLineData
db958dcf
MO
1// SPDX-License-Identifier: GPL-2.0
2
3//! Our own `compiler_builtins`.
4//!
5//! Rust provides [`compiler_builtins`] as a port of LLVM's [`compiler-rt`].
6//! Since we do not need the vast majority of them, we avoid the dependency
7//! by providing this file.
8//!
9//! At the moment, some builtins are required that should not be. For instance,
10//! [`core`] has 128-bit integers functionality which we should not be compiling
11//! in. We will work with upstream [`core`] to provide feature flags to disable
12//! the parts we do not need. For the moment, we define them to [`panic!`] at
13//! runtime for simplicity to catch mistakes, instead of performing surgery
14//! on `core.o`.
15//!
16//! In any case, all these symbols are weakened to ensure we do not override
17//! those that may be provided by the rest of the kernel.
18//!
19//! [`compiler_builtins`]: https://github.com/rust-lang/compiler-builtins
20//! [`compiler-rt`]: https://compiler-rt.llvm.org/
21
e08ff622 22#![allow(internal_features)]
db958dcf
MO
23#![feature(compiler_builtins)]
24#![compiler_builtins]
25#![no_builtins]
26#![no_std]
27
28macro_rules! define_panicking_intrinsics(
29 ($reason: tt, { $($ident: ident, )* }) => {
30 $(
31 #[doc(hidden)]
cb7d9def 32 #[export_name = concat!("__rust", stringify!($ident))]
db958dcf
MO
33 pub extern "C" fn $ident() {
34 panic!($reason);
35 }
36 )*
37 }
38);
39
40define_panicking_intrinsics!("`f32` should not be used", {
89eed1ab 41 __addsf3,
db958dcf
MO
42 __eqsf2,
43 __gesf2,
44 __lesf2,
89eed1ab
MO
45 __ltsf2,
46 __mulsf3,
db958dcf
MO
47 __nesf2,
48 __unordsf2,
49});
50
51define_panicking_intrinsics!("`f64` should not be used", {
89eed1ab
MO
52 __adddf3,
53 __ledf2,
54 __ltdf2,
55 __muldf3,
db958dcf
MO
56 __unorddf2,
57});
58
59define_panicking_intrinsics!("`i128` should not be used", {
60 __ashrti3,
61 __muloti4,
62 __multi3,
63});
64
65define_panicking_intrinsics!("`u128` should not be used", {
66 __ashlti3,
67 __lshrti3,
68 __udivmodti4,
69 __udivti3,
70 __umodti3,
71});
cb7d9def
GG
72
73// NOTE: if you are adding a new intrinsic here, you should also add it to
74// `redirect-intrinsics` in `rust/Makefile`.