Переглянути джерело

Set trap handler in assembly

Vadim Kaushan 6 роки тому
батько
коміт
03f4eef93d
2 змінених файлів з 5 додано та 7 видалено
  1. 4 0
      riscv-rt/asm.S
  2. 1 7
      riscv-rt/src/lib.rs

+ 4 - 0
riscv-rt/asm.S

@@ -71,6 +71,10 @@ _start:
     // Set frame pointer
     add s0, sp, zero
 
+    // Set trap handler
+    la t0, _start_trap
+    csrw mtvec, t0
+
     // Park non-zero harts
     bnez a2, abort
 

+ 1 - 7
riscv-rt/src/lib.rs

@@ -208,7 +208,7 @@ extern crate r0;
 
 pub use macros::{entry, pre_init};
 
-use riscv::register::{mstatus, mtvec};
+use riscv::register::mstatus;
 
 #[export_name = "error: riscv-rt appears more than once in the dependency graph"]
 #[doc(hidden)]
@@ -225,9 +225,6 @@ extern "C" {
 
     // Initial values of the .data section (stored in Flash)
     static _sidata: u32;
-
-    // Address of _start_trap
-    static _start_trap: u32;
 }
 
 
@@ -253,9 +250,6 @@ pub unsafe extern "C" fn start_rust() -> ! {
 
     // TODO: Enable FPU when available
 
-    // Set mtvec to _start_trap
-    mtvec::write(&_start_trap as *const _ as usize, mtvec::TrapMode::Direct);
-
     main();
 }