sel4_sys/fault/arch/
aarch64.rs
1use crate::bf::*;
8use crate::c::*;
9
10use sel4_config::sel4_cfg_wrap_match;
11
12impl seL4_Fault {
13 pub(crate) fn arch_get_with(
14 label: seL4_Word,
15 length: seL4_Word,
16 f: impl Fn(core::ffi::c_ulong) -> seL4_Word,
17 ) -> Option<Self> {
18 Some(sel4_cfg_wrap_match! {
19 match label {
20 seL4_Fault_tag::seL4_Fault_UnknownSyscall => {
21 assert!(length == seL4_UnknownSyscall_Msg::seL4_UnknownSyscall_Length);
22 seL4_Fault_UnknownSyscall_Unpacked {
23 X0: f(seL4_UnknownSyscall_Msg::seL4_UnknownSyscall_X0),
24 X1: f(seL4_UnknownSyscall_Msg::seL4_UnknownSyscall_X1),
25 X2: f(seL4_UnknownSyscall_Msg::seL4_UnknownSyscall_X2),
26 X3: f(seL4_UnknownSyscall_Msg::seL4_UnknownSyscall_X3),
27 X4: f(seL4_UnknownSyscall_Msg::seL4_UnknownSyscall_X4),
28 X5: f(seL4_UnknownSyscall_Msg::seL4_UnknownSyscall_X5),
29 X6: f(seL4_UnknownSyscall_Msg::seL4_UnknownSyscall_X6),
30 X7: f(seL4_UnknownSyscall_Msg::seL4_UnknownSyscall_X7),
31 FaultIP: f(seL4_UnknownSyscall_Msg::seL4_UnknownSyscall_FaultIP),
32 SP: f(seL4_UnknownSyscall_Msg::seL4_UnknownSyscall_SP),
33 LR: f(seL4_UnknownSyscall_Msg::seL4_UnknownSyscall_LR),
34 SPSR: f(seL4_UnknownSyscall_Msg::seL4_UnknownSyscall_SPSR),
35 Syscall: f(seL4_UnknownSyscall_Msg::seL4_UnknownSyscall_Syscall),
36 }
37 .unsplay()
38 }
39 seL4_Fault_tag::seL4_Fault_UserException => {
40 assert!(length == seL4_UserException_Msg::seL4_UserException_Length);
41 seL4_Fault_UserException_Unpacked {
42 FaultIP: f(seL4_UserException_Msg::seL4_UserException_FaultIP),
43 Stack: f(seL4_UserException_Msg::seL4_UserException_SP),
44 SPSR: f(seL4_UserException_Msg::seL4_UserException_SPSR),
45 Number: f(seL4_UserException_Msg::seL4_UserException_Number),
46 Code: f(seL4_UserException_Msg::seL4_UserException_Code),
47 }
48 .unsplay()
49 }
50 seL4_Fault_tag::seL4_Fault_VMFault => {
51 assert!(length == seL4_VMFault_Msg::seL4_VMFault_Length);
52 seL4_Fault_VMFault_Unpacked {
53 IP: f(seL4_VMFault_Msg::seL4_VMFault_IP),
54 Addr: f(seL4_VMFault_Msg::seL4_VMFault_Addr),
55 PrefetchFault: f(seL4_VMFault_Msg::seL4_VMFault_PrefetchFault),
56 FSR: f(seL4_VMFault_Msg::seL4_VMFault_FSR),
57 }
58 .unsplay()
59 }
60 #[sel4_cfg(ARM_HYPERVISOR_SUPPORT)]
61 seL4_Fault_tag::seL4_Fault_VGICMaintenance => {
62 assert!(length == seL4_VGICMaintenance_Msg::seL4_VGICMaintenance_Length);
63 seL4_Fault_VGICMaintenance_Unpacked {
64 IDX: f(seL4_VGICMaintenance_Msg::seL4_VGICMaintenance_IDX),
65 }
66 .unsplay()
67 }
68 #[sel4_cfg(ARM_HYPERVISOR_SUPPORT)]
69 seL4_Fault_tag::seL4_Fault_VCPUFault => {
70 assert!(length == seL4_VCPUFault_Msg::seL4_VCPUFault_Length);
71 seL4_Fault_VCPUFault_Unpacked {
72 HSR: f(seL4_VCPUFault_Msg::seL4_VCPUFault_HSR),
73 }
74 .unsplay()
75 }
76 #[sel4_cfg(ARM_HYPERVISOR_SUPPORT)]
77 seL4_Fault_tag::seL4_Fault_VPPIEvent => {
78 seL4_Fault_VPPIEvent_Unpacked {
81 irq: f(seL4_VPPIEvent_Msg::seL4_VPPIEvent_IRQ),
82 }
83 .unsplay()
84 }
85 _ => return None,
86 }
87 })
88 }
89}