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