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