MIPS: remove SHT_REL support for NewABI elf backends

Message ID 20210312085632.15517-1-yunqiang.su@cipunited.com
State New
Headers show
Series
  • MIPS: remove SHT_REL support for NewABI elf backends
Related show

Commit Message

YunQiang Su March 12, 2021, 8:56 a.m.
Given that MIPS NewABI ELF always use SHT_RELA in realworld,
and our SHT_REL implementation in backend is incomplete, it
filled with FIXME and TODO in code and produce tons of
assertion failure and other errors when meeting SHT_REL,
it's time to remove it.
---
 bfd/elf64-mips.c  | 1700 +--------------------------------------------
 bfd/elfn32-mips.c | 1513 +---------------------------------------
 2 files changed, 24 insertions(+), 3189 deletions(-)

-- 
2.30.2

Comments

Florian Weimer via Binutils March 30, 2021, 6:16 a.m. | #1
Ping this patch.

YunQiang Su <yunqiang.su@cipunited.com> 于2021年3月12日周五 下午4:57写道:
>

> Given that MIPS NewABI ELF always use SHT_RELA in realworld,

> and our SHT_REL implementation in backend is incomplete, it

> filled with FIXME and TODO in code and produce tons of

> assertion failure and other errors when meeting SHT_REL,

> it's time to remove it.

> ---

>  bfd/elf64-mips.c  | 1700 +--------------------------------------------

>  bfd/elfn32-mips.c | 1513 +---------------------------------------

>  2 files changed, 24 insertions(+), 3189 deletions(-)

>

> diff --git a/bfd/elf64-mips.c b/bfd/elf64-mips.c

> index e1a00448fb..180363ea25 100644

> --- a/bfd/elf64-mips.c

> +++ b/bfd/elf64-mips.c

> @@ -31,8 +31,6 @@

>  /* TODO: Many things are unsupported, even if there is some code for it

>   .       (which was mostly stolen from elf32-mips.c and slightly adapted).

>   .

> - .   - Relocation handling for REL relocs is wrong in many cases and

> - .     generally untested.

>   .   - Relocation handling for RELA relocs related to GOT support are

>   .     also likely to be wrong.

>   .   - Support for MIPS16 is untested.

> @@ -62,18 +60,10 @@

>  #define ECOFF_SIGNED_64

>  #include "ecoffswap.h"

>

> -static void mips_elf64_swap_reloc_in

> -  (bfd *, const Elf64_Mips_External_Rel *, Elf64_Mips_Internal_Rela *);

>  static void mips_elf64_swap_reloca_in

>    (bfd *, const Elf64_Mips_External_Rela *, Elf64_Mips_Internal_Rela *);

> -static void mips_elf64_swap_reloc_out

> -  (bfd *, const Elf64_Mips_Internal_Rela *, Elf64_Mips_External_Rel *);

>  static void mips_elf64_swap_reloca_out

>    (bfd *, const Elf64_Mips_Internal_Rela *, Elf64_Mips_External_Rela *);

> -static void mips_elf64_be_swap_reloc_in

> -  (bfd *, const bfd_byte *, Elf_Internal_Rela *);

> -static void mips_elf64_be_swap_reloc_out

> -  (bfd *, const Elf_Internal_Rela *, bfd_byte *);

>  static void mips_elf64_be_swap_reloca_in

>    (bfd *, const bfd_byte *, Elf_Internal_Rela *);

>  static void mips_elf64_be_swap_reloca_out

> @@ -91,8 +81,6 @@ static bfd_boolean mips_elf64_slurp_reloc_table

>    (bfd *, asection *, asymbol **, bfd_boolean);

>  static void mips_elf64_write_relocs

>    (bfd *, asection *, void *);

> -static void mips_elf64_write_rel

> -  (bfd *, asection *, Elf_Internal_Shdr *, int *, void *);

>  static void mips_elf64_write_rela

>    (bfd *, asection *, Elf_Internal_Shdr *, int *, void *);

>  static bfd_reloc_status_type mips_elf64_gprel16_reloc

> @@ -127,772 +115,8 @@ extern const bfd_target mips_elf64_le_vec;

>

>  /* The number of local .got entries we reserve.  */

>  #define MIPS_RESERVED_GOTNO (2)

> -

> -/* The relocation table used for SHT_REL sections.  */

> -

> -static reloc_howto_type mips_elf64_howto_table_rel[] =

