| Catalin Marinas | 136848d | 2011-11-22 17:30:28 +0000 | [diff] [blame] | 1 | static struct fsr_info fsr_info[] = { | 
|  | 2 | /* | 
|  | 3 | * The following are the standard ARMv3 and ARMv4 aborts.  ARMv5 | 
|  | 4 | * defines these to be "precise" aborts. | 
|  | 5 | */ | 
|  | 6 | { do_bad,		SIGSEGV, 0,		"vector exception"		   }, | 
|  | 7 | { do_bad,		SIGBUS,	 BUS_ADRALN,	"alignment exception"		   }, | 
|  | 8 | { do_bad,		SIGKILL, 0,		"terminal exception"		   }, | 
|  | 9 | { do_bad,		SIGBUS,	 BUS_ADRALN,	"alignment exception"		   }, | 
|  | 10 | { do_bad,		SIGBUS,	 0,		"external abort on linefetch"	   }, | 
|  | 11 | { do_translation_fault,	SIGSEGV, SEGV_MAPERR,	"section translation fault"	   }, | 
|  | 12 | { do_bad,		SIGBUS,	 0,		"external abort on linefetch"	   }, | 
|  | 13 | { do_page_fault,	SIGSEGV, SEGV_MAPERR,	"page translation fault"	   }, | 
|  | 14 | { do_bad,		SIGBUS,	 0,		"external abort on non-linefetch"  }, | 
|  | 15 | { do_bad,		SIGSEGV, SEGV_ACCERR,	"section domain fault"		   }, | 
|  | 16 | { do_bad,		SIGBUS,	 0,		"external abort on non-linefetch"  }, | 
|  | 17 | { do_bad,		SIGSEGV, SEGV_ACCERR,	"page domain fault"		   }, | 
|  | 18 | { do_bad,		SIGBUS,	 0,		"external abort on translation"	   }, | 
|  | 19 | { do_sect_fault,	SIGSEGV, SEGV_ACCERR,	"section permission fault"	   }, | 
|  | 20 | { do_bad,		SIGBUS,	 0,		"external abort on translation"	   }, | 
|  | 21 | { do_page_fault,	SIGSEGV, SEGV_ACCERR,	"page permission fault"		   }, | 
|  | 22 | /* | 
|  | 23 | * The following are "imprecise" aborts, which are signalled by bit | 
|  | 24 | * 10 of the FSR, and may not be recoverable.  These are only | 
|  | 25 | * supported if the CPU abort handler supports bit 10. | 
|  | 26 | */ | 
|  | 27 | { do_bad,		SIGBUS,  0,		"unknown 16"			   }, | 
|  | 28 | { do_bad,		SIGBUS,  0,		"unknown 17"			   }, | 
|  | 29 | { do_bad,		SIGBUS,  0,		"unknown 18"			   }, | 
|  | 30 | { do_bad,		SIGBUS,  0,		"unknown 19"			   }, | 
|  | 31 | { do_bad,		SIGBUS,  0,		"lock abort"			   }, /* xscale */ | 
|  | 32 | { do_bad,		SIGBUS,  0,		"unknown 21"			   }, | 
|  | 33 | { do_bad,		SIGBUS,  BUS_OBJERR,	"imprecise external abort"	   }, /* xscale */ | 
|  | 34 | { do_bad,		SIGBUS,  0,		"unknown 23"			   }, | 
|  | 35 | { do_bad,		SIGBUS,  0,		"dcache parity error"		   }, /* xscale */ | 
|  | 36 | { do_bad,		SIGBUS,  0,		"unknown 25"			   }, | 
|  | 37 | { do_bad,		SIGBUS,  0,		"unknown 26"			   }, | 
|  | 38 | { do_bad,		SIGBUS,  0,		"unknown 27"			   }, | 
|  | 39 | { do_bad,		SIGBUS,  0,		"unknown 28"			   }, | 
|  | 40 | { do_bad,		SIGBUS,  0,		"unknown 29"			   }, | 
|  | 41 | { do_bad,		SIGBUS,  0,		"unknown 30"			   }, | 
|  | 42 | { do_bad,		SIGBUS,  0,		"unknown 31"			   }, | 
|  | 43 | }; | 
|  | 44 |  | 
|  | 45 | static struct fsr_info ifsr_info[] = { | 
|  | 46 | { do_bad,		SIGBUS,  0,		"unknown 0"			   }, | 
|  | 47 | { do_bad,		SIGBUS,  0,		"unknown 1"			   }, | 
|  | 48 | { do_bad,		SIGBUS,  0,		"debug event"			   }, | 
|  | 49 | { do_bad,		SIGSEGV, SEGV_ACCERR,	"section access flag fault"	   }, | 
|  | 50 | { do_bad,		SIGBUS,  0,		"unknown 4"			   }, | 
|  | 51 | { do_translation_fault,	SIGSEGV, SEGV_MAPERR,	"section translation fault"	   }, | 
|  | 52 | { do_bad,		SIGSEGV, SEGV_ACCERR,	"page access flag fault"	   }, | 
|  | 53 | { do_page_fault,	SIGSEGV, SEGV_MAPERR,	"page translation fault"	   }, | 
|  | 54 | { do_bad,		SIGBUS,	 0,		"external abort on non-linefetch"  }, | 
|  | 55 | { do_bad,		SIGSEGV, SEGV_ACCERR,	"section domain fault"		   }, | 
|  | 56 | { do_bad,		SIGBUS,  0,		"unknown 10"			   }, | 
|  | 57 | { do_bad,		SIGSEGV, SEGV_ACCERR,	"page domain fault"		   }, | 
|  | 58 | { do_bad,		SIGBUS,	 0,		"external abort on translation"	   }, | 
|  | 59 | { do_sect_fault,	SIGSEGV, SEGV_ACCERR,	"section permission fault"	   }, | 
|  | 60 | { do_bad,		SIGBUS,	 0,		"external abort on translation"	   }, | 
|  | 61 | { do_page_fault,	SIGSEGV, SEGV_ACCERR,	"page permission fault"		   }, | 
|  | 62 | { do_bad,		SIGBUS,  0,		"unknown 16"			   }, | 
|  | 63 | { do_bad,		SIGBUS,  0,		"unknown 17"			   }, | 
|  | 64 | { do_bad,		SIGBUS,  0,		"unknown 18"			   }, | 
|  | 65 | { do_bad,		SIGBUS,  0,		"unknown 19"			   }, | 
|  | 66 | { do_bad,		SIGBUS,  0,		"unknown 20"			   }, | 
|  | 67 | { do_bad,		SIGBUS,  0,		"unknown 21"			   }, | 
|  | 68 | { do_bad,		SIGBUS,  0,		"unknown 22"			   }, | 
|  | 69 | { do_bad,		SIGBUS,  0,		"unknown 23"			   }, | 
|  | 70 | { do_bad,		SIGBUS,  0,		"unknown 24"			   }, | 
|  | 71 | { do_bad,		SIGBUS,  0,		"unknown 25"			   }, | 
|  | 72 | { do_bad,		SIGBUS,  0,		"unknown 26"			   }, | 
|  | 73 | { do_bad,		SIGBUS,  0,		"unknown 27"			   }, | 
|  | 74 | { do_bad,		SIGBUS,  0,		"unknown 28"			   }, | 
|  | 75 | { do_bad,		SIGBUS,  0,		"unknown 29"			   }, | 
|  | 76 | { do_bad,		SIGBUS,  0,		"unknown 30"			   }, | 
|  | 77 | { do_bad,		SIGBUS,  0,		"unknown 31"			   }, | 
|  | 78 | }; |