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 13LIBSEL4_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_RAX), 18 seL4_GetMR(seL4_UnknownSyscall_RBX), 19 seL4_GetMR(seL4_UnknownSyscall_RCX), 20 seL4_GetMR(seL4_UnknownSyscall_RDX), 21 seL4_GetMR(seL4_UnknownSyscall_RSI), 22 seL4_GetMR(seL4_UnknownSyscall_RDI), 23 seL4_GetMR(seL4_UnknownSyscall_RBP), 24 seL4_GetMR(seL4_UnknownSyscall_R8), 25 seL4_GetMR(seL4_UnknownSyscall_R9), 26 seL4_GetMR(seL4_UnknownSyscall_R10), 27 seL4_GetMR(seL4_UnknownSyscall_R11), 28 seL4_GetMR(seL4_UnknownSyscall_R12), 29 seL4_GetMR(seL4_UnknownSyscall_R13), 30 seL4_GetMR(seL4_UnknownSyscall_R14), 31 seL4_GetMR(seL4_UnknownSyscall_R15), 32 seL4_GetMR(seL4_UnknownSyscall_FaultIP), 33 seL4_GetMR(seL4_UnknownSyscall_SP), 34 seL4_GetMR(seL4_UnknownSyscall_FLAGS), 35 seL4_GetMR(seL4_UnknownSyscall_Syscall)); 36 37 case seL4_Fault_UserException: 38 return seL4_Fault_UserException_new(seL4_GetMR(seL4_UserException_FaultIP), 39 seL4_GetMR(seL4_UserException_SP), 40 seL4_GetMR(seL4_UserException_FLAGS), 41 seL4_GetMR(seL4_UserException_Number), 42 seL4_GetMR(seL4_UserException_Code)); 43 case seL4_Fault_VMFault: 44 return seL4_Fault_VMFault_new(seL4_GetMR(seL4_VMFault_IP), 45 seL4_GetMR(seL4_VMFault_Addr), 46 seL4_GetMR(seL4_VMFault_PrefetchFault), 47 seL4_GetMR(seL4_VMFault_FSR)); 48#ifdef CONFIG_KERNEL_MCS 49 case seL4_Fault_Timeout: 50 return seL4_Fault_Timeout_new(seL4_GetMR(seL4_Timeout_Data), 51 seL4_GetMR(seL4_Timeout_Consumed)); 52#endif /* CONFIG_KERNEL_MCS */ 53 default: 54 return seL4_Fault_NullFault_new(); 55 } 56} 57 58