pub fn init_trap() {
unsafe extern "C" {
fn trap_vector_base();
}
unsafe {
#[cfg(feature = "uspace")]
riscv::register::sstatus::set_sum();
crate::asm::write_trap_vector_base(trap_vector_base as *const () as usize);
}
}
pub fn boot_vector() -> usize {
super::entry::boot::vector()
}
pub unsafe fn install_boot_vector() {
unsafe {
core::arch::asm!("csrw stvec, {}", in(reg) boot_vector(), options(nostack));
}
}
#[unsafe(naked)]
pub unsafe extern "C" fn jump_to(
_argument: usize,
_stack: crate::VirtAddr,
_entry: crate::VirtAddr,
) -> ! {
core::arch::naked_asm!("mv sp, a1", "jr a2");
}