fast_trap/hal/
mod.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#[cfg(not(doc))]
mod riscv;

#[cfg(not(doc))]
pub use riscv::*;

mod doc {
    #![allow(unused)]

    /// 设置全局陷入入口。
    ///
    /// # Safety
    ///
    /// 这个函数操作硬件寄存器,寄存器里原本的值将丢弃。
    pub unsafe fn load_direct_trap_entry() {}

    /// 把当前栈复用为陷入栈,预留 Handler 空间。
    ///
    /// # Safety
    ///
    /// 裸指针,直接移动 sp,只能在纯汇编环境调用。
    pub unsafe extern "C" fn reuse_stack_for_trap() {}

    /// 模拟一个 `cause` 类的陷入。
    ///
    /// # Safety
    ///
    /// 如同发生一个陷入。
    pub fn soft_trap(cause: usize) {}

    /// 陷入处理例程。
    ///
    /// # Safety
    ///
    /// 不要直接调用这个函数。暴露它仅仅是为了提供其入口的符号链接。
    pub unsafe extern "C" fn trap_entry() {}

    /// 陷入上下文。
    ///
    /// 保存了陷入时的寄存器状态。包括所有通用寄存器和 `pc`。
    pub struct FlowContext {}

    impl FlowContext {
        /// 零初始化。
        pub const ZERO: Self = Self {};
    }
}

#[cfg(doc)]
pub use doc::*;