Touches most files in bfd/, so likely will be blamed for everything..
[deliverable/binutils-gdb.git] / bfd / coff-mips.c
index d2a34de697f78c13852a8548c8bb9219375d4ff0..6e9cc6af3c1c383d0d267f1e01ed09c0f18065db 100644 (file)
@@ -1,5 +1,7 @@
 /* BFD back-end for MIPS Extended-Coff files.
-   Copyright 1990, 91, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
+   Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+   2000, 2001
+   Free Software Foundation, Inc.
    Original version by Per Bothner.
    Full support added by Ian Lance Taylor, ian@cygnus.com.
 
@@ -114,7 +116,6 @@ static boolean mips_relax_pcrel16 PARAMS ((struct bfd_link_info *, bfd *,
                                           bfd_byte *, bfd_vma));
 static reloc_howto_type *mips_bfd_reloc_type_lookup
   PARAMS ((bfd *, bfd_reloc_code_real_type));
-
 \f
 /* ECOFF has COFF sections, but the debugging information is stored in
    a completely different format.  ECOFF targets use some of the
@@ -272,10 +273,10 @@ static reloc_howto_type mips_howto_table[] =
         0xffff,                /* dst_mask */
         false),                /* pcrel_offset */
 
-  { 8 },
-  { 9 },
-  { 10 },
-  { 11 },
+  EMPTY_HOWTO (8),
+  EMPTY_HOWTO (9),
+  EMPTY_HOWTO (10),
+  EMPTY_HOWTO (11),
 
   /* This reloc is a Cygnus extension used when generating position
      independent code for embedded systems.  It represents a 16 bit PC
@@ -333,13 +334,13 @@ static reloc_howto_type mips_howto_table[] =
         0xffff,                /* dst_mask */
         true),                 /* pcrel_offset */
 
-  { 15 },
-  { 16 },
-  { 17 },
-  { 18 },
-  { 19 },
-  { 20 },
-  { 21 },
+  EMPTY_HOWTO (15),
+  EMPTY_HOWTO (16),
+  EMPTY_HOWTO (17),
+  EMPTY_HOWTO (18),
+  EMPTY_HOWTO (19),
+  EMPTY_HOWTO (20),
+  EMPTY_HOWTO (21),
 
   /* This reloc is a Cygnus extension used when generating position
      independent code for embedded systems.  It represents an entry in
@@ -362,6 +363,9 @@ static reloc_howto_type mips_howto_table[] =
         true)                  /* pcrel_offset */
 };
 
