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 14LIBSEL4_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_HighBits), 45 seL4_GetMR(seL4_Timeout_Consumed_LowBits)); 46#endif /* CONFIG_KERNEL_MCS */ 47 default: 48 return seL4_Fault_NullFault_new(); 49 } 50} 51 52