1 /*
2 * Copyright 2020, Data61, CSIRO (ABN 41 687 119 230)
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7 #pragma once
8
9 #include <autoconf.h>
10 #include <sel4/faults.h>
11 #include <sel4/sel4_arch/constants.h>
12
seL4_getArchFault(seL4_MessageInfo_t tag)13 LIBSEL4_INLINE_FUNC seL4_Fault_t seL4_getArchFault(seL4_MessageInfo_t tag)
14 {
15 switch (seL4_MessageInfo_get_label(tag)) {
16 case seL4_Fault_UnknownSyscall:
17 return seL4_Fault_UnknownSyscall_new(seL4_GetMR(seL4_UnknownSyscall_EAX),
18 seL4_GetMR(seL4_UnknownSyscall_EBX),
19 seL4_GetMR(seL4_UnknownSyscall_ECX),
20 seL4_GetMR(seL4_UnknownSyscall_EDX),
21 seL4_GetMR(seL4_UnknownSyscall_ESI),
22 seL4_GetMR(seL4_UnknownSyscall_EDI),
23 seL4_GetMR(seL4_UnknownSyscall_EBP),
24 seL4_GetMR(seL4_UnknownSyscall_FaultIP),
25 seL4_GetMR(seL4_UnknownSyscall_SP),
26 seL4_GetMR(seL4_UnknownSyscall_FLAGS),
27 seL4_GetMR(seL4_UnknownSyscall_Syscall));
28
29 case seL4_Fault_UserException:
30 return seL4_Fault_UserException_new(seL4_GetMR(seL4_UserException_FaultIP),
31 seL4_GetMR(seL4_UserException_SP),
32 seL4_GetMR(seL4_UserException_FLAGS),
33 seL4_GetMR(seL4_UserException_Number),
34 seL4_GetMR(seL4_UserException_Code));
35 case seL4_Fault_VMFault:
36 return seL4_Fault_VMFault_new(seL4_GetMR(seL4_VMFault_IP),
37 seL4_GetMR(seL4_VMFault_Addr),
38 seL4_GetMR(seL4_VMFault_PrefetchFault),
39 seL4_GetMR(seL4_VMFault_FSR));
40 #ifdef CONFIG_KERNEL_MCS
41 case seL4_Fault_Timeout:
42 return seL4_Fault_Timeout_new(seL4_GetMR(seL4_Timeout_Data),
43 seL4_GetMR(seL4_Timeout_Consumed_HighBits),
44 seL4_GetMR(seL4_Timeout_Consumed_LowBits));
45 #endif /* CONFIG_KERNEL_MCS */
46 default:
47 return seL4_Fault_NullFault_new();
48 }
49 }
50