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 | |