Split kernel/user trap handler && Fix user tests.

This commit is contained in:
Yifan Wu 2020-12-07 18:57:23 +08:00
parent 1008d92c35
commit 485db04a2b
13 changed files with 45 additions and 161 deletions

View file

@ -26,11 +26,22 @@ use crate::config::{TRAP_CONTEXT, TRAMPOLINE};
global_asm!(include_str!("trap.S"));
pub fn init() {
set_kernel_trap_entry();
}
fn set_kernel_trap_entry() {
unsafe {
stvec::write(TRAMPOLINE, TrapMode::Direct);
stvec::write(trap_from_kernel as usize, TrapMode::Direct);
}
}
fn set_user_trap_entry() {
unsafe {
stvec::write(TRAMPOLINE as usize, TrapMode::Direct);
}
}
#[allow(unused)]
pub fn enable_interrupt() {
unsafe { sstatus::set_sie(); }
}
@ -42,6 +53,7 @@ pub fn enable_timer_interrupt() {
#[no_mangle]
pub fn trap_handler() -> ! {
//println!("into trap_handler!");
set_kernel_trap_entry();
let cx = current_trap_cx();
let scause = scause::read();
let stval = stval::read();
@ -73,6 +85,7 @@ pub fn trap_handler() -> ! {
#[no_mangle]
pub fn trap_return() -> ! {
set_user_trap_entry();
//println!("into trap_return");
let trap_cx_ptr = TRAP_CONTEXT;
let user_satp = current_user_token();
@ -90,4 +103,9 @@ pub fn trap_return() -> ! {
panic!("Unreachable in back_to_user!");
}
#[no_mangle]
pub fn trap_from_kernel() -> ! {
panic!("a trap from kernel!");
}
pub use context::{TrapContext};