fast_trap/hal/
mod.rs

1#[cfg(not(doc))]
2mod riscv;
3
4#[cfg(not(doc))]
5pub use riscv::*;
6
7mod doc {
8    #![allow(unused)]
9
10    /// 设置全局陷入入口。
11    ///
12    /// # Safety
13    ///
14    /// 这个函数操作硬件寄存器,寄存器里原本的值将丢弃。
15    pub unsafe fn load_direct_trap_entry() {}
16
17    /// 把当前栈复用为陷入栈,预留 Handler 空间。
18    ///
19    /// # Safety
20    ///
21    /// 裸指针,直接移动 sp,只能在纯汇编环境调用。
22    pub unsafe extern "C" fn reuse_stack_for_trap() {}
23
24    /// 模拟一个 `cause` 类的陷入。
25    ///
26    /// # Safety
27    ///
28    /// 如同发生一个陷入。
29    pub fn soft_trap(cause: usize) {}
30
31    /// 陷入处理例程。
32    ///
33    /// # Safety
34    ///
35    /// 不要直接调用这个函数。暴露它仅仅是为了提供其入口的符号链接。
36    pub unsafe extern "C" fn trap_entry() {}
37
38    /// 陷入上下文。
39    ///
40    /// 保存了陷入时的寄存器状态。包括所有通用寄存器和 `pc`。
41    pub struct FlowContext {}
42
43    impl FlowContext {
44        /// 零初始化。
45        pub const ZERO: Self = Self {};
46    }
47}
48
49#[cfg(doc)]
50pub use doc::*;