> -{

> -  /* No relocation.  */

> -  HOWTO (R_MIPS_NONE,          /* type */

> -        0,                     /* rightshift */

> -        3,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        0,                     /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_NONE",         /* name */

> -        FALSE,                 /* partial_inplace */

> -        0,                     /* src_mask */

> -        0,                     /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 16 bit relocation.  */

> -  HOWTO (R_MIPS_16,            /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_16",           /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 32 bit relocation.  */

> -  HOWTO (R_MIPS_32,            /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_32",           /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 32 bit symbol relative relocation.  */

> -  HOWTO (R_MIPS_REL32,         /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_REL32",        /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 26 bit jump address.  */

> -  HOWTO (R_MIPS_26,            /* type */

> -        2,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        26,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -                               /* This needs complex overflow

> -                                  detection, because the upper 36

> -                                  bits must match the PC + 4.  */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_26",           /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x03ffffff,            /* src_mask */

> -        0x03ffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* R_MIPS_HI16 and R_MIPS_LO16 are unsupported for NewABI REL.

> -     However, the native IRIX6 tools use them, so we try our best. */

> -

> -  /* High 16 bits of symbol value.  */

> -  HOWTO (R_MIPS_HI16,          /* type */

> -        16,                    /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_hi16_reloc, /* special_function */

> -        "R_MIPS_HI16",         /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Low 16 bits of symbol value.  */

> -  HOWTO (R_MIPS_LO16,          /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_lo16_reloc, /* special_function */

> -        "R_MIPS_LO16",         /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* GP relative reference.  */

> -  HOWTO (R_MIPS_GPREL16,       /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        mips_elf64_gprel16_reloc, /* special_function */

> -        "R_MIPS_GPREL16",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Reference to literal section.  */

> -  HOWTO (R_MIPS_LITERAL,       /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        mips_elf64_literal_reloc, /* special_function */

> -        "R_MIPS_LITERAL",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Reference to global offset table.  */

> -  HOWTO (R_MIPS_GOT16,         /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_got16_reloc, /* special_function */

> -        "R_MIPS_GOT16",        /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 16 bit PC relative reference.  Note that the ABI document has a typo

> -     and claims R_MIPS_PC16 to be not rightshifted, rendering it useless.

> -     We do the right thing here.  */

> -  HOWTO (R_MIPS_PC16,          /* type */

> -        2,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_PC16",         /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  /* 16 bit call through global offset table.  */

> -  HOWTO (R_MIPS_CALL16,                /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_CALL16",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 32 bit GP relative reference.  */

> -  HOWTO (R_MIPS_GPREL32,       /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        mips_elf64_gprel32_reloc, /* special_function */

> -        "R_MIPS_GPREL32",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  EMPTY_HOWTO (13),

> -  EMPTY_HOWTO (14),

> -  EMPTY_HOWTO (15),

> -

> -  /* A 5 bit shift field.  */

> -  HOWTO (R_MIPS_SHIFT5,                /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        5,                     /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        6,                     /* bitpos */

> -        complain_overflow_bitfield, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_SHIFT5",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x000007c0,            /* src_mask */

> -        0x000007c0,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* A 6 bit shift field.  */

> -  HOWTO (R_MIPS_SHIFT6,                /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        6,                     /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        6,                     /* bitpos */

> -        complain_overflow_bitfield, /* complain_on_overflow */

> -        mips_elf64_shift6_reloc, /* special_function */

> -        "R_MIPS_SHIFT6",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x000007c4,            /* src_mask */

> -        0x000007c4,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 64 bit relocation.  */

> -  HOWTO (R_MIPS_64,            /* type */

> -        0,                     /* rightshift */

> -        4,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        64,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_64",           /* name */

> -        TRUE,                  /* partial_inplace */

> -        MINUS_ONE,             /* src_mask */

> -        MINUS_ONE,             /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Displacement in the global offset table.  */

> -  HOWTO (R_MIPS_GOT_DISP,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_GOT_DISP",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Displacement to page pointer in the global offset table.  */

> -  HOWTO (R_MIPS_GOT_PAGE,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_GOT_PAGE",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Offset from page pointer in the global offset table.  */

> -  HOWTO (R_MIPS_GOT_OFST,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_GOT_OFST",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* High 16 bits of displacement in global offset table.  */

> -  HOWTO (R_MIPS_GOT_HI16,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_GOT_HI16",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Low 16 bits of displacement in global offset table.  */

> -  HOWTO (R_MIPS_GOT_LO16,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_GOT_LO16",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 64 bit subtraction.  */

> -  HOWTO (R_MIPS_SUB,           /* type */

> -        0,                     /* rightshift */

> -        4,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        64,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_SUB",          /* name */

> -        TRUE,                  /* partial_inplace */

> -        MINUS_ONE,             /* src_mask */

> -        MINUS_ONE,             /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Insert the addend as an instruction.  */

> -  /* FIXME: Not handled correctly.  */

> -  HOWTO (R_MIPS_INSERT_A,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_INSERT_A",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Insert the addend as an instruction, and change all relocations

> -     to refer to the old instruction at the address.  */

> -  /* FIXME: Not handled correctly.  */

> -  HOWTO (R_MIPS_INSERT_B,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_INSERT_B",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Delete a 32 bit instruction.  */

> -  /* FIXME: Not handled correctly.  */

> -  HOWTO (R_MIPS_DELETE,                /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_DELETE",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* The MIPS ELF64 ABI Draft wants us to support these for REL relocations.

> -     We don't, because

> -       a) It means building the addend from a R_MIPS_HIGHEST/R_MIPS_HIGHER/

> -         R_MIPS_HI16/R_MIPS_LO16 sequence with varying ordering, using

> -         fallable heuristics.

> -       b) No other NewABI toolchain actually emits such relocations.  */

> -  EMPTY_HOWTO (R_MIPS_HIGHER),

> -  EMPTY_HOWTO (R_MIPS_HIGHEST),

> -

> -  /* High 16 bits of displacement in global offset table.  */

> -  HOWTO (R_MIPS_CALL_HI16,     /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_CALL_HI16",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Low 16 bits of displacement in global offset table.  */

> -  HOWTO (R_MIPS_CALL_LO16,     /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_CALL_LO16",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Section displacement, used by an associated event location section.  */

> -  HOWTO (R_MIPS_SCN_DISP,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_SCN_DISP",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  HOWTO (R_MIPS_REL16,         /* type */

> -        0,                     /* rightshift */

> -        1,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_REL16",        /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffff,                /* src_mask */

> -        0xffff,                /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* These two are obsolete.  */

> -  EMPTY_HOWTO (R_MIPS_ADD_IMMEDIATE),

> -  EMPTY_HOWTO (R_MIPS_PJUMP),

> -

> -  /* Similiar to R_MIPS_REL32, but used for relocations in a GOT section.

> -     It must be used for multigot GOT's (and only there).  */

> -  HOWTO (R_MIPS_RELGOT,                /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_RELGOT",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Protected jump conversion.  This is an optimization hint.  No

> -     relocation is required for correctness.  */

> -  HOWTO (R_MIPS_JALR,          /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_JALR",         /* name */

> -        FALSE,                 /* partial_inplace */

> -        0,                     /* src_mask */

> -        0x00000000,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS relocations.  */

> -  EMPTY_HOWTO (R_MIPS_TLS_DTPMOD32),

> -  EMPTY_HOWTO (R_MIPS_TLS_DTPREL32),

> -

> -  HOWTO (R_MIPS_TLS_DTPMOD64,  /* type */

> -        0,                     /* rightshift */

> -        4,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        64,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_DTPMOD64", /* name */

> -        TRUE,                  /* partial_inplace */

> -        MINUS_ONE,             /* src_mask */

> -        MINUS_ONE,             /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  HOWTO (R_MIPS_TLS_DTPREL64,  /* type */

> -        0,                     /* rightshift */

> -        4,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        64,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_DTPREL64", /* name */

> -        TRUE,                  /* partial_inplace */

> -        MINUS_ONE,             /* src_mask */

> -        MINUS_ONE,             /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS general dynamic variable reference.  */

> -  HOWTO (R_MIPS_TLS_GD,                /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_GD",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS local dynamic variable reference.  */

> -  HOWTO (R_MIPS_TLS_LDM,       /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_LDM",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS local dynamic offset.  */

> -  HOWTO (R_MIPS_TLS_DTPREL_HI16,       /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_DTPREL_HI16",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS local dynamic offset.  */

> -  HOWTO (R_MIPS_TLS_DTPREL_LO16,       /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_DTPREL_LO16",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS thread pointer offset.  */

> -  HOWTO (R_MIPS_TLS_GOTTPREL,  /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_GOTTPREL", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS IE dynamic relocations.  */

> -  EMPTY_HOWTO (R_MIPS_TLS_TPREL32),

> -

> -  HOWTO (R_MIPS_TLS_TPREL64,   /* type */

> -        0,                     /* rightshift */

> -        4,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        64,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_TPREL64",  /* name */

> -        TRUE,                  /* partial_inplace */

> -        MINUS_ONE,             /* src_mask */

> -        MINUS_ONE,             /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS thread pointer offset.  */

> -  HOWTO (R_MIPS_TLS_TPREL_HI16,        /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_TPREL_HI16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS thread pointer offset.  */

> -  HOWTO (R_MIPS_TLS_TPREL_LO16,        /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_TPREL_LO16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 32 bit relocation with no addend.  */

> -  HOWTO (R_MIPS_GLOB_DAT,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_GLOB_DAT",     /* name */

> -        FALSE,                 /* partial_inplace */

> -        0x0,                   /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  EMPTY_HOWTO (52),

> -  EMPTY_HOWTO (53),

> -  EMPTY_HOWTO (54),

> -  EMPTY_HOWTO (55),

> -  EMPTY_HOWTO (56),

> -  EMPTY_HOWTO (57),

> -  EMPTY_HOWTO (58),

> -  EMPTY_HOWTO (59),

> -

> -  HOWTO (R_MIPS_PC21_S2,       /* type */

> -        2,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        21,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_PC21_S2",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x001fffff,            /* src_mask */

> -        0x001fffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  HOWTO (R_MIPS_PC26_S2,       /* type */

> -        2,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        26,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_PC26_S2",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x03ffffff,            /* src_mask */

> -        0x03ffffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  HOWTO (R_MIPS_PC18_S3,       /* type */

> -        3,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        18,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_PC18_S3",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0003ffff,            /* src_mask */

> -        0x0003ffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  HOWTO (R_MIPS_PC19_S2,       /* type */

> -        2,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        19,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_PC19_S2",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0007ffff,            /* src_mask */

> -        0x0007ffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  HOWTO (R_MIPS_PCHI16,                /* type */

> -        16,                    /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_PCHI16",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  HOWTO (R_MIPS_PCLO16,                /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_PCLO16",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -};

>

>  /* The relocation table used for SHT_RELA sections.  */

> -

>  static reloc_howto_type mips_elf64_howto_table_rela[] =

>  {

>    /* No relocation.  */

> @@ -1672,222 +896,6 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =

>

>  };

>

> -static reloc_howto_type mips16_elf64_howto_table_rel[] =

> -{

> -  /* The reloc used for the mips16 jump instruction.  */

> -  HOWTO (R_MIPS16_26,          /* type */

> -        2,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        26,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -                               /* This needs complex overflow

> -                                  detection, because the upper four

> -                                  bits must match the PC.  */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_26",         /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x3ffffff,             /* src_mask */

> -        0x3ffffff,             /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* The reloc used for the mips16 gprel instruction.  */

> -  HOWTO (R_MIPS16_GPREL,       /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        mips16_gprel_reloc,    /* special_function */

> -        "R_MIPS16_GPREL",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* A MIPS16 reference to the global offset table.  */

> -  HOWTO (R_MIPS16_GOT16,       /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_got16_reloc, /* special_function */

> -        "R_MIPS16_GOT16",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* A MIPS16 call through the global offset table.  */

> -  HOWTO (R_MIPS16_CALL16,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_CALL16",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 high 16 bits of symbol value.  */

> -  HOWTO (R_MIPS16_HI16,                /* type */

> -        16,                    /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_hi16_reloc, /* special_function */

> -        "R_MIPS16_HI16",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 low 16 bits of symbol value.  */

> -  HOWTO (R_MIPS16_LO16,                /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_lo16_reloc, /* special_function */

> -        "R_MIPS16_LO16",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 TLS general dynamic variable reference.  */

> -  HOWTO (R_MIPS16_TLS_GD,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_TLS_GD",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 TLS local dynamic variable reference.  */

> -  HOWTO (R_MIPS16_TLS_LDM,     /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_TLS_LDM",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 TLS local dynamic offset.  */

> -  HOWTO (R_MIPS16_TLS_DTPREL_HI16,     /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_TLS_DTPREL_HI16",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 TLS local dynamic offset.  */

> -  HOWTO (R_MIPS16_TLS_DTPREL_LO16,     /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_TLS_DTPREL_LO16",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 TLS thread pointer offset.  */

> -  HOWTO (R_MIPS16_TLS_GOTTPREL,        /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_TLS_GOTTPREL",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 TLS thread pointer offset.  */

> -  HOWTO (R_MIPS16_TLS_TPREL_HI16,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_TLS_TPREL_HI16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 TLS thread pointer offset.  */

> -  HOWTO (R_MIPS16_TLS_TPREL_LO16,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_TLS_TPREL_LO16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 16-bit PC-relative branch offset.  */

> -  HOWTO (R_MIPS16_PC16_S1,     /* type */

> -        1,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_PC16_S1",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -};

> -

>  static reloc_howto_type mips16_elf64_howto_table_rela[] =

>  {

>    /* The reloc used for the mips16 jump instruction.  */

> @@ -2104,485 +1112,6 @@ static reloc_howto_type mips16_elf64_howto_table_rela[] =

>          TRUE),                 /* pcrel_offset */

>  };

>

> -static reloc_howto_type micromips_elf64_howto_table_rel[] =

> -{

> -  EMPTY_HOWTO (130),

> -  EMPTY_HOWTO (131),

> -  EMPTY_HOWTO (132),

> -

> -  /* 26 bit jump address.  */

> -  HOWTO (R_MICROMIPS_26_S1,    /* type */

> -        1,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        26,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -                               /* This needs complex overflow

> -                                  detection, because the upper four

> -                                  bits must match the PC.  */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_26_S1",   /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x3ffffff,             /* src_mask */

> -        0x3ffffff,             /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* High 16 bits of symbol value.  */

> -  HOWTO (R_MICROMIPS_HI16,     /* type */

> -        16,                    /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_hi16_reloc, /* special_function */

> -        "R_MICROMIPS_HI16",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Low 16 bits of symbol value.  */

> -  HOWTO (R_MICROMIPS_LO16,     /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_lo16_reloc, /* special_function */

> -        "R_MICROMIPS_LO16",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* GP relative reference.  */

> -  HOWTO (R_MICROMIPS_GPREL16,  /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf32_gprel16_reloc, /* special_function */

> -        "R_MICROMIPS_GPREL16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Reference to literal section.  */

> -  HOWTO (R_MICROMIPS_LITERAL,  /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf32_gprel16_reloc, /* special_function */

> -        "R_MICROMIPS_LITERAL", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Reference to global offset table.  */

> -  HOWTO (R_MICROMIPS_GOT16,    /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_got16_reloc, /* special_function */

> -        "R_MICROMIPS_GOT16",   /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* This is for microMIPS branches.  */

> -  HOWTO (R_MICROMIPS_PC7_S1,   /* type */

> -        1,                     /* rightshift */

> -        1,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        7,                     /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_PC7_S1",  /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000007f,            /* src_mask */

> -        0x0000007f,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  HOWTO (R_MICROMIPS_PC10_S1,  /* type */

> -        1,                     /* rightshift */

> -        1,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        10,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_PC10_S1", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x000003ff,            /* src_mask */

> -        0x000003ff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  HOWTO (R_MICROMIPS_PC16_S1,  /* type */

> -        1,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_PC16_S1", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  /* 16 bit call through global offset table.  */

> -  HOWTO (R_MICROMIPS_CALL16,   /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_CALL16",  /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  EMPTY_HOWTO (143),

> -  EMPTY_HOWTO (144),

> -

> -  /* Displacement in the global offset table.  */

> -  HOWTO (R_MICROMIPS_GOT_DISP, /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_GOT_DISP",/* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Displacement to page pointer in the global offset table.  */

> -  HOWTO (R_MICROMIPS_GOT_PAGE, /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_GOT_PAGE",/* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Offset from page pointer in the global offset table.  */

> -  HOWTO (R_MICROMIPS_GOT_OFST, /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_GOT_OFST",/* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* High 16 bits of displacement in global offset table.  */

> -  HOWTO (R_MICROMIPS_GOT_HI16, /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_GOT_HI16",/* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Low 16 bits of displacement in global offset table.  */

> -  HOWTO (R_MICROMIPS_GOT_LO16, /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_GOT_LO16",/* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 64 bit subtraction.  Used in the N32 ABI.  */

> -  HOWTO (R_MICROMIPS_SUB,      /* type */

> -        0,                     /* rightshift */

> -        4,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        64,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_SUB",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        MINUS_ONE,             /* src_mask */

> -        MINUS_ONE,             /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* We don't support these for REL relocations, because it means building

> -     the addend from a R_MICROMIPS_HIGHEST/R_MICROMIPS_HIGHER/

> -     R_MICROMIPS_HI16/R_MICROMIPS_LO16 sequence with varying ordering,

> -     using fallable heuristics.  */

> -  EMPTY_HOWTO (R_MICROMIPS_HIGHER),

> -  EMPTY_HOWTO (R_MICROMIPS_HIGHEST),

> -

> -  /* High 16 bits of displacement in global offset table.  */

> -  HOWTO (R_MICROMIPS_CALL_HI16,        /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_CALL_HI16",/* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Low 16 bits of displacement in global offset table.  */

> -  HOWTO (R_MICROMIPS_CALL_LO16,        /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_CALL_LO16",/* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Section displacement.  */

> -  HOWTO (R_MICROMIPS_SCN_DISP,  /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_SCN_DISP", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Protected jump conversion.  This is an optimization hint.  No

> -     relocation is required for correctness.  */

> -  HOWTO (R_MICROMIPS_JALR,     /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_JALR",    /* name */

> -        FALSE,                 /* partial_inplace */

> -        0,                     /* src_mask */

> -        0x00000000,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Low 16 bits of symbol value.  Note that the high 16 bits of symbol values

> -     must be zero.  This is used for relaxation.  */

> -  HOWTO (R_MICROMIPS_HI0_LO16, /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_HI0_LO16",/* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  EMPTY_HOWTO (158),

> -  EMPTY_HOWTO (159),

> -  EMPTY_HOWTO (160),

> -  EMPTY_HOWTO (161),

> -

> -  /* TLS general dynamic variable reference.  */

> -  HOWTO (R_MICROMIPS_TLS_GD,           /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_TLS_GD",  /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS local dynamic variable reference.  */

> -  HOWTO (R_MICROMIPS_TLS_LDM,  /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_TLS_LDM", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS local dynamic offset.  */

> -  HOWTO (R_MICROMIPS_TLS_DTPREL_HI16,  /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_TLS_DTPREL_HI16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS local dynamic offset.  */

> -  HOWTO (R_MICROMIPS_TLS_DTPREL_LO16,  /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_TLS_DTPREL_LO16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS thread pointer offset.  */

> -  HOWTO (R_MICROMIPS_TLS_GOTTPREL,     /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_TLS_GOTTPREL",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  EMPTY_HOWTO (167),

> -  EMPTY_HOWTO (168),

> -

> -  /* TLS thread pointer offset.  */

> -  HOWTO (R_MICROMIPS_TLS_TPREL_HI16,   /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_TLS_TPREL_HI16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS thread pointer offset.  */

> -  HOWTO (R_MICROMIPS_TLS_TPREL_LO16,   /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_TLS_TPREL_LO16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  EMPTY_HOWTO (171),

> -

> -  /* GP- and PC-relative relocations.  */

> -  HOWTO (R_MICROMIPS_GPREL7_S2,        /* type */

> -        2,                     /* rightshift */

> -        1,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        7,                     /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf32_gprel16_reloc, /* special_function */

> -        "R_MICROMIPS_GPREL7_S2",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000007f,            /* src_mask */

> -        0x0000007f,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  HOWTO (R_MICROMIPS_PC23_S2,  /* type */

> -        2,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        23,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_PC23_S2", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x007fffff,            /* src_mask */

> -        0x007fffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -};

> -

>  static reloc_howto_type micromips_elf64_howto_table_rela[] =

>  {

>    EMPTY_HOWTO (130),

> @@ -3214,21 +1743,6 @@ static reloc_howto_type elf_mips_eh_howto =

>          0xffffffff,            /* dst_mask */

>          FALSE);                /* pcrel_offset */

>

> -

> -/* Swap in a MIPS 64-bit Rel reloc.  */

> -

> -static void

> -mips_elf64_swap_reloc_in (bfd *abfd, const Elf64_Mips_External_Rel *src,

> -                         Elf64_Mips_Internal_Rela *dst)

> -{

> -  dst->r_offset = H_GET_64 (abfd, src->r_offset);

> -  dst->r_sym = H_GET_32 (abfd, src->r_sym);

> -  dst->r_ssym = H_GET_8 (abfd, src->r_ssym);

> -  dst->r_type3 = H_GET_8 (abfd, src->r_type3);

> -  dst->r_type2 = H_GET_8 (abfd, src->r_type2);

> -  dst->r_type = H_GET_8 (abfd, src->r_type);

> -  dst->r_addend = 0;

> -}

>

>  /* Swap in a MIPS 64-bit Rela reloc.  */

>

> @@ -3245,20 +1759,6 @@ mips_elf64_swap_reloca_in (bfd *abfd, const Elf64_Mips_External_Rela *src,

>    dst->r_addend = H_GET_S64 (abfd, src->r_addend);

>  }

>

> -/* Swap out a MIPS 64-bit Rel reloc.  */

> -

> -static void

> -mips_elf64_swap_reloc_out (bfd *abfd, const Elf64_Mips_Internal_Rela *src,

> -                          Elf64_Mips_External_Rel *dst)

> -{

> -  H_PUT_64 (abfd, src->r_offset, dst->r_offset);

> -  H_PUT_32 (abfd, src->r_sym, dst->r_sym);

> -  H_PUT_8 (abfd, src->r_ssym, dst->r_ssym);

> -  H_PUT_8 (abfd, src->r_type3, dst->r_type3);

> -  H_PUT_8 (abfd, src->r_type2, dst->r_type2);

> -  H_PUT_8 (abfd, src->r_type, dst->r_type);

> -}

> -

>  /* Swap out a MIPS 64-bit Rela reloc.  */

>

>  static void

> @@ -3274,28 +1774,6 @@ mips_elf64_swap_reloca_out (bfd *abfd, const Elf64_Mips_Internal_Rela *src,

>    H_PUT_S64 (abfd, src->r_addend, dst->r_addend);

>  }

>

> -/* Swap in a MIPS 64-bit Rel reloc.  */

> -

> -static void

> -mips_elf64_be_swap_reloc_in (bfd *abfd, const bfd_byte *src,

> -                            Elf_Internal_Rela *dst)

> -{

> -  Elf64_Mips_Internal_Rela mirel;

> -

> -  mips_elf64_swap_reloc_in (abfd,

> -                           (const Elf64_Mips_External_Rel *) src,

> -                           &mirel);

> -

> -  dst[0].r_offset = mirel.r_offset;

> -  dst[0].r_info = ELF64_R_INFO (mirel.r_sym, mirel.r_type);

> -  dst[0].r_addend = 0;

> -  dst[1].r_offset = mirel.r_offset;

> -  dst[1].r_info = ELF64_R_INFO (mirel.r_ssym, mirel.r_type2);

> -  dst[1].r_addend = 0;

> -  dst[2].r_offset = mirel.r_offset;

> -  dst[2].r_info = ELF64_R_INFO (STN_UNDEF, mirel.r_type3);

> -  dst[2].r_addend = 0;

> -}

>

>  /* Swap in a MIPS 64-bit Rela reloc.  */

>

> @@ -3320,27 +1798,6 @@ mips_elf64_be_swap_reloca_in (bfd *abfd, const bfd_byte *src,

>    dst[2].r_addend = 0;

>  }

>

> -/* Swap out a MIPS 64-bit Rel reloc.  */

> -

> -static void

> -mips_elf64_be_swap_reloc_out (bfd *abfd, const Elf_Internal_Rela *src,

> -                             bfd_byte *dst)

> -{

> -  Elf64_Mips_Internal_Rela mirel;

> -

> -  mirel.r_offset = src[0].r_offset;

> -  BFD_ASSERT(src[0].r_offset == src[1].r_offset);

> -  BFD_ASSERT(src[0].r_offset == src[2].r_offset);

> -

> -  mirel.r_type = ELF64_MIPS_R_TYPE (src[0].r_info);

> -  mirel.r_sym = ELF64_R_SYM (src[0].r_info);

> -  mirel.r_type2 = ELF64_MIPS_R_TYPE (src[1].r_info);

> -  mirel.r_ssym = ELF64_MIPS_R_SSYM (src[1].r_info);

> -  mirel.r_type3 = ELF64_MIPS_R_TYPE (src[2].r_info);

> -

> -  mips_elf64_swap_reloc_out (abfd, &mirel,

> -                            (Elf64_Mips_External_Rel *) dst);

> -}

>

>  /* Swap out a MIPS 64-bit Rela reloc.  */

>

> @@ -3806,8 +2263,6 @@ bfd_elf64_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,

>                                  bfd_reloc_code_real_type code)

>  {

>    unsigned int i;

> -  /* FIXME: We default to RELA here instead of choosing the right

> -     relocation variant.  */

>    reloc_howto_type *howto_table = mips_elf64_howto_table_rela;

>    reloc_howto_type *howto16_table = mips16_elf64_howto_table_rela;

>    reloc_howto_type *howto_micromips_table = micromips_elf64_howto_table_rela;

> @@ -3931,26 +2386,15 @@ mips_elf64_rtype_to_howto (bfd *abfd, unsigned int r_type, bfd_boolean rela_p)

>      default:

>        if (r_type >= R_MICROMIPS_min && r_type < R_MICROMIPS_max)

>         {

> -         if (rela_p)

> -           howto

> -             = &micromips_elf64_howto_table_rela[r_type - R_MICROMIPS_min];

> -         else

> -           howto

> -             = &micromips_elf64_howto_table_rel[r_type - R_MICROMIPS_min];

> +         howto = &micromips_elf64_howto_table_rela[r_type - R_MICROMIPS_min];

>         }

>        if (r_type >= R_MIPS16_min && r_type < R_MIPS16_max)

>         {

> -         if (rela_p)

> -           howto = &mips16_elf64_howto_table_rela[r_type - R_MIPS16_min];

> -         else

> -           howto = &mips16_elf64_howto_table_rel[r_type - R_MIPS16_min];

> +         howto = &mips16_elf64_howto_table_rela[r_type - R_MIPS16_min];

>         }

>        if (r_type < R_MIPS_max)

>         {

> -         if (rela_p)

> -           howto = &mips_elf64_howto_table_rela[r_type];

> -         else

> -           howto = &mips_elf64_howto_table_rel[r_type];

> +         howto = &mips_elf64_howto_table_rela[r_type];

>         }

>        if (howto != NULL && howto->name != NULL)

>         return howto;

> @@ -4008,7 +2452,6 @@ mips_elf64_slurp_one_reloc_table (bfd *abfd, asection *asect,

>    arelent *relent;

>    bfd_vma i;

>    int entsize;

> -  bfd_boolean rela_p;

>

>    if (bfd_seek (abfd, rel_hdr->sh_offset, SEEK_SET) != 0)

>      return FALSE;

> @@ -4019,13 +2462,7 @@ mips_elf64_slurp_one_reloc_table (bfd *abfd, asection *asect,

>    native_relocs = allocated;

>

>    entsize = rel_hdr->sh_entsize;

> -  BFD_ASSERT (entsize == sizeof (Elf64_Mips_External_Rel)

> -             || entsize == sizeof (Elf64_Mips_External_Rela));

> -

> -  if (entsize == sizeof (Elf64_Mips_External_Rel))

> -    rela_p = FALSE;

> -  else

> -    rela_p = TRUE;

> +  BFD_ASSERT (entsize == sizeof (Elf64_Mips_External_Rela));

>

>    if (dynamic)

>      symcount = bfd_get_dynamic_symcount (abfd);

> @@ -4040,14 +2477,9 @@ mips_elf64_slurp_one_reloc_table (bfd *abfd, asection *asect,

>        bfd_boolean used_sym, used_ssym;

>        int ir;

>

> -      if (entsize == sizeof (Elf64_Mips_External_Rela))

> -       mips_elf64_swap_reloca_in (abfd,

> -                                  (Elf64_Mips_External_Rela *) native_relocs,

> -                                  &rela);

> -      else

> -       mips_elf64_swap_reloc_in (abfd,

> -                                 (Elf64_Mips_External_Rel *) native_relocs,

> -                                 &rela);

> +      mips_elf64_swap_reloca_in (abfd,

> +                               (Elf64_Mips_External_Rela *) native_relocs,

> +                               &rela);

>

>        /* Each entry represents exactly three actual relocations.  */

>

> @@ -4154,7 +2586,7 @@ mips_elf64_slurp_one_reloc_table (bfd *abfd, asection *asect,

>

>           relent->addend = rela.r_addend;

>

> -         relent->howto = mips_elf64_rtype_to_howto (abfd, type, rela_p);

> +         relent->howto = mips_elf64_rtype_to_howto (abfd, type, TRUE);

>           if (relent->howto == NULL)

>             goto error_return;

>

> @@ -4301,112 +2733,12 @@ mips_elf64_write_relocs (bfd *abfd, asection *sec, void *data)

>

>    /* Do the actual relocation.  */

>

> -  if (rel_hdr->sh_entsize == sizeof(Elf64_Mips_External_Rel))

> -    mips_elf64_write_rel (abfd, sec, rel_hdr, &count, data);

> -  else if (rel_hdr->sh_entsize == sizeof(Elf64_Mips_External_Rela))

> +  if (rel_hdr->sh_entsize == sizeof(Elf64_Mips_External_Rela))

>      mips_elf64_write_rela (abfd, sec, rel_hdr, &count, data);

>    else

>      BFD_ASSERT (0);

>  }

>

> -static void

> -mips_elf64_write_rel (bfd *abfd, asection *sec,

> -                     Elf_Internal_Shdr *rel_hdr,

> -                     int *count, void *data)

> -{

> -  bfd_boolean *failedp = data;

> -  Elf64_Mips_External_Rel *ext_rel;

> -  unsigned int idx;

> -  asymbol *last_sym = 0;

> -  int last_sym_idx = 0;

> -

> -  rel_hdr->sh_size = rel_hdr->sh_entsize * *count;

> -  rel_hdr->contents = bfd_alloc (abfd, rel_hdr->sh_size);

> -  if (rel_hdr->contents == NULL)

> -    {

> -      *failedp = TRUE;

> -      return;

> -    }

> -

> -  ext_rel = (Elf64_Mips_External_Rel *) rel_hdr->contents;

> -  for (idx = 0; idx < sec->reloc_count; idx++, ext_rel++)

> -    {

> -      arelent *ptr;

> -      Elf64_Mips_Internal_Rela int_rel;

> -      asymbol *sym;

> -      int n;

> -      unsigned int i;

> -

> -      ptr = sec->orelocation[idx];

> -

> -      /* The address of an ELF reloc is section relative for an object

> -        file, and absolute for an executable file or shared library.

> -        The address of a BFD reloc is always section relative.  */

> -      if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)

> -       int_rel.r_offset = ptr->address;

> -      else

> -       int_rel.r_offset = ptr->address + sec->vma;

> -

> -      sym = *ptr->sym_ptr_ptr;

> -      if (sym == last_sym)

> -       n = last_sym_idx;

> -      else if (bfd_is_abs_section (sym->section) && sym->value == 0)

> -       n = STN_UNDEF;

> -      else

> -       {

> -         last_sym = sym;

> -         n = _bfd_elf_symbol_from_bfd_symbol (abfd, &sym);

> -         if (n < 0)

> -           {

> -             *failedp = TRUE;

> -             return;

> -           }

> -         last_sym_idx = n;

> -       }

> -

> -      int_rel.r_sym = n;

> -      int_rel.r_ssym = RSS_UNDEF;

> -

> -      if ((*ptr->sym_ptr_ptr)->the_bfd != NULL

> -         && (*ptr->sym_ptr_ptr)->the_bfd->xvec != abfd->xvec

> -         && ! _bfd_elf_validate_reloc (abfd, ptr))

> -       {

> -         *failedp = TRUE;

> -         return;

> -       }

> -

> -      int_rel.r_type = ptr->howto->type;

> -      int_rel.r_type2 = (int) R_MIPS_NONE;

> -      int_rel.r_type3 = (int) R_MIPS_NONE;

> -

> -      for (i = 0; i < 2; i++)

> -       {

> -         arelent *r;

> -

> -         if (idx + 1 >= sec->reloc_count)

> -           break;

> -         r = sec->orelocation[idx + 1];

> -         if (r->address != ptr->address

> -             || ! bfd_is_abs_section ((*r->sym_ptr_ptr)->section)

> -             || (*r->sym_ptr_ptr)->value != 0)

> -           break;

> -

> -         /* We can merge the reloc at IDX + 1 with the reloc at IDX.  */

> -

> -         if (i == 0)

> -           int_rel.r_type2 = r->howto->type;

> -         else

> -           int_rel.r_type3 = r->howto->type;

> -

> -         ++idx;

> -       }

> -

> -      mips_elf64_swap_reloc_out (abfd, &int_rel, ext_rel);

> -    }

> -

> -  BFD_ASSERT (ext_rel - (Elf64_Mips_External_Rel *) rel_hdr->contents

> -             == *count);

> -}

>

>  static void

>  mips_elf64_write_rela (bfd *abfd, asection *sec,

> @@ -4713,8 +3045,11 @@ const struct elf_size_info mips_elf64_size_info =

>    bfd_elf64_slurp_symbol_table,

>    bfd_elf64_swap_dyn_in,

>    bfd_elf64_swap_dyn_out,

> -  mips_elf64_be_swap_reloc_in,

> -  mips_elf64_be_swap_reloc_out,

> +  /* MIPS ELF SHT_REL actually need to handle chained relocation

> +     swap but as we don't use SHT_REL any more just use generic

> +     place holder here. */

> +  bfd_elf64_swap_reloc_in,

> +  bfd_elf64_swap_reloc_out,

>    mips_elf64_be_swap_reloca_in,

>    mips_elf64_be_swap_reloca_out

>  };

> @@ -4729,7 +3064,7 @@ const struct elf_size_info mips_elf64_size_info =

>  #define elf_backend_gc_mark_extra_sections \

>                                         _bfd_mips_elf_gc_mark_extra_sections

>  #define elf_info_to_howto              mips_elf64_info_to_howto_rela

> -#define elf_info_to_howto_rel          mips_elf64_info_to_howto_rela

> +#define elf_info_to_howto_rel          NULL

>  #define elf_backend_object_p           mips_elf64_object_p

>  #define elf_backend_symbol_processing  _bfd_mips_elf_symbol_processing

>  #define elf_backend_section_processing _bfd_mips_elf_section_processing

> @@ -4780,9 +3115,8 @@ const struct elf_size_info mips_elf64_size_info =

>  #define elf_backend_got_header_size    (8 * MIPS_RESERVED_GOTNO)

>  #define elf_backend_want_dynrelro      1

>

> -/* MIPS ELF64 can use a mixture of REL and RELA, but some Relocations

> -   work better/work only in RELA, so we default to this.  */

> -#define elf_backend_may_use_rel_p      1

> +/* We restrict MIPS ELF64 to rela only  */

> +#define elf_backend_may_use_rel_p      0

>  #define elf_backend_may_use_rela_p     1

>  #define elf_backend_default_use_rela_p 1

>  #define elf_backend_rela_plts_and_copies_p 0

> diff --git a/bfd/elfn32-mips.c b/bfd/elfn32-mips.c

> index da8afa3e57..7da56d23dd 100644

> --- a/bfd/elfn32-mips.c

> +++ b/bfd/elfn32-mips.c

> @@ -66,8 +66,6 @@ static bfd_reloc_status_type mips16_gprel_reloc

>    (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);

>  static reloc_howto_type *bfd_elf32_bfd_reloc_type_lookup

>    (bfd *, bfd_reloc_code_real_type);

> -static bfd_boolean mips_info_to_howto_rel

> -  (bfd *, arelent *, Elf_Internal_Rela *);

>  static bfd_boolean mips_info_to_howto_rela

>    (bfd *, arelent *, Elf_Internal_Rela *);

>  static bfd_boolean mips_elf_sym_is_global

> @@ -105,771 +103,6 @@ extern const bfd_target mips_elf32_n_le_vec;

>     from smaller values.  Start with zero, widen, *then* decrement.  */

>  #define MINUS_ONE      (((bfd_vma)0) - 1)

>

> -/* The relocation table used for SHT_REL sections.  */

> -

> -static reloc_howto_type elf_mips_howto_table_rel[] =

> -{

> -  /* No relocation.  */

> -  HOWTO (R_MIPS_NONE,          /* type */

> -        0,                     /* rightshift */

> -        3,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        0,                     /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_NONE",         /* name */

> -        FALSE,                 /* partial_inplace */

> -        0,                     /* src_mask */

> -        0,                     /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 16 bit relocation.  */

> -  HOWTO (R_MIPS_16,            /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_16",           /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 32 bit relocation.  */

> -  HOWTO (R_MIPS_32,            /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_32",           /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 32 bit symbol relative relocation.  */

> -  HOWTO (R_MIPS_REL32,         /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_REL32",        /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 26 bit jump address.  */

> -  HOWTO (R_MIPS_26,            /* type */

> -        2,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        26,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -                               /* This needs complex overflow

> -                                  detection, because the upper four

> -                                  bits must match the PC + 4.  */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_26",           /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x03ffffff,            /* src_mask */

> -        0x03ffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* R_MIPS_HI16 and R_MIPS_LO16 are unsupported for NewABI REL.

> -     However, the native IRIX6 tools use them, so we try our best. */

> -

> -  /* High 16 bits of symbol value.  */

> -  HOWTO (R_MIPS_HI16,          /* type */

> -        16,                    /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_hi16_reloc, /* special_function */

> -        "R_MIPS_HI16",         /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Low 16 bits of symbol value.  */

> -  HOWTO (R_MIPS_LO16,          /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_lo16_reloc, /* special_function */

> -        "R_MIPS_LO16",         /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* GP relative reference.  */

> -  HOWTO (R_MIPS_GPREL16,       /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        mips_elf_gprel16_reloc, /* special_function */

> -        "R_MIPS_GPREL16",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Reference to literal section.  */

> -  HOWTO (R_MIPS_LITERAL,       /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        mips_elf_literal_reloc, /* special_function */

> -        "R_MIPS_LITERAL",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Reference to global offset table.  */

> -  HOWTO (R_MIPS_GOT16,         /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_got16_reloc, /* special_function */

> -        "R_MIPS_GOT16",        /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 16 bit PC relative reference.  Note that the ABI document has a typo

> -     and claims R_MIPS_PC16 to be not rightshifted, rendering it useless.

> -     We do the right thing here.  */

> -  HOWTO (R_MIPS_PC16,          /* type */

> -        2,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_PC16",         /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  /* 16 bit call through global offset table.  */

> -  HOWTO (R_MIPS_CALL16,                /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_CALL16",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 32 bit GP relative reference.  */

> -  HOWTO (R_MIPS_GPREL32,       /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        mips_elf_gprel32_reloc, /* special_function */

> -        "R_MIPS_GPREL32",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* The remaining relocs are defined on Irix 5, although they are

> -     not defined by the ABI.  */

> -  EMPTY_HOWTO (13),

> -  EMPTY_HOWTO (14),

> -  EMPTY_HOWTO (15),

> -

> -  /* A 5 bit shift field.  */

> -  HOWTO (R_MIPS_SHIFT5,                /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        5,                     /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        6,                     /* bitpos */

> -        complain_overflow_bitfield, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_SHIFT5",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x000007c0,            /* src_mask */

> -        0x000007c0,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* A 6 bit shift field.  */

> -  HOWTO (R_MIPS_SHIFT6,                /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        6,                     /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        6,                     /* bitpos */

> -        complain_overflow_bitfield, /* complain_on_overflow */

> -        mips_elf_shift6_reloc, /* special_function */

> -        "R_MIPS_SHIFT6",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x000007c4,            /* src_mask */

> -        0x000007c4,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* A 64 bit relocation.  */

> -  HOWTO (R_MIPS_64,            /* type */

> -        0,                     /* rightshift */

> -        4,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        64,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_64",           /* name */

> -        TRUE,                  /* partial_inplace */

> -        MINUS_ONE,             /* src_mask */

> -        MINUS_ONE,             /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Displacement in the global offset table.  */

> -  HOWTO (R_MIPS_GOT_DISP,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_GOT_DISP",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Displacement to page pointer in the global offset table.  */

> -  HOWTO (R_MIPS_GOT_PAGE,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_GOT_PAGE",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Offset from page pointer in the global offset table.  */

> -  HOWTO (R_MIPS_GOT_OFST,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_GOT_OFST",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* High 16 bits of displacement in global offset table.  */

> -  HOWTO (R_MIPS_GOT_HI16,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_GOT_HI16",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Low 16 bits of displacement in global offset table.  */

> -  HOWTO (R_MIPS_GOT_LO16,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_GOT_LO16",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 64 bit subtraction.  */

> -  HOWTO (R_MIPS_SUB,           /* type */

> -        0,                     /* rightshift */

> -        4,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        64,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_SUB",          /* name */

> -        TRUE,                  /* partial_inplace */

> -        MINUS_ONE,             /* src_mask */

> -        MINUS_ONE,             /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Insert the addend as an instruction.  */

> -  /* FIXME: Not handled correctly.  */

> -  HOWTO (R_MIPS_INSERT_A,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_INSERT_A",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Insert the addend as an instruction, and change all relocations

> -     to refer to the old instruction at the address.  */

> -  /* FIXME: Not handled correctly.  */

> -  HOWTO (R_MIPS_INSERT_B,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_INSERT_B",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Delete a 32 bit instruction.  */

> -  /* FIXME: Not handled correctly.  */

> -  HOWTO (R_MIPS_DELETE,                /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_DELETE",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* The MIPS ELF64 ABI Draft wants us to support these for REL relocations.

> -     We don't, because

> -       a) It means building the addend from a R_MIPS_HIGHEST/R_MIPS_HIGHER/

> -         R_MIPS_HI16/R_MIPS_LO16 sequence with varying ordering, using

> -         fallable heuristics.

> -       b) No other NewABI toolchain actually emits such relocations.  */

> -  EMPTY_HOWTO (R_MIPS_HIGHER),

> -  EMPTY_HOWTO (R_MIPS_HIGHEST),

> -

> -  /* High 16 bits of displacement in global offset table.  */

> -  HOWTO (R_MIPS_CALL_HI16,     /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_CALL_HI16",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Low 16 bits of displacement in global offset table.  */

> -  HOWTO (R_MIPS_CALL_LO16,     /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_CALL_LO16",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Section displacement.  */

> -  HOWTO (R_MIPS_SCN_DISP,       /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_SCN_DISP",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  HOWTO (R_MIPS_REL16,         /* type */

> -        0,                     /* rightshift */

> -        1,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_REL16",        /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffff,                /* src_mask */

> -        0xffff,                /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* These two are obsolete.  */

> -  EMPTY_HOWTO (R_MIPS_ADD_IMMEDIATE),

> -  EMPTY_HOWTO (R_MIPS_PJUMP),

> -

> -  /* Similiar to R_MIPS_REL32, but used for relocations in a GOT section.

> -     It must be used for multigot GOT's (and only there).  */

> -  HOWTO (R_MIPS_RELGOT,                /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_RELGOT",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Protected jump conversion.  This is an optimization hint.  No

> -     relocation is required for correctness.  */

> -  HOWTO (R_MIPS_JALR,          /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_JALR",         /* name */

> -        FALSE,                 /* partial_inplace */

> -        0x00000000,            /* src_mask */

> -        0x00000000,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS GD/LD dynamic relocations.  */

> -  HOWTO (R_MIPS_TLS_DTPMOD32,  /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_DTPMOD32", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  HOWTO (R_MIPS_TLS_DTPREL32,  /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_DTPREL32", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  EMPTY_HOWTO (R_MIPS_TLS_DTPMOD64),

> -  EMPTY_HOWTO (R_MIPS_TLS_DTPREL64),

> -

> -  /* TLS general dynamic variable reference.  */

> -  HOWTO (R_MIPS_TLS_GD,                /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_GD",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS local dynamic variable reference.  */

> -  HOWTO (R_MIPS_TLS_LDM,       /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_LDM",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS local dynamic offset.  */

> -  HOWTO (R_MIPS_TLS_DTPREL_HI16,       /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_DTPREL_HI16",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS local dynamic offset.  */

> -  HOWTO (R_MIPS_TLS_DTPREL_LO16,       /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_DTPREL_LO16",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS thread pointer offset.  */

> -  HOWTO (R_MIPS_TLS_GOTTPREL,  /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_GOTTPREL", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS IE dynamic relocations.  */

> -  HOWTO (R_MIPS_TLS_TPREL32,   /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_TPREL32",  /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  EMPTY_HOWTO (R_MIPS_TLS_TPREL64),

> -

> -  /* TLS thread pointer offset.  */

> -  HOWTO (R_MIPS_TLS_TPREL_HI16,        /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_TPREL_HI16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS thread pointer offset.  */

> -  HOWTO (R_MIPS_TLS_TPREL_LO16,        /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_TPREL_LO16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 32 bit relocation with no addend.  */

> -  HOWTO (R_MIPS_GLOB_DAT,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_GLOB_DAT",     /* name */

> -        FALSE,                 /* partial_inplace */

> -        0x0,                   /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  EMPTY_HOWTO (52),

> -  EMPTY_HOWTO (53),

> -  EMPTY_HOWTO (54),

> -  EMPTY_HOWTO (55),

> -  EMPTY_HOWTO (56),

> -  EMPTY_HOWTO (57),

> -  EMPTY_HOWTO (58),

> -  EMPTY_HOWTO (59),

> -

> -  HOWTO (R_MIPS_PC21_S2,       /* type */

> -        2,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        21,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_PC21_S2",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x001fffff,            /* src_mask */

> -        0x001fffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  HOWTO (R_MIPS_PC26_S2,       /* type */

> -        2,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        26,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_PC26_S2",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x03ffffff,            /* src_mask */

> -        0x03ffffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  HOWTO (R_MIPS_PC18_S3,       /* type */

> -        3,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        18,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_PC18_S3",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0003ffff,            /* src_mask */

> -        0x0003ffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  HOWTO (R_MIPS_PC19_S2,       /* type */

> -        2,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        19,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_PC19_S2",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0007ffff,            /* src_mask */

> -        0x0007ffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  HOWTO (R_MIPS_PCHI16,                /* type */

> -        16,                    /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_PCHI16",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  HOWTO (R_MIPS_PCLO16,                /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_PCLO16",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -};

> -

>  /* The relocation table used for SHT_RELA sections.  */

>

>  static reloc_howto_type elf_mips_howto_table_rela[] =

> @@ -1652,222 +885,6 @@ static reloc_howto_type elf_mips_howto_table_rela[] =

>

>  };

>

> -static reloc_howto_type elf_mips16_howto_table_rel[] =

> -{

> -  /* The reloc used for the mips16 jump instruction.  */

> -  HOWTO (R_MIPS16_26,          /* type */

> -        2,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        26,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -                               /* This needs complex overflow

> -                                  detection, because the upper four

> -                                  bits must match the PC.  */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_26",         /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x3ffffff,             /* src_mask */

> -        0x3ffffff,             /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* The reloc used for the mips16 gprel instruction.  */

> -  HOWTO (R_MIPS16_GPREL,       /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        mips16_gprel_reloc,    /* special_function */

> -        "R_MIPS16_GPREL",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* A MIPS16 reference to the global offset table.  */

> -  HOWTO (R_MIPS16_GOT16,       /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_got16_reloc, /* special_function */

> -        "R_MIPS16_GOT16",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* A MIPS16 call through the global offset table.  */

> -  HOWTO (R_MIPS16_CALL16,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_CALL16",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 high 16 bits of symbol value.  */

> -  HOWTO (R_MIPS16_HI16,                /* type */

> -        16,                    /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_hi16_reloc, /* special_function */

> -        "R_MIPS16_HI16",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 low 16 bits of symbol value.  */

> -  HOWTO (R_MIPS16_LO16,                /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_lo16_reloc, /* special_function */

> -        "R_MIPS16_LO16",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 TLS general dynamic variable reference.  */

> -  HOWTO (R_MIPS16_TLS_GD,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_TLS_GD",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 TLS local dynamic variable reference.  */

> -  HOWTO (R_MIPS16_TLS_LDM,     /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_TLS_LDM",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 TLS local dynamic offset.  */

> -  HOWTO (R_MIPS16_TLS_DTPREL_HI16,     /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_TLS_DTPREL_HI16",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 TLS local dynamic offset.  */

> -  HOWTO (R_MIPS16_TLS_DTPREL_LO16,     /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_TLS_DTPREL_LO16",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 TLS thread pointer offset.  */

> -  HOWTO (R_MIPS16_TLS_GOTTPREL,        /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_TLS_GOTTPREL",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 TLS thread pointer offset.  */

> -  HOWTO (R_MIPS16_TLS_TPREL_HI16,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_TLS_TPREL_HI16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 TLS thread pointer offset.  */

> -  HOWTO (R_MIPS16_TLS_TPREL_LO16,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_TLS_TPREL_LO16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 16-bit PC-relative branch offset.  */

> -  HOWTO (R_MIPS16_PC16_S1,     /* type */

> -        1,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_PC16_S1",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -};

> -

>  static reloc_howto_type elf_mips16_howto_table_rela[] =

>  {

>    /* The reloc used for the mips16 jump instruction.  */

> @@ -2084,485 +1101,6 @@ static reloc_howto_type elf_mips16_howto_table_rela[] =

>          TRUE),                 /* pcrel_offset */

>  };

>

> -static reloc_howto_type elf_micromips_howto_table_rel[] =

> -{

> -  EMPTY_HOWTO (130),

> -  EMPTY_HOWTO (131),

> -  EMPTY_HOWTO (132),

> -

> -  /* 26 bit jump address.  */

> -  HOWTO (R_MICROMIPS_26_S1,    /* type */

> -        1,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        26,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -                               /* This needs complex overflow

> -                                  detection, because the upper four

> -                                  bits must match the PC.  */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_26_S1",   /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x3ffffff,             /* src_mask */

> -        0x3ffffff,             /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* High 16 bits of symbol value.  */

> -  HOWTO (R_MICROMIPS_HI16,     /* type */

> -        16,                    /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_hi16_reloc, /* special_function */

> -        "R_MICROMIPS_HI16",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Low 16 bits of symbol value.  */

> -  HOWTO (R_MICROMIPS_LO16,     /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_lo16_reloc, /* special_function */

> -        "R_MICROMIPS_LO16",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* GP relative reference.  */

> -  HOWTO (R_MICROMIPS_GPREL16,  /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf32_gprel16_reloc, /* special_function */

> -        "R_MICROMIPS_GPREL16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Reference to literal section.  */

> -  HOWTO (R_MICROMIPS_LITERAL,  /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf32_gprel16_reloc, /* special_function */

> -        "R_MICROMIPS_LITERAL", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Reference to global offset table.  */

> -  HOWTO (R_MICROMIPS_GOT16,    /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_got16_reloc, /* special_function */

> -        "R_MICROMIPS_GOT16",   /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* This is for microMIPS branches.  */

> -  HOWTO (R_MICROMIPS_PC7_S1,   /* type */

> -        1,                     /* rightshift */

> -        1,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        7,                     /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_PC7_S1",  /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000007f,            /* src_mask */

> -        0x0000007f,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  HOWTO (R_MICROMIPS_PC10_S1,  /* type */

> -        1,                     /* rightshift */

> -        1,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        10,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_PC10_S1", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x000003ff,            /* src_mask */

> -        0x000003ff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  HOWTO (R_MICROMIPS_PC16_S1,  /* type */

> -        1,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_PC16_S1", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  /* 16 bit call through global offset table.  */

> -  HOWTO (R_MICROMIPS_CALL16,   /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_CALL16",  /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  EMPTY_HOWTO (143),

> -  EMPTY_HOWTO (144),

> -

> -  /* Displacement in the global offset table.  */

> -  HOWTO (R_MICROMIPS_GOT_DISP, /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_GOT_DISP",/* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Displacement to page pointer in the global offset table.  */

> -  HOWTO (R_MICROMIPS_GOT_PAGE, /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_GOT_PAGE",/* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Offset from page pointer in the global offset table.  */

> -  HOWTO (R_MICROMIPS_GOT_OFST, /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_GOT_OFST",/* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* High 16 bits of displacement in global offset table.  */

> -  HOWTO (R_MICROMIPS_GOT_HI16, /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_GOT_HI16",/* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Low 16 bits of displacement in global offset table.  */

> -  HOWTO (R_MICROMIPS_GOT_LO16, /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_GOT_LO16",/* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 64 bit subtraction.  Used in the N32 ABI.  */

> -  HOWTO (R_MICROMIPS_SUB,      /* type */

> -        0,                     /* rightshift */

> -        4,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        64,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_SUB",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        MINUS_ONE,             /* src_mask */

> -        MINUS_ONE,             /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* We don't support these for REL relocations, because it means building

> -     the addend from a R_MICROMIPS_HIGHEST/R_MICROMIPS_HIGHER/

> -     R_MICROMIPS_HI16/R_MICROMIPS_LO16 sequence with varying ordering,

> -     using fallable heuristics.  */

> -  EMPTY_HOWTO (R_MICROMIPS_HIGHER),

> -  EMPTY_HOWTO (R_MICROMIPS_HIGHEST),

> -

> -  /* High 16 bits of displacement in global offset table.  */

> -  HOWTO (R_MICROMIPS_CALL_HI16,        /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_CALL_HI16",/* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Low 16 bits of displacement in global offset table.  */

> -  HOWTO (R_MICROMIPS_CALL_LO16,        /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_CALL_LO16",/* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Section displacement.  */

> -  HOWTO (R_MICROMIPS_SCN_DISP,  /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_SCN_DISP", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Protected jump conversion.  This is an optimization hint.  No

> -     relocation is required for correctness.  */

> -  HOWTO (R_MICROMIPS_JALR,     /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_JALR",    /* name */

> -        FALSE,                 /* partial_inplace */

> -        0,                     /* src_mask */

> -        0x00000000,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Low 16 bits of symbol value.  Note that the high 16 bits of symbol values

> -     must be zero.  This is used for relaxation.  */

> -  HOWTO (R_MICROMIPS_HI0_LO16, /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_HI0_LO16",/* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  EMPTY_HOWTO (158),

> -  EMPTY_HOWTO (159),

> -  EMPTY_HOWTO (160),

> -  EMPTY_HOWTO (161),

> -

> -  /* TLS general dynamic variable reference.  */

> -  HOWTO (R_MICROMIPS_TLS_GD,           /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_TLS_GD",  /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS local dynamic variable reference.  */

> -  HOWTO (R_MICROMIPS_TLS_LDM,  /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_TLS_LDM", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS local dynamic offset.  */

> -  HOWTO (R_MICROMIPS_TLS_DTPREL_HI16,  /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_TLS_DTPREL_HI16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS local dynamic offset.  */

> -  HOWTO (R_MICROMIPS_TLS_DTPREL_LO16,  /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_TLS_DTPREL_LO16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS thread pointer offset.  */

> -  HOWTO (R_MICROMIPS_TLS_GOTTPREL,     /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_TLS_GOTTPREL",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  EMPTY_HOWTO (167),

> -  EMPTY_HOWTO (168),

> -

> -  /* TLS thread pointer offset.  */

> -  HOWTO (R_MICROMIPS_TLS_TPREL_HI16,   /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_TLS_TPREL_HI16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS thread pointer offset.  */

> -  HOWTO (R_MICROMIPS_TLS_TPREL_LO16,   /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_TLS_TPREL_LO16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  EMPTY_HOWTO (171),

> -

> -  /* GP- and PC-relative relocations.  */

> -  HOWTO (R_MICROMIPS_GPREL7_S2,        /* type */

> -        2,                     /* rightshift */

> -        1,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        7,                     /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf32_gprel16_reloc, /* special_function */

> -        "R_MICROMIPS_GPREL7_S2",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000007f,            /* src_mask */

> -        0x0000007f,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  HOWTO (R_MICROMIPS_PC23_S2,  /* type */

> -        2,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        23,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_PC23_S2", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x007fffff,            /* src_mask */

> -        0x007fffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -};

> -

>  static reloc_howto_type elf_micromips_howto_table_rela[] =

>  {

>    EMPTY_HOWTO (130),

> @@ -3748,10 +2286,7 @@ mips_elf_n32_rtype_to_howto (bfd *abfd, unsigned int r_type, bfd_boolean rela_p)

>      case R_MIPS_GNU_VTENTRY:

>        return &elf_mips_gnu_vtentry_howto;

>      case R_MIPS_GNU_REL16_S2:

> -      if (rela_p)

> -       return &elf_mips_gnu_rela16_s2;

> -      else

> -       return &elf_mips_gnu_rel16_s2;

> +      return &elf_mips_gnu_rela16_s2;

>      case R_MIPS_PC32:

>        return &elf_mips_gnu_pcrel32;

>      case R_MIPS_EH:

> @@ -3763,24 +2298,15 @@ mips_elf_n32_rtype_to_howto (bfd *abfd, unsigned int r_type, bfd_boolean rela_p)

>      default:

>        if (r_type >= R_MICROMIPS_min && r_type < R_MICROMIPS_max)

>         {

> -         if (rela_p)

> -           howto = &elf_micromips_howto_table_rela[r_type - R_MICROMIPS_min];

> -         else

> -           howto = &elf_micromips_howto_table_rel[r_type - R_MICROMIPS_min];

> +         howto = &elf_micromips_howto_table_rela[r_type - R_MICROMIPS_min];

>         }

>        if (r_type >= R_MIPS16_min && r_type < R_MIPS16_max)

>         {

> -         if (rela_p)

> -           howto = &elf_mips16_howto_table_rela[r_type - R_MIPS16_min];

> -         else

> -           howto = &elf_mips16_howto_table_rel[r_type - R_MIPS16_min];

> +         howto = &elf_mips16_howto_table_rela[r_type - R_MIPS16_min];

>         }

>        if (r_type < R_MIPS_max)

>         {

> -         if (rela_p)

> -           howto = &elf_mips_howto_table_rela[r_type];

> -         else

> -           howto = &elf_mips_howto_table_rel[r_type];

> +         howto = &elf_mips_howto_table_rela[r_type];

>         }

>        if (howto != NULL && howto->name != NULL)

>         return howto;

> @@ -3792,30 +2318,6 @@ mips_elf_n32_rtype_to_howto (bfd *abfd, unsigned int r_type, bfd_boolean rela_p)

>      }

>  }

>

> -/* Given a MIPS Elf_Internal_Rel, fill in an arelent structure.  */

> -

> -static bfd_boolean

> -mips_info_to_howto_rel (bfd *abfd, arelent *cache_ptr, Elf_Internal_Rela *dst)

> -{

> -  unsigned int r_type;

> -

> -  r_type = ELF32_R_TYPE (dst->r_info);

> -  cache_ptr->howto = mips_elf_n32_rtype_to_howto (abfd, r_type, FALSE);

> -

> -  if (cache_ptr->howto == NULL)

> -    return FALSE;

> -

> -  /* The addend for a GPREL16 or LITERAL relocation comes from the GP

> -     value for the object file.  We get the addend now, rather than

> -     when we do the relocation, because the symbol manipulations done

> -     by the linker may cause us to lose track of the input BFD.  */

> -  if (((*cache_ptr->sym_ptr_ptr)->flags & BSF_SECTION_SYM) != 0

> -      && (gprel16_reloc_p (r_type) || r_type == (unsigned int) R_MIPS_LITERAL))

> -    cache_ptr->addend = elf_gp (abfd);

> -

> -  return TRUE;

> -}

> -

>  /* Given a MIPS Elf_Internal_Rela, fill in an arelent structure.  */

>

>  static bfd_boolean

> @@ -4107,7 +2609,7 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = {

>  #define elf_backend_gc_mark_extra_sections \

>                                         _bfd_mips_elf_gc_mark_extra_sections

>  #define elf_info_to_howto              mips_info_to_howto_rela

> -#define elf_info_to_howto_rel          mips_info_to_howto_rel

> +#define elf_info_to_howto_rel          NULL

>  #define elf_backend_sym_is_global      mips_elf_sym_is_global

>  #define elf_backend_object_p           mips_elf_n32_object_p

>  #define elf_backend_symbol_processing  _bfd_mips_elf_symbol_processing

> @@ -4156,9 +2658,8 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = {

>  #define elf_backend_got_header_size    (4 * MIPS_RESERVED_GOTNO)

>  #define elf_backend_want_dynrelro      1

>

> -/* MIPS n32 ELF can use a mixture of REL and RELA, but some Relocations

> -   work better/work only in RELA, so we default to this.  */

> -#define elf_backend_may_use_rel_p      1

> +/* We restrict MIPS ELFn32 to rela only  */

> +#define elf_backend_may_use_rel_p      0

>  #define elf_backend_may_use_rela_p     1

>  #define elf_backend_default_use_rela_p 1

>  #define elf_backend_rela_plts_and_copies_p 0

> --

> 2.30.2

>



-- 
YunQiang Su
Florian Weimer via Binutils March 30, 2021, 6:41 a.m. | #2
CC Pual Hua.

YunQiang Su <yunqiang.su@cipunited.com> 于2021年3月12日周五 下午4:57写道:
>

> Given that MIPS NewABI ELF always use SHT_RELA in realworld,

> and our SHT_REL implementation in backend is incomplete, it

> filled with FIXME and TODO in code and produce tons of

> assertion failure and other errors when meeting SHT_REL,

> it's time to remove it.

> ---

>  bfd/elf64-mips.c  | 1700 +--------------------------------------------

>  bfd/elfn32-mips.c | 1513 +---------------------------------------

>  2 files changed, 24 insertions(+), 3189 deletions(-)

>

> diff --git a/bfd/elf64-mips.c b/bfd/elf64-mips.c

> index e1a00448fb..180363ea25 100644

> --- a/bfd/elf64-mips.c

> +++ b/bfd/elf64-mips.c

> @@ -31,8 +31,6 @@

>  /* TODO: Many things are unsupported, even if there is some code for it

>   .       (which was mostly stolen from elf32-mips.c and slightly adapted).

>   .

> - .   - Relocation handling for REL relocs is wrong in many cases and

> - .     generally untested.

>   .   - Relocation handling for RELA relocs related to GOT support are

>   .     also likely to be wrong.

>   .   - Support for MIPS16 is untested.

> @@ -62,18 +60,10 @@

>  #define ECOFF_SIGNED_64

>  #include "ecoffswap.h"

>

> -static void mips_elf64_swap_reloc_in

> -  (bfd *, const Elf64_Mips_External_Rel *, Elf64_Mips_Internal_Rela *);

>  static void mips_elf64_swap_reloca_in

>    (bfd *, const Elf64_Mips_External_Rela *, Elf64_Mips_Internal_Rela *);

> -static void mips_elf64_swap_reloc_out

> -  (bfd *, const Elf64_Mips_Internal_Rela *, Elf64_Mips_External_Rel *);

>  static void mips_elf64_swap_reloca_out

>    (bfd *, const Elf64_Mips_Internal_Rela *, Elf64_Mips_External_Rela *);

> -static void mips_elf64_be_swap_reloc_in

> -  (bfd *, const bfd_byte *, Elf_Internal_Rela *);

> -static void mips_elf64_be_swap_reloc_out

> -  (bfd *, const Elf_Internal_Rela *, bfd_byte *);

>  static void mips_elf64_be_swap_reloca_in

>    (bfd *, const bfd_byte *, Elf_Internal_Rela *);

>  static void mips_elf64_be_swap_reloca_out

> @@ -91,8 +81,6 @@ static bfd_boolean mips_elf64_slurp_reloc_table

>    (bfd *, asection *, asymbol **, bfd_boolean);

>  static void mips_elf64_write_relocs

>    (bfd *, asection *, void *);

> -static void mips_elf64_write_rel

> -  (bfd *, asection *, Elf_Internal_Shdr *, int *, void *);

>  static void mips_elf64_write_rela

>    (bfd *, asection *, Elf_Internal_Shdr *, int *, void *);

>  static bfd_reloc_status_type mips_elf64_gprel16_reloc

> @@ -127,772 +115,8 @@ extern const bfd_target mips_elf64_le_vec;

>

>  /* The number of local .got entries we reserve.  */

>  #define MIPS_RESERVED_GOTNO (2)

> -

> -/* The relocation table used for SHT_REL sections.  */

> -

> -static reloc_howto_type mips_elf64_howto_table_rel[] =

> -{

> -  /* No relocation.  */

> -  HOWTO (R_MIPS_NONE,          /* type */

> -        0,                     /* rightshift */

> -        3,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        0,                     /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_NONE",         /* name */

> -        FALSE,                 /* partial_inplace */

> -        0,                     /* src_mask */

> -        0,                     /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 16 bit relocation.  */

> -  HOWTO (R_MIPS_16,            /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_16",           /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 32 bit relocation.  */

> -  HOWTO (R_MIPS_32,            /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_32",           /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 32 bit symbol relative relocation.  */

> -  HOWTO (R_MIPS_REL32,         /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_REL32",        /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 26 bit jump address.  */

> -  HOWTO (R_MIPS_26,            /* type */

> -        2,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        26,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -                               /* This needs complex overflow

> -                                  detection, because the upper 36

> -                                  bits must match the PC + 4.  */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_26",           /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x03ffffff,            /* src_mask */

> -        0x03ffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* R_MIPS_HI16 and R_MIPS_LO16 are unsupported for NewABI REL.

> -     However, the native IRIX6 tools use them, so we try our best. */

> -

> -  /* High 16 bits of symbol value.  */

> -  HOWTO (R_MIPS_HI16,          /* type */

> -        16,                    /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_hi16_reloc, /* special_function */

> -        "R_MIPS_HI16",         /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Low 16 bits of symbol value.  */

> -  HOWTO (R_MIPS_LO16,          /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_lo16_reloc, /* special_function */

> -        "R_MIPS_LO16",         /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* GP relative reference.  */

> -  HOWTO (R_MIPS_GPREL16,       /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        mips_elf64_gprel16_reloc, /* special_function */

> -        "R_MIPS_GPREL16",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Reference to literal section.  */

> -  HOWTO (R_MIPS_LITERAL,       /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        mips_elf64_literal_reloc, /* special_function */

> -        "R_MIPS_LITERAL",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Reference to global offset table.  */

> -  HOWTO (R_MIPS_GOT16,         /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_got16_reloc, /* special_function */

> -        "R_MIPS_GOT16",        /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 16 bit PC relative reference.  Note that the ABI document has a typo

> -     and claims R_MIPS_PC16 to be not rightshifted, rendering it useless.

> -     We do the right thing here.  */

> -  HOWTO (R_MIPS_PC16,          /* type */

> -        2,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_PC16",         /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  /* 16 bit call through global offset table.  */

> -  HOWTO (R_MIPS_CALL16,                /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_CALL16",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 32 bit GP relative reference.  */

> -  HOWTO (R_MIPS_GPREL32,       /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        mips_elf64_gprel32_reloc, /* special_function */

> -        "R_MIPS_GPREL32",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  EMPTY_HOWTO (13),

> -  EMPTY_HOWTO (14),

> -  EMPTY_HOWTO (15),

> -

> -  /* A 5 bit shift field.  */

> -  HOWTO (R_MIPS_SHIFT5,                /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        5,                     /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        6,                     /* bitpos */

> -        complain_overflow_bitfield, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_SHIFT5",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x000007c0,            /* src_mask */

> -        0x000007c0,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* A 6 bit shift field.  */

> -  HOWTO (R_MIPS_SHIFT6,                /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        6,                     /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        6,                     /* bitpos */

> -        complain_overflow_bitfield, /* complain_on_overflow */

> -        mips_elf64_shift6_reloc, /* special_function */

> -        "R_MIPS_SHIFT6",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x000007c4,            /* src_mask */

> -        0x000007c4,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 64 bit relocation.  */

> -  HOWTO (R_MIPS_64,            /* type */

> -        0,                     /* rightshift */

> -        4,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        64,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_64",           /* name */

> -        TRUE,                  /* partial_inplace */

> -        MINUS_ONE,             /* src_mask */

> -        MINUS_ONE,             /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Displacement in the global offset table.  */

> -  HOWTO (R_MIPS_GOT_DISP,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_GOT_DISP",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Displacement to page pointer in the global offset table.  */

> -  HOWTO (R_MIPS_GOT_PAGE,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_GOT_PAGE",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Offset from page pointer in the global offset table.  */

> -  HOWTO (R_MIPS_GOT_OFST,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_GOT_OFST",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* High 16 bits of displacement in global offset table.  */

> -  HOWTO (R_MIPS_GOT_HI16,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_GOT_HI16",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Low 16 bits of displacement in global offset table.  */

> -  HOWTO (R_MIPS_GOT_LO16,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_GOT_LO16",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 64 bit subtraction.  */

> -  HOWTO (R_MIPS_SUB,           /* type */

> -        0,                     /* rightshift */

> -        4,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        64,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_SUB",          /* name */

> -        TRUE,                  /* partial_inplace */

> -        MINUS_ONE,             /* src_mask */

> -        MINUS_ONE,             /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Insert the addend as an instruction.  */

> -  /* FIXME: Not handled correctly.  */

> -  HOWTO (R_MIPS_INSERT_A,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_INSERT_A",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Insert the addend as an instruction, and change all relocations

> -     to refer to the old instruction at the address.  */

> -  /* FIXME: Not handled correctly.  */

> -  HOWTO (R_MIPS_INSERT_B,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_INSERT_B",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Delete a 32 bit instruction.  */

> -  /* FIXME: Not handled correctly.  */

> -  HOWTO (R_MIPS_DELETE,                /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_DELETE",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* The MIPS ELF64 ABI Draft wants us to support these for REL relocations.

> -     We don't, because

> -       a) It means building the addend from a R_MIPS_HIGHEST/R_MIPS_HIGHER/

> -         R_MIPS_HI16/R_MIPS_LO16 sequence with varying ordering, using

> -         fallable heuristics.

> -       b) No other NewABI toolchain actually emits such relocations.  */

> -  EMPTY_HOWTO (R_MIPS_HIGHER),

> -  EMPTY_HOWTO (R_MIPS_HIGHEST),

> -

> -  /* High 16 bits of displacement in global offset table.  */

> -  HOWTO (R_MIPS_CALL_HI16,     /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_CALL_HI16",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Low 16 bits of displacement in global offset table.  */

> -  HOWTO (R_MIPS_CALL_LO16,     /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_CALL_LO16",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Section displacement, used by an associated event location section.  */

> -  HOWTO (R_MIPS_SCN_DISP,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_SCN_DISP",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  HOWTO (R_MIPS_REL16,         /* type */

> -        0,                     /* rightshift */

> -        1,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_REL16",        /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffff,                /* src_mask */

> -        0xffff,                /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* These two are obsolete.  */

> -  EMPTY_HOWTO (R_MIPS_ADD_IMMEDIATE),

> -  EMPTY_HOWTO (R_MIPS_PJUMP),

> -

> -  /* Similiar to R_MIPS_REL32, but used for relocations in a GOT section.

> -     It must be used for multigot GOT's (and only there).  */

> -  HOWTO (R_MIPS_RELGOT,                /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_RELGOT",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Protected jump conversion.  This is an optimization hint.  No

> -     relocation is required for correctness.  */

> -  HOWTO (R_MIPS_JALR,          /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_JALR",         /* name */

> -        FALSE,                 /* partial_inplace */

> -        0,                     /* src_mask */

> -        0x00000000,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS relocations.  */

> -  EMPTY_HOWTO (R_MIPS_TLS_DTPMOD32),

> -  EMPTY_HOWTO (R_MIPS_TLS_DTPREL32),

> -

> -  HOWTO (R_MIPS_TLS_DTPMOD64,  /* type */

> -        0,                     /* rightshift */

> -        4,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        64,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_DTPMOD64", /* name */

> -        TRUE,                  /* partial_inplace */

> -        MINUS_ONE,             /* src_mask */

> -        MINUS_ONE,             /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  HOWTO (R_MIPS_TLS_DTPREL64,  /* type */

> -        0,                     /* rightshift */

> -        4,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        64,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_DTPREL64", /* name */

> -        TRUE,                  /* partial_inplace */

> -        MINUS_ONE,             /* src_mask */

> -        MINUS_ONE,             /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS general dynamic variable reference.  */

> -  HOWTO (R_MIPS_TLS_GD,                /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_GD",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS local dynamic variable reference.  */

> -  HOWTO (R_MIPS_TLS_LDM,       /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_LDM",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS local dynamic offset.  */

> -  HOWTO (R_MIPS_TLS_DTPREL_HI16,       /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_DTPREL_HI16",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS local dynamic offset.  */

> -  HOWTO (R_MIPS_TLS_DTPREL_LO16,       /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_DTPREL_LO16",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS thread pointer offset.  */

> -  HOWTO (R_MIPS_TLS_GOTTPREL,  /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_GOTTPREL", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS IE dynamic relocations.  */

> -  EMPTY_HOWTO (R_MIPS_TLS_TPREL32),

> -

> -  HOWTO (R_MIPS_TLS_TPREL64,   /* type */

> -        0,                     /* rightshift */

> -        4,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        64,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_TPREL64",  /* name */

> -        TRUE,                  /* partial_inplace */

> -        MINUS_ONE,             /* src_mask */

> -        MINUS_ONE,             /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS thread pointer offset.  */

> -  HOWTO (R_MIPS_TLS_TPREL_HI16,        /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_TPREL_HI16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS thread pointer offset.  */

> -  HOWTO (R_MIPS_TLS_TPREL_LO16,        /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_TPREL_LO16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 32 bit relocation with no addend.  */

> -  HOWTO (R_MIPS_GLOB_DAT,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_GLOB_DAT",     /* name */

> -        FALSE,                 /* partial_inplace */

> -        0x0,                   /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  EMPTY_HOWTO (52),

> -  EMPTY_HOWTO (53),

> -  EMPTY_HOWTO (54),

> -  EMPTY_HOWTO (55),

> -  EMPTY_HOWTO (56),

> -  EMPTY_HOWTO (57),

> -  EMPTY_HOWTO (58),

> -  EMPTY_HOWTO (59),

> -

> -  HOWTO (R_MIPS_PC21_S2,       /* type */

> -        2,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        21,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_PC21_S2",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x001fffff,            /* src_mask */

> -        0x001fffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  HOWTO (R_MIPS_PC26_S2,       /* type */

> -        2,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        26,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_PC26_S2",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x03ffffff,            /* src_mask */

> -        0x03ffffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  HOWTO (R_MIPS_PC18_S3,       /* type */

> -        3,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        18,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_PC18_S3",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0003ffff,            /* src_mask */

> -        0x0003ffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  HOWTO (R_MIPS_PC19_S2,       /* type */

> -        2,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        19,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_PC19_S2",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0007ffff,            /* src_mask */

> -        0x0007ffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  HOWTO (R_MIPS_PCHI16,                /* type */

> -        16,                    /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_PCHI16",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  HOWTO (R_MIPS_PCLO16,                /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_PCLO16",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -};

>

>  /* The relocation table used for SHT_RELA sections.  */

> -

>  static reloc_howto_type mips_elf64_howto_table_rela[] =

>  {

>    /* No relocation.  */

> @@ -1672,222 +896,6 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =

>

>  };

>

> -static reloc_howto_type mips16_elf64_howto_table_rel[] =

> -{

> -  /* The reloc used for the mips16 jump instruction.  */

> -  HOWTO (R_MIPS16_26,          /* type */

> -        2,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        26,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -                               /* This needs complex overflow

> -                                  detection, because the upper four

> -                                  bits must match the PC.  */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_26",         /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x3ffffff,             /* src_mask */

> -        0x3ffffff,             /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* The reloc used for the mips16 gprel instruction.  */

> -  HOWTO (R_MIPS16_GPREL,       /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        mips16_gprel_reloc,    /* special_function */

> -        "R_MIPS16_GPREL",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* A MIPS16 reference to the global offset table.  */

> -  HOWTO (R_MIPS16_GOT16,       /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_got16_reloc, /* special_function */

> -        "R_MIPS16_GOT16",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* A MIPS16 call through the global offset table.  */

> -  HOWTO (R_MIPS16_CALL16,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_CALL16",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 high 16 bits of symbol value.  */

> -  HOWTO (R_MIPS16_HI16,                /* type */

> -        16,                    /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_hi16_reloc, /* special_function */

> -        "R_MIPS16_HI16",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 low 16 bits of symbol value.  */

> -  HOWTO (R_MIPS16_LO16,                /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_lo16_reloc, /* special_function */

> -        "R_MIPS16_LO16",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 TLS general dynamic variable reference.  */

> -  HOWTO (R_MIPS16_TLS_GD,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_TLS_GD",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 TLS local dynamic variable reference.  */

> -  HOWTO (R_MIPS16_TLS_LDM,     /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_TLS_LDM",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 TLS local dynamic offset.  */

> -  HOWTO (R_MIPS16_TLS_DTPREL_HI16,     /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_TLS_DTPREL_HI16",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 TLS local dynamic offset.  */

> -  HOWTO (R_MIPS16_TLS_DTPREL_LO16,     /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_TLS_DTPREL_LO16",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 TLS thread pointer offset.  */

> -  HOWTO (R_MIPS16_TLS_GOTTPREL,        /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_TLS_GOTTPREL",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 TLS thread pointer offset.  */

> -  HOWTO (R_MIPS16_TLS_TPREL_HI16,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_TLS_TPREL_HI16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 TLS thread pointer offset.  */

> -  HOWTO (R_MIPS16_TLS_TPREL_LO16,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_TLS_TPREL_LO16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 16-bit PC-relative branch offset.  */

> -  HOWTO (R_MIPS16_PC16_S1,     /* type */

> -        1,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_PC16_S1",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -};

> -

>  static reloc_howto_type mips16_elf64_howto_table_rela[] =

>  {

>    /* The reloc used for the mips16 jump instruction.  */

> @@ -2104,485 +1112,6 @@ static reloc_howto_type mips16_elf64_howto_table_rela[] =

>          TRUE),                 /* pcrel_offset */

>  };

>

> -static reloc_howto_type micromips_elf64_howto_table_rel[] =

> -{

> -  EMPTY_HOWTO (130),

> -  EMPTY_HOWTO (131),

> -  EMPTY_HOWTO (132),

> -

> -  /* 26 bit jump address.  */

> -  HOWTO (R_MICROMIPS_26_S1,    /* type */

> -        1,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        26,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -                               /* This needs complex overflow

> -                                  detection, because the upper four

> -                                  bits must match the PC.  */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_26_S1",   /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x3ffffff,             /* src_mask */

> -        0x3ffffff,             /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* High 16 bits of symbol value.  */

> -  HOWTO (R_MICROMIPS_HI16,     /* type */

> -        16,                    /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_hi16_reloc, /* special_function */

> -        "R_MICROMIPS_HI16",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Low 16 bits of symbol value.  */

> -  HOWTO (R_MICROMIPS_LO16,     /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_lo16_reloc, /* special_function */

> -        "R_MICROMIPS_LO16",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* GP relative reference.  */

> -  HOWTO (R_MICROMIPS_GPREL16,  /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf32_gprel16_reloc, /* special_function */

> -        "R_MICROMIPS_GPREL16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Reference to literal section.  */

> -  HOWTO (R_MICROMIPS_LITERAL,  /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf32_gprel16_reloc, /* special_function */

> -        "R_MICROMIPS_LITERAL", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Reference to global offset table.  */

> -  HOWTO (R_MICROMIPS_GOT16,    /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_got16_reloc, /* special_function */

> -        "R_MICROMIPS_GOT16",   /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* This is for microMIPS branches.  */

> -  HOWTO (R_MICROMIPS_PC7_S1,   /* type */

> -        1,                     /* rightshift */

> -        1,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        7,                     /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_PC7_S1",  /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000007f,            /* src_mask */

> -        0x0000007f,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  HOWTO (R_MICROMIPS_PC10_S1,  /* type */

> -        1,                     /* rightshift */

> -        1,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        10,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_PC10_S1", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x000003ff,            /* src_mask */

> -        0x000003ff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  HOWTO (R_MICROMIPS_PC16_S1,  /* type */

> -        1,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_PC16_S1", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  /* 16 bit call through global offset table.  */

> -  HOWTO (R_MICROMIPS_CALL16,   /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_CALL16",  /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  EMPTY_HOWTO (143),

> -  EMPTY_HOWTO (144),

> -

> -  /* Displacement in the global offset table.  */

> -  HOWTO (R_MICROMIPS_GOT_DISP, /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_GOT_DISP",/* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Displacement to page pointer in the global offset table.  */

> -  HOWTO (R_MICROMIPS_GOT_PAGE, /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_GOT_PAGE",/* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Offset from page pointer in the global offset table.  */

> -  HOWTO (R_MICROMIPS_GOT_OFST, /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_GOT_OFST",/* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* High 16 bits of displacement in global offset table.  */

> -  HOWTO (R_MICROMIPS_GOT_HI16, /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_GOT_HI16",/* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Low 16 bits of displacement in global offset table.  */

> -  HOWTO (R_MICROMIPS_GOT_LO16, /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_GOT_LO16",/* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 64 bit subtraction.  Used in the N32 ABI.  */

> -  HOWTO (R_MICROMIPS_SUB,      /* type */

> -        0,                     /* rightshift */

> -        4,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        64,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_SUB",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        MINUS_ONE,             /* src_mask */

> -        MINUS_ONE,             /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* We don't support these for REL relocations, because it means building

> -     the addend from a R_MICROMIPS_HIGHEST/R_MICROMIPS_HIGHER/

> -     R_MICROMIPS_HI16/R_MICROMIPS_LO16 sequence with varying ordering,

> -     using fallable heuristics.  */

> -  EMPTY_HOWTO (R_MICROMIPS_HIGHER),

> -  EMPTY_HOWTO (R_MICROMIPS_HIGHEST),

> -

> -  /* High 16 bits of displacement in global offset table.  */

> -  HOWTO (R_MICROMIPS_CALL_HI16,        /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_CALL_HI16",/* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Low 16 bits of displacement in global offset table.  */

> -  HOWTO (R_MICROMIPS_CALL_LO16,        /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_CALL_LO16",/* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Section displacement.  */

> -  HOWTO (R_MICROMIPS_SCN_DISP,  /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_SCN_DISP", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Protected jump conversion.  This is an optimization hint.  No

> -     relocation is required for correctness.  */

> -  HOWTO (R_MICROMIPS_JALR,     /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_JALR",    /* name */

> -        FALSE,                 /* partial_inplace */

> -        0,                     /* src_mask */

> -        0x00000000,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Low 16 bits of symbol value.  Note that the high 16 bits of symbol values

> -     must be zero.  This is used for relaxation.  */

> -  HOWTO (R_MICROMIPS_HI0_LO16, /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_HI0_LO16",/* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  EMPTY_HOWTO (158),

> -  EMPTY_HOWTO (159),

> -  EMPTY_HOWTO (160),

> -  EMPTY_HOWTO (161),

> -

> -  /* TLS general dynamic variable reference.  */

> -  HOWTO (R_MICROMIPS_TLS_GD,           /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_TLS_GD",  /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS local dynamic variable reference.  */

> -  HOWTO (R_MICROMIPS_TLS_LDM,  /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_TLS_LDM", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS local dynamic offset.  */

> -  HOWTO (R_MICROMIPS_TLS_DTPREL_HI16,  /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_TLS_DTPREL_HI16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS local dynamic offset.  */

> -  HOWTO (R_MICROMIPS_TLS_DTPREL_LO16,  /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_TLS_DTPREL_LO16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS thread pointer offset.  */

> -  HOWTO (R_MICROMIPS_TLS_GOTTPREL,     /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_TLS_GOTTPREL",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  EMPTY_HOWTO (167),

> -  EMPTY_HOWTO (168),

> -

> -  /* TLS thread pointer offset.  */

> -  HOWTO (R_MICROMIPS_TLS_TPREL_HI16,   /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_TLS_TPREL_HI16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS thread pointer offset.  */

> -  HOWTO (R_MICROMIPS_TLS_TPREL_LO16,   /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_TLS_TPREL_LO16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  EMPTY_HOWTO (171),

> -

> -  /* GP- and PC-relative relocations.  */

> -  HOWTO (R_MICROMIPS_GPREL7_S2,        /* type */

> -        2,                     /* rightshift */

> -        1,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        7,                     /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf32_gprel16_reloc, /* special_function */

> -        "R_MICROMIPS_GPREL7_S2",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000007f,            /* src_mask */

> -        0x0000007f,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  HOWTO (R_MICROMIPS_PC23_S2,  /* type */

> -        2,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        23,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_PC23_S2", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x007fffff,            /* src_mask */

> -        0x007fffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -};

> -

>  static reloc_howto_type micromips_elf64_howto_table_rela[] =

>  {

>    EMPTY_HOWTO (130),

> @@ -3214,21 +1743,6 @@ static reloc_howto_type elf_mips_eh_howto =

>          0xffffffff,            /* dst_mask */

>          FALSE);                /* pcrel_offset */

>

> -

> -/* Swap in a MIPS 64-bit Rel reloc.  */

> -

> -static void

> -mips_elf64_swap_reloc_in (bfd *abfd, const Elf64_Mips_External_Rel *src,

> -                         Elf64_Mips_Internal_Rela *dst)

> -{

> -  dst->r_offset = H_GET_64 (abfd, src->r_offset);

> -  dst->r_sym = H_GET_32 (abfd, src->r_sym);

> -  dst->r_ssym = H_GET_8 (abfd, src->r_ssym);

> -  dst->r_type3 = H_GET_8 (abfd, src->r_type3);

> -  dst->r_type2 = H_GET_8 (abfd, src->r_type2);

> -  dst->r_type = H_GET_8 (abfd, src->r_type);

> -  dst->r_addend = 0;

> -}

>

>  /* Swap in a MIPS 64-bit Rela reloc.  */

>

> @@ -3245,20 +1759,6 @@ mips_elf64_swap_reloca_in (bfd *abfd, const Elf64_Mips_External_Rela *src,

>    dst->r_addend = H_GET_S64 (abfd, src->r_addend);

>  }

>

> -/* Swap out a MIPS 64-bit Rel reloc.  */

> -

> -static void

> -mips_elf64_swap_reloc_out (bfd *abfd, const Elf64_Mips_Internal_Rela *src,

> -                          Elf64_Mips_External_Rel *dst)

> -{

> -  H_PUT_64 (abfd, src->r_offset, dst->r_offset);

> -  H_PUT_32 (abfd, src->r_sym, dst->r_sym);

> -  H_PUT_8 (abfd, src->r_ssym, dst->r_ssym);

> -  H_PUT_8 (abfd, src->r_type3, dst->r_type3);

> -  H_PUT_8 (abfd, src->r_type2, dst->r_type2);

> -  H_PUT_8 (abfd, src->r_type, dst->r_type);

> -}

> -

>  /* Swap out a MIPS 64-bit Rela reloc.  */

>

>  static void

> @@ -3274,28 +1774,6 @@ mips_elf64_swap_reloca_out (bfd *abfd, const Elf64_Mips_Internal_Rela *src,

>    H_PUT_S64 (abfd, src->r_addend, dst->r_addend);

>  }

>

> -/* Swap in a MIPS 64-bit Rel reloc.  */

> -

> -static void

> -mips_elf64_be_swap_reloc_in (bfd *abfd, const bfd_byte *src,

> -                            Elf_Internal_Rela *dst)

> -{

> -  Elf64_Mips_Internal_Rela mirel;

> -

> -  mips_elf64_swap_reloc_in (abfd,

> -                           (const Elf64_Mips_External_Rel *) src,

> -                           &mirel);

> -

> -  dst[0].r_offset = mirel.r_offset;

> -  dst[0].r_info = ELF64_R_INFO (mirel.r_sym, mirel.r_type);

> -  dst[0].r_addend = 0;

> -  dst[1].r_offset = mirel.r_offset;

> -  dst[1].r_info = ELF64_R_INFO (mirel.r_ssym, mirel.r_type2);

> -  dst[1].r_addend = 0;

> -  dst[2].r_offset = mirel.r_offset;

> -  dst[2].r_info = ELF64_R_INFO (STN_UNDEF, mirel.r_type3);

> -  dst[2].r_addend = 0;

> -}

>

>  /* Swap in a MIPS 64-bit Rela reloc.  */

>

> @@ -3320,27 +1798,6 @@ mips_elf64_be_swap_reloca_in (bfd *abfd, const bfd_byte *src,

>    dst[2].r_addend = 0;

>  }

>

> -/* Swap out a MIPS 64-bit Rel reloc.  */

> -

> -static void

> -mips_elf64_be_swap_reloc_out (bfd *abfd, const Elf_Internal_Rela *src,

> -                             bfd_byte *dst)

> -{

> -  Elf64_Mips_Internal_Rela mirel;

> -

> -  mirel.r_offset = src[0].r_offset;

> -  BFD_ASSERT(src[0].r_offset == src[1].r_offset);

> -  BFD_ASSERT(src[0].r_offset == src[2].r_offset);

> -

> -  mirel.r_type = ELF64_MIPS_R_TYPE (src[0].r_info);

> -  mirel.r_sym = ELF64_R_SYM (src[0].r_info);

> -  mirel.r_type2 = ELF64_MIPS_R_TYPE (src[1].r_info);

> -  mirel.r_ssym = ELF64_MIPS_R_SSYM (src[1].r_info);

> -  mirel.r_type3 = ELF64_MIPS_R_TYPE (src[2].r_info);

> -

> -  mips_elf64_swap_reloc_out (abfd, &mirel,

> -                            (Elf64_Mips_External_Rel *) dst);

> -}

>

>  /* Swap out a MIPS 64-bit Rela reloc.  */

>

> @@ -3806,8 +2263,6 @@ bfd_elf64_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,

>                                  bfd_reloc_code_real_type code)

>  {

>    unsigned int i;

> -  /* FIXME: We default to RELA here instead of choosing the right

> -     relocation variant.  */

>    reloc_howto_type *howto_table = mips_elf64_howto_table_rela;

>    reloc_howto_type *howto16_table = mips16_elf64_howto_table_rela;

>    reloc_howto_type *howto_micromips_table = micromips_elf64_howto_table_rela;

> @@ -3931,26 +2386,15 @@ mips_elf64_rtype_to_howto (bfd *abfd, unsigned int r_type, bfd_boolean rela_p)

>      default:

>        if (r_type >= R_MICROMIPS_min && r_type < R_MICROMIPS_max)

>         {

> -         if (rela_p)

> -           howto

> -             = &micromips_elf64_howto_table_rela[r_type - R_MICROMIPS_min];

> -         else

> -           howto

> -             = &micromips_elf64_howto_table_rel[r_type - R_MICROMIPS_min];

> +         howto = &micromips_elf64_howto_table_rela[r_type - R_MICROMIPS_min];

>         }

>        if (r_type >= R_MIPS16_min && r_type < R_MIPS16_max)

>         {

> -         if (rela_p)

> -           howto = &mips16_elf64_howto_table_rela[r_type - R_MIPS16_min];

> -         else

> -           howto = &mips16_elf64_howto_table_rel[r_type - R_MIPS16_min];

> +         howto = &mips16_elf64_howto_table_rela[r_type - R_MIPS16_min];

>         }

>        if (r_type < R_MIPS_max)

>         {

> -         if (rela_p)

> -           howto = &mips_elf64_howto_table_rela[r_type];

> -         else

> -           howto = &mips_elf64_howto_table_rel[r_type];

> +         howto = &mips_elf64_howto_table_rela[r_type];

>         }

>        if (howto != NULL && howto->name != NULL)

>         return howto;

> @@ -4008,7 +2452,6 @@ mips_elf64_slurp_one_reloc_table (bfd *abfd, asection *asect,

>    arelent *relent;

>    bfd_vma i;

>    int entsize;

> -  bfd_boolean rela_p;

>

>    if (bfd_seek (abfd, rel_hdr->sh_offset, SEEK_SET) != 0)

>      return FALSE;

> @@ -4019,13 +2462,7 @@ mips_elf64_slurp_one_reloc_table (bfd *abfd, asection *asect,

>    native_relocs = allocated;

>

>    entsize = rel_hdr->sh_entsize;

> -  BFD_ASSERT (entsize == sizeof (Elf64_Mips_External_Rel)

> -             || entsize == sizeof (Elf64_Mips_External_Rela));

> -

> -  if (entsize == sizeof (Elf64_Mips_External_Rel))

> -    rela_p = FALSE;

> -  else

> -    rela_p = TRUE;

> +  BFD_ASSERT (entsize == sizeof (Elf64_Mips_External_Rela));

>

>    if (dynamic)

>      symcount = bfd_get_dynamic_symcount (abfd);

> @@ -4040,14 +2477,9 @@ mips_elf64_slurp_one_reloc_table (bfd *abfd, asection *asect,

>        bfd_boolean used_sym, used_ssym;

>        int ir;

>

> -      if (entsize == sizeof (Elf64_Mips_External_Rela))

> -       mips_elf64_swap_reloca_in (abfd,

> -                                  (Elf64_Mips_External_Rela *) native_relocs,

> -                                  &rela);

> -      else

> -       mips_elf64_swap_reloc_in (abfd,

> -                                 (Elf64_Mips_External_Rel *) native_relocs,

> -                                 &rela);

> +      mips_elf64_swap_reloca_in (abfd,

> +                               (Elf64_Mips_External_Rela *) native_relocs,

> +                               &rela);

>

>        /* Each entry represents exactly three actual relocations.  */

>

> @@ -4154,7 +2586,7 @@ mips_elf64_slurp_one_reloc_table (bfd *abfd, asection *asect,

>

>           relent->addend = rela.r_addend;

>

> -         relent->howto = mips_elf64_rtype_to_howto (abfd, type, rela_p);

> +         relent->howto = mips_elf64_rtype_to_howto (abfd, type, TRUE);

>           if (relent->howto == NULL)

>             goto error_return;

>

> @@ -4301,112 +2733,12 @@ mips_elf64_write_relocs (bfd *abfd, asection *sec, void *data)

>

>    /* Do the actual relocation.  */

>

> -  if (rel_hdr->sh_entsize == sizeof(Elf64_Mips_External_Rel))

> -    mips_elf64_write_rel (abfd, sec, rel_hdr, &count, data);

> -  else if (rel_hdr->sh_entsize == sizeof(Elf64_Mips_External_Rela))

> +  if (rel_hdr->sh_entsize == sizeof(Elf64_Mips_External_Rela))

>      mips_elf64_write_rela (abfd, sec, rel_hdr, &count, data);

>    else

>      BFD_ASSERT (0);

>  }

>

> -static void

> -mips_elf64_write_rel (bfd *abfd, asection *sec,

> -                     Elf_Internal_Shdr *rel_hdr,

> -                     int *count, void *data)

> -{

> -  bfd_boolean *failedp = data;

> -  Elf64_Mips_External_Rel *ext_rel;

> -  unsigned int idx;

> -  asymbol *last_sym = 0;

> -  int last_sym_idx = 0;

> -

> -  rel_hdr->sh_size = rel_hdr->sh_entsize * *count;

> -  rel_hdr->contents = bfd_alloc (abfd, rel_hdr->sh_size);

> -  if (rel_hdr->contents == NULL)

> -    {

> -      *failedp = TRUE;

> -      return;

> -    }

> -

> -  ext_rel = (Elf64_Mips_External_Rel *) rel_hdr->contents;

> -  for (idx = 0; idx < sec->reloc_count; idx++, ext_rel++)

> -    {

> -      arelent *ptr;

> -      Elf64_Mips_Internal_Rela int_rel;

> -      asymbol *sym;

> -      int n;

> -      unsigned int i;

> -

> -      ptr = sec->orelocation[idx];

> -

> -      /* The address of an ELF reloc is section relative for an object

> -        file, and absolute for an executable file or shared library.

> -        The address of a BFD reloc is always section relative.  */

> -      if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)

> -       int_rel.r_offset = ptr->address;

> -      else

> -       int_rel.r_offset = ptr->address + sec->vma;

> -

> -      sym = *ptr->sym_ptr_ptr;

> -      if (sym == last_sym)

> -       n = last_sym_idx;

> -      else if (bfd_is_abs_section (sym->section) && sym->value == 0)

> -       n = STN_UNDEF;

> -      else

> -       {

> -         last_sym = sym;

> -         n = _bfd_elf_symbol_from_bfd_symbol (abfd, &sym);

> -         if (n < 0)

> -           {

> -             *failedp = TRUE;

> -             return;

> -           }

> -         last_sym_idx = n;

> -       }

> -

> -      int_rel.r_sym = n;

> -      int_rel.r_ssym = RSS_UNDEF;

> -

> -      if ((*ptr->sym_ptr_ptr)->the_bfd != NULL

> -         && (*ptr->sym_ptr_ptr)->the_bfd->xvec != abfd->xvec

> -         && ! _bfd_elf_validate_reloc (abfd, ptr))

> -       {

> -         *failedp = TRUE;

> -         return;

> -       }

> -

> -      int_rel.r_type = ptr->howto->type;

> -      int_rel.r_type2 = (int) R_MIPS_NONE;

> -      int_rel.r_type3 = (int) R_MIPS_NONE;

> -

> -      for (i = 0; i < 2; i++)

> -       {

> -         arelent *r;

> -

> -         if (idx + 1 >= sec->reloc_count)

> -           break;

> -         r = sec->orelocation[idx + 1];

> -         if (r->address != ptr->address

> -             || ! bfd_is_abs_section ((*r->sym_ptr_ptr)->section)

> -             || (*r->sym_ptr_ptr)->value != 0)

> -           break;

> -

> -         /* We can merge the reloc at IDX + 1 with the reloc at IDX.  */

> -

> -         if (i == 0)

> -           int_rel.r_type2 = r->howto->type;

> -         else

> -           int_rel.r_type3 = r->howto->type;

> -

> -         ++idx;

> -       }

> -

> -      mips_elf64_swap_reloc_out (abfd, &int_rel, ext_rel);

> -    }

> -

> -  BFD_ASSERT (ext_rel - (Elf64_Mips_External_Rel *) rel_hdr->contents

> -             == *count);

> -}

>

>  static void

>  mips_elf64_write_rela (bfd *abfd, asection *sec,

> @@ -4713,8 +3045,11 @@ const struct elf_size_info mips_elf64_size_info =

>    bfd_elf64_slurp_symbol_table,

>    bfd_elf64_swap_dyn_in,

>    bfd_elf64_swap_dyn_out,

> -  mips_elf64_be_swap_reloc_in,

> -  mips_elf64_be_swap_reloc_out,

> +  /* MIPS ELF SHT_REL actually need to handle chained relocation

> +     swap but as we don't use SHT_REL any more just use generic

> +     place holder here. */

> +  bfd_elf64_swap_reloc_in,

> +  bfd_elf64_swap_reloc_out,

>    mips_elf64_be_swap_reloca_in,

>    mips_elf64_be_swap_reloca_out

>  };

> @@ -4729,7 +3064,7 @@ const struct elf_size_info mips_elf64_size_info =

>  #define elf_backend_gc_mark_extra_sections \

>                                         _bfd_mips_elf_gc_mark_extra_sections

>  #define elf_info_to_howto              mips_elf64_info_to_howto_rela

> -#define elf_info_to_howto_rel          mips_elf64_info_to_howto_rela

> +#define elf_info_to_howto_rel          NULL

>  #define elf_backend_object_p           mips_elf64_object_p

>  #define elf_backend_symbol_processing  _bfd_mips_elf_symbol_processing

>  #define elf_backend_section_processing _bfd_mips_elf_section_processing

> @@ -4780,9 +3115,8 @@ const struct elf_size_info mips_elf64_size_info =

>  #define elf_backend_got_header_size    (8 * MIPS_RESERVED_GOTNO)

>  #define elf_backend_want_dynrelro      1

>

> -/* MIPS ELF64 can use a mixture of REL and RELA, but some Relocations

> -   work better/work only in RELA, so we default to this.  */

> -#define elf_backend_may_use_rel_p      1

> +/* We restrict MIPS ELF64 to rela only  */

> +#define elf_backend_may_use_rel_p      0

>  #define elf_backend_may_use_rela_p     1

>  #define elf_backend_default_use_rela_p 1

>  #define elf_backend_rela_plts_and_copies_p 0

> diff --git a/bfd/elfn32-mips.c b/bfd/elfn32-mips.c

> index da8afa3e57..7da56d23dd 100644

> --- a/bfd/elfn32-mips.c

> +++ b/bfd/elfn32-mips.c

> @@ -66,8 +66,6 @@ static bfd_reloc_status_type mips16_gprel_reloc

>    (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);

>  static reloc_howto_type *bfd_elf32_bfd_reloc_type_lookup

>    (bfd *, bfd_reloc_code_real_type);

> -static bfd_boolean mips_info_to_howto_rel

> -  (bfd *, arelent *, Elf_Internal_Rela *);

>  static bfd_boolean mips_info_to_howto_rela

>    (bfd *, arelent *, Elf_Internal_Rela *);

>  static bfd_boolean mips_elf_sym_is_global

> @@ -105,771 +103,6 @@ extern const bfd_target mips_elf32_n_le_vec;

>     from smaller values.  Start with zero, widen, *then* decrement.  */

>  #define MINUS_ONE      (((bfd_vma)0) - 1)

>

> -/* The relocation table used for SHT_REL sections.  */

> -

> -static reloc_howto_type elf_mips_howto_table_rel[] =

> -{

> -  /* No relocation.  */

> -  HOWTO (R_MIPS_NONE,          /* type */

> -        0,                     /* rightshift */

> -        3,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        0,                     /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_NONE",         /* name */

> -        FALSE,                 /* partial_inplace */

> -        0,                     /* src_mask */

> -        0,                     /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 16 bit relocation.  */

> -  HOWTO (R_MIPS_16,            /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_16",           /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 32 bit relocation.  */

> -  HOWTO (R_MIPS_32,            /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_32",           /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 32 bit symbol relative relocation.  */

> -  HOWTO (R_MIPS_REL32,         /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_REL32",        /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 26 bit jump address.  */

> -  HOWTO (R_MIPS_26,            /* type */

> -        2,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        26,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -                               /* This needs complex overflow

> -                                  detection, because the upper four

> -                                  bits must match the PC + 4.  */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_26",           /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x03ffffff,            /* src_mask */

> -        0x03ffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* R_MIPS_HI16 and R_MIPS_LO16 are unsupported for NewABI REL.

> -     However, the native IRIX6 tools use them, so we try our best. */

> -

> -  /* High 16 bits of symbol value.  */

> -  HOWTO (R_MIPS_HI16,          /* type */

> -        16,                    /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_hi16_reloc, /* special_function */

> -        "R_MIPS_HI16",         /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Low 16 bits of symbol value.  */

> -  HOWTO (R_MIPS_LO16,          /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_lo16_reloc, /* special_function */

> -        "R_MIPS_LO16",         /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* GP relative reference.  */

> -  HOWTO (R_MIPS_GPREL16,       /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        mips_elf_gprel16_reloc, /* special_function */

> -        "R_MIPS_GPREL16",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Reference to literal section.  */

> -  HOWTO (R_MIPS_LITERAL,       /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        mips_elf_literal_reloc, /* special_function */

> -        "R_MIPS_LITERAL",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Reference to global offset table.  */

> -  HOWTO (R_MIPS_GOT16,         /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_got16_reloc, /* special_function */

> -        "R_MIPS_GOT16",        /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 16 bit PC relative reference.  Note that the ABI document has a typo

> -     and claims R_MIPS_PC16 to be not rightshifted, rendering it useless.

> -     We do the right thing here.  */

> -  HOWTO (R_MIPS_PC16,          /* type */

> -        2,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_PC16",         /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  /* 16 bit call through global offset table.  */

> -  HOWTO (R_MIPS_CALL16,                /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_CALL16",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 32 bit GP relative reference.  */

> -  HOWTO (R_MIPS_GPREL32,       /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        mips_elf_gprel32_reloc, /* special_function */

> -        "R_MIPS_GPREL32",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* The remaining relocs are defined on Irix 5, although they are

> -     not defined by the ABI.  */

> -  EMPTY_HOWTO (13),

> -  EMPTY_HOWTO (14),

> -  EMPTY_HOWTO (15),

> -

> -  /* A 5 bit shift field.  */

> -  HOWTO (R_MIPS_SHIFT5,                /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        5,                     /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        6,                     /* bitpos */

> -        complain_overflow_bitfield, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_SHIFT5",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x000007c0,            /* src_mask */

> -        0x000007c0,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* A 6 bit shift field.  */

> -  HOWTO (R_MIPS_SHIFT6,                /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        6,                     /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        6,                     /* bitpos */

> -        complain_overflow_bitfield, /* complain_on_overflow */

> -        mips_elf_shift6_reloc, /* special_function */

> -        "R_MIPS_SHIFT6",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x000007c4,            /* src_mask */

> -        0x000007c4,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* A 64 bit relocation.  */

> -  HOWTO (R_MIPS_64,            /* type */

> -        0,                     /* rightshift */

> -        4,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        64,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_64",           /* name */

> -        TRUE,                  /* partial_inplace */

> -        MINUS_ONE,             /* src_mask */

> -        MINUS_ONE,             /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Displacement in the global offset table.  */

> -  HOWTO (R_MIPS_GOT_DISP,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_GOT_DISP",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Displacement to page pointer in the global offset table.  */

> -  HOWTO (R_MIPS_GOT_PAGE,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_GOT_PAGE",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Offset from page pointer in the global offset table.  */

> -  HOWTO (R_MIPS_GOT_OFST,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_GOT_OFST",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* High 16 bits of displacement in global offset table.  */

> -  HOWTO (R_MIPS_GOT_HI16,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_GOT_HI16",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Low 16 bits of displacement in global offset table.  */

> -  HOWTO (R_MIPS_GOT_LO16,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_GOT_LO16",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 64 bit subtraction.  */

> -  HOWTO (R_MIPS_SUB,           /* type */

> -        0,                     /* rightshift */

> -        4,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        64,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_SUB",          /* name */

> -        TRUE,                  /* partial_inplace */

> -        MINUS_ONE,             /* src_mask */

> -        MINUS_ONE,             /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Insert the addend as an instruction.  */

> -  /* FIXME: Not handled correctly.  */

> -  HOWTO (R_MIPS_INSERT_A,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_INSERT_A",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Insert the addend as an instruction, and change all relocations

> -     to refer to the old instruction at the address.  */

> -  /* FIXME: Not handled correctly.  */

> -  HOWTO (R_MIPS_INSERT_B,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_INSERT_B",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Delete a 32 bit instruction.  */

> -  /* FIXME: Not handled correctly.  */

> -  HOWTO (R_MIPS_DELETE,                /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_DELETE",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* The MIPS ELF64 ABI Draft wants us to support these for REL relocations.

> -     We don't, because

> -       a) It means building the addend from a R_MIPS_HIGHEST/R_MIPS_HIGHER/

> -         R_MIPS_HI16/R_MIPS_LO16 sequence with varying ordering, using

> -         fallable heuristics.

> -       b) No other NewABI toolchain actually emits such relocations.  */

> -  EMPTY_HOWTO (R_MIPS_HIGHER),

> -  EMPTY_HOWTO (R_MIPS_HIGHEST),

> -

> -  /* High 16 bits of displacement in global offset table.  */

> -  HOWTO (R_MIPS_CALL_HI16,     /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_CALL_HI16",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Low 16 bits of displacement in global offset table.  */

> -  HOWTO (R_MIPS_CALL_LO16,     /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_CALL_LO16",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Section displacement.  */

> -  HOWTO (R_MIPS_SCN_DISP,       /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_SCN_DISP",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  HOWTO (R_MIPS_REL16,         /* type */

> -        0,                     /* rightshift */

> -        1,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_REL16",        /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffff,                /* src_mask */

> -        0xffff,                /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* These two are obsolete.  */

> -  EMPTY_HOWTO (R_MIPS_ADD_IMMEDIATE),

> -  EMPTY_HOWTO (R_MIPS_PJUMP),

> -

> -  /* Similiar to R_MIPS_REL32, but used for relocations in a GOT section.

> -     It must be used for multigot GOT's (and only there).  */

> -  HOWTO (R_MIPS_RELGOT,                /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_RELGOT",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Protected jump conversion.  This is an optimization hint.  No

> -     relocation is required for correctness.  */

> -  HOWTO (R_MIPS_JALR,          /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_JALR",         /* name */

> -        FALSE,                 /* partial_inplace */

> -        0x00000000,            /* src_mask */

> -        0x00000000,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS GD/LD dynamic relocations.  */

> -  HOWTO (R_MIPS_TLS_DTPMOD32,  /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_DTPMOD32", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  HOWTO (R_MIPS_TLS_DTPREL32,  /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_DTPREL32", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  EMPTY_HOWTO (R_MIPS_TLS_DTPMOD64),

> -  EMPTY_HOWTO (R_MIPS_TLS_DTPREL64),

> -

> -  /* TLS general dynamic variable reference.  */

> -  HOWTO (R_MIPS_TLS_GD,                /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_GD",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS local dynamic variable reference.  */

> -  HOWTO (R_MIPS_TLS_LDM,       /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_LDM",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS local dynamic offset.  */

> -  HOWTO (R_MIPS_TLS_DTPREL_HI16,       /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_DTPREL_HI16",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS local dynamic offset.  */

> -  HOWTO (R_MIPS_TLS_DTPREL_LO16,       /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_DTPREL_LO16",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS thread pointer offset.  */

> -  HOWTO (R_MIPS_TLS_GOTTPREL,  /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_GOTTPREL", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS IE dynamic relocations.  */

> -  HOWTO (R_MIPS_TLS_TPREL32,   /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_TPREL32",  /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  EMPTY_HOWTO (R_MIPS_TLS_TPREL64),

> -

> -  /* TLS thread pointer offset.  */

> -  HOWTO (R_MIPS_TLS_TPREL_HI16,        /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_TPREL_HI16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS thread pointer offset.  */

> -  HOWTO (R_MIPS_TLS_TPREL_LO16,        /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_TLS_TPREL_LO16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 32 bit relocation with no addend.  */

> -  HOWTO (R_MIPS_GLOB_DAT,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_GLOB_DAT",     /* name */

> -        FALSE,                 /* partial_inplace */

> -        0x0,                   /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  EMPTY_HOWTO (52),

> -  EMPTY_HOWTO (53),

> -  EMPTY_HOWTO (54),

> -  EMPTY_HOWTO (55),

> -  EMPTY_HOWTO (56),

> -  EMPTY_HOWTO (57),

> -  EMPTY_HOWTO (58),

> -  EMPTY_HOWTO (59),

> -

> -  HOWTO (R_MIPS_PC21_S2,       /* type */

> -        2,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        21,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_PC21_S2",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x001fffff,            /* src_mask */

> -        0x001fffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  HOWTO (R_MIPS_PC26_S2,       /* type */

> -        2,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        26,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS_PC26_S2",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x03ffffff,            /* src_mask */

> -        0x03ffffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  HOWTO (R_MIPS_PC18_S3,       /* type */

> -        3,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        18,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_PC18_S3",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0003ffff,            /* src_mask */

> -        0x0003ffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  HOWTO (R_MIPS_PC19_S2,       /* type */

> -        2,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        19,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_PC19_S2",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0007ffff,            /* src_mask */

> -        0x0007ffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  HOWTO (R_MIPS_PCHI16,                /* type */

> -        16,                    /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_PCHI16",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  HOWTO (R_MIPS_PCLO16,                /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc,   /* special_function */

> -        "R_MIPS_PCLO16",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -};

> -

>  /* The relocation table used for SHT_RELA sections.  */

>

>  static reloc_howto_type elf_mips_howto_table_rela[] =

> @@ -1652,222 +885,6 @@ static reloc_howto_type elf_mips_howto_table_rela[] =

>

>  };

>

> -static reloc_howto_type elf_mips16_howto_table_rel[] =

> -{

> -  /* The reloc used for the mips16 jump instruction.  */

> -  HOWTO (R_MIPS16_26,          /* type */

> -        2,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        26,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -                               /* This needs complex overflow

> -                                  detection, because the upper four

> -                                  bits must match the PC.  */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_26",         /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x3ffffff,             /* src_mask */

> -        0x3ffffff,             /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* The reloc used for the mips16 gprel instruction.  */

> -  HOWTO (R_MIPS16_GPREL,       /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        mips16_gprel_reloc,    /* special_function */

> -        "R_MIPS16_GPREL",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* A MIPS16 reference to the global offset table.  */

> -  HOWTO (R_MIPS16_GOT16,       /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_got16_reloc, /* special_function */

> -        "R_MIPS16_GOT16",      /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* A MIPS16 call through the global offset table.  */

> -  HOWTO (R_MIPS16_CALL16,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_CALL16",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 high 16 bits of symbol value.  */

> -  HOWTO (R_MIPS16_HI16,                /* type */

> -        16,                    /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_hi16_reloc, /* special_function */

> -        "R_MIPS16_HI16",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 low 16 bits of symbol value.  */

> -  HOWTO (R_MIPS16_LO16,                /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_lo16_reloc, /* special_function */

> -        "R_MIPS16_LO16",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 TLS general dynamic variable reference.  */

> -  HOWTO (R_MIPS16_TLS_GD,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_TLS_GD",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 TLS local dynamic variable reference.  */

> -  HOWTO (R_MIPS16_TLS_LDM,     /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_TLS_LDM",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 TLS local dynamic offset.  */

> -  HOWTO (R_MIPS16_TLS_DTPREL_HI16,     /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_TLS_DTPREL_HI16",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 TLS local dynamic offset.  */

> -  HOWTO (R_MIPS16_TLS_DTPREL_LO16,     /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_TLS_DTPREL_LO16",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 TLS thread pointer offset.  */

> -  HOWTO (R_MIPS16_TLS_GOTTPREL,        /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_TLS_GOTTPREL",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 TLS thread pointer offset.  */

> -  HOWTO (R_MIPS16_TLS_TPREL_HI16,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_TLS_TPREL_HI16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 TLS thread pointer offset.  */

> -  HOWTO (R_MIPS16_TLS_TPREL_LO16,      /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_TLS_TPREL_LO16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* MIPS16 16-bit PC-relative branch offset.  */

> -  HOWTO (R_MIPS16_PC16_S1,     /* type */

> -        1,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MIPS16_PC16_S1",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -};

> -

>  static reloc_howto_type elf_mips16_howto_table_rela[] =

>  {

>    /* The reloc used for the mips16 jump instruction.  */

> @@ -2084,485 +1101,6 @@ static reloc_howto_type elf_mips16_howto_table_rela[] =

>          TRUE),                 /* pcrel_offset */

>  };

>

> -static reloc_howto_type elf_micromips_howto_table_rel[] =

> -{

> -  EMPTY_HOWTO (130),

> -  EMPTY_HOWTO (131),

> -  EMPTY_HOWTO (132),

> -

> -  /* 26 bit jump address.  */

> -  HOWTO (R_MICROMIPS_26_S1,    /* type */

> -        1,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        26,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -                               /* This needs complex overflow

> -                                  detection, because the upper four

> -                                  bits must match the PC.  */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_26_S1",   /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x3ffffff,             /* src_mask */

> -        0x3ffffff,             /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* High 16 bits of symbol value.  */

> -  HOWTO (R_MICROMIPS_HI16,     /* type */

> -        16,                    /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_hi16_reloc, /* special_function */

> -        "R_MICROMIPS_HI16",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Low 16 bits of symbol value.  */

> -  HOWTO (R_MICROMIPS_LO16,     /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_lo16_reloc, /* special_function */

> -        "R_MICROMIPS_LO16",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* GP relative reference.  */

> -  HOWTO (R_MICROMIPS_GPREL16,  /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf32_gprel16_reloc, /* special_function */

> -        "R_MICROMIPS_GPREL16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Reference to literal section.  */

> -  HOWTO (R_MICROMIPS_LITERAL,  /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf32_gprel16_reloc, /* special_function */

> -        "R_MICROMIPS_LITERAL", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Reference to global offset table.  */

> -  HOWTO (R_MICROMIPS_GOT16,    /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_got16_reloc, /* special_function */

> -        "R_MICROMIPS_GOT16",   /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* This is for microMIPS branches.  */

> -  HOWTO (R_MICROMIPS_PC7_S1,   /* type */

> -        1,                     /* rightshift */

> -        1,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        7,                     /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_PC7_S1",  /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000007f,            /* src_mask */

> -        0x0000007f,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  HOWTO (R_MICROMIPS_PC10_S1,  /* type */

> -        1,                     /* rightshift */

> -        1,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        10,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_PC10_S1", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x000003ff,            /* src_mask */

> -        0x000003ff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  HOWTO (R_MICROMIPS_PC16_S1,  /* type */

> -        1,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_PC16_S1", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -

> -  /* 16 bit call through global offset table.  */

> -  HOWTO (R_MICROMIPS_CALL16,   /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_CALL16",  /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  EMPTY_HOWTO (143),

> -  EMPTY_HOWTO (144),

> -

> -  /* Displacement in the global offset table.  */

> -  HOWTO (R_MICROMIPS_GOT_DISP, /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_GOT_DISP",/* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Displacement to page pointer in the global offset table.  */

> -  HOWTO (R_MICROMIPS_GOT_PAGE, /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_GOT_PAGE",/* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Offset from page pointer in the global offset table.  */

> -  HOWTO (R_MICROMIPS_GOT_OFST, /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_GOT_OFST",/* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* High 16 bits of displacement in global offset table.  */

> -  HOWTO (R_MICROMIPS_GOT_HI16, /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_GOT_HI16",/* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Low 16 bits of displacement in global offset table.  */

> -  HOWTO (R_MICROMIPS_GOT_LO16, /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_GOT_LO16",/* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* 64 bit subtraction.  Used in the N32 ABI.  */

> -  HOWTO (R_MICROMIPS_SUB,      /* type */

> -        0,                     /* rightshift */

> -        4,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        64,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_SUB",     /* name */

> -        TRUE,                  /* partial_inplace */

> -        MINUS_ONE,             /* src_mask */

> -        MINUS_ONE,             /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* We don't support these for REL relocations, because it means building

> -     the addend from a R_MICROMIPS_HIGHEST/R_MICROMIPS_HIGHER/

> -     R_MICROMIPS_HI16/R_MICROMIPS_LO16 sequence with varying ordering,

> -     using fallable heuristics.  */

> -  EMPTY_HOWTO (R_MICROMIPS_HIGHER),

> -  EMPTY_HOWTO (R_MICROMIPS_HIGHEST),

> -

> -  /* High 16 bits of displacement in global offset table.  */

> -  HOWTO (R_MICROMIPS_CALL_HI16,        /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_CALL_HI16",/* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Low 16 bits of displacement in global offset table.  */

> -  HOWTO (R_MICROMIPS_CALL_LO16,        /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_CALL_LO16",/* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Section displacement.  */

> -  HOWTO (R_MICROMIPS_SCN_DISP,  /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_SCN_DISP", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0xffffffff,            /* src_mask */

> -        0xffffffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Protected jump conversion.  This is an optimization hint.  No

> -     relocation is required for correctness.  */

> -  HOWTO (R_MICROMIPS_JALR,     /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        32,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_JALR",    /* name */

> -        FALSE,                 /* partial_inplace */

> -        0,                     /* src_mask */

> -        0x00000000,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* Low 16 bits of symbol value.  Note that the high 16 bits of symbol values

> -     must be zero.  This is used for relaxation.  */

> -  HOWTO (R_MICROMIPS_HI0_LO16, /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_dont, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_HI0_LO16",/* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  EMPTY_HOWTO (158),

> -  EMPTY_HOWTO (159),

> -  EMPTY_HOWTO (160),

> -  EMPTY_HOWTO (161),

> -

> -  /* TLS general dynamic variable reference.  */

> -  HOWTO (R_MICROMIPS_TLS_GD,           /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_TLS_GD",  /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS local dynamic variable reference.  */

> -  HOWTO (R_MICROMIPS_TLS_LDM,  /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_TLS_LDM", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS local dynamic offset.  */

> -  HOWTO (R_MICROMIPS_TLS_DTPREL_HI16,  /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_TLS_DTPREL_HI16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS local dynamic offset.  */

> -  HOWTO (R_MICROMIPS_TLS_DTPREL_LO16,  /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_TLS_DTPREL_LO16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS thread pointer offset.  */

> -  HOWTO (R_MICROMIPS_TLS_GOTTPREL,     /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_TLS_GOTTPREL",    /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  EMPTY_HOWTO (167),

> -  EMPTY_HOWTO (168),

> -

> -  /* TLS thread pointer offset.  */

> -  HOWTO (R_MICROMIPS_TLS_TPREL_HI16,   /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_TLS_TPREL_HI16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  /* TLS thread pointer offset.  */

> -  HOWTO (R_MICROMIPS_TLS_TPREL_LO16,   /* type */

> -        0,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        16,                    /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_TLS_TPREL_LO16", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000ffff,            /* src_mask */

> -        0x0000ffff,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  EMPTY_HOWTO (171),

> -

> -  /* GP- and PC-relative relocations.  */

> -  HOWTO (R_MICROMIPS_GPREL7_S2,        /* type */

> -        2,                     /* rightshift */

> -        1,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        7,                     /* bitsize */

> -        FALSE,                 /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf32_gprel16_reloc, /* special_function */

> -        "R_MICROMIPS_GPREL7_S2",       /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x0000007f,            /* src_mask */

> -        0x0000007f,            /* dst_mask */

> -        FALSE),                /* pcrel_offset */

> -

> -  HOWTO (R_MICROMIPS_PC23_S2,  /* type */

> -        2,                     /* rightshift */

> -        2,                     /* size (0 = byte, 1 = short, 2 = long) */

> -        23,                    /* bitsize */

> -        TRUE,                  /* pc_relative */

> -        0,                     /* bitpos */

> -        complain_overflow_signed, /* complain_on_overflow */

> -        _bfd_mips_elf_generic_reloc, /* special_function */

> -        "R_MICROMIPS_PC23_S2", /* name */

> -        TRUE,                  /* partial_inplace */

> -        0x007fffff,            /* src_mask */

> -        0x007fffff,            /* dst_mask */

> -        TRUE),                 /* pcrel_offset */

> -};

> -

>  static reloc_howto_type elf_micromips_howto_table_rela[] =

>  {

>    EMPTY_HOWTO (130),

> @@ -3748,10 +2286,7 @@ mips_elf_n32_rtype_to_howto (bfd *abfd, unsigned int r_type, bfd_boolean rela_p)

>      case R_MIPS_GNU_VTENTRY:

>        return &elf_mips_gnu_vtentry_howto;

>      case R_MIPS_GNU_REL16_S2:

> -      if (rela_p)

> -       return &elf_mips_gnu_rela16_s2;

> -      else

> -       return &elf_mips_gnu_rel16_s2;

> +      return &elf_mips_gnu_rela16_s2;

>      case R_MIPS_PC32:

>        return &elf_mips_gnu_pcrel32;

>      case R_MIPS_EH:

> @@ -3763,24 +2298,15 @@ mips_elf_n32_rtype_to_howto (bfd *abfd, unsigned int r_type, bfd_boolean rela_p)

>      default:

>        if (r_type >= R_MICROMIPS_min && r_type < R_MICROMIPS_max)

>         {

> -         if (rela_p)

> -           howto = &elf_micromips_howto_table_rela[r_type - R_MICROMIPS_min];

> -         else

> -           howto = &elf_micromips_howto_table_rel[r_type - R_MICROMIPS_min];

> +         howto = &elf_micromips_howto_table_rela[r_type - R_MICROMIPS_min];

>         }

>        if (r_type >= R_MIPS16_min && r_type < R_MIPS16_max)

>         {

> -         if (rela_p)

> -           howto = &elf_mips16_howto_table_rela[r_type - R_MIPS16_min];

> -         else

> -           howto = &elf_mips16_howto_table_rel[r_type - R_MIPS16_min];

> +         howto = &elf_mips16_howto_table_rela[r_type - R_MIPS16_min];

>         }

>        if (r_type < R_MIPS_max)

>         {

> -         if (rela_p)

> -           howto = &elf_mips_howto_table_rela[r_type];

> -         else

> -           howto = &elf_mips_howto_table_rel[r_type];

> +         howto = &elf_mips_howto_table_rela[r_type];

>         }

>        if (howto != NULL && howto->name != NULL)

>         return howto;

> @@ -3792,30 +2318,6 @@ mips_elf_n32_rtype_to_howto (bfd *abfd, unsigned int r_type, bfd_boolean rela_p)

>      }

>  }

>

> -/* Given a MIPS Elf_Internal_Rel, fill in an arelent structure.  */

> -

> -static bfd_boolean

> -mips_info_to_howto_rel (bfd *abfd, arelent *cache_ptr, Elf_Internal_Rela *dst)

> -{

> -  unsigned int r_type;

> -

> -  r_type = ELF32_R_TYPE (dst->r_info);

> -  cache_ptr->howto = mips_elf_n32_rtype_to_howto (abfd, r_type, FALSE);

> -

> -  if (cache_ptr->howto == NULL)

> -    return FALSE;

> -

> -  /* The addend for a GPREL16 or LITERAL relocation comes from the GP

> -     value for the object file.  We get the addend now, rather than

> -     when we do the relocation, because the symbol manipulations done

> -     by the linker may cause us to lose track of the input BFD.  */

> -  if (((*cache_ptr->sym_ptr_ptr)->flags & BSF_SECTION_SYM) != 0

> -      && (gprel16_reloc_p (r_type) || r_type == (unsigned int) R_MIPS_LITERAL))

> -    cache_ptr->addend = elf_gp (abfd);

> -

> -  return TRUE;

> -}

> -

>  /* Given a MIPS Elf_Internal_Rela, fill in an arelent structure.  */

>

>  static bfd_boolean

> @@ -4107,7 +2609,7 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = {

>  #define elf_backend_gc_mark_extra_sections \

>                                         _bfd_mips_elf_gc_mark_extra_sections

>  #define elf_info_to_howto              mips_info_to_howto_rela

> -#define elf_info_to_howto_rel          mips_info_to_howto_rel

> +#define elf_info_to_howto_rel          NULL

>  #define elf_backend_sym_is_global      mips_elf_sym_is_global

>  #define elf_backend_object_p           mips_elf_n32_object_p

>  #define elf_backend_symbol_processing  _bfd_mips_elf_symbol_processing

> @@ -4156,9 +2658,8 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = {

>  #define elf_backend_got_header_size    (4 * MIPS_RESERVED_GOTNO)

>  #define elf_backend_want_dynrelro      1

>

> -/* MIPS n32 ELF can use a mixture of REL and RELA, but some Relocations

> -   work better/work only in RELA, so we default to this.  */

> -#define elf_backend_may_use_rel_p      1

> +/* We restrict MIPS ELFn32 to rela only  */

> +#define elf_backend_may_use_rel_p      0

>  #define elf_backend_may_use_rela_p     1

>  #define elf_backend_default_use_rela_p 1

>  #define elf_backend_rela_plts_and_copies_p 0

> --

> 2.30.2

>



-- 
YunQiang Su
Florian Weimer via Binutils April 3, 2021, 7:39 a.m. | #3
Hi, YunQiang:
This is a huge change. I need some time to dig into it.
Is there a bugzilla ID in the relevant code?

Hi, Maciej:
I would like to hear your opinion.



>

> --

> YunQiang Su
Maciej W. Rozycki April 3, 2021, 5:21 p.m. | #4
On Sat, 3 Apr 2021, Paul Hua wrote:

> Hi, YunQiang:

> This is a huge change. I need some time to dig into it.

> Is there a bugzilla ID in the relevant code?

> 

> Hi, Maciej:

> I would like to hear your opinion.


 Offhand I have mixed feelings and to form an opinion it would be too much 
mental effort for me to afford in my free time I'm afraid.

  Maciej
Florian Weimer via Binutils April 7, 2021, 4:55 a.m. | #5
Paul Hua <paul.hua.gm@gmail.com> 于2021年4月3日周六 下午3:40写道:
>

> Hi, YunQiang:

> This is a huge change. I need some time to dig into it.

> Is there a bugzilla ID in the relevant code?

>


I just create one.
https://sourceware.org/bugzilla/show_bug.cgi?id=27704

> Hi, Maciej:

> I would like to hear your opinion.

>

>

>

> >

> > --

> > YunQiang Su




-- 
YunQiang Su
Florian Weimer via Binutils April 26, 2021, 6:27 a.m. | #6
YunQiang Su <wzssyqa@gmail.com> 于2021年4月7日周三 下午12:55写道:
>

> Paul Hua <paul.hua.gm@gmail.com> 于2021年4月3日周六 下午3:40写道:

> >

> > Hi, YunQiang:

> > This is a huge change. I need some time to dig into it.

> > Is there a bugzilla ID in the relevant code?

> >

>

> I just create one.

> https://sourceware.org/bugzilla/show_bug.cgi?id=27704


ping again.

>

> > Hi, Maciej:

> > I would like to hear your opinion.

> >

> >

> >

> > >

> > > --

> > > YunQiang Su

>

>

>

> --

> YunQiang Su




-- 
YunQiang Su

Patch

diff --git a/bfd/elf64-mips.c b/bfd/elf64-mips.c
index e1a00448fb..180363ea25 100644
--- a/bfd/elf64-mips.c
+++ b/bfd/elf64-mips.c
@@ -31,8 +31,6 @@ 
 /* TODO: Many things are unsupported, even if there is some code for it
  .       (which was mostly stolen from elf32-mips.c and slightly adapted).
  .
- .   - Relocation handling for REL relocs is wrong in many cases and
- .     generally untested.
  .   - Relocation handling for RELA relocs related to GOT support are
  .     also likely to be wrong.
  .   - Support for MIPS16 is untested.
@@ -62,18 +60,10 @@ 
 #define ECOFF_SIGNED_64
 #include "ecoffswap.h"
 
-static void mips_elf64_swap_reloc_in
-  (bfd *, const Elf64_Mips_External_Rel *, Elf64_Mips_Internal_Rela *);
 static void mips_elf64_swap_reloca_in
   (bfd *, const Elf64_Mips_External_Rela *, Elf64_Mips_Internal_Rela *);
-static void mips_elf64_swap_reloc_out
-  (bfd *, const Elf64_Mips_Internal_Rela *, Elf64_Mips_External_Rel *);
 static void mips_elf64_swap_reloca_out
   (bfd *, const Elf64_Mips_Internal_Rela *, Elf64_Mips_External_Rela *);
-static void mips_elf64_be_swap_reloc_in
-  (bfd *, const bfd_byte *, Elf_Internal_Rela *);
-static void mips_elf64_be_swap_reloc_out
-  (bfd *, const Elf_Internal_Rela *, bfd_byte *);
 static void mips_elf64_be_swap_reloca_in
   (bfd *, const bfd_byte *, Elf_Internal_Rela *);
 static void mips_elf64_be_swap_reloca_out
@@ -91,8 +81,6 @@  static bfd_boolean mips_elf64_slurp_reloc_table
   (bfd *, asection *, asymbol **, bfd_boolean);
 static void mips_elf64_write_relocs
   (bfd *, asection *, void *);
-static void mips_elf64_write_rel
-  (bfd *, asection *, Elf_Internal_Shdr *, int *, void *);
 static void mips_elf64_write_rela
   (bfd *, asection *, Elf_Internal_Shdr *, int *, void *);
 static bfd_reloc_status_type mips_elf64_gprel16_reloc
@@ -127,772 +115,8 @@  extern const bfd_target mips_elf64_le_vec;
 
 /* The number of local .got entries we reserve.  */
 #define MIPS_RESERVED_GOTNO (2)
-
-/* The relocation table used for SHT_REL sections.  */
-
-static reloc_howto_type mips_elf64_howto_table_rel[] =
-{
-  /* No relocation.  */
-  HOWTO (R_MIPS_NONE,		/* type */
-	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
-	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc,	/* special_function */
-	 "R_MIPS_NONE",		/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* 16 bit relocation.  */
-  HOWTO (R_MIPS_16,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc,	/* special_function */
-	 "R_MIPS_16",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* 32 bit relocation.  */
-  HOWTO (R_MIPS_32,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc,	/* special_function */
-	 "R_MIPS_32",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* 32 bit symbol relative relocation.  */
-  HOWTO (R_MIPS_REL32,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc,	/* special_function */
-	 "R_MIPS_REL32",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* 26 bit jump address.  */
-  HOWTO (R_MIPS_26,		/* type */
-	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-				/* This needs complex overflow
-				   detection, because the upper 36
-				   bits must match the PC + 4.  */
-	 _bfd_mips_elf_generic_reloc,	/* special_function */
-	 "R_MIPS_26",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0x03ffffff,		/* src_mask */
-	 0x03ffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* R_MIPS_HI16 and R_MIPS_LO16 are unsupported for NewABI REL.
-     However, the native IRIX6 tools use them, so we try our best. */
-
-  /* High 16 bits of symbol value.  */
-  HOWTO (R_MIPS_HI16,		/* type */
-	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_hi16_reloc, /* special_function */
-	 "R_MIPS_HI16",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Low 16 bits of symbol value.  */
-  HOWTO (R_MIPS_LO16,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_lo16_reloc, /* special_function */
-	 "R_MIPS_LO16",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* GP relative reference.  */
-  HOWTO (R_MIPS_GPREL16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 mips_elf64_gprel16_reloc, /* special_function */
-	 "R_MIPS_GPREL16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Reference to literal section.  */
-  HOWTO (R_MIPS_LITERAL,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 mips_elf64_literal_reloc, /* special_function */
-	 "R_MIPS_LITERAL",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Reference to global offset table.  */
-  HOWTO (R_MIPS_GOT16,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_got16_reloc, /* special_function */
-	 "R_MIPS_GOT16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* 16 bit PC relative reference.  Note that the ABI document has a typo
-     and claims R_MIPS_PC16 to be not rightshifted, rendering it useless.
-     We do the right thing here.  */
-  HOWTO (R_MIPS_PC16,		/* type */
-	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc,	/* special_function */
-	 "R_MIPS_PC16",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  /* 16 bit call through global offset table.  */
-  HOWTO (R_MIPS_CALL16,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc,	/* special_function */
-	 "R_MIPS_CALL16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* 32 bit GP relative reference.  */
-  HOWTO (R_MIPS_GPREL32,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 mips_elf64_gprel32_reloc, /* special_function */
-	 "R_MIPS_GPREL32",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  EMPTY_HOWTO (13),
-  EMPTY_HOWTO (14),
-  EMPTY_HOWTO (15),
-
-  /* A 5 bit shift field.  */
-  HOWTO (R_MIPS_SHIFT5,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 5,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 6,			/* bitpos */
-	 complain_overflow_bitfield, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc,	/* special_function */
-	 "R_MIPS_SHIFT5",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x000007c0,		/* src_mask */
-	 0x000007c0,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* A 6 bit shift field.  */
-  HOWTO (R_MIPS_SHIFT6,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 6,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 6,			/* bitpos */
-	 complain_overflow_bitfield, /* complain_on_overflow */
-	 mips_elf64_shift6_reloc, /* special_function */
-	 "R_MIPS_SHIFT6",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x000007c4,		/* src_mask */
-	 0x000007c4,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* 64 bit relocation.  */
-  HOWTO (R_MIPS_64,		/* type */
-	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
-	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc,	/* special_function */
-	 "R_MIPS_64",		/* name */
-	 TRUE,			/* partial_inplace */
-	 MINUS_ONE,		/* src_mask */
-	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Displacement in the global offset table.  */
-  HOWTO (R_MIPS_GOT_DISP,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc,	/* special_function */
-	 "R_MIPS_GOT_DISP",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Displacement to page pointer in the global offset table.  */
-  HOWTO (R_MIPS_GOT_PAGE,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc,	/* special_function */
-	 "R_MIPS_GOT_PAGE",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Offset from page pointer in the global offset table.  */
-  HOWTO (R_MIPS_GOT_OFST,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc,	/* special_function */
-	 "R_MIPS_GOT_OFST",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* High 16 bits of displacement in global offset table.  */
-  HOWTO (R_MIPS_GOT_HI16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc,	/* special_function */
-	 "R_MIPS_GOT_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Low 16 bits of displacement in global offset table.  */
-  HOWTO (R_MIPS_GOT_LO16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc,	/* special_function */
-	 "R_MIPS_GOT_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* 64 bit subtraction.  */
-  HOWTO (R_MIPS_SUB,		/* type */
-	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
-	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc,	/* special_function */
-	 "R_MIPS_SUB",		/* name */
-	 TRUE,			/* partial_inplace */
-	 MINUS_ONE,		/* src_mask */
-	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Insert the addend as an instruction.  */
-  /* FIXME: Not handled correctly.  */
-  HOWTO (R_MIPS_INSERT_A,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc,	/* special_function */
-	 "R_MIPS_INSERT_A",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Insert the addend as an instruction, and change all relocations
-     to refer to the old instruction at the address.  */
-  /* FIXME: Not handled correctly.  */
-  HOWTO (R_MIPS_INSERT_B,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc,	/* special_function */
-	 "R_MIPS_INSERT_B",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Delete a 32 bit instruction.  */
-  /* FIXME: Not handled correctly.  */
-  HOWTO (R_MIPS_DELETE,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc,	/* special_function */
-	 "R_MIPS_DELETE",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* The MIPS ELF64 ABI Draft wants us to support these for REL relocations.
-     We don't, because
-       a) It means building the addend from a R_MIPS_HIGHEST/R_MIPS_HIGHER/
-	  R_MIPS_HI16/R_MIPS_LO16 sequence with varying ordering, using
-	  fallable heuristics.
-       b) No other NewABI toolchain actually emits such relocations.  */
-  EMPTY_HOWTO (R_MIPS_HIGHER),
-  EMPTY_HOWTO (R_MIPS_HIGHEST),
-
-  /* High 16 bits of displacement in global offset table.  */
-  HOWTO (R_MIPS_CALL_HI16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc,	/* special_function */
-	 "R_MIPS_CALL_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Low 16 bits of displacement in global offset table.  */
-  HOWTO (R_MIPS_CALL_LO16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc,	/* special_function */
-	 "R_MIPS_CALL_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Section displacement, used by an associated event location section.  */
-  HOWTO (R_MIPS_SCN_DISP,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc,	/* special_function */
-	 "R_MIPS_SCN_DISP",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  HOWTO (R_MIPS_REL16,		/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc,	/* special_function */
-	 "R_MIPS_REL16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* These two are obsolete.  */
-  EMPTY_HOWTO (R_MIPS_ADD_IMMEDIATE),
-  EMPTY_HOWTO (R_MIPS_PJUMP),
-
-  /* Similiar to R_MIPS_REL32, but used for relocations in a GOT section.
-     It must be used for multigot GOT's (and only there).  */
-  HOWTO (R_MIPS_RELGOT,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc,	/* special_function */
-	 "R_MIPS_RELGOT",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Protected jump conversion.  This is an optimization hint.  No
-     relocation is required for correctness.  */
-  HOWTO (R_MIPS_JALR,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc,	/* special_function */
-	 "R_MIPS_JALR",		/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0x00000000,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* TLS relocations.  */
-  EMPTY_HOWTO (R_MIPS_TLS_DTPMOD32),
-  EMPTY_HOWTO (R_MIPS_TLS_DTPREL32),
-
-  HOWTO (R_MIPS_TLS_DTPMOD64,	/* type */
-	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
-	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_TLS_DTPMOD64",	/* name */
-	 TRUE,			/* partial_inplace */
-	 MINUS_ONE,		/* src_mask */
-	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  HOWTO (R_MIPS_TLS_DTPREL64,	/* type */
-	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
-	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_TLS_DTPREL64",	/* name */
-	 TRUE,			/* partial_inplace */
-	 MINUS_ONE,		/* src_mask */
-	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* TLS general dynamic variable reference.  */
-  HOWTO (R_MIPS_TLS_GD,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_TLS_GD",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* TLS local dynamic variable reference.  */
-  HOWTO (R_MIPS_TLS_LDM,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_TLS_LDM",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* TLS local dynamic offset.  */
-  HOWTO (R_MIPS_TLS_DTPREL_HI16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_TLS_DTPREL_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* TLS local dynamic offset.  */
-  HOWTO (R_MIPS_TLS_DTPREL_LO16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_TLS_DTPREL_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* TLS thread pointer offset.  */
-  HOWTO (R_MIPS_TLS_GOTTPREL,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_TLS_GOTTPREL",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* TLS IE dynamic relocations.  */
-  EMPTY_HOWTO (R_MIPS_TLS_TPREL32),
-
-  HOWTO (R_MIPS_TLS_TPREL64,	/* type */
-	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
-	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_TLS_TPREL64",	/* name */
-	 TRUE,			/* partial_inplace */
-	 MINUS_ONE,		/* src_mask */
-	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* TLS thread pointer offset.  */
-  HOWTO (R_MIPS_TLS_TPREL_HI16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_TLS_TPREL_HI16", /* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* TLS thread pointer offset.  */
-  HOWTO (R_MIPS_TLS_TPREL_LO16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_TLS_TPREL_LO16", /* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* 32 bit relocation with no addend.  */
-  HOWTO (R_MIPS_GLOB_DAT,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_GLOB_DAT",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x0,			/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  EMPTY_HOWTO (52),
-  EMPTY_HOWTO (53),
-  EMPTY_HOWTO (54),
-  EMPTY_HOWTO (55),
-  EMPTY_HOWTO (56),
-  EMPTY_HOWTO (57),
-  EMPTY_HOWTO (58),
-  EMPTY_HOWTO (59),
-
-  HOWTO (R_MIPS_PC21_S2,	/* type */
-	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 21,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_PC21_S2",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x001fffff,		/* src_mask */
-	 0x001fffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  HOWTO (R_MIPS_PC26_S2,	/* type */
-	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 26,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_PC26_S2",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x03ffffff,		/* src_mask */
-	 0x03ffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  HOWTO (R_MIPS_PC18_S3,	/* type */
-	 3,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 18,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc,   /* special_function */
-	 "R_MIPS_PC18_S3",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0003ffff,		/* src_mask */
-	 0x0003ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  HOWTO (R_MIPS_PC19_S2,	/* type */
-	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 19,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc,   /* special_function */
-	 "R_MIPS_PC19_S2",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0007ffff,		/* src_mask */
-	 0x0007ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  HOWTO (R_MIPS_PCHI16,		/* type */
-	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc,   /* special_function */
-	 "R_MIPS_PCHI16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  HOWTO (R_MIPS_PCLO16,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc,   /* special_function */
-	 "R_MIPS_PCLO16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-};
 
 /* The relocation table used for SHT_RELA sections.  */
-
 static reloc_howto_type mips_elf64_howto_table_rela[] =
 {
   /* No relocation.  */
@@ -1672,222 +896,6 @@  static reloc_howto_type mips_elf64_howto_table_rela[] =
 
 };
 
-static reloc_howto_type mips16_elf64_howto_table_rel[] =
-{
-  /* The reloc used for the mips16 jump instruction.  */
-  HOWTO (R_MIPS16_26,		/* type */
-	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-				/* This needs complex overflow
-				   detection, because the upper four
-				   bits must match the PC.  */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS16_26",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0x3ffffff,		/* src_mask */
-	 0x3ffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* The reloc used for the mips16 gprel instruction.  */
-  HOWTO (R_MIPS16_GPREL,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 mips16_gprel_reloc,	/* special_function */
-	 "R_MIPS16_GPREL",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* A MIPS16 reference to the global offset table.  */
-  HOWTO (R_MIPS16_GOT16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_got16_reloc, /* special_function */
-	 "R_MIPS16_GOT16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* A MIPS16 call through the global offset table.  */
-  HOWTO (R_MIPS16_CALL16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS16_CALL16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* MIPS16 high 16 bits of symbol value.  */
-  HOWTO (R_MIPS16_HI16,		/* type */
-	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_hi16_reloc, /* special_function */
-	 "R_MIPS16_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* MIPS16 low 16 bits of symbol value.  */
-  HOWTO (R_MIPS16_LO16,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_lo16_reloc, /* special_function */
-	 "R_MIPS16_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* MIPS16 TLS general dynamic variable reference.  */
-  HOWTO (R_MIPS16_TLS_GD,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS16_TLS_GD",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* MIPS16 TLS local dynamic variable reference.  */
-  HOWTO (R_MIPS16_TLS_LDM,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS16_TLS_LDM",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* MIPS16 TLS local dynamic offset.  */
-  HOWTO (R_MIPS16_TLS_DTPREL_HI16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS16_TLS_DTPREL_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* MIPS16 TLS local dynamic offset.  */
-  HOWTO (R_MIPS16_TLS_DTPREL_LO16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS16_TLS_DTPREL_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* MIPS16 TLS thread pointer offset.  */
-  HOWTO (R_MIPS16_TLS_GOTTPREL,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS16_TLS_GOTTPREL",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* MIPS16 TLS thread pointer offset.  */
-  HOWTO (R_MIPS16_TLS_TPREL_HI16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS16_TLS_TPREL_HI16", /* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* MIPS16 TLS thread pointer offset.  */
-  HOWTO (R_MIPS16_TLS_TPREL_LO16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS16_TLS_TPREL_LO16", /* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* MIPS16 16-bit PC-relative branch offset.  */
-  HOWTO (R_MIPS16_PC16_S1,	/* type */
-	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS16_PC16_S1",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-};
-
 static reloc_howto_type mips16_elf64_howto_table_rela[] =
 {
   /* The reloc used for the mips16 jump instruction.  */
@@ -2104,485 +1112,6 @@  static reloc_howto_type mips16_elf64_howto_table_rela[] =
 	 TRUE),			/* pcrel_offset */
 };
 
-static reloc_howto_type micromips_elf64_howto_table_rel[] =
-{
-  EMPTY_HOWTO (130),
-  EMPTY_HOWTO (131),
-  EMPTY_HOWTO (132),
-
-  /* 26 bit jump address.  */
-  HOWTO (R_MICROMIPS_26_S1,	/* type */
-	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-				/* This needs complex overflow
-				   detection, because the upper four
-				   bits must match the PC.  */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_26_S1",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x3ffffff,		/* src_mask */
-	 0x3ffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* High 16 bits of symbol value.  */
-  HOWTO (R_MICROMIPS_HI16,	/* type */
-	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_hi16_reloc, /* special_function */
-	 "R_MICROMIPS_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Low 16 bits of symbol value.  */
-  HOWTO (R_MICROMIPS_LO16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_lo16_reloc, /* special_function */
-	 "R_MICROMIPS_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* GP relative reference.  */
-  HOWTO (R_MICROMIPS_GPREL16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf32_gprel16_reloc, /* special_function */
-	 "R_MICROMIPS_GPREL16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Reference to literal section.  */
-  HOWTO (R_MICROMIPS_LITERAL,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf32_gprel16_reloc, /* special_function */
-	 "R_MICROMIPS_LITERAL",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Reference to global offset table.  */
-  HOWTO (R_MICROMIPS_GOT16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_got16_reloc, /* special_function */
-	 "R_MICROMIPS_GOT16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* This is for microMIPS branches.  */
-  HOWTO (R_MICROMIPS_PC7_S1,	/* type */
-	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 7,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_PC7_S1",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000007f,		/* src_mask */
-	 0x0000007f,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  HOWTO (R_MICROMIPS_PC10_S1,	/* type */
-	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 10,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_PC10_S1",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x000003ff,		/* src_mask */
-	 0x000003ff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  HOWTO (R_MICROMIPS_PC16_S1,	/* type */
-	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_PC16_S1",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  /* 16 bit call through global offset table.  */
-  HOWTO (R_MICROMIPS_CALL16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_CALL16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  EMPTY_HOWTO (143),
-  EMPTY_HOWTO (144),
-
-  /* Displacement in the global offset table.  */
-  HOWTO (R_MICROMIPS_GOT_DISP,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_GOT_DISP",/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Displacement to page pointer in the global offset table.  */
-  HOWTO (R_MICROMIPS_GOT_PAGE,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_GOT_PAGE",/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Offset from page pointer in the global offset table.  */
-  HOWTO (R_MICROMIPS_GOT_OFST,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_GOT_OFST",/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* High 16 bits of displacement in global offset table.  */
-  HOWTO (R_MICROMIPS_GOT_HI16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_GOT_HI16",/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Low 16 bits of displacement in global offset table.  */
-  HOWTO (R_MICROMIPS_GOT_LO16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_GOT_LO16",/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* 64 bit subtraction.  Used in the N32 ABI.  */
-  HOWTO (R_MICROMIPS_SUB,	/* type */
-	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
-	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_SUB",	/* name */
-	 TRUE,			/* partial_inplace */
-	 MINUS_ONE,		/* src_mask */
-	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* We don't support these for REL relocations, because it means building
-     the addend from a R_MICROMIPS_HIGHEST/R_MICROMIPS_HIGHER/
-     R_MICROMIPS_HI16/R_MICROMIPS_LO16 sequence with varying ordering,
-     using fallable heuristics.  */
-  EMPTY_HOWTO (R_MICROMIPS_HIGHER),
-  EMPTY_HOWTO (R_MICROMIPS_HIGHEST),
-
-  /* High 16 bits of displacement in global offset table.  */
-  HOWTO (R_MICROMIPS_CALL_HI16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_CALL_HI16",/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Low 16 bits of displacement in global offset table.  */
-  HOWTO (R_MICROMIPS_CALL_LO16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_CALL_LO16",/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Section displacement.  */
-  HOWTO (R_MICROMIPS_SCN_DISP,  /* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_SCN_DISP", /* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Protected jump conversion.  This is an optimization hint.  No
-     relocation is required for correctness.  */
-  HOWTO (R_MICROMIPS_JALR,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_JALR",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0x00000000,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Low 16 bits of symbol value.  Note that the high 16 bits of symbol values
-     must be zero.  This is used for relaxation.  */
-  HOWTO (R_MICROMIPS_HI0_LO16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_HI0_LO16",/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  EMPTY_HOWTO (158),
-  EMPTY_HOWTO (159),
-  EMPTY_HOWTO (160),
-  EMPTY_HOWTO (161),
-
-  /* TLS general dynamic variable reference.  */
-  HOWTO (R_MICROMIPS_TLS_GD,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_TLS_GD",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* TLS local dynamic variable reference.  */
-  HOWTO (R_MICROMIPS_TLS_LDM,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_TLS_LDM",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* TLS local dynamic offset.  */
-  HOWTO (R_MICROMIPS_TLS_DTPREL_HI16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_TLS_DTPREL_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* TLS local dynamic offset.  */
-  HOWTO (R_MICROMIPS_TLS_DTPREL_LO16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_TLS_DTPREL_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* TLS thread pointer offset.  */
-  HOWTO (R_MICROMIPS_TLS_GOTTPREL,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_TLS_GOTTPREL",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  EMPTY_HOWTO (167),
-  EMPTY_HOWTO (168),
-
-  /* TLS thread pointer offset.  */
-  HOWTO (R_MICROMIPS_TLS_TPREL_HI16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_TLS_TPREL_HI16", /* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* TLS thread pointer offset.  */
-  HOWTO (R_MICROMIPS_TLS_TPREL_LO16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_TLS_TPREL_LO16", /* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  EMPTY_HOWTO (171),
-
-  /* GP- and PC-relative relocations.  */
-  HOWTO (R_MICROMIPS_GPREL7_S2,	/* type */
-	 2,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 7,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf32_gprel16_reloc, /* special_function */
-	 "R_MICROMIPS_GPREL7_S2",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000007f,		/* src_mask */
-	 0x0000007f,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  HOWTO (R_MICROMIPS_PC23_S2,	/* type */
-	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 23,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_PC23_S2",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x007fffff,		/* src_mask */
-	 0x007fffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-};
-
 static reloc_howto_type micromips_elf64_howto_table_rela[] =
 {
   EMPTY_HOWTO (130),
@@ -3214,21 +1743,6 @@  static reloc_howto_type elf_mips_eh_howto =
 	 0xffffffff,		/* dst_mask */
 	 FALSE);		/* pcrel_offset */
 
-
-/* Swap in a MIPS 64-bit Rel reloc.  */
-
-static void
-mips_elf64_swap_reloc_in (bfd *abfd, const Elf64_Mips_External_Rel *src,
-			  Elf64_Mips_Internal_Rela *dst)
-{
-  dst->r_offset = H_GET_64 (abfd, src->r_offset);
-  dst->r_sym = H_GET_32 (abfd, src->r_sym);
-  dst->r_ssym = H_GET_8 (abfd, src->r_ssym);
-  dst->r_type3 = H_GET_8 (abfd, src->r_type3);
-  dst->r_type2 = H_GET_8 (abfd, src->r_type2);
-  dst->r_type = H_GET_8 (abfd, src->r_type);
-  dst->r_addend = 0;
-}
 
 /* Swap in a MIPS 64-bit Rela reloc.  */
 
@@ -3245,20 +1759,6 @@  mips_elf64_swap_reloca_in (bfd *abfd, const Elf64_Mips_External_Rela *src,
   dst->r_addend = H_GET_S64 (abfd, src->r_addend);
 }
 
-/* Swap out a MIPS 64-bit Rel reloc.  */
-
-static void
-mips_elf64_swap_reloc_out (bfd *abfd, const Elf64_Mips_Internal_Rela *src,
-			   Elf64_Mips_External_Rel *dst)
-{
-  H_PUT_64 (abfd, src->r_offset, dst->r_offset);
-  H_PUT_32 (abfd, src->r_sym, dst->r_sym);
-  H_PUT_8 (abfd, src->r_ssym, dst->r_ssym);
-  H_PUT_8 (abfd, src->r_type3, dst->r_type3);
-  H_PUT_8 (abfd, src->r_type2, dst->r_type2);
-  H_PUT_8 (abfd, src->r_type, dst->r_type);
-}
-
 /* Swap out a MIPS 64-bit Rela reloc.  */
 
 static void
@@ -3274,28 +1774,6 @@  mips_elf64_swap_reloca_out (bfd *abfd, const Elf64_Mips_Internal_Rela *src,
   H_PUT_S64 (abfd, src->r_addend, dst->r_addend);
 }
 
-/* Swap in a MIPS 64-bit Rel reloc.  */
-
-static void
-mips_elf64_be_swap_reloc_in (bfd *abfd, const bfd_byte *src,
-			     Elf_Internal_Rela *dst)
-{
-  Elf64_Mips_Internal_Rela mirel;
-
-  mips_elf64_swap_reloc_in (abfd,
-			    (const Elf64_Mips_External_Rel *) src,
-			    &mirel);
-
-  dst[0].r_offset = mirel.r_offset;
-  dst[0].r_info = ELF64_R_INFO (mirel.r_sym, mirel.r_type);
-  dst[0].r_addend = 0;
-  dst[1].r_offset = mirel.r_offset;
-  dst[1].r_info = ELF64_R_INFO (mirel.r_ssym, mirel.r_type2);
-  dst[1].r_addend = 0;
-  dst[2].r_offset = mirel.r_offset;
-  dst[2].r_info = ELF64_R_INFO (STN_UNDEF, mirel.r_type3);
-  dst[2].r_addend = 0;
-}
 
 /* Swap in a MIPS 64-bit Rela reloc.  */
 
@@ -3320,27 +1798,6 @@  mips_elf64_be_swap_reloca_in (bfd *abfd, const bfd_byte *src,
   dst[2].r_addend = 0;
 }
 
-/* Swap out a MIPS 64-bit Rel reloc.  */
-
-static void
-mips_elf64_be_swap_reloc_out (bfd *abfd, const Elf_Internal_Rela *src,
-			      bfd_byte *dst)
-{
-  Elf64_Mips_Internal_Rela mirel;
-
-  mirel.r_offset = src[0].r_offset;
-  BFD_ASSERT(src[0].r_offset == src[1].r_offset);
-  BFD_ASSERT(src[0].r_offset == src[2].r_offset);
-
-  mirel.r_type = ELF64_MIPS_R_TYPE (src[0].r_info);
-  mirel.r_sym = ELF64_R_SYM (src[0].r_info);
-  mirel.r_type2 = ELF64_MIPS_R_TYPE (src[1].r_info);
-  mirel.r_ssym = ELF64_MIPS_R_SSYM (src[1].r_info);
-  mirel.r_type3 = ELF64_MIPS_R_TYPE (src[2].r_info);
-
-  mips_elf64_swap_reloc_out (abfd, &mirel,
-			     (Elf64_Mips_External_Rel *) dst);
-}
 
 /* Swap out a MIPS 64-bit Rela reloc.  */
 
@@ -3806,8 +2263,6 @@  bfd_elf64_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
 				 bfd_reloc_code_real_type code)
 {
   unsigned int i;
-  /* FIXME: We default to RELA here instead of choosing the right
-     relocation variant.  */
   reloc_howto_type *howto_table = mips_elf64_howto_table_rela;
   reloc_howto_type *howto16_table = mips16_elf64_howto_table_rela;
   reloc_howto_type *howto_micromips_table = micromips_elf64_howto_table_rela;
@@ -3931,26 +2386,15 @@  mips_elf64_rtype_to_howto (bfd *abfd, unsigned int r_type, bfd_boolean rela_p)
     default:
       if (r_type >= R_MICROMIPS_min && r_type < R_MICROMIPS_max)
 	{
-	  if (rela_p)
-	    howto
-	      = &micromips_elf64_howto_table_rela[r_type - R_MICROMIPS_min];
-	  else
-	    howto
-	      = &micromips_elf64_howto_table_rel[r_type - R_MICROMIPS_min];
+	  howto = &micromips_elf64_howto_table_rela[r_type - R_MICROMIPS_min];
 	}
       if (r_type >= R_MIPS16_min && r_type < R_MIPS16_max)
 	{
-	  if (rela_p)
-	    howto = &mips16_elf64_howto_table_rela[r_type - R_MIPS16_min];
-	  else
-	    howto = &mips16_elf64_howto_table_rel[r_type - R_MIPS16_min];
+	  howto = &mips16_elf64_howto_table_rela[r_type - R_MIPS16_min];
 	}
       if (r_type < R_MIPS_max)
 	{
-	  if (rela_p)
-	    howto = &mips_elf64_howto_table_rela[r_type];
-	  else
-	    howto = &mips_elf64_howto_table_rel[r_type];
+	  howto = &mips_elf64_howto_table_rela[r_type];
 	}
       if (howto != NULL && howto->name != NULL)
 	return howto;
@@ -4008,7 +2452,6 @@  mips_elf64_slurp_one_reloc_table (bfd *abfd, asection *asect,
   arelent *relent;
   bfd_vma i;
   int entsize;
-  bfd_boolean rela_p;
 
   if (bfd_seek (abfd, rel_hdr->sh_offset, SEEK_SET) != 0)
     return FALSE;
@@ -4019,13 +2462,7 @@  mips_elf64_slurp_one_reloc_table (bfd *abfd, asection *asect,
   native_relocs = allocated;
 
   entsize = rel_hdr->sh_entsize;
-  BFD_ASSERT (entsize == sizeof (Elf64_Mips_External_Rel)
-	      || entsize == sizeof (Elf64_Mips_External_Rela));
-
-  if (entsize == sizeof (Elf64_Mips_External_Rel))
-    rela_p = FALSE;
-  else
-    rela_p = TRUE;
+  BFD_ASSERT (entsize == sizeof (Elf64_Mips_External_Rela));
 
   if (dynamic)
     symcount = bfd_get_dynamic_symcount (abfd);
@@ -4040,14 +2477,9 @@  mips_elf64_slurp_one_reloc_table (bfd *abfd, asection *asect,
       bfd_boolean used_sym, used_ssym;
       int ir;
 
-      if (entsize == sizeof (Elf64_Mips_External_Rela))
-	mips_elf64_swap_reloca_in (abfd,
-				   (Elf64_Mips_External_Rela *) native_relocs,
-				   &rela);
-      else
-	mips_elf64_swap_reloc_in (abfd,
-				  (Elf64_Mips_External_Rel *) native_relocs,
-				  &rela);
+      mips_elf64_swap_reloca_in (abfd,
+				(Elf64_Mips_External_Rela *) native_relocs,
+				&rela);
 
       /* Each entry represents exactly three actual relocations.  */
 
@@ -4154,7 +2586,7 @@  mips_elf64_slurp_one_reloc_table (bfd *abfd, asection *asect,
 
 	  relent->addend = rela.r_addend;
 
-	  relent->howto = mips_elf64_rtype_to_howto (abfd, type, rela_p);
+	  relent->howto = mips_elf64_rtype_to_howto (abfd, type, TRUE);
 	  if (relent->howto == NULL)
 	    goto error_return;
 
@@ -4301,112 +2733,12 @@  mips_elf64_write_relocs (bfd *abfd, asection *sec, void *data)
 
   /* Do the actual relocation.  */
 
-  if (rel_hdr->sh_entsize == sizeof(Elf64_Mips_External_Rel))
-    mips_elf64_write_rel (abfd, sec, rel_hdr, &count, data);
-  else if (rel_hdr->sh_entsize == sizeof(Elf64_Mips_External_Rela))
+  if (rel_hdr->sh_entsize == sizeof(Elf64_Mips_External_Rela))
     mips_elf64_write_rela (abfd, sec, rel_hdr, &count, data);
   else
     BFD_ASSERT (0);
 }
 
-static void
-mips_elf64_write_rel (bfd *abfd, asection *sec,
-		      Elf_Internal_Shdr *rel_hdr,
-		      int *count, void *data)
-{
-  bfd_boolean *failedp = data;
-  Elf64_Mips_External_Rel *ext_rel;
-  unsigned int idx;
-  asymbol *last_sym = 0;
-  int last_sym_idx = 0;
-
-  rel_hdr->sh_size = rel_hdr->sh_entsize * *count;
-  rel_hdr->contents = bfd_alloc (abfd, rel_hdr->sh_size);
-  if (rel_hdr->contents == NULL)
-    {
-      *failedp = TRUE;
-      return;
-    }
-
-  ext_rel = (Elf64_Mips_External_Rel *) rel_hdr->contents;
-  for (idx = 0; idx < sec->reloc_count; idx++, ext_rel++)
-    {
-      arelent *ptr;
-      Elf64_Mips_Internal_Rela int_rel;
-      asymbol *sym;
-      int n;
-      unsigned int i;
-
-      ptr = sec->orelocation[idx];
-
-      /* The address of an ELF reloc is section relative for an object
-	 file, and absolute for an executable file or shared library.
-	 The address of a BFD reloc is always section relative.  */
-      if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
-	int_rel.r_offset = ptr->address;
-      else
-	int_rel.r_offset = ptr->address + sec->vma;
-
-      sym = *ptr->sym_ptr_ptr;
-      if (sym == last_sym)
-	n = last_sym_idx;
-      else if (bfd_is_abs_section (sym->section) && sym->value == 0)
-	n = STN_UNDEF;
-      else
-	{
-	  last_sym = sym;
-	  n = _bfd_elf_symbol_from_bfd_symbol (abfd, &sym);
-	  if (n < 0)
-	    {
-	      *failedp = TRUE;
-	      return;
-	    }
-	  last_sym_idx = n;
-	}
-
-      int_rel.r_sym = n;
-      int_rel.r_ssym = RSS_UNDEF;
-
-      if ((*ptr->sym_ptr_ptr)->the_bfd != NULL
-	  && (*ptr->sym_ptr_ptr)->the_bfd->xvec != abfd->xvec
-	  && ! _bfd_elf_validate_reloc (abfd, ptr))
-	{
-	  *failedp = TRUE;
-	  return;
-	}
-
-      int_rel.r_type = ptr->howto->type;
-      int_rel.r_type2 = (int) R_MIPS_NONE;
-      int_rel.r_type3 = (int) R_MIPS_NONE;
-
-      for (i = 0; i < 2; i++)
-	{
-	  arelent *r;
-
-	  if (idx + 1 >= sec->reloc_count)
-	    break;
-	  r = sec->orelocation[idx + 1];
-	  if (r->address != ptr->address
-	      || ! bfd_is_abs_section ((*r->sym_ptr_ptr)->section)
-	      || (*r->sym_ptr_ptr)->value != 0)
-	    break;
-
-	  /* We can merge the reloc at IDX + 1 with the reloc at IDX.  */
-
-	  if (i == 0)
-	    int_rel.r_type2 = r->howto->type;
-	  else
-	    int_rel.r_type3 = r->howto->type;
-
-	  ++idx;
-	}
-
-      mips_elf64_swap_reloc_out (abfd, &int_rel, ext_rel);
-    }
-
-  BFD_ASSERT (ext_rel - (Elf64_Mips_External_Rel *) rel_hdr->contents
-	      == *count);
-}
 
 static void
 mips_elf64_write_rela (bfd *abfd, asection *sec,
@@ -4713,8 +3045,11 @@  const struct elf_size_info mips_elf64_size_info =
   bfd_elf64_slurp_symbol_table,
   bfd_elf64_swap_dyn_in,
   bfd_elf64_swap_dyn_out,
-  mips_elf64_be_swap_reloc_in,
-  mips_elf64_be_swap_reloc_out,
+  /* MIPS ELF SHT_REL actually need to handle chained relocation
+     swap but as we don't use SHT_REL any more just use generic
+     place holder here. */
+  bfd_elf64_swap_reloc_in,
+  bfd_elf64_swap_reloc_out,
   mips_elf64_be_swap_reloca_in,
   mips_elf64_be_swap_reloca_out
 };
@@ -4729,7 +3064,7 @@  const struct elf_size_info mips_elf64_size_info =
 #define elf_backend_gc_mark_extra_sections \
 					_bfd_mips_elf_gc_mark_extra_sections
 #define elf_info_to_howto		mips_elf64_info_to_howto_rela
-#define elf_info_to_howto_rel		mips_elf64_info_to_howto_rela
+#define elf_info_to_howto_rel		NULL
 #define elf_backend_object_p		mips_elf64_object_p
 #define elf_backend_symbol_processing	_bfd_mips_elf_symbol_processing
 #define elf_backend_section_processing	_bfd_mips_elf_section_processing
@@ -4780,9 +3115,8 @@  const struct elf_size_info mips_elf64_size_info =
 #define elf_backend_got_header_size	(8 * MIPS_RESERVED_GOTNO)
 #define elf_backend_want_dynrelro	1
 
-/* MIPS ELF64 can use a mixture of REL and RELA, but some Relocations
-   work better/work only in RELA, so we default to this.  */
-#define elf_backend_may_use_rel_p	1
+/* We restrict MIPS ELF64 to rela only  */
+#define elf_backend_may_use_rel_p	0
 #define elf_backend_may_use_rela_p	1
 #define elf_backend_default_use_rela_p	1
 #define elf_backend_rela_plts_and_copies_p 0
diff --git a/bfd/elfn32-mips.c b/bfd/elfn32-mips.c
index da8afa3e57..7da56d23dd 100644
--- a/bfd/elfn32-mips.c
+++ b/bfd/elfn32-mips.c
@@ -66,8 +66,6 @@  static bfd_reloc_status_type mips16_gprel_reloc
   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
 static reloc_howto_type *bfd_elf32_bfd_reloc_type_lookup
   (bfd *, bfd_reloc_code_real_type);
-static bfd_boolean mips_info_to_howto_rel
-  (bfd *, arelent *, Elf_Internal_Rela *);
 static bfd_boolean mips_info_to_howto_rela
   (bfd *, arelent *, Elf_Internal_Rela *);
 static bfd_boolean mips_elf_sym_is_global
@@ -105,771 +103,6 @@  extern const bfd_target mips_elf32_n_le_vec;
    from smaller values.  Start with zero, widen, *then* decrement.  */
 #define MINUS_ONE	(((bfd_vma)0) - 1)
 
-/* The relocation table used for SHT_REL sections.  */
-
-static reloc_howto_type elf_mips_howto_table_rel[] =
-{
-  /* No relocation.  */
-  HOWTO (R_MIPS_NONE,		/* type */
-	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
-	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_NONE",		/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* 16 bit relocation.  */
-  HOWTO (R_MIPS_16,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_16",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* 32 bit relocation.  */
-  HOWTO (R_MIPS_32,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_32",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* 32 bit symbol relative relocation.  */
-  HOWTO (R_MIPS_REL32,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_REL32",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* 26 bit jump address.  */
-  HOWTO (R_MIPS_26,		/* type */
-	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-				/* This needs complex overflow
-				   detection, because the upper four
-				   bits must match the PC + 4.  */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_26",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0x03ffffff,		/* src_mask */
-	 0x03ffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* R_MIPS_HI16 and R_MIPS_LO16 are unsupported for NewABI REL.
-     However, the native IRIX6 tools use them, so we try our best. */
-
-  /* High 16 bits of symbol value.  */
-  HOWTO (R_MIPS_HI16,		/* type */
-	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_hi16_reloc, /* special_function */
-	 "R_MIPS_HI16",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Low 16 bits of symbol value.  */
-  HOWTO (R_MIPS_LO16,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_lo16_reloc, /* special_function */
-	 "R_MIPS_LO16",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* GP relative reference.  */
-  HOWTO (R_MIPS_GPREL16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 mips_elf_gprel16_reloc, /* special_function */
-	 "R_MIPS_GPREL16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Reference to literal section.  */
-  HOWTO (R_MIPS_LITERAL,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 mips_elf_literal_reloc, /* special_function */
-	 "R_MIPS_LITERAL",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Reference to global offset table.  */
-  HOWTO (R_MIPS_GOT16,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_got16_reloc, /* special_function */
-	 "R_MIPS_GOT16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* 16 bit PC relative reference.  Note that the ABI document has a typo
-     and claims R_MIPS_PC16 to be not rightshifted, rendering it useless.
-     We do the right thing here.  */
-  HOWTO (R_MIPS_PC16,		/* type */
-	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_PC16",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  /* 16 bit call through global offset table.  */
-  HOWTO (R_MIPS_CALL16,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_CALL16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* 32 bit GP relative reference.  */
-  HOWTO (R_MIPS_GPREL32,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 mips_elf_gprel32_reloc, /* special_function */
-	 "R_MIPS_GPREL32",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* The remaining relocs are defined on Irix 5, although they are
-     not defined by the ABI.  */
-  EMPTY_HOWTO (13),
-  EMPTY_HOWTO (14),
-  EMPTY_HOWTO (15),
-
-  /* A 5 bit shift field.  */
-  HOWTO (R_MIPS_SHIFT5,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 5,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 6,			/* bitpos */
-	 complain_overflow_bitfield, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_SHIFT5",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x000007c0,		/* src_mask */
-	 0x000007c0,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* A 6 bit shift field.  */
-  HOWTO (R_MIPS_SHIFT6,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 6,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 6,			/* bitpos */
-	 complain_overflow_bitfield, /* complain_on_overflow */
-	 mips_elf_shift6_reloc,	/* special_function */
-	 "R_MIPS_SHIFT6",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x000007c4,		/* src_mask */
-	 0x000007c4,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* A 64 bit relocation.  */
-  HOWTO (R_MIPS_64,		/* type */
-	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
-	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_64",		/* name */
-	 TRUE,			/* partial_inplace */
-	 MINUS_ONE,		/* src_mask */
-	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Displacement in the global offset table.  */
-  HOWTO (R_MIPS_GOT_DISP,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_GOT_DISP",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Displacement to page pointer in the global offset table.  */
-  HOWTO (R_MIPS_GOT_PAGE,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_GOT_PAGE",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Offset from page pointer in the global offset table.  */
-  HOWTO (R_MIPS_GOT_OFST,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_GOT_OFST",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* High 16 bits of displacement in global offset table.  */
-  HOWTO (R_MIPS_GOT_HI16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_GOT_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Low 16 bits of displacement in global offset table.  */
-  HOWTO (R_MIPS_GOT_LO16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_GOT_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* 64 bit subtraction.  */
-  HOWTO (R_MIPS_SUB,		/* type */
-	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
-	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_SUB",		/* name */
-	 TRUE,			/* partial_inplace */
-	 MINUS_ONE,		/* src_mask */
-	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Insert the addend as an instruction.  */
-  /* FIXME: Not handled correctly.  */
-  HOWTO (R_MIPS_INSERT_A,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_INSERT_A",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Insert the addend as an instruction, and change all relocations
-     to refer to the old instruction at the address.  */
-  /* FIXME: Not handled correctly.  */
-  HOWTO (R_MIPS_INSERT_B,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_INSERT_B",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Delete a 32 bit instruction.  */
-  /* FIXME: Not handled correctly.  */
-  HOWTO (R_MIPS_DELETE,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_DELETE",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* The MIPS ELF64 ABI Draft wants us to support these for REL relocations.
-     We don't, because
-       a) It means building the addend from a R_MIPS_HIGHEST/R_MIPS_HIGHER/
-	  R_MIPS_HI16/R_MIPS_LO16 sequence with varying ordering, using
-	  fallable heuristics.
-       b) No other NewABI toolchain actually emits such relocations.  */
-  EMPTY_HOWTO (R_MIPS_HIGHER),
-  EMPTY_HOWTO (R_MIPS_HIGHEST),
-
-  /* High 16 bits of displacement in global offset table.  */
-  HOWTO (R_MIPS_CALL_HI16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_CALL_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Low 16 bits of displacement in global offset table.  */
-  HOWTO (R_MIPS_CALL_LO16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_CALL_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Section displacement.  */
-  HOWTO (R_MIPS_SCN_DISP,       /* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_SCN_DISP",     /* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  HOWTO (R_MIPS_REL16,		/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_REL16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* These two are obsolete.  */
-  EMPTY_HOWTO (R_MIPS_ADD_IMMEDIATE),
-  EMPTY_HOWTO (R_MIPS_PJUMP),
-
-  /* Similiar to R_MIPS_REL32, but used for relocations in a GOT section.
-     It must be used for multigot GOT's (and only there).  */
-  HOWTO (R_MIPS_RELGOT,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_RELGOT",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Protected jump conversion.  This is an optimization hint.  No
-     relocation is required for correctness.  */
-  HOWTO (R_MIPS_JALR,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_JALR",		/* name */
-	 FALSE,			/* partial_inplace */
-	 0x00000000,		/* src_mask */
-	 0x00000000,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* TLS GD/LD dynamic relocations.  */
-  HOWTO (R_MIPS_TLS_DTPMOD32,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_TLS_DTPMOD32",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  HOWTO (R_MIPS_TLS_DTPREL32,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_TLS_DTPREL32",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  EMPTY_HOWTO (R_MIPS_TLS_DTPMOD64),
-  EMPTY_HOWTO (R_MIPS_TLS_DTPREL64),
-
-  /* TLS general dynamic variable reference.  */
-  HOWTO (R_MIPS_TLS_GD,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_TLS_GD",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* TLS local dynamic variable reference.  */
-  HOWTO (R_MIPS_TLS_LDM,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_TLS_LDM",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* TLS local dynamic offset.  */
-  HOWTO (R_MIPS_TLS_DTPREL_HI16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_TLS_DTPREL_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* TLS local dynamic offset.  */
-  HOWTO (R_MIPS_TLS_DTPREL_LO16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_TLS_DTPREL_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* TLS thread pointer offset.  */
-  HOWTO (R_MIPS_TLS_GOTTPREL,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_TLS_GOTTPREL",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* TLS IE dynamic relocations.  */
-  HOWTO (R_MIPS_TLS_TPREL32,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_TLS_TPREL32",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  EMPTY_HOWTO (R_MIPS_TLS_TPREL64),
-
-  /* TLS thread pointer offset.  */
-  HOWTO (R_MIPS_TLS_TPREL_HI16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_TLS_TPREL_HI16", /* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* TLS thread pointer offset.  */
-  HOWTO (R_MIPS_TLS_TPREL_LO16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_TLS_TPREL_LO16", /* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* 32 bit relocation with no addend.  */
-  HOWTO (R_MIPS_GLOB_DAT,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_GLOB_DAT",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x0,			/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  EMPTY_HOWTO (52),
-  EMPTY_HOWTO (53),
-  EMPTY_HOWTO (54),
-  EMPTY_HOWTO (55),
-  EMPTY_HOWTO (56),
-  EMPTY_HOWTO (57),
-  EMPTY_HOWTO (58),
-  EMPTY_HOWTO (59),
-
-  HOWTO (R_MIPS_PC21_S2,	/* type */
-	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 21,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_PC21_S2",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x001fffff,		/* src_mask */
-	 0x001fffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  HOWTO (R_MIPS_PC26_S2,	/* type */
-	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 26,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS_PC26_S2",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x03ffffff,		/* src_mask */
-	 0x03ffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  HOWTO (R_MIPS_PC18_S3,	/* type */
-	 3,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 18,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc,   /* special_function */
-	 "R_MIPS_PC18_S3",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0003ffff,		/* src_mask */
-	 0x0003ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  HOWTO (R_MIPS_PC19_S2,	/* type */
-	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 19,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc,   /* special_function */
-	 "R_MIPS_PC19_S2",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0007ffff,		/* src_mask */
-	 0x0007ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  HOWTO (R_MIPS_PCHI16,		/* type */
-	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc,   /* special_function */
-	 "R_MIPS_PCHI16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  HOWTO (R_MIPS_PCLO16,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc,   /* special_function */
-	 "R_MIPS_PCLO16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-};
-
 /* The relocation table used for SHT_RELA sections.  */
 
 static reloc_howto_type elf_mips_howto_table_rela[] =
@@ -1652,222 +885,6 @@  static reloc_howto_type elf_mips_howto_table_rela[] =
 
 };
 
-static reloc_howto_type elf_mips16_howto_table_rel[] =
-{
-  /* The reloc used for the mips16 jump instruction.  */
-  HOWTO (R_MIPS16_26,		/* type */
-	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-				/* This needs complex overflow
-				   detection, because the upper four
-				   bits must match the PC.  */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS16_26",		/* name */
-	 TRUE,			/* partial_inplace */
-	 0x3ffffff,		/* src_mask */
-	 0x3ffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* The reloc used for the mips16 gprel instruction.  */
-  HOWTO (R_MIPS16_GPREL,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 mips16_gprel_reloc,	/* special_function */
-	 "R_MIPS16_GPREL",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* A MIPS16 reference to the global offset table.  */
-  HOWTO (R_MIPS16_GOT16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_got16_reloc, /* special_function */
-	 "R_MIPS16_GOT16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* A MIPS16 call through the global offset table.  */
-  HOWTO (R_MIPS16_CALL16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS16_CALL16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* MIPS16 high 16 bits of symbol value.  */
-  HOWTO (R_MIPS16_HI16,		/* type */
-	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_hi16_reloc, /* special_function */
-	 "R_MIPS16_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* MIPS16 low 16 bits of symbol value.  */
-  HOWTO (R_MIPS16_LO16,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_lo16_reloc, /* special_function */
-	 "R_MIPS16_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* MIPS16 TLS general dynamic variable reference.  */
-  HOWTO (R_MIPS16_TLS_GD,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS16_TLS_GD",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* MIPS16 TLS local dynamic variable reference.  */
-  HOWTO (R_MIPS16_TLS_LDM,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS16_TLS_LDM",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* MIPS16 TLS local dynamic offset.  */
-  HOWTO (R_MIPS16_TLS_DTPREL_HI16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS16_TLS_DTPREL_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* MIPS16 TLS local dynamic offset.  */
-  HOWTO (R_MIPS16_TLS_DTPREL_LO16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS16_TLS_DTPREL_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* MIPS16 TLS thread pointer offset.  */
-  HOWTO (R_MIPS16_TLS_GOTTPREL,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS16_TLS_GOTTPREL",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* MIPS16 TLS thread pointer offset.  */
-  HOWTO (R_MIPS16_TLS_TPREL_HI16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS16_TLS_TPREL_HI16", /* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* MIPS16 TLS thread pointer offset.  */
-  HOWTO (R_MIPS16_TLS_TPREL_LO16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS16_TLS_TPREL_LO16", /* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* MIPS16 16-bit PC-relative branch offset.  */
-  HOWTO (R_MIPS16_PC16_S1,	/* type */
-	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MIPS16_PC16_S1",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-};
-
 static reloc_howto_type elf_mips16_howto_table_rela[] =
 {
   /* The reloc used for the mips16 jump instruction.  */
@@ -2084,485 +1101,6 @@  static reloc_howto_type elf_mips16_howto_table_rela[] =
 	 TRUE),			/* pcrel_offset */
 };
 
-static reloc_howto_type elf_micromips_howto_table_rel[] =
-{
-  EMPTY_HOWTO (130),
-  EMPTY_HOWTO (131),
-  EMPTY_HOWTO (132),
-
-  /* 26 bit jump address.  */
-  HOWTO (R_MICROMIPS_26_S1,	/* type */
-	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-				/* This needs complex overflow
-				   detection, because the upper four
-				   bits must match the PC.  */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_26_S1",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x3ffffff,		/* src_mask */
-	 0x3ffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* High 16 bits of symbol value.  */
-  HOWTO (R_MICROMIPS_HI16,	/* type */
-	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_hi16_reloc, /* special_function */
-	 "R_MICROMIPS_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Low 16 bits of symbol value.  */
-  HOWTO (R_MICROMIPS_LO16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_lo16_reloc, /* special_function */
-	 "R_MICROMIPS_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* GP relative reference.  */
-  HOWTO (R_MICROMIPS_GPREL16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf32_gprel16_reloc, /* special_function */
-	 "R_MICROMIPS_GPREL16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Reference to literal section.  */
-  HOWTO (R_MICROMIPS_LITERAL,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf32_gprel16_reloc, /* special_function */
-	 "R_MICROMIPS_LITERAL",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Reference to global offset table.  */
-  HOWTO (R_MICROMIPS_GOT16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_got16_reloc, /* special_function */
-	 "R_MICROMIPS_GOT16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* This is for microMIPS branches.  */
-  HOWTO (R_MICROMIPS_PC7_S1,	/* type */
-	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 7,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_PC7_S1",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000007f,		/* src_mask */
-	 0x0000007f,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  HOWTO (R_MICROMIPS_PC10_S1,	/* type */
-	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 10,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_PC10_S1",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x000003ff,		/* src_mask */
-	 0x000003ff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  HOWTO (R_MICROMIPS_PC16_S1,	/* type */
-	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_PC16_S1",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  /* 16 bit call through global offset table.  */
-  HOWTO (R_MICROMIPS_CALL16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_CALL16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  EMPTY_HOWTO (143),
-  EMPTY_HOWTO (144),
-
-  /* Displacement in the global offset table.  */
-  HOWTO (R_MICROMIPS_GOT_DISP,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_GOT_DISP",/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Displacement to page pointer in the global offset table.  */
-  HOWTO (R_MICROMIPS_GOT_PAGE,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_GOT_PAGE",/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Offset from page pointer in the global offset table.  */
-  HOWTO (R_MICROMIPS_GOT_OFST,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_GOT_OFST",/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* High 16 bits of displacement in global offset table.  */
-  HOWTO (R_MICROMIPS_GOT_HI16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_GOT_HI16",/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Low 16 bits of displacement in global offset table.  */
-  HOWTO (R_MICROMIPS_GOT_LO16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_GOT_LO16",/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* 64 bit subtraction.  Used in the N32 ABI.  */
-  HOWTO (R_MICROMIPS_SUB,	/* type */
-	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
-	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_SUB",	/* name */
-	 TRUE,			/* partial_inplace */
-	 MINUS_ONE,		/* src_mask */
-	 MINUS_ONE,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* We don't support these for REL relocations, because it means building
-     the addend from a R_MICROMIPS_HIGHEST/R_MICROMIPS_HIGHER/
-     R_MICROMIPS_HI16/R_MICROMIPS_LO16 sequence with varying ordering,
-     using fallable heuristics.  */
-  EMPTY_HOWTO (R_MICROMIPS_HIGHER),
-  EMPTY_HOWTO (R_MICROMIPS_HIGHEST),
-
-  /* High 16 bits of displacement in global offset table.  */
-  HOWTO (R_MICROMIPS_CALL_HI16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_CALL_HI16",/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Low 16 bits of displacement in global offset table.  */
-  HOWTO (R_MICROMIPS_CALL_LO16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_CALL_LO16",/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Section displacement.  */
-  HOWTO (R_MICROMIPS_SCN_DISP,  /* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_SCN_DISP", /* name */
-	 TRUE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Protected jump conversion.  This is an optimization hint.  No
-     relocation is required for correctness.  */
-  HOWTO (R_MICROMIPS_JALR,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_JALR",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0x00000000,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Low 16 bits of symbol value.  Note that the high 16 bits of symbol values
-     must be zero.  This is used for relaxation.  */
-  HOWTO (R_MICROMIPS_HI0_LO16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_HI0_LO16",/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  EMPTY_HOWTO (158),
-  EMPTY_HOWTO (159),
-  EMPTY_HOWTO (160),
-  EMPTY_HOWTO (161),
-
-  /* TLS general dynamic variable reference.  */
-  HOWTO (R_MICROMIPS_TLS_GD,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_TLS_GD",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* TLS local dynamic variable reference.  */
-  HOWTO (R_MICROMIPS_TLS_LDM,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_TLS_LDM",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* TLS local dynamic offset.  */
-  HOWTO (R_MICROMIPS_TLS_DTPREL_HI16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_TLS_DTPREL_HI16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* TLS local dynamic offset.  */
-  HOWTO (R_MICROMIPS_TLS_DTPREL_LO16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_TLS_DTPREL_LO16",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* TLS thread pointer offset.  */
-  HOWTO (R_MICROMIPS_TLS_GOTTPREL,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_TLS_GOTTPREL",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  EMPTY_HOWTO (167),
-  EMPTY_HOWTO (168),
-
-  /* TLS thread pointer offset.  */
-  HOWTO (R_MICROMIPS_TLS_TPREL_HI16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_TLS_TPREL_HI16", /* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* TLS thread pointer offset.  */
-  HOWTO (R_MICROMIPS_TLS_TPREL_LO16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_TLS_TPREL_LO16", /* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  EMPTY_HOWTO (171),
-
-  /* GP- and PC-relative relocations.  */
-  HOWTO (R_MICROMIPS_GPREL7_S2,	/* type */
-	 2,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 7,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf32_gprel16_reloc, /* special_function */
-	 "R_MICROMIPS_GPREL7_S2",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x0000007f,		/* src_mask */
-	 0x0000007f,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  HOWTO (R_MICROMIPS_PC23_S2,	/* type */
-	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 23,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 _bfd_mips_elf_generic_reloc, /* special_function */
-	 "R_MICROMIPS_PC23_S2",	/* name */
-	 TRUE,			/* partial_inplace */
-	 0x007fffff,		/* src_mask */
-	 0x007fffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-};
-
 static reloc_howto_type elf_micromips_howto_table_rela[] =
 {
   EMPTY_HOWTO (130),
@@ -3748,10 +2286,7 @@  mips_elf_n32_rtype_to_howto (bfd *abfd, unsigned int r_type, bfd_boolean rela_p)
     case R_MIPS_GNU_VTENTRY:
       return &elf_mips_gnu_vtentry_howto;
     case R_MIPS_GNU_REL16_S2:
-      if (rela_p)
-	return &elf_mips_gnu_rela16_s2;
-      else
-	return &elf_mips_gnu_rel16_s2;
+      return &elf_mips_gnu_rela16_s2;
     case R_MIPS_PC32:
       return &elf_mips_gnu_pcrel32;
     case R_MIPS_EH:
@@ -3763,24 +2298,15 @@  mips_elf_n32_rtype_to_howto (bfd *abfd, unsigned int r_type, bfd_boolean rela_p)
     default:
       if (r_type >= R_MICROMIPS_min && r_type < R_MICROMIPS_max)
 	{
-	  if (rela_p)
-	    howto = &elf_micromips_howto_table_rela[r_type - R_MICROMIPS_min];
-	  else
-	    howto = &elf_micromips_howto_table_rel[r_type - R_MICROMIPS_min];
+	  howto = &elf_micromips_howto_table_rela[r_type - R_MICROMIPS_min];
 	}
       if (r_type >= R_MIPS16_min && r_type < R_MIPS16_max)
 	{
-	  if (rela_p)
-	    howto = &elf_mips16_howto_table_rela[r_type - R_MIPS16_min];
-	  else
-	    howto = &elf_mips16_howto_table_rel[r_type - R_MIPS16_min];
+	  howto = &elf_mips16_howto_table_rela[r_type - R_MIPS16_min];
 	}
       if (r_type < R_MIPS_max)
 	{
-	  if (rela_p)
-	    howto = &elf_mips_howto_table_rela[r_type];
-	  else
-	    howto = &elf_mips_howto_table_rel[r_type];
+	  howto = &elf_mips_howto_table_rela[r_type];
 	}
       if (howto != NULL && howto->name != NULL)
 	return howto;
@@ -3792,30 +2318,6 @@  mips_elf_n32_rtype_to_howto (bfd *abfd, unsigned int r_type, bfd_boolean rela_p)
     }
 }
 
-/* Given a MIPS Elf_Internal_Rel, fill in an arelent structure.  */
-
-static bfd_boolean
-mips_info_to_howto_rel (bfd *abfd, arelent *cache_ptr, Elf_Internal_Rela *dst)
-{
-  unsigned int r_type;
-
-  r_type = ELF32_R_TYPE (dst->r_info);
-  cache_ptr->howto = mips_elf_n32_rtype_to_howto (abfd, r_type, FALSE);
-
-  if (cache_ptr->howto == NULL)
-    return FALSE;
-
-  /* The addend for a GPREL16 or LITERAL relocation comes from the GP
-     value for the object file.  We get the addend now, rather than
-     when we do the relocation, because the symbol manipulations done
-     by the linker may cause us to lose track of the input BFD.  */
-  if (((*cache_ptr->sym_ptr_ptr)->flags & BSF_SECTION_SYM) != 0
-      && (gprel16_reloc_p (r_type) || r_type == (unsigned int) R_MIPS_LITERAL))
-    cache_ptr->addend = elf_gp (abfd);
-
-  return TRUE;
-}
-
 /* Given a MIPS Elf_Internal_Rela, fill in an arelent structure.  */
 
 static bfd_boolean
@@ -4107,7 +2609,7 @@  static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = {
 #define elf_backend_gc_mark_extra_sections \
 					_bfd_mips_elf_gc_mark_extra_sections
 #define elf_info_to_howto		mips_info_to_howto_rela
-#define elf_info_to_howto_rel		mips_info_to_howto_rel
+#define elf_info_to_howto_rel		NULL
 #define elf_backend_sym_is_global	mips_elf_sym_is_global
 #define elf_backend_object_p		mips_elf_n32_object_p
 #define elf_backend_symbol_processing	_bfd_mips_elf_symbol_processing
@@ -4156,9 +2658,8 @@  static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = {
 #define elf_backend_got_header_size	(4 * MIPS_RESERVED_GOTNO)
 #define elf_backend_want_dynrelro	1
 
-/* MIPS n32 ELF can use a mixture of REL and RELA, but some Relocations
-   work better/work only in RELA, so we default to this.  */
-#define elf_backend_may_use_rel_p	1
+/* We restrict MIPS ELFn32 to rela only  */
+#define elf_backend_may_use_rel_p	0
 #define elf_backend_may_use_rela_p	1
 #define elf_backend_default_use_rela_p	1
 #define elf_backend_rela_plts_and_copies_p 0