162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_cistatic struct fsr_info fsr_info[] = { 362306a36Sopenharmony_ci /* 462306a36Sopenharmony_ci * The following are the standard ARMv3 and ARMv4 aborts. ARMv5 562306a36Sopenharmony_ci * defines these to be "precise" aborts. 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ci { do_bad, SIGSEGV, 0, "vector exception" }, 862306a36Sopenharmony_ci { do_bad, SIGBUS, BUS_ADRALN, "alignment exception" }, 962306a36Sopenharmony_ci { do_bad, SIGKILL, 0, "terminal exception" }, 1062306a36Sopenharmony_ci { do_bad, SIGBUS, BUS_ADRALN, "alignment exception" }, 1162306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "external abort on linefetch" }, 1262306a36Sopenharmony_ci { do_translation_fault, SIGSEGV, SEGV_MAPERR, "section translation fault" }, 1362306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "external abort on linefetch" }, 1462306a36Sopenharmony_ci { do_page_fault, SIGSEGV, SEGV_MAPERR, "page translation fault" }, 1562306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "external abort on non-linefetch" }, 1662306a36Sopenharmony_ci { do_bad, SIGSEGV, SEGV_ACCERR, "section domain fault" }, 1762306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "external abort on non-linefetch" }, 1862306a36Sopenharmony_ci { do_bad, SIGSEGV, SEGV_ACCERR, "page domain fault" }, 1962306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "external abort on translation" }, 2062306a36Sopenharmony_ci { do_sect_fault, SIGSEGV, SEGV_ACCERR, "section permission fault" }, 2162306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "external abort on translation" }, 2262306a36Sopenharmony_ci { do_page_fault, SIGSEGV, SEGV_ACCERR, "page permission fault" }, 2362306a36Sopenharmony_ci /* 2462306a36Sopenharmony_ci * The following are "imprecise" aborts, which are signalled by bit 2562306a36Sopenharmony_ci * 10 of the FSR, and may not be recoverable. These are only 2662306a36Sopenharmony_ci * supported if the CPU abort handler supports bit 10. 2762306a36Sopenharmony_ci */ 2862306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 16" }, 2962306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 17" }, 3062306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 18" }, 3162306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 19" }, 3262306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "lock abort" }, /* xscale */ 3362306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 21" }, 3462306a36Sopenharmony_ci { do_bad, SIGBUS, BUS_OBJERR, "imprecise external abort" }, /* xscale */ 3562306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 23" }, 3662306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "dcache parity error" }, /* xscale */ 3762306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 25" }, 3862306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 26" }, 3962306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 27" }, 4062306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 28" }, 4162306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 29" }, 4262306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 30" }, 4362306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 31" }, 4462306a36Sopenharmony_ci}; 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_cistatic struct fsr_info ifsr_info[] = { 4762306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 0" }, 4862306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 1" }, 4962306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "debug event" }, 5062306a36Sopenharmony_ci { do_bad, SIGSEGV, SEGV_ACCERR, "section access flag fault" }, 5162306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 4" }, 5262306a36Sopenharmony_ci { do_translation_fault, SIGSEGV, SEGV_MAPERR, "section translation fault" }, 5362306a36Sopenharmony_ci { do_bad, SIGSEGV, SEGV_ACCERR, "page access flag fault" }, 5462306a36Sopenharmony_ci { do_page_fault, SIGSEGV, SEGV_MAPERR, "page translation fault" }, 5562306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "external abort on non-linefetch" }, 5662306a36Sopenharmony_ci { do_bad, SIGSEGV, SEGV_ACCERR, "section domain fault" }, 5762306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 10" }, 5862306a36Sopenharmony_ci { do_bad, SIGSEGV, SEGV_ACCERR, "page domain fault" }, 5962306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "external abort on translation" }, 6062306a36Sopenharmony_ci { do_sect_fault, SIGSEGV, SEGV_ACCERR, "section permission fault" }, 6162306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "external abort on translation" }, 6262306a36Sopenharmony_ci { do_page_fault, SIGSEGV, SEGV_ACCERR, "page permission fault" }, 6362306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 16" }, 6462306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 17" }, 6562306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 18" }, 6662306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 19" }, 6762306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 20" }, 6862306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 21" }, 6962306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 22" }, 7062306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 23" }, 7162306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 24" }, 7262306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 25" }, 7362306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 26" }, 7462306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 27" }, 7562306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 28" }, 7662306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 29" }, 7762306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 30" }, 7862306a36Sopenharmony_ci { do_bad, SIGBUS, 0, "unknown 31" }, 7962306a36Sopenharmony_ci}; 80