linux/arch/arm/mm/fsr-2level.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2static 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
  46static 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