+ { BFD_RELOC_V850_CALLT_6_7_OFFSET, R_V850_CALLT_6_7_OFFSET },
+ { BFD_RELOC_V850_CALLT_16_16_OFFSET, R_V850_CALLT_16_16_OFFSET },
+ { BFD_RELOC_VTABLE_INHERIT, R_V850_GNU_VTINHERIT },
+ { BFD_RELOC_VTABLE_ENTRY, R_V850_GNU_VTENTRY },
+ { BFD_RELOC_V850_LONGCALL, R_V850_LONGCALL },
+ { BFD_RELOC_V850_LONGJUMP, R_V850_LONGJUMP },
+ { BFD_RELOC_V850_ALIGN, R_V850_ALIGN },
+ { BFD_RELOC_V850_16_PCREL, R_V850_16_PCREL },
+ { BFD_RELOC_V850_17_PCREL, R_V850_17_PCREL },
+ { BFD_RELOC_V850_23, R_V850_23 },
+ { BFD_RELOC_V850_32_PCREL, R_V850_32_PCREL },
+ { BFD_RELOC_V850_32_ABS, R_V850_32_ABS },
+ { BFD_RELOC_V850_16_SPLIT_OFFSET, R_V850_HI16 },
+ { BFD_RELOC_V850_16_S1, R_V850_16_S1 },
+ { BFD_RELOC_V850_LO16_S1, R_V850_LO16_S1 },
+ { BFD_RELOC_V850_CALLT_15_16_OFFSET, R_V850_CALLT_15_16_OFFSET },
+ { BFD_RELOC_V850_32_GOTPCREL, R_V850_32_GOTPCREL },
+ { BFD_RELOC_V850_16_GOT, R_V850_16_GOT },
+ { BFD_RELOC_V850_32_GOT, R_V850_32_GOT },
+ { BFD_RELOC_V850_22_PLT_PCREL, R_V850_22_PLT },
+ { BFD_RELOC_V850_32_PLT_PCREL, R_V850_32_PLT },
+ { BFD_RELOC_V850_COPY, R_V850_COPY },
+ { BFD_RELOC_V850_GLOB_DAT, R_V850_GLOB_DAT },
+ { BFD_RELOC_V850_JMP_SLOT, R_V850_JMP_SLOT },
+ { BFD_RELOC_V850_RELATIVE, R_V850_RELATIVE },
+ { BFD_RELOC_V850_16_GOTOFF, R_V850_16_GOTOFF },
+ { BFD_RELOC_V850_32_GOTOFF, R_V850_32_GOTOFF },
+ { BFD_RELOC_V850_CODE, R_V850_CODE },
+ { BFD_RELOC_V850_DATA, R_V850_DATA },
+};
+
+#define V800_RELOC(name,sz,bit,shift,complain,pcrel,resolver) \
+ HOWTO (name, shift, sz, bit, pcrel, 0, complain_overflow_ ## complain, \
+ bfd_elf_ ## resolver ## _reloc, #name, FALSE, 0, ~0, FALSE)
+
+#define V800_EMPTY(name) EMPTY_HOWTO (name - R_V810_NONE)
+
+#define bfd_elf_v850_reloc v850_elf_reloc
+
+/* Note: It is REQUIRED that the 'type' value (R_V810_...) of each entry
+ in this array match the index of the entry in the array minus 0x30.
+ See: bfd_elf_v850_relocate_section(), v800_elf_reloc_type_lookup()
+ and v800_elf_info_to_howto(). */
+
+static reloc_howto_type v800_elf_howto_table[] =
+{
+ V800_RELOC (R_V810_NONE, 0, 0, 0, dont, FALSE, generic), /* Type = 0x30 */
+ V800_RELOC (R_V810_BYTE, 0, 8, 0, dont, FALSE, generic),
+ V800_RELOC (R_V810_HWORD, 1, 16, 0, dont, FALSE, generic),
+ V800_RELOC (R_V810_WORD, 2, 32, 0, dont, FALSE, generic),
+ V800_RELOC (R_V810_WLO, 1, 16, 0, dont, FALSE, generic),
+ V800_RELOC (R_V810_WHI, 1, 16, 0, dont, FALSE, generic),
+ V800_RELOC (R_V810_WHI1, 1, 16, 0, dont, FALSE, generic),
+ V800_RELOC (R_V810_GPBYTE, 0, 8, 0, dont, FALSE, v850),
+ V800_RELOC (R_V810_GPHWORD, 1, 16, 0, dont, FALSE, v850),
+ V800_RELOC (R_V810_GPWORD, 2, 32, 0, dont, FALSE, v850),
+ V800_RELOC (R_V810_GPWLO, 1, 16, 0, dont, FALSE, v850),
+ V800_RELOC (R_V810_GPWHI, 1, 16, 0, dont, FALSE, v850),
+ V800_RELOC (R_V810_GPWHI1, 1, 16, 0, dont, FALSE, v850),
+ V800_RELOC (R_V850_HWLO, 1, 16, 0, dont, FALSE, generic),
+ V800_EMPTY (R_V810_reserved1),
+ V800_RELOC (R_V850_EP7BIT, 0, 7, 0, unsigned, FALSE, v850),
+ V800_RELOC (R_V850_EPHBYTE, 0, 8, 1, unsigned, FALSE, v850),
+ V800_RELOC (R_V850_EPWBYTE, 0, 8, 2, unsigned, FALSE, v850),
+ V800_RELOC (R_V850_REGHWLO, 1, 16, 0, dont, FALSE, v850),
+ V800_EMPTY (R_V810_reserved2),
+ V800_RELOC (R_V850_GPHWLO, 1, 16, 0, dont, FALSE, v850),
+ V800_EMPTY (R_V810_reserved3),
+ V800_RELOC (R_V850_PCR22, 2, 22, 0, signed, TRUE, generic),
+ V800_RELOC (R_V850_BLO, 2, 24, 0, dont, FALSE, v850),
+ V800_RELOC (R_V850_EP4BIT, 0, 4, 0, unsigned, FALSE, v850),
+ V800_RELOC (R_V850_EP5BIT, 0, 5, 0, unsigned, FALSE, v850),
+ V800_RELOC (R_V850_REGBLO, 2, 24, 0, dont, FALSE, v850),
+ V800_RELOC (R_V850_GPBLO, 2, 24, 0, dont, FALSE, v850),
+ V800_RELOC (R_V810_WLO_1, 1, 16, 0, dont, FALSE, v850),
+ V800_RELOC (R_V810_GPWLO_1, 1, 16, 0, signed, FALSE, v850),
+ V800_RELOC (R_V850_BLO_1, 2, 16, 0, signed, FALSE, v850),
+ V800_RELOC (R_V850_HWLO_1, 1, 16, 0, signed, FALSE, v850),
+ V800_EMPTY (R_V810_reserved4),
+ V800_RELOC (R_V850_GPBLO_1, 2, 16, 1, signed, FALSE, v850),
+ V800_RELOC (R_V850_GPHWLO_1, 1, 16, 1, signed, FALSE, v850),
+ V800_EMPTY (R_V810_reserved5),
+ V800_RELOC (R_V850_EPBLO, 2, 16, 1, signed, FALSE, v850),
+ V800_RELOC (R_V850_EPHWLO, 1, 16, 1, signed, FALSE, v850),
+ V800_EMPTY (R_V810_reserved6),
+ V800_RELOC (R_V850_EPWLO_N, 1, 16, 1, signed, FALSE, v850),
+ V800_RELOC (R_V850_PC32, 2, 32, 1, signed, TRUE, v850),
+ V800_RELOC (R_V850_W23BIT, 2, 23, 1, signed, FALSE, v850),
+ V800_RELOC (R_V850_GPW23BIT, 2, 23, 1, signed, FALSE, v850),
+ V800_RELOC (R_V850_EPW23BIT, 2, 23, 1, signed, FALSE, v850),
+ V800_RELOC (R_V850_B23BIT, 2, 23, 1, signed, FALSE, v850),
+ V800_RELOC (R_V850_GPB23BIT, 2, 23, 1, signed, FALSE, v850),
+ V800_RELOC (R_V850_EPB23BIT, 2, 23, 1, signed, FALSE, v850),
+ V800_RELOC (R_V850_PC16U, 1, 16, 1, unsigned, TRUE, generic),
+ V800_RELOC (R_V850_PC17, 2, 17, 1, signed, TRUE, generic),
+ V800_RELOC (R_V850_DW8, 2, 8, 2, signed, FALSE, v850),
+ V800_RELOC (R_V850_GPDW8, 2, 8, 2, signed, FALSE, v850),
+ V800_RELOC (R_V850_EPDW8, 2, 8, 2, signed, FALSE, v850),
+ V800_RELOC (R_V850_PC9, 1, 9, 3, signed, TRUE, v850),
+ V800_RELOC (R_V810_REGBYTE, 0, 8, 0, dont, FALSE, v850),
+ V800_RELOC (R_V810_REGHWORD, 1, 16, 0, dont, FALSE, v850),
+ V800_RELOC (R_V810_REGWORD, 2, 32, 0, dont, FALSE, v850),
+ V800_RELOC (R_V810_REGWLO, 1, 16, 0, dont, FALSE, v850),
+ V800_RELOC (R_V810_REGWHI, 1, 16, 0, dont, FALSE, v850),
+ V800_RELOC (R_V810_REGWHI1, 1, 16, 0, dont, FALSE, v850),
+ V800_RELOC (R_V850_REGW23BIT, 2, 23, 1, signed, FALSE, v850),
+ V800_RELOC (R_V850_REGB23BIT, 2, 23, 1, signed, FALSE, v850),
+ V800_RELOC (R_V850_REGDW8, 2, 8, 2, signed, FALSE, v850),
+ V800_RELOC (R_V810_EPBYTE, 0, 8, 0, dont, FALSE, v850),
+ V800_RELOC (R_V810_EPHWORD, 1, 16, 0, dont, FALSE, v850),
+ V800_RELOC (R_V810_EPWORD, 2, 32, 0, dont, FALSE, v850),
+ V800_RELOC (R_V850_WLO23, 2, 32, 1, dont, FALSE, v850),
+ V800_RELOC (R_V850_WORD_E, 2, 32, 1, dont, FALSE, v850),
+ V800_RELOC (R_V850_REGWORD_E, 2, 32, 1, dont, FALSE, v850),
+ V800_RELOC (R_V850_WORD, 2, 32, 0, dont, FALSE, v850),
+ V800_RELOC (R_V850_GPWORD, 2, 32, 0, dont, FALSE, v850),
+ V800_RELOC (R_V850_REGWORD, 2, 32, 0, dont, FALSE, v850),
+ V800_RELOC (R_V850_EPWORD, 2, 32, 0, dont, FALSE, v850),
+ V800_RELOC (R_V810_TPBYTE, 0, 8, 0, dont, FALSE, v850),
+ V800_RELOC (R_V810_TPHWORD, 1, 16, 0, dont, FALSE, v850),
+ V800_RELOC (R_V810_TPWORD, 2, 32, 0, dont, FALSE, v850),
+ V800_RELOC (R_V810_TPWLO, 1, 16, 0, dont, FALSE, v850),
+ V800_RELOC (R_V810_TPWHI, 1, 16, 0, dont, FALSE, v850),
+ V800_RELOC (R_V810_TPWHI1, 1, 16, 0, dont, FALSE, v850),
+ V800_RELOC (R_V850_TPHWLO, 1, 16, 1, dont, FALSE, v850),
+ V800_RELOC (R_V850_TPBLO, 2, 24, 0, dont, FALSE, v850),
+ V800_RELOC (R_V810_TPWLO_1, 1, 16, 0, signed, FALSE, v850),
+ V800_RELOC (R_V850_TPBLO_1, 2, 16, 0, signed, FALSE, v850),
+ V800_RELOC (R_V850_TPHWLO_1, 1, 16, 0, signed, FALSE, v850),
+ V800_RELOC (R_V850_TP23BIT, 2, 23, 0, signed, FALSE, v850),
+ V800_RELOC (R_V850_TPW23BIT, 2, 23, 0, signed, FALSE, v850),
+ V800_RELOC (R_V850_TPDW8, 2, 8, 0, signed, FALSE, v850)