brintos

brintos / linux-shallow public Read only

0
0
Text · 2.0 KiB · f14b8d7 Raw
78 lines · rust
1// SPDX-License-Identifier: GPL-2.02 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 dependency7//! 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 compiling11//! in. We will work with upstream [`core`] to provide feature flags to disable12//! the parts we do not need. For the moment, we define them to [`panic!`] at13//! runtime for simplicity to catch mistakes, instead of performing surgery14//! on `core.o`.15//!16//! In any case, all these symbols are weakened to ensure we do not override17//! those that may be provided by the rest of the kernel.18//!19//! [`compiler_builtins`]: https://github.com/rust-lang/compiler-builtins20//! [`compiler-rt`]: https://compiler-rt.llvm.org/21 22#![allow(internal_features)]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)]32            #[export_name = concat!("__rust", stringify!($ident))]33            pub extern "C" fn $ident() {34                panic!($reason);35            }36        )*37    }38);39 40define_panicking_intrinsics!("`f32` should not be used", {41    __addsf3,42    __eqsf2,43    __extendsfdf2,44    __gesf2,45    __lesf2,46    __ltsf2,47    __mulsf3,48    __nesf2,49    __truncdfsf2,50    __unordsf2,51});52 53define_panicking_intrinsics!("`f64` should not be used", {54    __adddf3,55    __eqdf2,56    __ledf2,57    __ltdf2,58    __muldf3,59    __unorddf2,60});61 62define_panicking_intrinsics!("`i128` should not be used", {63    __ashrti3,64    __muloti4,65    __multi3,66});67 68define_panicking_intrinsics!("`u128` should not be used", {69    __ashlti3,70    __lshrti3,71    __udivmodti4,72    __udivti3,73    __umodti3,74});75 76// NOTE: if you are adding a new intrinsic here, you should also add it to77// `redirect-intrinsics` in `rust/Makefile`.78