osiris/
faults.rs

1use hal::Machinelike;
2
3#[unsafe(no_mangle)]
4pub extern "C" fn handle_hard_fault(stack: *const usize, initial_fp: *const usize) -> ! {
5    let backtrace = hal::Machine::backtrace(initial_fp, stack);
6    // TODO extract other diagnostic information
7    panic!("A hard fault has been triggered.\n{backtrace}");
8}
9
10#[unsafe(no_mangle)]
11pub extern "C" fn handle_mem_manage_fault(stack: *const usize, initial_fp: *const usize) -> ! {
12    let backtrace = hal::Machine::backtrace(initial_fp, stack);
13    let fault_status = hal::Machine::get_fault_status(hal::Fault::MemManage);
14
15    // TODO extract other diagnostic information
16    panic!("A memory management fault has been triggered.\n{backtrace}{fault_status}");
17}
18
19#[unsafe(no_mangle)]
20pub extern "C" fn handle_bus_fault(stack: *const usize, initial_fp: *const usize) -> ! {
21    let backtrace = hal::Machine::backtrace(initial_fp, stack);
22    let fault_status = hal::Machine::get_fault_status(hal::Fault::Bus);
23
24    // TODO extract other diagnostic information
25    panic!("A bus fault has been triggered.\n{backtrace}{fault_status}");
26}
27
28#[unsafe(no_mangle)]
29pub extern "C" fn handle_usage_fault(stack: *const usize, initial_fp: *const usize) -> ! {
30    let backtrace = hal::Machine::backtrace(initial_fp, stack);
31    let fault_status = hal::Machine::get_fault_status(hal::Fault::Usage);
32
33    // TODO extract other diagnostic information
34    panic!("A usage fault has been triggered.\n{backtrace}{fault_status}");
35}