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