kernel/arch/riscv64/trap/
mod.rs

1use core::arch::asm;
2
3use crate::early_println;
4
5use super::Trapframe;
6
7pub mod exception;
8pub mod interrupt;
9pub mod kernel;
10pub mod user;
11
12pub fn print_traplog(tf: &Trapframe) {
13    let cause: usize;
14    let tval: usize;
15    let status: usize;
16    let sepc: usize;
17    let stvec: usize;
18    let satp: usize;
19    let sscratch: usize;
20    unsafe {
21        asm!("csrr {}, scause", out(reg) cause);
22        asm!("csrr {}, stval", out(reg) tval);
23        asm!("csrr {}, sstatus", out(reg) status);
24        asm!("csrr {}, sepc", out(reg) sepc);
25        asm!("csrr {}, stvec", out(reg) stvec);
26        asm!("csrr {}, satp", out(reg) satp);
27        asm!("csrr {}, sscratch", out(reg) sscratch);
28    }
29    let spp = (status >> 8) & 0b1;
30
31    early_println!("trapframe:\n{:#x?}", tf);
32    early_println!("cause: {}", cause);
33    early_println!("tval: 0x{:x}", tval);
34    early_println!("status: 0x{:x}", status);
35    early_println!("spp: {}", spp);
36    early_println!("sepc: 0x{:x}", sepc);
37    early_println!("stvec: 0x{:x}", stvec);
38    early_println!("satp: 0x{:x}", satp);
39    early_println!("sscratch: 0x{:x}", sscratch);
40}