gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git] / bfd / elf-hppa.h
index 3871980d739f3a528f3a91a9e3f843a55d063c2f..1e10c5c851285b99012e1e3fbde26b4cf1d33291 100644 (file)
@@ -1,5 +1,5 @@
 /* Common code for PA ELF implementations.
-   Copyright (C) 1999-2017 Free Software Foundation, Inc.
+   Copyright (C) 1999-2020 Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
    external constraints require 32 or 64 bit specific code.  We remap
    the definitions/functions as necessary here.  */
 #if ARCH_SIZE == 64
-#define ELF_R_TYPE(X)                 ELF64_R_TYPE(X)
-#define ELF_R_SYM(X)                  ELF64_R_SYM(X)
+#define ELF_R_TYPE(X)                ELF64_R_TYPE(X)
+#define ELF_R_SYM(X)                 ELF64_R_SYM(X)
 #define elf_hppa_reloc_final_type     elf64_hppa_reloc_final_type
 #define _bfd_elf_hppa_gen_reloc_type  _bfd_elf64_hppa_gen_reloc_type
 #define elf_hppa_relocate_section     elf64_hppa_relocate_section
-#define elf_hppa_final_link           elf64_hppa_final_link
+#define elf_hppa_final_link          elf64_hppa_final_link
 #endif
 #if ARCH_SIZE == 32
-#define ELF_R_TYPE(X)                 ELF32_R_TYPE(X)
-#define ELF_R_SYM(X)                  ELF32_R_SYM(X)
+#define ELF_R_TYPE(X)                ELF32_R_TYPE(X)
+#define ELF_R_SYM(X)                 ELF32_R_SYM(X)
 #define elf_hppa_reloc_final_type     elf32_hppa_reloc_final_type
 #define _bfd_elf_hppa_gen_reloc_type  _bfd_elf32_hppa_gen_reloc_type
 #define elf_hppa_relocate_section     elf32_hppa_relocate_section
