1/* 2 * Copyright 2017, 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 BSD 2-Clause license. Note that NO WARRANTY is provided. 8 * See "LICENSE_BSD2.txt" for details. 9 * 10 * @TAG(DATA61_BSD) 11 */ 12 13#include <stdio.h> /* For fprintf() */ 14#include <stdlib.h> /* For abort() */ 15#include <assert.h> 16#include <sel4/sel4.h> 17#include <sel4utils/strerror.h> 18 19#define _PRIV_SEL4_FAULTLIST_UNKNOWN_IDX (seL4_Fault_UserException + 1) 20#ifdef CONFIG_ARM_HYPERVISOR_SUPPORT 21#define _PRIV_SEL4_FAULTLIST_MAX_IDX (seL4_Fault_VCPUFault) 22#else 23#define _PRIV_SEL4_FAULTLIST_MAX_IDX (seL4_Fault_VMFault) 24#endif 25 26char *sel4_errlist[] = { 27 [seL4_NoError] = "seL4_NoError", 28 [seL4_InvalidArgument] = "seL4_InvalidArgument", 29 [seL4_InvalidCapability] = "seL4_InvalidCapability", 30 [seL4_IllegalOperation] = "seL4_IllegalOperation", 31 [seL4_RangeError] = "seL4_RangeError", 32 [seL4_AlignmentError] = "seL4_AlignmentError", 33 [seL4_FailedLookup] = "seL4_FailedLookup", 34 [seL4_TruncatedMessage] = "seL4_TruncatedMessage", 35 [seL4_DeleteFirst] = "seL4_DeleteFirst", 36 [seL4_RevokeFirst] = "seL4_RevokeFirst", 37 [seL4_NotEnoughMemory] = "seL4_NotEnoughMemory", 38 NULL 39}; 40 41char *sel4_faultlist[] = { 42 [seL4_Fault_NullFault] = "seL4_Fault_NullFault", 43 [seL4_Fault_CapFault] = "seL4_Fault_CapFault", 44 [seL4_Fault_UnknownSyscall] = "seL4_Fault_UnknownSyscall", 45 [seL4_Fault_UserException] = "seL4_Fault_UserException", 46 [_PRIV_SEL4_FAULTLIST_UNKNOWN_IDX] = "Unknown Fault", 47 [seL4_Fault_VMFault] = "seL4_Fault_VMFault", 48#ifdef CONFIG_ARM_HYPERVISOR_SUPPORT 49 [seL4_Fault_VGICMaintenance] = "seL4_Fault_VGICMaintenance", 50 [seL4_Fault_VCPUFault] = "seL4_Fault_VCPUFault" 51#endif 52}; 53 54const char * 55sel4_strerror(int errcode) 56{ 57 assert(errcode < sizeof(sel4_errlist) / sizeof(*sel4_errlist) - 1); 58 return sel4_errlist[errcode]; 59} 60 61void 62__sel4_error(int sel4_error, const char *file, 63 const char *function, int line, char * str) 64{ 65 fprintf(stderr, "seL4 Error: %s, function %s, file %s, line %d: %s\n", 66 sel4_errlist[sel4_error], 67 function, file, line, str); 68 abort(); 69} 70 71const char * 72sel4_strfault(int faultlabel) 73{ 74 if (faultlabel > _PRIV_SEL4_FAULTLIST_MAX_IDX || faultlabel == _PRIV_SEL4_FAULTLIST_UNKNOWN_IDX 75 || faultlabel < seL4_Fault_NullFault) { 76 return sel4_faultlist[_PRIV_SEL4_FAULTLIST_UNKNOWN_IDX]; 77 } 78 79 return sel4_faultlist[faultlabel]; 80} 81