+#define MIPS_HOWTO_COUNT \
+  (sizeof mips_howto_table / sizeof mips_howto_table[0])
+
 /* When the linker is doing relaxing, it may change a external PCREL16
    reloc.  This typically represents an instruction like
        bal foo
@@ -422,7 +426,7 @@ mips_ecoff_swap_reloc_in (abfd, ext_ptr, intern)
 {
   const RELOC *ext = (RELOC *) ext_ptr;
 
-  intern->r_vaddr = bfd_h_get_32 (abfd, (bfd_byte *) ext->r_vaddr);
+  intern->r_vaddr = H_GET_32 (abfd, ext->r_vaddr);
   if (bfd_header_big_endian (abfd))
     {
       intern->r_symndx = (((int) ext->r_bits[0]
@@ -499,7 +503,7 @@ mips_ecoff_swap_reloc_out (abfd, intern, dst)
       r_symndx = intern->r_offset & 0xffffff;
     }
 
-  bfd_h_put_32 (abfd, intern->r_vaddr, (bfd_byte *) ext->r_vaddr);
+  H_PUT_32 (abfd, intern->r_vaddr, ext->r_vaddr);
   if (bfd_header_big_endian (abfd))
     {
       ext->r_bits[0] = r_symndx >> RELOC_BITS0_SYMNDX_SH_LEFT_BIG;
@@ -557,7 +561,7 @@ mips_adjust_reloc_in (abfd, intern, rptr)
              || intern->r_type == MIPS_R_RELLO)))
     rptr->addend = intern->r_offset;
 
-  rptr->howto = &ecoff_backend (abfd)->howto_table[intern->r_type];
+  rptr->howto = &mips_howto_table[intern->r_type];
 }
 
 /* Make any adjustments needed to a reloc before writing it out.  None
@@ -565,7 +569,7 @@ mips_adjust_reloc_in (abfd, intern, rptr)
 
 static void
 mips_adjust_reloc_out (abfd, rel, intern)
-     bfd *abfd;
+     bfd *abfd ATTRIBUTE_UNUSED;
      const arelent *rel;
      struct internal_reloc *intern;
 {
@@ -600,13 +604,13 @@ mips_generic_reloc (abfd,
                    input_section,
                    output_bfd,
                    error_message)
-     bfd *abfd;
+     bfd *abfd ATTRIBUTE_UNUSED;
      arelent *reloc_entry;
      asymbol *symbol;
-     PTR data;
+     PTR data ATTRIBUTE_UNUSED;
      asection *input_section;
      bfd *output_bfd;
-     char **error_message;
+     char **error_message ATTRIBUTE_UNUSED;
 {
   if (output_bfd != (bfd *) NULL
       && (symbol->flags & BSF_SECTION_SYM) == 0
@@ -647,13 +651,13 @@ mips_refhi_reloc (abfd,
                  input_section,
                  output_bfd,
                  error_message)
-     bfd *abfd;
+     bfd *abfd ATTRIBUTE_UNUSED;
      arelent *reloc_entry;
      asymbol *symbol;
      PTR data;
      asection *input_section;
      bfd *output_bfd;
-     char **error_message;
+     char **error_message ATTRIBUTE_UNUSED;
 {
   bfd_reloc_status_type ret;
   bfd_vma relocation;
@@ -687,7 +691,7 @@ mips_refhi_reloc (abfd,
     return bfd_reloc_outofrange;
 
   /* Save the information, and let REFLO do the actual relocation.  */
-  n = (struct mips_hi *) bfd_malloc (sizeof *n);
+  n = (struct mips_hi *) bfd_malloc ((bfd_size_type) sizeof *n);
   if (n == NULL)
     return bfd_reloc_outofrange;
   n->addr = (bfd_byte *) data + reloc_entry->address;
