1/* 2 * Copyright 2018, Data61 3 * Commonwealth Scientific and Industrial Research Organisation (CSIRO) 4 * ABN 41 687 119 230. 5 * 6 * This software may be distributed and modified according to the terms of 7 * the GNU General Public License version 2. Note that NO WARRANTY is provided. 8 * See "LICENSE_GPLv2.txt" for details. 9 * 10 * @TAG(DATA61_GPL) 11 */ 12 13/* 14 * 15 * Copyright 2016, 2017 Hesham Almatary, Data61/CSIRO <hesham.almatary@data61.csiro.au> 16 * Copyright 2015, 2016 Hesham Almatary <heshamelmatary@gmail.com> 17 */ 18 19#ifndef __LIBSEL4_SEL4_ARCH_FAULTS_H 20#define __LIBSEL4_SEL4_ARCH_FAULTS_H 21 22#include <autoconf.h> 23#include <sel4/faults.h> 24#include <sel4/sel4_arch/constants.h> 25 26LIBSEL4_INLINE_FUNC seL4_Fault_t 27seL4_getArchFault(seL4_MessageInfo_t tag) 28{ 29 switch (seL4_MessageInfo_get_label(tag)) { 30 case seL4_Fault_UnknownSyscall: 31 return seL4_Fault_UnknownSyscall_new( 32 seL4_GetMR(seL4_UnknownSyscall_FaultIP), 33 seL4_GetMR(seL4_UnknownSyscall_SP), 34 seL4_GetMR(seL4_UnknownSyscall_RA), 35 seL4_GetMR(seL4_UnknownSyscall_A0), 36 seL4_GetMR(seL4_UnknownSyscall_A1), 37 seL4_GetMR(seL4_UnknownSyscall_A2), 38 seL4_GetMR(seL4_UnknownSyscall_A3), 39 seL4_GetMR(seL4_UnknownSyscall_A4), 40 seL4_GetMR(seL4_UnknownSyscall_A5), 41 seL4_GetMR(seL4_UnknownSyscall_A6), 42 seL4_GetMR(seL4_UnknownSyscall_Syscall)); 43 44 case seL4_Fault_UserException: 45 return seL4_Fault_UserException_new(seL4_GetMR(seL4_UserException_FaultIP), 46 seL4_GetMR(seL4_UserException_SP), 47 seL4_GetMR(seL4_UserException_FLAGS), 48 seL4_GetMR(seL4_UserException_Number), 49 seL4_GetMR(seL4_UserException_Code)); 50 case seL4_Fault_VMFault: 51 return seL4_Fault_VMFault_new(seL4_GetMR(seL4_VMFault_IP), 52 seL4_GetMR(seL4_VMFault_Addr), 53 seL4_GetMR(seL4_VMFault_PrefetchFault), 54 seL4_GetMR(seL4_VMFault_FSR)); 55 default: 56 return seL4_Fault_NullFault_new(); 57 } 58} 59 60#endif /* __LIBSEL4_SEL4_ARCH_FAULTS_H */ 61