瀏覽代碼

Use riscv::mtvec::write() to set trap handler

Vadim Kaushan 6 年之前
父節點
當前提交
ef135749bd
共有 1 個文件被更改,包括 3 次插入11 次删除
  1. 3 11
      riscv-rt/src/lib.rs

+ 3 - 11
riscv-rt/src/lib.rs

@@ -176,7 +176,7 @@ extern crate r0;
 
 mod lang_items;
 
-use riscv::register::{mcause, mstatus};
+use riscv::register::{mcause, mstatus, mtvec};
 
 extern "C" {
     // Boundaries of the .bss section
@@ -244,18 +244,10 @@ pub extern "C" fn start_rust() -> ! {
 
     // TODO: Enable FPU when available
 
-    // Set mtvec to _start_trap
-    #[cfg(any(target_arch = "riscv32", target_arch = "riscv64"))]
     unsafe {
-        //mtvec::write(_start_trap as usize, mtvec::TrapMode::Direct);
-        asm!("csrrw zero, 0x305, $0"
-             :
-             : "r"(&_start_trap)
-             :
-             : "volatile");
-    }
+        // Set mtvec to _start_trap
+        mtvec::write(_start_trap as usize, mtvec::TrapMode::Direct);
 
-    unsafe {
         main();
     }
 }