@@ -754,8 +758,8 @@ mips_reflo_reloc (abfd,
          if ((val & 0x8000) != 0)
            val += 0x10000;
 
-         insn = (insn &~ 0xffff) | ((val >> 16) & 0xffff);
-         bfd_put_32 (abfd, insn, l->addr);
+         insn = (insn &~ (unsigned) 0xffff) | ((val >> 16) & 0xffff);
+         bfd_put_32 (abfd, (bfd_vma) insn, l->addr);
 
          next = l->next;
          free (l);
@@ -850,7 +854,7 @@ mips_gprel_reloc (abfd,
            {
              for (i = 0; i < count; i++, sym++)
                {
-                 register CONST char *name;
+                 register const char *name;
 
                  name = bfd_asymbol_name (*sym);
                  if (*name == '_' && strcmp (name, "_gp") == 0)
@@ -868,7 +872,7 @@ mips_gprel_reloc (abfd,
              gp = 4;
              _bfd_set_gp_value (output_bfd, gp);
              *error_message =
-               (char *) "GP relative relocation when _gp not defined";
+               (char *) _("GP relative relocation when _gp not defined");
              return bfd_reloc_dangerous;
            }
        }
@@ -899,14 +903,14 @@ mips_gprel_reloc (abfd,
       || (symbol->flags & BSF_SECTION_SYM) != 0)
     val += relocation - gp;
 
-  insn = (insn &~ 0xffff) | (val & 0xffff);
-  bfd_put_32 (abfd, insn, (bfd_byte *) data + reloc_entry->address);
+  insn = (insn &~ (unsigned) 0xffff) | (val & 0xffff);
+  bfd_put_32 (abfd, (bfd_vma) insn, (bfd_byte *) data + reloc_entry->address);
 
   if (relocateable != false)
     reloc_entry->address += input_section->output_offset;
 
   /* Make sure it fit in 16 bits.  */
-  if (val >= 0x8000 && val < 0xffff8000)
+  if ((long) val >= 0x8000 || (long) val < -0x8000)
     return bfd_reloc_overflow;
 
   return bfd_reloc_ok;
@@ -929,13 +933,13 @@ mips_relhi_reloc (abfd,
                  input_section,
                  output_bfd,
                  error_message)
-     bfd *abfd;
+     bfd *abfd ATTRIBUTE_UNUSED;
      arelent *reloc_entry;
      asymbol *symbol;
      PTR data;
      asection *input_section;
      bfd *output_bfd;
-     char **error_message;
+     char **error_message ATTRIBUTE_UNUSED;
 {
   bfd_reloc_status_type ret;
   bfd_vma relocation;
@@ -978,7 +982,7 @@ mips_relhi_reloc (abfd,
     return bfd_reloc_outofrange;
 
   /* Save the information, and let RELLO do the actual relocation.  */
-  n = (struct mips_hi *) bfd_malloc (sizeof *n);
+  n = (struct mips_hi *) bfd_malloc ((bfd_size_type) sizeof *n);
   if (n == NULL)
     return bfd_reloc_outofrange;
   n->addr = (bfd_byte *) data + reloc_entry->address;
@@ -1055,8 +1059,8 @@ mips_rello_reloc (abfd,
          if ((val & 0x8000) != 0)
            val += 0x10000;
 
-         insn = (insn &~ 0xffff) | ((val >> 16) & 0xffff);
-         bfd_put_32 (abfd, insn, l->addr);
+         insn = (insn &~ (unsigned) 0xffff) | ((val >> 16) & 0xffff);
+         bfd_put_32 (abfd, (bfd_vma) insn, l->addr);
 
          next = l->next;
          free (l);
@@ -1096,7 +1100,6 @@ mips_rello_reloc (abfd,
    requires special handling when relaxing.  We don't want
    bfd_perform_relocation to tamper with it at all.  */
 
-/*ARGSUSED*/
 static bfd_reloc_status_type
 mips_switch_reloc (abfd,
                   reloc_entry,
@@ -1105,13 +1108,13 @@ mips_switch_reloc (abfd,
                   input_section,
                   output_bfd,
                   error_message)
-     bfd *abfd;
-     arelent *reloc_entry;
-     asymbol *symbol;
-     PTR data;
-     asection *input_section;
-     bfd *output_bfd;
-     char **error_message;
+     bfd *abfd ATTRIBUTE_UNUSED;
+     arelent *reloc_entry ATTRIBUTE_UNUSED;
+     asymbol *symbol ATTRIBUTE_UNUSED;
+     PTR data ATTRIBUTE_UNUSED;
+     asection *input_section ATTRIBUTE_UNUSED;
+     bfd *output_bfd ATTRIBUTE_UNUSED;
+     char **error_message ATTRIBUTE_UNUSED;
 {
   return bfd_reloc_ok;
 }
@@ -1120,7 +1123,7 @@ mips_switch_reloc (abfd,
 
 static reloc_howto_type *
 mips_bfd_reloc_type_lookup (abfd, code)
-     bfd *abfd;
+     bfd *abfd ATTRIBUTE_UNUSED;
      bfd_reloc_code_real_type code;
 {
   int mips_type;
@@ -1165,7 +1168,7 @@ mips_bfd_reloc_type_lookup (abfd, code)
       return (reloc_howto_type *) NULL;
     }
 
-  return &ecoff_backend (abfd)->howto_table[mips_type];
+  return &mips_howto_table[mips_type];
 }
 \f
 /* A helper routine for mips_relocate_section which handles the REFHI
@@ -1189,11 +1192,18 @@ mips_relocate_hi (refhi, reflo, input_bfd, input_section, contents, adjust,
   unsigned long val;
   unsigned long vallo;
 
+  if (refhi == NULL)
+    return;
+
   insn = bfd_get_32 (input_bfd,
                     contents + adjust + refhi->r_vaddr - input_section->vma);
-  vallo = (bfd_get_32 (input_bfd,
-                      contents + adjust + reflo->r_vaddr - input_section->vma)
-          & 0xffff);
+  if (reflo == NULL)
+    vallo = 0;
+  else
+    vallo = (bfd_get_32 (input_bfd,
+                        contents + adjust + reflo->r_vaddr - input_section->vma)
+            & 0xffff);
+
   val = ((insn & 0xffff) << 16) + vallo;
   val += relocation;
 
@@ -1213,7 +1223,7 @@ mips_relocate_hi (refhi, reflo, input_bfd, input_section, contents, adjust,
   if ((val & 0x8000) != 0)
     val += 0x10000;
 
-  insn = (insn &~ 0xffff) | ((val >> 16) & 0xffff);
+  insn = (insn &~ (unsigned) 0xffff) | ((val >> 16) & 0xffff);
   bfd_put_32 (input_bfd, (bfd_vma) insn,
              contents + adjust + refhi->r_vaddr - input_section->vma);
 }
@@ -1241,6 +1251,7 @@ mips_relocate_section (output_bfd, info, input_bfd, input_section,
   unsigned int i;
   boolean got_lo;
   struct internal_reloc lo_int_rel;
+  bfd_size_type amt;
 
   BFD_ASSERT (input_bfd->xvec->byteorder
              == output_bfd->xvec->byteorder);
@@ -1251,10 +1262,8 @@ mips_relocate_section (output_bfd, info, input_bfd, input_section,
   symndx_to_section = ecoff_data (input_bfd)->symndx_to_section;
   if (symndx_to_section == (asection **) NULL)
     {
-      symndx_to_section = ((asection **)
-                          bfd_alloc (input_bfd,
-                                     (NUM_RELOC_SECTIONS
-                                      * sizeof (asection *))));
+      amt = NUM_RELOC_SECTIONS * sizeof (asection *);
+      symndx_to_section = (asection **) bfd_alloc (input_bfd, amt);
       if (!symndx_to_section)
        return false;
 
@@ -1309,7 +1318,7 @@ mips_relocate_section (output_bfd, info, input_bfd, input_section,
   for (i = 0; ext_rel < ext_rel_end; ext_rel++, i++)
     {
       struct internal_reloc int_rel;
-      boolean use_lo;
+      boolean use_lo = false;
       bfd_vma addend;
       reloc_howto_type *howto;
       struct ecoff_link_hash_entry *h = NULL;
@@ -1325,7 +1334,8 @@ mips_relocate_section (output_bfd, info, input_bfd, input_section,
          got_lo = false;
        }
 
-      BFD_ASSERT (int_rel.r_type < ecoff_backend (abfd)->howto_table_size);
+      BFD_ASSERT (int_rel.r_type
+                 < sizeof mips_howto_table / sizeof mips_howto_table[0]);
 
       /* The REFHI and RELHI relocs requires special handling.  they
         must be followed by a REFLO or RELLO reloc, respectively, and
@@ -1362,7 +1372,7 @@ mips_relocate_section (output_bfd, info, input_bfd, input_section,
            }
        }
 
-      howto = &ecoff_backend (abfd)->howto_table[int_rel.r_type];
+      howto = &mips_howto_table[int_rel.r_type];
 
       /* The SWITCH reloc must be handled specially.  This reloc is
         marks the location of a difference between two portions of an
@@ -1420,7 +1430,7 @@ mips_relocate_section (output_bfd, info, input_bfd, input_section,
          if (gp_undefined)
            {
              if (! ((*info->callbacks->reloc_dangerous)
-                    (info, "GP relative relocation when GP not defined",
+                    (info, _("GP relative relocation when GP not defined"),
                      input_bfd, input_section,
                      int_rel.r_vaddr - input_section->vma)))
                return false;
@@ -1493,7 +1503,7 @@ mips_relocate_section (output_bfd, info, input_bfd, input_section,
              memmove (here + PCREL16_EXPANSION_ADJUSTMENT, here,
                       (size_t) (input_section->_raw_size
                                 - (int_rel.r_vaddr - input_section->vma)));
-                      
+
              /* Generate the new instructions.  */
              if (! mips_relax_pcrel16 (info, input_bfd, input_section,
                                        h, here,
@@ -1614,7 +1624,7 @@ mips_relocate_section (output_bfd, info, input_bfd, input_section,
                        int_rel.r_symndx = RELOC_SECTION_TEXT;
                      break;
                    }
-                     
+
                  if (int_rel.r_symndx == -1)
                    abort ();
 
@@ -1769,7 +1779,7 @@ mips_relocate_section (output_bfd, info, input_bfd, input_section,
                  if (! ((*info->callbacks->undefined_symbol)
                         (info, h->root.root.string, input_bfd,
                          input_section,
-                         int_rel.r_vaddr - input_section->vma)))
+                         int_rel.r_vaddr - input_section->vma, true)))
                    return false;
                  relocation = 0;
                }
@@ -1869,12 +1879,13 @@ mips_read_relocs (abfd, sec)
      asection *sec;
 {
   struct ecoff_section_tdata *section_tdata;
+  bfd_size_type amt;
 
   section_tdata = ecoff_section_data (abfd, sec);
   if (section_tdata == (struct ecoff_section_tdata *) NULL)
     {
-      sec->used_by_bfd =
-       (PTR) bfd_alloc (abfd, sizeof (struct ecoff_section_tdata));
+      amt = sizeof (struct ecoff_section_tdata);
+      sec->used_by_bfd = (PTR) bfd_alloc (abfd, amt);
       if (sec->used_by_bfd == NULL)
        return false;
 
@@ -1886,20 +1897,14 @@ mips_read_relocs (abfd, sec)
 
   if (section_tdata->external_relocs == NULL)
     {
-      bfd_size_type external_relocs_size;
-
-      external_relocs_size = (ecoff_backend (abfd)->external_reloc_size
-                             * sec->reloc_count);
-
-      section_tdata->external_relocs =
-       (PTR) bfd_alloc (abfd, external_relocs_size);
-      if (section_tdata->external_relocs == NULL && external_relocs_size != 0)
+      amt = ecoff_backend (abfd)->external_reloc_size;
+      amt *= sec->reloc_count;
+      section_tdata->external_relocs = (PTR) bfd_alloc (abfd, amt);
+      if (section_tdata->external_relocs == NULL && amt != 0)
        return false;
 
       if (bfd_seek (abfd, sec->rel_filepos, SEEK_SET) != 0
-         || (bfd_read (section_tdata->external_relocs, 1,
-                       external_relocs_size, abfd)
-             != external_relocs_size))
+         || bfd_bread (section_tdata->external_relocs, amt, abfd) != amt)
        return false;
     }
 
@@ -1998,6 +2003,7 @@ mips_relax_section (abfd, sec, info, again)
       struct ecoff_link_hash_entry **adj_h_ptr;
       struct ecoff_link_hash_entry **adj_h_ptr_end;
       struct ecoff_value_adjust *adjust;
+      bfd_size_type amt;
 
       /* If we have already expanded this reloc, we certainly don't
         need to do it again.  */
@@ -2074,7 +2080,7 @@ mips_relax_section (abfd, sec, info, again)
          if (info->keep_memory)
            contents = (bfd_byte *) bfd_alloc (abfd, sec->_raw_size);
          else
-           contents = (bfd_byte *) bfd_malloc ((size_t) sec->_raw_size);
+           contents = (bfd_byte *) bfd_malloc (sec->_raw_size);
          if (contents == (bfd_byte *) NULL)
            goto error_return;
          if (! bfd_get_section_contents (abfd, sec, (PTR) contents,
@@ -2092,7 +2098,7 @@ mips_relax_section (abfd, sec, info, again)
         somebody felt it were important.  Ignoring this reloc will
         presumably cause a reloc overflow error later on.  */
       if (bfd_get_32 (abfd, contents + int_rel.r_vaddr - sec->vma)
-         != 0x0411ffff) /* bgezal $0,. == bal . */
+         != 0x0411ffff) /* bgezal $0,. == bal .  */
        continue;
 
       /* Bother.  We need to expand this reloc, and we will need to
@@ -2107,13 +2113,13 @@ mips_relax_section (abfd, sec, info, again)
 
       if (offsets == (long *) NULL)
        {
-         size_t size;
+         bfd_size_type size;
 
-         size = sec->reloc_count * sizeof (long);
+         size = (bfd_size_type) sec->reloc_count * sizeof (long);
          offsets = (long *) bfd_alloc (abfd, size);
          if (offsets == (long *) NULL)
            goto error_return;
-         memset (offsets, 0, size);
+         memset (offsets, 0, (size_t) size);
          section_tdata->offsets = offsets;
        }
 
@@ -2168,7 +2174,7 @@ mips_relax_section (abfd, sec, info, again)
              mips_ecoff_swap_reloc_in (abfd, (PTR) (adj_ext_rel + 1), &rello);
 
              BFD_ASSERT (rello.r_type == MIPS_R_RELLO);
-             
+
              addhi = bfd_get_32 (abfd,
                                   contents + adj_int_rel.r_vaddr - sec->vma);
              addhi &= 0xffff;
@@ -2286,8 +2292,8 @@ mips_relax_section (abfd, sec, info, again)
       /* Add an entry to the symbol value adjust list.  This is used
         by bfd_ecoff_debug_accumulate to adjust the values of
         internal symbols and FDR's.  */
-      adjust = ((struct ecoff_value_adjust *)
-               bfd_alloc (abfd, sizeof (struct ecoff_value_adjust)));
+      amt = sizeof (struct ecoff_value_adjust);
+      adjust = (struct ecoff_value_adjust *) bfd_alloc (abfd, amt);
       if (adjust == (struct ecoff_value_adjust *) NULL)
        goto error_return;
 
@@ -2317,9 +2323,9 @@ mips_relax_section (abfd, sec, info, again)
 
 static boolean
 mips_relax_pcrel16 (info, input_bfd, input_section, h, location, address)
-     struct bfd_link_info *info;
+     struct bfd_link_info *info ATTRIBUTE_UNUSED;
      bfd *input_bfd;
-     asection *input_section;
+     asection *input_section ATTRIBUTE_UNUSED;
      struct ecoff_link_hash_entry *h;
      bfd_byte *location;
      bfd_vma address;
@@ -2340,15 +2346,17 @@ mips_relax_pcrel16 (info, input_bfd, input_section, h, location, address)
   if ((relocation & 0x8000) != 0)
     relocation += 0x10000;
 
-  bfd_put_32 (input_bfd, 0x04110001, location); /* bal .+8 */
+  bfd_put_32 (input_bfd, (bfd_vma) 0x04110001, location); /* bal .+8 */
   bfd_put_32 (input_bfd,
              0x3c010000 | ((relocation >> 16) & 0xffff), /* lui $at,XX */
              location + 4);
   bfd_put_32 (input_bfd,
              0x24210000 | (relocation & 0xffff), /* addiu $at,$at,XX */
              location + 8);
-  bfd_put_32 (input_bfd, 0x003f0821, location + 12); /* addu $at,$at,$ra */
-  bfd_put_32 (input_bfd, 0x0020f809, location + 16); /* jalr $at */
+  bfd_put_32 (input_bfd,
+             (bfd_vma) 0x003f0821, location + 12); /* addu $at,$at,$ra */
+  bfd_put_32 (input_bfd,
+             (bfd_vma) 0x0020f809, location + 16); /* jalr $at */
 
   return true;
 }
@@ -2375,6 +2383,7 @@ bfd_mips_ecoff_create_embedded_relocs (abfd, info, datasec, relsec, errmsg)
   struct external_reloc *ext_rel;
   struct external_reloc *ext_rel_end;
   bfd_byte *p;
+  bfd_size_type amt;
 
   BFD_ASSERT (! info->relocateable);
 
@@ -2388,7 +2397,8 @@ bfd_mips_ecoff_create_embedded_relocs (abfd, info, datasec, relsec, errmsg)
   if (! mips_read_relocs (abfd, datasec))
     return false;
 
-  relsec->contents = (bfd_byte *) bfd_alloc (abfd, datasec->reloc_count * 4);
+  amt = (bfd_size_type) datasec->reloc_count * 4;
+  relsec->contents = (bfd_byte *) bfd_alloc (abfd, amt);
   if (relsec->contents == NULL)
     return false;
 
@@ -2418,7 +2428,7 @@ bfd_mips_ecoff_create_embedded_relocs (abfd, info, datasec, relsec, errmsg)
       /* We can only relocate REFWORD relocs at run time.  */
       if (int_rel.r_type != MIPS_R_REFWORD)
        {
-         *errmsg = "unsupported reloc type";
+         *errmsg = _("unsupported reloc type");
          bfd_set_error (bfd_error_bad_value);
          return false;
        }
@@ -2455,7 +2465,7 @@ bfd_mips_ecoff_create_embedded_relocs (abfd, info, datasec, relsec, errmsg)
            default:
              /* No other sections should appear in -membedded-pic
                  code.  */
-             *errmsg = "reloc against unsupported section";
+             *errmsg = _("reloc against unsupported section");
              bfd_set_error (bfd_error_bad_value);
              return false;
            }
@@ -2463,7 +2473,7 @@ bfd_mips_ecoff_create_embedded_relocs (abfd, info, datasec, relsec, errmsg)
 
       if ((int_rel.r_offset & 3) != 0)
        {
-         *errmsg = "reloc not properly aligned";
+         *errmsg = _("reloc not properly aligned");
          bfd_set_error (bfd_error_bad_value);
          return false;
        }
@@ -2493,13 +2503,14 @@ static const struct ecoff_backend_data mips_ecoff_backend_data =
     (unsigned (*) PARAMS ((bfd *,PTR,PTR))) bfd_void, /* reloc_out */
     mips_ecoff_swap_filehdr_out, mips_ecoff_swap_aouthdr_out,
     mips_ecoff_swap_scnhdr_out,
-    FILHSZ, AOUTSZ, SCNHSZ, 0, 0, 0, 0, true, false, 4,
+    FILHSZ, AOUTSZ, SCNHSZ, 0, 0, 0, 0, FILNMLEN, true, false, 4, false, 2,
     mips_ecoff_swap_filehdr_in, mips_ecoff_swap_aouthdr_in,
     mips_ecoff_swap_scnhdr_in, NULL,
     mips_ecoff_bad_format_hook, _bfd_ecoff_set_arch_mach_hook,
     _bfd_ecoff_mkobject_hook, _bfd_ecoff_styp_to_sec_flags,
     _bfd_ecoff_set_alignment_hook, _bfd_ecoff_slurp_symbol_table,
-    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
+    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+    NULL, NULL
   },
   /* Supported architecture.  */
   bfd_arch_mips,
@@ -2557,12 +2568,6 @@ static const struct ecoff_backend_data mips_ecoff_backend_data =
   },
   /* External reloc size.  */
   RELSZ,
-  /* Howto reloc table.  */
-  mips_howto_table,
-  /* Howto reloc table size.  */
-  sizeof mips_howto_table / sizeof mips_howto_table[0],
-  /* Does this backend implement the LITERALSLEAZY reloc?  */
-  false,
   /* Reloc swapping functions.  */
   mips_ecoff_swap_reloc_in,
   mips_ecoff_swap_reloc_out,
@@ -2591,6 +2596,14 @@ static const struct ecoff_backend_data mips_ecoff_backend_data =
 /* Relaxing sections is MIPS specific.  */
 #define _bfd_ecoff_bfd_relax_section mips_relax_section
 
+/* GC of sections is not done.  */
+#define _bfd_ecoff_bfd_gc_sections bfd_generic_gc_sections
+
+/* Merging of sections is not done.  */
+#define _bfd_ecoff_bfd_merge_sections bfd_generic_merge_sections
+
+extern const bfd_target ecoff_big_vec;
+
 const bfd_target ecoff_little_vec =
 {
   "ecoff-littlemips",          /* name */
@@ -2630,6 +2643,8 @@ const bfd_target ecoff_little_vec =
      BFD_JUMP_TABLE_LINK (_bfd_ecoff),
      BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
 
+  & ecoff_big_vec,
+
   (PTR) &mips_ecoff_backend_data
 };
 
@@ -2671,6 +2686,8 @@ const bfd_target ecoff_big_vec =
      BFD_JUMP_TABLE_LINK (_bfd_ecoff),
      BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
 
+  & ecoff_little_vec,
+
   (PTR) &mips_ecoff_backend_data
 };
 
@@ -2713,5 +2730,7 @@ const bfd_target ecoff_biglittle_vec =
      BFD_JUMP_TABLE_LINK (_bfd_ecoff),
      BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
 
+  NULL,
+
   (PTR) &mips_ecoff_backend_data
 };
This page took 0.035808 seconds and 4 git commands to generate.