kernel/arch/riscv64/trap/
mod.rs1use 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}