sel4_sys/fault/arch/
x86_64.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 RAX: f(seL4_UnknownSyscall_Msg::seL4_UnknownSyscall_RAX),
24 RBX: f(seL4_UnknownSyscall_Msg::seL4_UnknownSyscall_RBX),
25 RCX: f(seL4_UnknownSyscall_Msg::seL4_UnknownSyscall_RCX),
26 RDX: f(seL4_UnknownSyscall_Msg::seL4_UnknownSyscall_RDX),
27 RSI: f(seL4_UnknownSyscall_Msg::seL4_UnknownSyscall_RSI),
28 RDI: f(seL4_UnknownSyscall_Msg::seL4_UnknownSyscall_RDI),
29 RBP: f(seL4_UnknownSyscall_Msg::seL4_UnknownSyscall_RBP),
30 R8: f(seL4_UnknownSyscall_Msg::seL4_UnknownSyscall_R8),
31 R9: f(seL4_UnknownSyscall_Msg::seL4_UnknownSyscall_R9),
32 R10: f(seL4_UnknownSyscall_Msg::seL4_UnknownSyscall_R10),
33 R11: f(seL4_UnknownSyscall_Msg::seL4_UnknownSyscall_R11),
34 R12: f(seL4_UnknownSyscall_Msg::seL4_UnknownSyscall_R12),
35 R13: f(seL4_UnknownSyscall_Msg::seL4_UnknownSyscall_R13),
36 R14: f(seL4_UnknownSyscall_Msg::seL4_UnknownSyscall_R14),
37 R15: f(seL4_UnknownSyscall_Msg::seL4_UnknownSyscall_R15),
38 FaultIP: f(seL4_UnknownSyscall_Msg::seL4_UnknownSyscall_FaultIP),
39 RSP: f(seL4_UnknownSyscall_Msg::seL4_UnknownSyscall_SP),
40 FLAGS: f(seL4_UnknownSyscall_Msg::seL4_UnknownSyscall_FLAGS),
41 Syscall: f(seL4_UnknownSyscall_Msg::seL4_UnknownSyscall_Syscall),
42 }
43 .unsplay()
44 }
45 seL4_Fault_tag::seL4_Fault_UserException => {
46 assert!(length == seL4_UserException_Msg::seL4_UserException_Length);
47 seL4_Fault_UserException_Unpacked {
48 FaultIP: f(seL4_UserException_Msg::seL4_UserException_FaultIP),
49 Stack: f(seL4_UserException_Msg::seL4_UserException_SP),
50 FLAGS: f(seL4_UserException_Msg::seL4_UserException_FLAGS),
51 Number: f(seL4_UserException_Msg::seL4_UserException_Number),
52 Code: f(seL4_UserException_Msg::seL4_UserException_Code),
53 }
54 .unsplay()
55 }
56 seL4_Fault_tag::seL4_Fault_VMFault => {
57 assert!(length == seL4_VMFault_Msg::seL4_VMFault_Length);
58 seL4_Fault_VMFault_Unpacked {
59 IP: f(seL4_VMFault_Msg::seL4_VMFault_IP),
60 Addr: f(seL4_VMFault_Msg::seL4_VMFault_Addr),
61 PrefetchFault: f(seL4_VMFault_Msg::seL4_VMFault_PrefetchFault),
62 FSR: f(seL4_VMFault_Msg::seL4_VMFault_FSR),
63 }
64 .unsplay()
65 }
66 _ => return None,
67 }
68 })
69 }
70}