18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_cistatic struct fsr_info fsr_info[] = { 38c2ecf20Sopenharmony_ci /* 48c2ecf20Sopenharmony_ci * The following are the standard ARMv3 and ARMv4 aborts. ARMv5 58c2ecf20Sopenharmony_ci * defines these to be "precise" aborts. 68c2ecf20Sopenharmony_ci */ 78c2ecf20Sopenharmony_ci { do_bad, SIGSEGV, 0, "vector exception" }, 88c2ecf20Sopenharmony_ci { do_bad, SIGBUS, BUS_ADRALN, "alignment exception" }, 98c2ecf20Sopenharmony_ci { do_bad, SIGKILL, 0, "terminal exception" }, 108c2ecf20Sopenharmony_ci { do_bad, SIGBUS, BUS_ADRALN, "alignment exception" }, 118c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "external abort on linefetch" }, 128c2ecf20Sopenharmony_ci { do_translation_fault, SIGSEGV, SEGV_MAPERR, "section translation fault" }, 138c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "external abort on linefetch" }, 148c2ecf20Sopenharmony_ci { do_page_fault, SIGSEGV, SEGV_MAPERR, "page translation fault" }, 158c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "external abort on non-linefetch" }, 168c2ecf20Sopenharmony_ci { do_bad, SIGSEGV, SEGV_ACCERR, "section domain fault" }, 178c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "external abort on non-linefetch" }, 188c2ecf20Sopenharmony_ci { do_bad, SIGSEGV, SEGV_ACCERR, "page domain fault" }, 198c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "external abort on translation" }, 208c2ecf20Sopenharmony_ci { do_sect_fault, SIGSEGV, SEGV_ACCERR, "section permission fault" }, 218c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "external abort on translation" }, 228c2ecf20Sopenharmony_ci { do_page_fault, SIGSEGV, SEGV_ACCERR, "page permission fault" }, 238c2ecf20Sopenharmony_ci /* 248c2ecf20Sopenharmony_ci * The following are "imprecise" aborts, which are signalled by bit 258c2ecf20Sopenharmony_ci * 10 of the FSR, and may not be recoverable. These are only 268c2ecf20Sopenharmony_ci * supported if the CPU abort handler supports bit 10. 278c2ecf20Sopenharmony_ci */ 288c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 16" }, 298c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 17" }, 308c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 18" }, 318c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 19" }, 328c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "lock abort" }, /* xscale */ 338c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 21" }, 348c2ecf20Sopenharmony_ci { do_bad, SIGBUS, BUS_OBJERR, "imprecise external abort" }, /* xscale */ 358c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 23" }, 368c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "dcache parity error" }, /* xscale */ 378c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 25" }, 388c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 26" }, 398c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 27" }, 408c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 28" }, 418c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 29" }, 428c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 30" }, 438c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 31" }, 448c2ecf20Sopenharmony_ci}; 458c2ecf20Sopenharmony_ci 468c2ecf20Sopenharmony_cistatic struct fsr_info ifsr_info[] = { 478c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 0" }, 488c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 1" }, 498c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "debug event" }, 508c2ecf20Sopenharmony_ci { do_bad, SIGSEGV, SEGV_ACCERR, "section access flag fault" }, 518c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 4" }, 528c2ecf20Sopenharmony_ci { do_translation_fault, SIGSEGV, SEGV_MAPERR, "section translation fault" }, 538c2ecf20Sopenharmony_ci { do_bad, SIGSEGV, SEGV_ACCERR, "page access flag fault" }, 548c2ecf20Sopenharmony_ci { do_page_fault, SIGSEGV, SEGV_MAPERR, "page translation fault" }, 558c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "external abort on non-linefetch" }, 568c2ecf20Sopenharmony_ci { do_bad, SIGSEGV, SEGV_ACCERR, "section domain fault" }, 578c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 10" }, 588c2ecf20Sopenharmony_ci { do_bad, SIGSEGV, SEGV_ACCERR, "page domain fault" }, 598c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "external abort on translation" }, 608c2ecf20Sopenharmony_ci { do_sect_fault, SIGSEGV, SEGV_ACCERR, "section permission fault" }, 618c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "external abort on translation" }, 628c2ecf20Sopenharmony_ci { do_page_fault, SIGSEGV, SEGV_ACCERR, "page permission fault" }, 638c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 16" }, 648c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 17" }, 658c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 18" }, 668c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 19" }, 678c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 20" }, 688c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 21" }, 698c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 22" }, 708c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 23" }, 718c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 24" }, 728c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 25" }, 738c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 26" }, 748c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 27" }, 758c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 28" }, 768c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 29" }, 778c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 30" }, 788c2ecf20Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 31" }, 798c2ecf20Sopenharmony_ci}; 80