-#define elf_hppa_final_link           elf32_hppa_final_link
+#define elf_hppa_final_link          elf32_hppa_final_link
 #endif
 
 /* ELF/PA relocation howto entries.  */
 
 static reloc_howto_type elf_hppa_howto_table[ELF_HOWTO_TABLE_SIZE] =
 {
-  { R_PARISC_NONE, 0, 3, 0, FALSE, 0, complain_overflow_dont,
-    bfd_elf_generic_reloc, "R_PARISC_NONE", FALSE, 0, 0, FALSE },
+#define HOW(type, size, bitsize, pc_rel, complain, mask) \
+  HOWTO (type, 0, size, bitsize, pc_rel, 0, complain_overflow_ ## complain, \
+        bfd_elf_generic_reloc, #type, FALSE, 0, mask, FALSE)
 
   /* The values in DIR32 are to placate the check in
      _bfd_stab_section_find_nearest_line.  */
-  { R_PARISC_DIR32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_DIR32", FALSE, 0, 0xffffffff, FALSE },
-  { R_PARISC_DIR21L, 0, 2, 21, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_DIR21L", FALSE, 0, 0, FALSE },
-  { R_PARISC_DIR17R, 0, 2, 17, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_DIR17R", FALSE, 0, 0, FALSE },
-  { R_PARISC_DIR17F, 0, 2, 17, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_DIR17F", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_DIR14R, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_DIR14R", FALSE, 0, 0, FALSE },
-  { R_PARISC_DIR14F, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_DIR14F", FALSE, 0, 0, FALSE },
+  HOW (R_PARISC_NONE,          3,  0, FALSE,     dont, 0),
+  HOW (R_PARISC_DIR32,         2, 32, FALSE, bitfield, 0xffffffff),
+  HOW (R_PARISC_DIR21L,                2, 21, FALSE, bitfield, 0),
+  HOW (R_PARISC_DIR17R,                2, 17, FALSE, bitfield, 0),
+  HOW (R_PARISC_DIR17F,                2, 17, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_DIR14R,                2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_DIR14F,                2, 14, FALSE, bitfield, 0),
   /* 8 */
-  { R_PARISC_PCREL12F, 0, 2, 12, TRUE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_PCREL12F", FALSE, 0, 0, FALSE },
-  { R_PARISC_PCREL32, 0, 2, 32, TRUE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_PCREL32", FALSE, 0, 0, FALSE },
-  { R_PARISC_PCREL21L, 0, 2, 21, TRUE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_PCREL21L", FALSE, 0, 0, FALSE },
-  { R_PARISC_PCREL17R, 0, 2, 17, TRUE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_PCREL17R", FALSE, 0, 0, FALSE },
-  { R_PARISC_PCREL17F, 0, 2, 17, TRUE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_PCREL17F", FALSE, 0, 0, FALSE },
-  { R_PARISC_PCREL17C, 0, 2, 17, TRUE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_PCREL17C", FALSE, 0, 0, FALSE },
-  { R_PARISC_PCREL14R, 0, 2, 14, TRUE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_PCREL14R", FALSE, 0, 0, FALSE },
-  { R_PARISC_PCREL14F, 0, 2, 14, TRUE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_PCREL14F", FALSE, 0, 0, FALSE },
+  HOW (R_PARISC_PCREL12F,      2, 12,  TRUE, bitfield, 0),
+  HOW (R_PARISC_PCREL32,       2, 32,  TRUE, bitfield, 0),
+  HOW (R_PARISC_PCREL21L,      2, 21,  TRUE, bitfield, 0),
+  HOW (R_PARISC_PCREL17R,      2, 17,  TRUE, bitfield, 0),
+  HOW (R_PARISC_PCREL17F,      2, 17,  TRUE, bitfield, 0),
+  HOW (R_PARISC_PCREL17C,      2, 17,  TRUE, bitfield, 0),
+  HOW (R_PARISC_PCREL14R,      2, 14,  TRUE, bitfield, 0),
+  HOW (R_PARISC_PCREL14F,      2, 14,  TRUE, bitfield, 0),
   /* 16 */
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_DPREL21L, 0, 2, 21, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_DPREL21L", FALSE, 0, 0, FALSE },
-  { R_PARISC_DPREL14WR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_DPREL14WR", FALSE, 0, 0, FALSE },
-  { R_PARISC_DPREL14DR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_DPREL14DR", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_DPREL14R, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_DPREL14R", FALSE, 0, 0, FALSE },
-  { R_PARISC_DPREL14F, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_DPREL14F", FALSE, 0, 0, FALSE },
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_DPREL21L,      2, 21, FALSE, bitfield, 0),
+  HOW (R_PARISC_DPREL14WR,     2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_DPREL14DR,     2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_DPREL14R,      2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_DPREL14F,      2, 14, FALSE, bitfield, 0),
   /* 24 */
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_DLTREL21L, 0, 2, 21, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_DLTREL21L", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_DLTREL14R, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_DLTREL14R", FALSE, 0, 0, FALSE },
-  { R_PARISC_DLTREL14F, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_DLTREL14F", FALSE, 0, 0, FALSE },
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_DLTREL21L,     2, 21, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_DLTREL14R,     2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_DLTREL14F,     2, 14, FALSE, bitfield, 0),
   /* 32 */
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_DLTIND21L, 0, 2, 21, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_DLTIND21L", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_DLTIND14R, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_DLTIND14R", FALSE, 0, 0, FALSE },
-  { R_PARISC_DLTIND14F, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_DLTIND14F", FALSE, 0, 0, FALSE },
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_DLTIND21L,     2, 21, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_DLTIND14R,     2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_DLTIND14F,     2, 14, FALSE, bitfield, 0),
   /* 40 */
-  { R_PARISC_SETBASE, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_SETBASE", FALSE, 0, 0, FALSE },
-  { R_PARISC_SECREL32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_SECREL32", FALSE, 0, 0xffffffff, FALSE },
-  { R_PARISC_BASEREL21L, 0, 2, 21, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_BASEREL21L", FALSE, 0, 0, FALSE },
-  { R_PARISC_BASEREL17R, 0, 2, 17, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_BASEREL17R", FALSE, 0, 0, FALSE },
-  { R_PARISC_BASEREL17F, 0, 2, 17, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_BASEREL17F", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_BASEREL14R, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_BASEREL14R", FALSE, 0, 0, FALSE },
-  { R_PARISC_BASEREL14F, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_BASEREL14F", FALSE, 0, 0, FALSE },
+  HOW (R_PARISC_SETBASE,       0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_SECREL32,      2, 32, FALSE, bitfield, 0xffffffff),
+  HOW (R_PARISC_BASEREL21L,    2, 21, FALSE, bitfield, 0),
+  HOW (R_PARISC_BASEREL17R,    2, 17, FALSE, bitfield, 0),
+  HOW (R_PARISC_BASEREL17F,    2, 17, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_BASEREL14R,    2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_BASEREL14F,    2, 14, FALSE, bitfield, 0),
   /* 48 */
-  { R_PARISC_SEGBASE, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_SEGBASE", FALSE, 0, 0, FALSE },
-  { R_PARISC_SEGREL32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_SEGREL32", FALSE, 0, 0, FALSE },
-  { R_PARISC_PLTOFF21L, 0, 2, 21, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_PLTOFF21L", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_PLTOFF14R, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_PLTOFF14R", FALSE, 0, 0, FALSE },
-  { R_PARISC_PLTOFF14F, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_PLTOFF14F", FALSE, 0, 0, FALSE },
+  HOW (R_PARISC_SEGBASE,       0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_SEGREL32,      2, 32, FALSE, bitfield, 0),
+  HOW (R_PARISC_PLTOFF21L,     2, 21, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_PLTOFF14R,     2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_PLTOFF14F,     2, 14, FALSE, bitfield, 0),
   /* 56 */
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_LTOFF_FPTR32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_LTOFF_FPTR32", FALSE, 0, 0, FALSE },
-  { R_PARISC_LTOFF_FPTR21L, 0, 2, 21, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_LTOFF_FPTR21L", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_LTOFF_FPTR14R, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_LTOFF_FPTR14R", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_LTOFF_FPTR32,  2, 32, FALSE, bitfield, 0),
+  HOW (R_PARISC_LTOFF_FPTR21L, 2, 21, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_LTOFF_FPTR14R, 2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
   /* 64 */
-  { R_PARISC_FPTR64, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_FPTR64", FALSE, 0, 0, FALSE },
-  { R_PARISC_PLABEL32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_PLABEL32", FALSE, 0, 0, FALSE },
-  { R_PARISC_PLABEL21L, 0, 2, 21, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_PLABEL21L", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_PLABEL14R, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_PLABEL14R", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
+  HOW (R_PARISC_FPTR64,                4, 64, FALSE, bitfield, 0),
+  HOW (R_PARISC_PLABEL32,      2, 32, FALSE, bitfield, 0),
+  HOW (R_PARISC_PLABEL21L,     2, 21, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_PLABEL14R,     2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
   /* 72 */
-  { R_PARISC_PCREL64, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_PCREL64", FALSE, 0, 0, FALSE },
-  { R_PARISC_PCREL22C, 0, 2, 22, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_PCREL22C", FALSE, 0, 0, FALSE },
-  { R_PARISC_PCREL22F, 0, 2, 22, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_PCREL22F", FALSE, 0, 0, FALSE },
-  { R_PARISC_PCREL14WR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_PCREL14WR", FALSE, 0, 0, FALSE },
-  { R_PARISC_PCREL14DR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_PCREL14DR", FALSE, 0, 0, FALSE },
-  { R_PARISC_PCREL16F, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_PCREL16F", FALSE, 0, 0, FALSE },
-  { R_PARISC_PCREL16WF, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_PCREL16WF", FALSE, 0, 0, FALSE },
-  { R_PARISC_PCREL16DF, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_PCREL16DF", FALSE, 0, 0, FALSE },
+  HOW (R_PARISC_PCREL64,       4, 64, FALSE, bitfield, 0),
+  HOW (R_PARISC_PCREL22C,      2, 22, FALSE, bitfield, 0),
+  HOW (R_PARISC_PCREL22F,      2, 22, FALSE, bitfield, 0),
+  HOW (R_PARISC_PCREL14WR,     2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_PCREL14DR,     2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_PCREL16F,      2, 16, FALSE, bitfield, 0),
+  HOW (R_PARISC_PCREL16WF,     2, 16, FALSE, bitfield, 0),
+  HOW (R_PARISC_PCREL16DF,     2, 16, FALSE, bitfield, 0),
   /* 80 */
-  { R_PARISC_DIR64, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_DIR64", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_DIR14WR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_DIR14WR", FALSE, 0, 0, FALSE },
-  { R_PARISC_DIR14DR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_DIR14DR", FALSE, 0, 0, FALSE },
-  { R_PARISC_DIR16F, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_DIR16F", FALSE, 0, 0, FALSE },
-  { R_PARISC_DIR16WF, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_DIR16WF", FALSE, 0, 0, FALSE },
-  { R_PARISC_DIR16DF, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_DIR16DF", FALSE, 0, 0, FALSE },
+  HOW (R_PARISC_DIR64,         4, 64, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_DIR14WR,       2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_DIR14DR,       2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_DIR16F,                2, 16, FALSE, bitfield, 0),
+  HOW (R_PARISC_DIR16WF,       2, 16, FALSE, bitfield, 0),
+  HOW (R_PARISC_DIR16DF,       2, 16, FALSE, bitfield, 0),
   /* 88 */
-  { R_PARISC_GPREL64, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_GPREL64", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_DLTREL14WR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_DLTREL14WR", FALSE, 0, 0, FALSE },
-  { R_PARISC_DLTREL14DR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_DLTREL14DR", FALSE, 0, 0, FALSE },
-  { R_PARISC_GPREL16F, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_GPREL16F", FALSE, 0, 0, FALSE },
-  { R_PARISC_GPREL16WF, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_GPREL16WF", FALSE, 0, 0, FALSE },
-  { R_PARISC_GPREL16DF, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_GPREL16DF", FALSE, 0, 0, FALSE },
+  HOW (R_PARISC_GPREL64,       4, 64, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_DLTREL14WR,    2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_DLTREL14DR,    2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_GPREL16F,      2, 16, FALSE, bitfield, 0),
+  HOW (R_PARISC_GPREL16WF,     2, 16, FALSE, bitfield, 0),
+  HOW (R_PARISC_GPREL16DF,     2, 16, FALSE, bitfield, 0),
   /* 96 */
-  { R_PARISC_LTOFF64, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_LTOFF64", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_DLTIND14WR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_DLTIND14WR", FALSE, 0, 0, FALSE },
-  { R_PARISC_DLTIND14DR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_DLTIND14DR", FALSE, 0, 0, FALSE },
-  { R_PARISC_LTOFF16F, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_LTOFF16F", FALSE, 0, 0, FALSE },
-  { R_PARISC_LTOFF16WF, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_LTOFF16DF", FALSE, 0, 0, FALSE },
-  { R_PARISC_LTOFF16DF, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_LTOFF16DF", FALSE, 0, 0, FALSE },
+  HOW (R_PARISC_LTOFF64,       4, 64, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_DLTIND14WR,    2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_DLTIND14DR,    2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_LTOFF16F,      2, 16, FALSE, bitfield, 0),
+  HOW (R_PARISC_LTOFF16WF,     2, 16, FALSE, bitfield, 0),
+  HOW (R_PARISC_LTOFF16DF,     2, 16, FALSE, bitfield, 0),
   /* 104 */
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_BASEREL14WR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_BASEREL14WR", FALSE, 0, 0, FALSE },
-  { R_PARISC_BASEREL14DR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_BASEREL14DR", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_BASEREL14WR,   2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_BASEREL14DR,   2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
   /* 112 */
-  { R_PARISC_SEGREL64, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_SEGREL64", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_PLTOFF14WR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_PLTOFF14WR", FALSE, 0, 0, FALSE },
-  { R_PARISC_PLTOFF14DR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_PLTOFF14DR", FALSE, 0, 0, FALSE },
-  { R_PARISC_PLTOFF16F, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_PLTOFF16F", FALSE, 0, 0, FALSE },
-  { R_PARISC_PLTOFF16WF, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_PLTOFF16WF", FALSE, 0, 0, FALSE },
-  { R_PARISC_PLTOFF16DF, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_PLTOFF16DF", FALSE, 0, 0, FALSE },
+  HOW (R_PARISC_SEGREL64,      4, 64, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_PLTOFF14WR,    2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_PLTOFF14DR,    2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_PLTOFF16F,     2, 16, FALSE, bitfield, 0),
+  HOW (R_PARISC_PLTOFF16WF,    2, 16, FALSE, bitfield, 0),
+  HOW (R_PARISC_PLTOFF16DF,    2, 16, FALSE, bitfield, 0),
   /* 120 */
-  { R_PARISC_LTOFF_FPTR64, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_LTOFF_FPTR14WR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_LTOFF_FPTR14WR", FALSE, 0, 0, FALSE },
-  { R_PARISC_LTOFF_FPTR14DR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_LTOFF_FPTR14DR", FALSE, 0, 0, FALSE },
-  { R_PARISC_LTOFF_FPTR16F, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_LTOFF_FPTR16F", FALSE, 0, 0, FALSE },
-  { R_PARISC_LTOFF_FPTR16WF, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_LTOFF_FPTR16WF", FALSE, 0, 0, FALSE },
-  { R_PARISC_LTOFF_FPTR16DF, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
+  HOW (R_PARISC_LTOFF_FPTR64,  4, 64, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_LTOFF_FPTR14WR,        2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_LTOFF_FPTR14DR,        2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_LTOFF_FPTR16F, 2, 16, FALSE, bitfield, 0),
+  HOW (R_PARISC_LTOFF_FPTR16WF,        2, 16, FALSE, bitfield, 0),
+  HOW (R_PARISC_LTOFF_FPTR16DF,        2, 16, FALSE, bitfield, 0),
   /* 128 */
-  { R_PARISC_COPY, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_COPY", FALSE, 0, 0, FALSE },
-  { R_PARISC_IPLT, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_IPLT", FALSE, 0, 0, FALSE },
-  { R_PARISC_EPLT, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_EPLT", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
+  HOW (R_PARISC_COPY,          0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_IPLT,          0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_EPLT,          0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
   /* 136 */
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
   /* 144 */
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE,     dont, 0),
   /* 152 */
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_TPREL32, 0, 2, 32, FALSE, 0, complain_overflow_dont,
-    bfd_elf_generic_reloc, "R_PARISC_TPREL32", FALSE, 0, 0, FALSE },
-  { R_PARISC_TPREL21L, 0, 2, 21, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_TPREL21L", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_TPREL14R, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_TPREL14R", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE,     dont, 0),
+  HOW (R_PARISC_TPREL32,       2, 32, FALSE,     dont, 0),
+  HOW (R_PARISC_TPREL21L,      2, 21, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE,     dont, 0),
+  HOW (R_PARISC_TPREL14R,      2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE,     dont, 0),
   /* 160 */
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_LTOFF_TP21L, 0, 2, 21, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP21L", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_LTOFF_TP14R, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP14R", FALSE, 0, 0, FALSE },
-  { R_PARISC_LTOFF_TP14F, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP14F", FALSE, 0, 0, FALSE },
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE,     dont, 0),
+  HOW (R_PARISC_LTOFF_TP21L,   2, 21, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_LTOFF_TP14R,   2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_LTOFF_TP14F,   2, 14, FALSE, bitfield, 0),
   /* 168 */
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
   /* 176 */
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
   /* 184 */
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE,     dont, 0),
   /* 192 */
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
   /* 200 */
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
   /* 208 */
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE,     dont, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
   /* 216 */
-  { R_PARISC_TPREL64, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_TPREL64", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_TPREL14WR, 0, 2, 14, FALSE, 0, complain_overflow_dont,
-    bfd_elf_generic_reloc, "R_PARISC_TPREL14WR", FALSE, 0, 0, FALSE },
-  { R_PARISC_TPREL14DR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_TPREL14DR", FALSE, 0, 0, FALSE },
-  { R_PARISC_TPREL16F, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_TPREL16F", FALSE, 0, 0, FALSE },
-  { R_PARISC_TPREL16WF, 0, 2, 16, FALSE, 0, complain_overflow_dont,
-    bfd_elf_generic_reloc, "R_PARISC_TPREL16WF", FALSE, 0, 0, FALSE },
-  { R_PARISC_TPREL16DF, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_TPREL16DF", FALSE, 0, 0, FALSE },
+  HOW (R_PARISC_TPREL64,       4, 64, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_TPREL14WR,     2, 14, FALSE,     dont, 0),
+  HOW (R_PARISC_TPREL14DR,     2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_TPREL16F,      2, 16, FALSE, bitfield, 0),
+  HOW (R_PARISC_TPREL16WF,     2, 16, FALSE,     dont, 0),
+  HOW (R_PARISC_TPREL16DF,     2, 16, FALSE, bitfield, 0),
   /* 224 */
-  { R_PARISC_LTOFF_TP64, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP64", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
-  { R_PARISC_LTOFF_TP14WR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP14WR", FALSE, 0, 0, FALSE },
-  { R_PARISC_LTOFF_TP14DR, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP14DR", FALSE, 0, 0, FALSE },
-  { R_PARISC_LTOFF_TP16F, 0, 2, 16, FALSE, 0, complain_overflow_dont,
-    bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP16F", FALSE, 0, 0, FALSE },
-  { R_PARISC_LTOFF_TP16WF, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP16WF", FALSE, 0, 0, FALSE },
-  { R_PARISC_LTOFF_TP16DF, 0, 2, 16, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP16DF", FALSE, 0, 0, FALSE },
+  HOW (R_PARISC_LTOFF_TP64,    4, 64, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_UNIMPLEMENTED, 0,  0, FALSE, bitfield, 0),
+  HOW (R_PARISC_LTOFF_TP14WR,  2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_LTOFF_TP14DR,  2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_LTOFF_TP16F,   2, 16, FALSE,     dont, 0),
+  HOW (R_PARISC_LTOFF_TP16WF,  2, 16, FALSE, bitfield, 0),
+  HOW (R_PARISC_LTOFF_TP16DF,  2, 16, FALSE, bitfield, 0),
   /* 232 */
-  { R_PARISC_GNU_VTENTRY, 0, 0, 0, FALSE, 0, complain_overflow_dont,
-    bfd_elf_generic_reloc, "R_PARISC_GNU_VTENTRY", FALSE, 0, 0, FALSE },
-  { R_PARISC_GNU_VTINHERIT, 0, 0, 0, FALSE, 0, complain_overflow_dont,
-    bfd_elf_generic_reloc, "R_PARISC_GNU_VTINHERIT", FALSE, 0, 0, FALSE },
-  { R_PARISC_TLS_GD21L, 0, 2, 21, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_TLS_GD21L", FALSE, 0, 0, FALSE },
-  { R_PARISC_TLS_GD14R, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_TLS_GD14R", FALSE, 0, 0, FALSE },
-  { R_PARISC_TLS_GDCALL, 0, 0, 0, FALSE, 0, complain_overflow_dont,
-    bfd_elf_generic_reloc, "R_PARISC_TLS_GDCALL", FALSE, 0, 0, FALSE },
-  { R_PARISC_TLS_LDM21L, 0, 2, 21, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_TLS_LDM21L", FALSE, 0, 0, FALSE },
-  { R_PARISC_TLS_LDM14R, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_TLS_LDM14R", FALSE, 0, 0, FALSE },
-  { R_PARISC_TLS_LDMCALL, 0, 0, 0, FALSE, 0, complain_overflow_dont,
-    bfd_elf_generic_reloc, "R_PARISC_TLS_LDMCALL", FALSE, 0, 0, FALSE },
+  HOW (R_PARISC_GNU_VTENTRY,   0,  0, FALSE,     dont, 0),
+  HOW (R_PARISC_GNU_VTINHERIT, 0,  0, FALSE,     dont, 0),
+  HOW (R_PARISC_TLS_GD21L,     2, 21, FALSE, bitfield, 0),
+  HOW (R_PARISC_TLS_GD14R,     2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_TLS_GDCALL,    0,  0, FALSE,     dont, 0),
+  HOW (R_PARISC_TLS_LDM21L,    2, 21, FALSE, bitfield, 0),
+  HOW (R_PARISC_TLS_LDM14R,    2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_TLS_LDMCALL,   0,  0, FALSE,     dont, 0),
   /* 240 */
-  { R_PARISC_TLS_LDO21L, 0, 2, 21, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_TLS_LDO21L", FALSE, 0, 0, FALSE },
-  { R_PARISC_TLS_LDO14R, 0, 2, 14, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_TLS_LDO14R", FALSE, 0, 0, FALSE },
-  { R_PARISC_TLS_DTPMOD32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_TLS_DTPMOD32", FALSE, 0, 0, FALSE },
-  { R_PARISC_TLS_DTPMOD64, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_TLS_DTPMOD64", FALSE, 0, 0, FALSE },
-  { R_PARISC_TLS_DTPOFF32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_TLS_DTPOFF32", FALSE, 0, 0, FALSE },
-  { R_PARISC_TLS_DTPOFF64, 0, 4, 64, FALSE, 0, complain_overflow_bitfield,
-    bfd_elf_generic_reloc, "R_PARISC_TLS_DTPOFF64", FALSE, 0, 0, FALSE },
+  HOW (R_PARISC_TLS_LDO21L,    2, 21, FALSE, bitfield, 0),
+  HOW (R_PARISC_TLS_LDO14R,    2, 14, FALSE, bitfield, 0),
+  HOW (R_PARISC_TLS_DTPMOD32,  2, 32, FALSE, bitfield, 0),
+  HOW (R_PARISC_TLS_DTPMOD64,  4, 64, FALSE, bitfield, 0),
+  HOW (R_PARISC_TLS_DTPOFF32,  2, 32, FALSE, bitfield, 0),
+  HOW (R_PARISC_TLS_DTPOFF64,  4, 64, FALSE, bitfield, 0)
+#undef HOW
 };
 
 #define OFFSET_14R_FROM_21L 4
@@ -996,7 +754,7 @@ _bfd_elf_hppa_gen_reloc_type (bfd *abfd,
 {
   elf_hppa_reloc_type *finaltype;
   elf_hppa_reloc_type **final_types;
-  bfd_size_type amt = sizeof (elf_hppa_reloc_type *) * 2;
+  size_t amt = sizeof (elf_hppa_reloc_type *) * 2;
 
   /* Allocate slots for the BFD relocation.  */
   final_types = bfd_alloc (abfd, amt);
@@ -1020,26 +778,58 @@ _bfd_elf_hppa_gen_reloc_type (bfd *abfd,
 
 /* Translate from an elf into field into a howto relocation pointer.  */
 
-static void
-elf_hppa_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
+static bfd_boolean
+elf_hppa_info_to_howto (bfd *abfd,
                        arelent *bfd_reloc,
                        Elf_Internal_Rela *elf_reloc)
 {
-  BFD_ASSERT (ELF_R_TYPE (elf_reloc->r_info)
-             < (unsigned int) R_PARISC_UNIMPLEMENTED);
-  bfd_reloc->howto = &elf_hppa_howto_table[ELF_R_TYPE (elf_reloc->r_info)];
+  unsigned int r_type = ELF32_R_TYPE (elf_reloc->r_info);
+  unsigned int type = r_type;
+  reloc_howto_type *howto = NULL;
+
+  if (r_type < (unsigned int) R_PARISC_UNIMPLEMENTED)
+    {
+      howto = &elf_hppa_howto_table[r_type];
+      type = howto->type;
+    }
+  if (type >= (unsigned int) R_PARISC_UNIMPLEMENTED)
+    {
+      /* xgettext:c-format */
+      _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
+                         abfd, r_type);
+      bfd_set_error (bfd_error_bad_value);
+      return FALSE;
+    }
+  bfd_reloc->howto = howto;
+  return TRUE;
 }
 
 /* Translate from an elf into field into a howto relocation pointer.  */
 
-static void
-elf_hppa_info_to_howto_rel (bfd *abfd ATTRIBUTE_UNUSED,
+static bfd_boolean
+elf_hppa_info_to_howto_rel (bfd *abfd,
                            arelent *bfd_reloc,
                            Elf_Internal_Rela *elf_reloc)
 {
-  BFD_ASSERT (ELF_R_TYPE (elf_reloc->r_info)
-             < (unsigned int) R_PARISC_UNIMPLEMENTED);
-  bfd_reloc->howto = &elf_hppa_howto_table[ELF_R_TYPE (elf_reloc->r_info)];
+  unsigned int r_type = ELF_R_TYPE (elf_reloc->r_info);
+  unsigned int type = r_type;
+  reloc_howto_type *howto = NULL;
+
+  if (r_type < (unsigned int) R_PARISC_UNIMPLEMENTED)
+    {
+      howto = &elf_hppa_howto_table[r_type];
+      type = howto->type;
+    }
+  if (type >= (unsigned int) R_PARISC_UNIMPLEMENTED)
+    {
+      /* xgettext:c-format */
+      _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
+                         abfd, r_type);
+      bfd_set_error (bfd_error_bad_value);
+      return FALSE;
+    }
+  bfd_reloc->howto = howto;
+  return TRUE;
 }
 
 /* Return the address of the howto table entry to perform the CODE
@@ -1091,7 +881,7 @@ elf_hppa_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
 {
   const char *name;
 
-  name = bfd_get_section_name (abfd, sec);
+  name = bfd_section_name (sec);
 
   if (strcmp (name, ".PARISC.unwind") == 0)
     {
@@ -1099,9 +889,11 @@ elf_hppa_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
       asection *asec;
 
 #if ARCH_SIZE == 64
-      hdr->sh_type = SHT_LOPROC + 1;
+      hdr->sh_type = SHT_PARISC_UNWIND;
 #else
-      hdr->sh_type = 1;
+      /* Note - it is not clear why this is not SHT_PARISC_UNWIND as well.
+        Presumably it is a historical constraint, so leave it as it is.  */
+      hdr->sh_type = SHT_PROGBITS;
 #endif
       /* ?!? How are unwinds supposed to work for symbols in arbitrary
         sections?  Or what if we have multiple .text sections in a single
@@ -1117,19 +909,22 @@ elf_hppa_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
          if (asec->name && strcmp (asec->name, ".text") == 0)
            {
              hdr->sh_info = indx;
+             hdr->sh_flags |= SHF_INFO_LINK;
              break;
            }
        }
 
-      /* I have no idea if this is really necessary or what it means.  */
+      /* The unwind table entries are 16 bytes long, so it is not clear
+        why this field is set to 4.  (The ELF spec says that the sh_entsize
+        field is a byte quantity, but this is a processor specific section,
+        so it is allowed to change the rules).  Leave as it is for now.  */
       hdr->sh_entsize = 4;
     }
   return TRUE;
 }
 
-static void
-elf_hppa_final_write_processing (bfd *abfd,
-                                bfd_boolean linker ATTRIBUTE_UNUSED)
+static bfd_boolean
+elf_hppa_final_write_processing (bfd *abfd)
 {
   int mach = bfd_get_mach (abfd);
 
@@ -1152,6 +947,7 @@ elf_hppa_final_write_processing (bfd *abfd,
                                         a step backwards with the ELF
                                         based toolchains.  */
                                      | EF_PARISC_TRAPNIL);
+  return _bfd_elf_final_write_processing (abfd);
 }
 
 /* Comparison function for qsort to sort unwind section during a
This page took 0.033464 seconds and 4 git commands to generate.