kernel/
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
7    // TODO extract other diagnostic information
8    panic!("A hard fault has been triggered.\n{}", backtrace);
9}
10
11#[unsafe(no_mangle)]
12pub extern "C" fn handle_mem_manage_fault(stack: *const usize, initial_fp: *const usize) -> ! {
13    let backtrace = hal::Machine::backtrace(initial_fp, stack);
14    let fault_status = hal::Machine::get_fault_status(hal::Fault::MemManage);
15
16    // TODO extract other diagnostic information
17    panic!(
18        "A memory management fault has been triggered.\n{}{}",
19        backtrace, fault_status
20    );
21}
22
23#[unsafe(no_mangle)]
24pub extern "C" fn handle_bus_fault(stack: *const usize, initial_fp: *const usize) -> ! {
25    let backtrace = hal::Machine::backtrace(initial_fp, stack);
26    let fault_status = hal::Machine::get_fault_status(hal::Fault::Bus);
27
28    // TODO extract other diagnostic information
29    panic!(
30        "A bus fault has been triggered.\n{}{}",
31        backtrace, fault_status
32    );
33}
34
35#[unsafe(no_mangle)]
36pub extern "C" fn handle_usage_fault(stack: *const usize, initial_fp: *const usize) -> ! {
37    let backtrace = hal::Machine::backtrace(initial_fp, stack);
38    let fault_status = hal::Machine::get_fault_status(hal::Fault::Usage);
39
40    // TODO extract other diagnostic information
41    panic!(
42        "A usage fault has been triggered.\n{}{}",
43        backtrace, fault_status
44    );
45}