forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.7 KiB
63 lines
1.7 KiB
// SPDX-License-Identifier: GPL-2.0 |
|
|
|
//! Our own `compiler_builtins`. |
|
//! |
|
//! Rust provides [`compiler_builtins`] as a port of LLVM's [`compiler-rt`]. |
|
//! Since we do not need the vast majority of them, we avoid the dependency |
|
//! by providing this file. |
|
//! |
|
//! At the moment, some builtins are required that should not be. For instance, |
|
//! [`core`] has 128-bit integers functionality which we should not be compiling |
|
//! in. We will work with upstream [`core`] to provide feature flags to disable |
|
//! the parts we do not need. For the moment, we define them to [`panic!`] at |
|
//! runtime for simplicity to catch mistakes, instead of performing surgery |
|
//! on `core.o`. |
|
//! |
|
//! In any case, all these symbols are weakened to ensure we do not override |
|
//! those that may be provided by the rest of the kernel. |
|
//! |
|
//! [`compiler_builtins`]: https://github.com/rust-lang/compiler-builtins |
|
//! [`compiler-rt`]: https://compiler-rt.llvm.org/ |
|
|
|
#![feature(compiler_builtins)] |
|
#![compiler_builtins] |
|
#![no_builtins] |
|
#![no_std] |
|
|
|
macro_rules! define_panicking_intrinsics( |
|
($reason: tt, { $($ident: ident, )* }) => { |
|
$( |
|
#[doc(hidden)] |
|
#[no_mangle] |
|
pub extern "C" fn $ident() { |
|
panic!($reason); |
|
} |
|
)* |
|
} |
|
); |
|
|
|
define_panicking_intrinsics!("`f32` should not be used", { |
|
__eqsf2, |
|
__gesf2, |
|
__lesf2, |
|
__nesf2, |
|
__unordsf2, |
|
}); |
|
|
|
define_panicking_intrinsics!("`f64` should not be used", { |
|
__unorddf2, |
|
}); |
|
|
|
define_panicking_intrinsics!("`i128` should not be used", { |
|
__ashrti3, |
|
__muloti4, |
|
__multi3, |
|
}); |
|
|
|
define_panicking_intrinsics!("`u128` should not be used", { |
|
__ashlti3, |
|
__lshrti3, |
|
__udivmodti4, |
|
__udivti3, |
|
__umodti3, |
|
});
|
|
|