use super::*;
use core::arch::{asm, global_asm};
global_asm!(include_str!("trap.S"));
pub unsafe fn init() {
asm!("msr VBAR_EL1, {}", in(reg) __vectors as usize);
}
#[derive(Debug, Default, Clone, Copy)]
#[repr(C)]
pub struct TrapFrame {
pub trap_num: usize,
pub __reserved: usize,
pub elr: usize,
pub spsr: usize,
pub sp: usize,
pub tpidr: usize,
pub general: GeneralRegs,
}
impl UserContext {
pub fn run(&mut self) {
unsafe { run_user(self) }
}
}
#[allow(improper_ctypes)]
extern "C" {
fn __vectors();
fn run_user(regs: &mut UserContext);
}