* bfd-in.h: Remove "taken from the source" comment.
[deliverable/binutils-gdb.git] / bfd / coff-alpha.c
index b1134d08ef952e6eb7b9c3a1f54fa3b64642c9f7..5c02c3a7f155bc65d384716995609d4be4a9e1b5 100644 (file)
@@ -1,5 +1,6 @@
 /* BFD back-end for ALPHA Extended-Coff files.
-   Copyright 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
+   Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+   Free Software Foundation, Inc.
    Modified from coff-mips.c by Steve Chamberlain <sac@cygnus.com> and
    Ian Lance Taylor <ian@cygnus.com>.
 
@@ -47,6 +48,8 @@ static void alpha_adjust_reloc_in PARAMS ((bfd *,
                                           arelent *));
 static void alpha_adjust_reloc_out PARAMS ((bfd *, const arelent *,
                                            struct internal_reloc *));
+static reloc_howto_type *alpha_bfd_reloc_type_lookup
+ PARAMS ((bfd *, bfd_reloc_code_real_type));
 static bfd_byte *alpha_ecoff_get_relocated_section_contents
   PARAMS ((bfd *abfd, struct bfd_link_info *, struct bfd_link_order *,
           bfd_byte *data, boolean relocateable, asymbol **symbols));
@@ -73,32 +76,32 @@ static bfd *alpha_ecoff_get_elt_at_index PARAMS ((bfd *, symindex));
    symbol, and lineno ones.  Give them ecoff names.  Define some
    accessor macros for the large sizes used for Alpha ECOFF.  */
 
-#define GET_FILEHDR_SYMPTR bfd_h_get_64
-#define PUT_FILEHDR_SYMPTR bfd_h_put_64
-#define GET_AOUTHDR_TSIZE bfd_h_get_64
-#define PUT_AOUTHDR_TSIZE bfd_h_put_64
-#define GET_AOUTHDR_DSIZE bfd_h_get_64
-#define PUT_AOUTHDR_DSIZE bfd_h_put_64
-#define GET_AOUTHDR_BSIZE bfd_h_get_64
-#define PUT_AOUTHDR_BSIZE bfd_h_put_64
-#define GET_AOUTHDR_ENTRY bfd_h_get_64
-#define PUT_AOUTHDR_ENTRY bfd_h_put_64
-#define GET_AOUTHDR_TEXT_START bfd_h_get_64
-#define PUT_AOUTHDR_TEXT_START bfd_h_put_64
-#define GET_AOUTHDR_DATA_START bfd_h_get_64
-#define PUT_AOUTHDR_DATA_START bfd_h_put_64
-#define GET_SCNHDR_PADDR bfd_h_get_64
-#define PUT_SCNHDR_PADDR bfd_h_put_64
-#define GET_SCNHDR_VADDR bfd_h_get_64
-#define PUT_SCNHDR_VADDR bfd_h_put_64
-#define GET_SCNHDR_SIZE bfd_h_get_64
-#define PUT_SCNHDR_SIZE bfd_h_put_64
-#define GET_SCNHDR_SCNPTR bfd_h_get_64
-#define PUT_SCNHDR_SCNPTR bfd_h_put_64
-#define GET_SCNHDR_RELPTR bfd_h_get_64
-#define PUT_SCNHDR_RELPTR bfd_h_put_64
-#define GET_SCNHDR_LNNOPTR bfd_h_get_64
-#define PUT_SCNHDR_LNNOPTR bfd_h_put_64
+#define GET_FILEHDR_SYMPTR H_GET_64
+#define PUT_FILEHDR_SYMPTR H_PUT_64
+#define GET_AOUTHDR_TSIZE H_GET_64
+#define PUT_AOUTHDR_TSIZE H_PUT_64
+#define GET_AOUTHDR_DSIZE H_GET_64
+#define PUT_AOUTHDR_DSIZE H_PUT_64
+#define GET_AOUTHDR_BSIZE H_GET_64
+#define PUT_AOUTHDR_BSIZE H_PUT_64
+#define GET_AOUTHDR_ENTRY H_GET_64
+#define PUT_AOUTHDR_ENTRY H_PUT_64
+#define GET_AOUTHDR_TEXT_START H_GET_64
+#define PUT_AOUTHDR_TEXT_START H_PUT_64
+#define GET_AOUTHDR_DATA_START H_GET_64
+#define PUT_AOUTHDR_DATA_START H_PUT_64
+#define GET_SCNHDR_PADDR H_GET_64
+#define PUT_SCNHDR_PADDR H_PUT_64
+#define GET_SCNHDR_VADDR H_GET_64
+#define PUT_SCNHDR_VADDR H_PUT_64
+#define GET_SCNHDR_SIZE H_GET_64
+#define PUT_SCNHDR_SIZE H_PUT_64
+#define GET_SCNHDR_SCNPTR H_GET_64
+#define PUT_SCNHDR_SCNPTR H_PUT_64
+#define GET_SCNHDR_RELPTR H_GET_64
+#define PUT_SCNHDR_RELPTR H_PUT_64
+#define GET_SCNHDR_LNNOPTR H_GET_64
+#define PUT_SCNHDR_LNNOPTR H_PUT_64
 
 #define ALPHAECOFF
 
@@ -125,13 +128,13 @@ reloc_nil PARAMS ((bfd *, arelent *, asymbol *, PTR,
 
 static bfd_reloc_status_type
 reloc_nil (abfd, reloc, sym, data, sec, output_bfd, error_message)
-     bfd *abfd;
-     arelent *reloc;
-     asymbol *sym;
-     PTR data;
-     asection *sec;
-     bfd *output_bfd;
-     char **error_message;
+     bfd *abfd ATTRIBUTE_UNUSED;
+     arelent *reloc ATTRIBUTE_UNUSED;
+     asymbol *sym ATTRIBUTE_UNUSED;
+     PTR data ATTRIBUTE_UNUSED;
+     asection *sec ATTRIBUTE_UNUSED;
+     bfd *output_bfd ATTRIBUTE_UNUSED;
+     char **error_message ATTRIBUTE_UNUSED;
 {
   return bfd_reloc_ok;
 }
@@ -470,7 +473,7 @@ alpha_ecoff_object_p (abfd)
 
 static boolean
 alpha_ecoff_bad_format_hook (abfd, filehdr)
-     bfd *abfd;
+     bfd *abfd ATTRIBUTE_UNUSED;
      PTR filehdr;
 {
   struct internal_filehdr *internal_f = (struct internal_filehdr *) filehdr;
@@ -527,8 +530,8 @@ alpha_ecoff_swap_reloc_in (abfd, ext_ptr, intern)
 {
   const RELOC *ext = (RELOC *) ext_ptr;
 
-  intern->r_vaddr = bfd_h_get_64 (abfd, (bfd_byte *) ext->r_vaddr);
-  intern->r_symndx = bfd_h_get_32 (abfd, (bfd_byte *) ext->r_symndx);
+  intern->r_vaddr = H_GET_64 (abfd, ext->r_vaddr);
+  intern->r_symndx = H_GET_32 (abfd, ext->r_symndx);
 
   BFD_ASSERT (bfd_header_little_endian (abfd));
 
@@ -600,8 +603,8 @@ alpha_ecoff_swap_reloc_out (abfd, intern, dst)
   BFD_ASSERT (intern->r_extern
              || (intern->r_symndx >= 0 && intern->r_symndx <= 14));
 
-  bfd_h_put_64 (abfd, intern->r_vaddr, (bfd_byte *) ext->r_vaddr);
-  bfd_h_put_32 (abfd, symndx, (bfd_byte *) ext->r_symndx);
+  H_PUT_64 (abfd, intern->r_vaddr, ext->r_vaddr);
+  H_PUT_32 (abfd, symndx, ext->r_symndx);
 
   BFD_ASSERT (bfd_header_little_endian (abfd));
 
@@ -634,9 +637,13 @@ alpha_adjust_reloc_in (abfd, intern, rptr)
     case ALPHA_R_SREL16:
     case ALPHA_R_SREL32:
     case ALPHA_R_SREL64:
-      /* The PC relative relocs do not seem to use the section VMA as
-        a negative addend.  */
-      rptr->addend = 0;
+      /* This relocs appear to be fully resolved when they are against
+         internal symbols.  Against external symbols, BRADDR at least
+         appears to be resolved against the next instruction.  */
+      if (! intern->r_extern)
+       rptr->addend = 0;
+      else
+       rptr->addend = - (intern->r_vaddr + 4);
       break;
 
     case ALPHA_R_GPREL32:
@@ -701,7 +708,7 @@ alpha_adjust_reloc_in (abfd, intern, rptr)
 
 static void
 alpha_adjust_reloc_out (abfd, rel, intern)
-     bfd *abfd;
+     bfd *abfd ATTRIBUTE_UNUSED;
      const arelent *rel;
      struct internal_reloc *intern;
 {
@@ -759,13 +766,12 @@ alpha_ecoff_get_relocated_section_contents (abfd, link_info, link_order,
   bfd *output_bfd = relocateable ? abfd : (bfd *) NULL;
   bfd_vma gp;
   boolean gp_undefined;
-  bfd_vma gp;
   bfd_vma stack[RELOC_STACKSIZE];
   int tos = 0;
 
   if (reloc_size < 0)
     goto error_return;
-  reloc_vector = (arelent **) bfd_malloc (reloc_size);
+  reloc_vector = (arelent **) bfd_malloc ((bfd_size_type) reloc_size);
   if (reloc_vector == NULL && reloc_size != 0)
     goto error_return;
 
@@ -872,7 +878,7 @@ alpha_ecoff_get_relocated_section_contents (abfd, link_info, link_order,
          if (r == bfd_reloc_ok && gp_undefined)
            {
              r = bfd_reloc_dangerous;
-             err = (char *) "GP relative relocation used when GP not defined";
+             err = (char *) _("GP relative relocation used when GP not defined");
            }
          break;
 
@@ -909,7 +915,7 @@ alpha_ecoff_get_relocated_section_contents (abfd, link_info, link_order,
              {
                r = bfd_reloc_dangerous;
                err =
-                 (char *) "GP relative relocation used when GP not defined";
+                 (char *) _("GP relative relocation used when GP not defined");
              }
          }
          break;
@@ -919,7 +925,7 @@ alpha_ecoff_get_relocated_section_contents (abfd, link_info, link_order,
             does not cause anything to happen, itself.  */
          rel->address += input_section->output_offset;
          break;
-           
+
        case ALPHA_R_GPDISP:
          /* This marks the ldah of an ldah/lda pair which loads the
             gp register with the difference of the gp value and the
@@ -975,7 +981,7 @@ alpha_ecoff_get_relocated_section_contents (abfd, link_info, link_order,
            rel->address += input_section->output_offset;
          }
          break;
-         
+
        case ALPHA_R_OP_PUSH:
          /* Push a value on the reloc evaluation stack.  */
          {
@@ -1101,7 +1107,7 @@ alpha_ecoff_get_relocated_section_contents (abfd, link_info, link_order,
            stack[tos - 1] >>= relocation;
          }
          break;
-           
+
        case ALPHA_R_GPVALUE:
          /* I really don't know if this does the right thing.  */
          gp = rel->addend;
@@ -1121,17 +1127,17 @@ alpha_ecoff_get_relocated_section_contents (abfd, link_info, link_order,
          os->reloc_count++;
        }
 
-      if (r != bfd_reloc_ok) 
+      if (r != bfd_reloc_ok)
        {
          switch (r)
            {
            case bfd_reloc_undefined:
              if (! ((*link_info->callbacks->undefined_symbol)
                     (link_info, bfd_asymbol_name (*rel->sym_ptr_ptr),
-                     input_bfd, input_section, rel->address)))
+                     input_bfd, input_section, rel->address, true)))
                goto error_return;
              break;
-           case bfd_reloc_dangerous: 
+           case bfd_reloc_dangerous:
              if (! ((*link_info->callbacks->reloc_dangerous)
                     (link_info, err, input_bfd, input_section,
                      rel->address)))
@@ -1170,7 +1176,7 @@ alpha_ecoff_get_relocated_section_contents (abfd, link_info, link_order,
 
 static reloc_howto_type *
 alpha_bfd_reloc_type_lookup (abfd, code)
-     bfd *abfd;
+     bfd *abfd ATTRIBUTE_UNUSED;
      bfd_reloc_code_real_type code;
 {
   int alpha_type;
@@ -1244,7 +1250,7 @@ alpha_bfd_reloc_type_lookup (abfd, code)
 
 static bfd_vma
 alpha_convert_external_reloc (output_bfd, info, input_bfd, ext_rel, h)
-     bfd *output_bfd;
+     bfd *output_bfd ATTRIBUTE_UNUSED;
      struct bfd_link_info *info;
      bfd *input_bfd;
      struct external_reloc *ext_rel;
@@ -1271,7 +1277,7 @@ alpha_convert_external_reloc (output_bfd, info, input_bfd, ext_rel, h)
       hsec = h->root.u.def.section;
       name = bfd_get_section_name (output_bfd, hsec->output_section);
 
-      r_symndx = -1;
+      r_symndx = (unsigned long) -1;
       switch (name[1])
        {
        case 'A':
@@ -1327,8 +1333,8 @@ alpha_convert_external_reloc (output_bfd, info, input_bfd, ext_rel, h)
            r_symndx = RELOC_SECTION_XDATA;
          break;
        }
-                     
-      if (r_symndx == -1)
+
+      if (r_symndx == (unsigned long) -1)
        abort ();
 
       /* Add the section VMA and the symbol value.  */
@@ -1341,7 +1347,7 @@ alpha_convert_external_reloc (output_bfd, info, input_bfd, ext_rel, h)
       /* Change the symndx value to the right one for
         the output BFD.  */
       r_symndx = h->indx;
-      if (r_symndx == -1)
+      if (r_symndx == (unsigned long) -1)
        {
          /* Caller must give an error.  */
          r_symndx = 0;
@@ -1350,8 +1356,7 @@ alpha_convert_external_reloc (output_bfd, info, input_bfd, ext_rel, h)
     }
 
   /* Write out the new r_symndx value.  */
-  bfd_h_put_32 (input_bfd, (bfd_vma) r_symndx,
-               (bfd_byte *) ext_rel->r_symndx);
+  H_PUT_32 (input_bfd, r_symndx, ext_rel->r_symndx);
 
   return relocation;
 }
@@ -1378,6 +1383,7 @@ alpha_relocate_section (output_bfd, info, input_bfd, input_section,
   int tos = 0;
   struct external_reloc *ext_rel;
   struct external_reloc *ext_rel_end;
+  bfd_size_type amt;
 
   /* We keep a table mapping the symndx found in an internal reloc to
      the appropriate section.  This is faster than looking up the
@@ -1385,10 +1391,8 @@ alpha_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;
 
@@ -1432,7 +1436,7 @@ alpha_relocate_section (output_bfd, info, input_bfd, input_section,
      pointer.  To support large programs, we need to allow multiple
      global pointers.  This works as long as each input .lita section
      is <64KB big.  This implies that when producing relocatable
-     output, the .lita section is limited to 64KB. . */
+     output, the .lita section is limited to 64KB. .  */
 
   lita_sec = symndx_to_section[RELOC_SECTION_LITA];
   gp = _bfd_get_gp_value (output_bfd);
@@ -1445,9 +1449,9 @@ alpha_relocate_section (output_bfd, info, input_bfd, input_section,
       lita_sec_data = ecoff_section_data (input_bfd, lita_sec);
       if (lita_sec_data == NULL)
        {
+         amt = sizeof (struct ecoff_section_tdata);
          lita_sec_data = ((struct ecoff_section_tdata *)
-                          bfd_zalloc (input_bfd,
-                                      sizeof (struct ecoff_section_tdata)));
+                          bfd_zalloc (input_bfd, amt));
          ecoff_section_data (input_bfd, lita_sec) = lita_sec_data;
        }
 
@@ -1474,14 +1478,13 @@ alpha_relocate_section (output_bfd, info, input_bfd, input_section,
              /* Either gp hasn't been set at all or the current gp
                 cannot address this .lita section.  In both cases we
                 reset the gp to point into the "middle" of the
-                current input .lita section.  For now, we issue a
-                warning when redefining the gp value (probably should
-                be made optional). */
+                current input .lita section.  */
              if (gp && !ecoff_data (output_bfd)->issued_multiple_gp_warning)
                {
-                 (*_bfd_error_handler) 
-                   ("%s: warning: using multiple gp values",
-                    bfd_get_filename (output_bfd));
+                 (*info->callbacks->warning) (info,
+                                              _("using multiple gp values"),
+                                              (char *) NULL, output_bfd,
+                                              (asection *) NULL, (bfd_vma) 0);
                  ecoff_data (output_bfd)->issued_multiple_gp_warning = true;
                }
              if (lita_vma < gp - 0x8000)
@@ -1517,8 +1520,8 @@ alpha_relocate_section (output_bfd, info, input_bfd, input_section,
       boolean gp_usedp;
       bfd_vma addend;
 
-      r_vaddr = bfd_h_get_64 (input_bfd, (bfd_byte *) ext_rel->r_vaddr);
-      r_symndx = bfd_h_get_32 (input_bfd, (bfd_byte *) ext_rel->r_symndx);
+      r_vaddr = H_GET_64 (input_bfd, ext_rel->r_vaddr);
+      r_symndx = H_GET_32 (input_bfd, ext_rel->r_symndx);
 
       r_type = ((ext_rel->r_bits[0] & RELOC_BITS0_TYPE_LITTLE)
                >> RELOC_BITS0_TYPE_SH_LITTLE);
@@ -1547,19 +1550,23 @@ alpha_relocate_section (output_bfd, info, input_bfd, input_section,
             address of the relocation does not appear to include the
             section VMA, unlike the other relocation types.  */
          if (info->relocateable)
-           bfd_h_put_64 (input_bfd,
-                         input_section->output_offset + r_vaddr,
-                         (bfd_byte *) ext_rel->r_vaddr);
+           H_PUT_64 (input_bfd, input_section->output_offset + r_vaddr,
+                     ext_rel->r_vaddr);
          adjust_addrp = false;
          break;
 
        case ALPHA_R_REFLONG:
        case ALPHA_R_REFQUAD:
-       case ALPHA_R_BRADDR:
        case ALPHA_R_HINT:
+         relocatep = true;
+         break;
+
+       case ALPHA_R_BRADDR:
        case ALPHA_R_SREL16:
        case ALPHA_R_SREL32:
        case ALPHA_R_SREL64:
+         if (r_extern)
+           addend += - (r_vaddr + 4);
          relocatep = true;
          break;
 
@@ -1610,7 +1617,7 @@ alpha_relocate_section (output_bfd, info, input_bfd, input_section,
          /* See ALPHA_R_LITERAL above for the uses of this reloc.  It
             does not cause anything to happen, itself.  */
          break;
-           
+
        case ALPHA_R_GPDISP:
          /* This marks the ldah of an ldah/lda pair which loads the
             gp register with the difference of the gp value and the
@@ -1670,7 +1677,7 @@ alpha_relocate_section (output_bfd, info, input_bfd, input_section,
            gp_usedp = true;
          }
          break;
-         
+
        case ALPHA_R_OP_PUSH:
        case ALPHA_R_OP_PSUB:
        case ALPHA_R_OP_PRSHIFT:
@@ -1710,7 +1717,7 @@ alpha_relocate_section (output_bfd, info, input_bfd, input_section,
                         relocated.  */
                      if (! ((*info->callbacks->undefined_symbol)
                             (info, h->root.root.string, input_bfd,
-                             input_section, (bfd_vma) 0)))
+                             input_section, (bfd_vma) 0, true)))
                        return false;
                      addend = 0;
                    }
@@ -1741,8 +1748,7 @@ alpha_relocate_section (output_bfd, info, input_bfd, input_section,
          if (info->relocateable)
            {
              /* Adjust r_vaddr by the addend.  */
-             bfd_h_put_64 (input_bfd, addend,
-                           (bfd_byte *) ext_rel->r_vaddr);
+             H_PUT_64 (input_bfd, addend, ext_rel->r_vaddr);
            }
          else
            {
@@ -1912,7 +1918,7 @@ alpha_relocate_section (output_bfd, info, input_bfd, input_section,
                      if (! ((*info->callbacks->undefined_symbol)
                             (info, h->root.root.string, input_bfd,
                              input_section,
-                             r_vaddr - input_section->vma)))
+                             r_vaddr - input_section->vma, true)))
                        return false;
                      relocation = 0;
                    }
@@ -1969,18 +1975,18 @@ alpha_relocate_section (output_bfd, info, input_bfd, input_section,
       if (info->relocateable && adjust_addrp)
        {
          /* Change the address of the relocation.  */
-         bfd_h_put_64 (input_bfd,
-                       (input_section->output_section->vma
-                        + input_section->output_offset
-                        - input_section->vma
-                        + r_vaddr),
-                       (bfd_byte *) ext_rel->r_vaddr);
+         H_PUT_64 (input_bfd,
+                   (input_section->output_section->vma
+                    + input_section->output_offset
+                    - input_section->vma
+                    + r_vaddr),
+                   ext_rel->r_vaddr);
        }
 
       if (gp_usedp && gp_undefined)
        {
          if (! ((*info->callbacks->reloc_dangerous)
-                (info, "GP relative relocation when GP not defined",
+                (info, _("GP relative relocation used when GP not defined"),
                  input_bfd, input_section, r_vaddr - input_section->vma)))
            return false;
          /* Only give the error once per link.  */
@@ -1999,12 +2005,11 @@ alpha_relocate_section (output_bfd, info, input_bfd, input_section,
 /* Do final adjustments to the filehdr and the aouthdr.  This routine
    sets the dynamic bits in the file header.  */
 
-/*ARGSUSED*/
 static boolean
 alpha_adjust_headers (abfd, fhdr, ahdr)
      bfd *abfd;
      struct internal_filehdr *fhdr;
-     struct internal_aouthdr *ahdr;
+     struct internal_aouthdr *ahdr ATTRIBUTE_UNUSED;
 {
   if ((abfd->flags & (DYNAMIC | EXEC_P)) == (DYNAMIC | EXEC_P))
     fhdr->f_flags |= F_ALPHA_CALL_SHARED;
@@ -2053,12 +2058,12 @@ alpha_ecoff_read_ar_hdr (abfd)
 
       /* This is a compressed file.  We must set the size correctly.
          The size is the eight bytes after the dummy file header.  */
-      if (bfd_seek (abfd, FILHSZ, SEEK_CUR) != 0
-         || bfd_read (ab, 1, 8, abfd) != 8
-         || bfd_seek (abfd, - (FILHSZ + 8), SEEK_CUR) != 0)
+      if (bfd_seek (abfd, (file_ptr) FILHSZ, SEEK_CUR) != 0
+         || bfd_bread (ab, (bfd_size_type) 8, abfd) != 8
+         || bfd_seek (abfd, (file_ptr) (- (FILHSZ + 8)), SEEK_CUR) != 0)
        return NULL;
 
-      ret->parsed_size = bfd_h_get_64 (abfd, ab);
+      ret->parsed_size = H_GET_64 (abfd, ab);
     }
 
   return (PTR) ret;
@@ -2096,20 +2101,20 @@ alpha_ecoff_get_elt_at_filepos (archive, filepos)
     return nbfd;
 
   /* We must uncompress this element.  We do this by copying it into a
-     memory buffer, and making bfd_read and bfd_seek use that buffer.
+     memory buffer, and making bfd_bread and bfd_seek use that buffer.
      This can use a lot of memory, but it's simpler than getting a
      temporary file, making that work with the file descriptor caching
      code, and making sure that it is deleted at all appropriate
      times.  It can be changed if it ever becomes important.  */
 
   /* The compressed file starts with a dummy ECOFF file header.  */
-  if (bfd_seek (nbfd, FILHSZ, SEEK_SET) != 0)
+  if (bfd_seek (nbfd, (file_ptr) FILHSZ, SEEK_SET) != 0)
     goto error_return;
 
   /* The next eight bytes are the real file size.  */
-  if (bfd_read (ab, 1, 8, nbfd) != 8)
+  if (bfd_bread (ab, (bfd_size_type) 8, nbfd) != 8)
     goto error_return;
-  size = bfd_h_get_64 (nbfd, ab);
+  size = H_GET_64 (nbfd, ab);
 
   if (size == 0)
     buf = NULL;
@@ -2127,8 +2132,8 @@ alpha_ecoff_get_elt_at_filepos (archive, filepos)
 
       left = size;
 
-      /* I don't know what the next eight bytes are for. */
-      if (bfd_read (ab, 1, 8, nbfd) != 8)
+      /* I don't know what the next eight bytes are for.  */
+      if (bfd_bread (ab, (bfd_size_type) 8, nbfd) != 8)
        goto error_return;
 
       /* This is the uncompression algorithm.  It's a simple
@@ -2139,7 +2144,7 @@ alpha_ecoff_get_elt_at_filepos (archive, filepos)
         next eight bytes in the output stream.  */
       memset (dict, 0, sizeof dict);
       h = 0;
-      while (bfd_read (&b, 1, 1, nbfd) == 1)
+      while (bfd_bread (&b, (bfd_size_type) 1, nbfd) == 1)
        {
          unsigned int i;
 
@@ -2151,7 +2156,7 @@ alpha_ecoff_get_elt_at_filepos (archive, filepos)
                n = dict[h];
              else
                {
-                 if (! bfd_read (&n, 1, 1, nbfd))
+                 if (! bfd_bread (&n, (bfd_size_type) 1, nbfd))
                    goto error_return;
                  dict[h] = n;
                }
@@ -2174,7 +2179,7 @@ alpha_ecoff_get_elt_at_filepos (archive, filepos)
 
   /* Now the uncompressed file contents are in buf.  */
   bim = ((struct bfd_in_memory *)
-        bfd_alloc (nbfd, sizeof (struct bfd_in_memory)));
+        bfd_alloc (nbfd, (bfd_size_type) sizeof (struct bfd_in_memory)));
   if (bim == NULL)
     goto error_return;
   bim->size = size;
@@ -2192,7 +2197,7 @@ alpha_ecoff_get_elt_at_filepos (archive, filepos)
  error_return:
   if (nbfd != NULL)
     bfd_close (nbfd);
-  return NULL;  
+  return NULL;
 }
 
 /* Open the next archived file.  */
@@ -2220,7 +2225,7 @@ alpha_ecoff_openr_next_archived_file (archive, last_file)
 
       /* Pad to an even boundary...
         Note that last_file->origin can be odd in the case of
-        BSD-4.4-style element with a long odd size. */
+        BSD-4.4-style element with a long odd size.  */
       filestart = last_file->origin + size;
       filestart += filestart % 2;
     }
@@ -2257,13 +2262,14 @@ static const struct ecoff_backend_data alpha_ecoff_backend_data =
     (unsigned (*) PARAMS ((bfd *,PTR,PTR))) bfd_void, /* reloc_out */
     alpha_ecoff_swap_filehdr_out, alpha_ecoff_swap_aouthdr_out,
     alpha_ecoff_swap_scnhdr_out,
-    FILHSZ, AOUTSZ, SCNHSZ, 0, 0, 0, 0, true,
+    FILHSZ, AOUTSZ, SCNHSZ, 0, 0, 0, 0, FILNMLEN, true, false, 4, false, 2,
     alpha_ecoff_swap_filehdr_in, alpha_ecoff_swap_aouthdr_in,
     alpha_ecoff_swap_scnhdr_in, NULL,
     alpha_ecoff_bad_format_hook, _bfd_ecoff_set_arch_mach_hook,
     alpha_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_alpha,
@@ -2348,6 +2354,9 @@ static const struct ecoff_backend_data alpha_ecoff_backend_data =
 
 /* Relaxing sections is generic.  */
 #define _bfd_ecoff_bfd_relax_section bfd_generic_relax_section
+#define _bfd_ecoff_bfd_gc_sections bfd_generic_gc_sections
+#define _bfd_ecoff_bfd_merge_sections bfd_generic_merge_sections
+#define _bfd_ecoff_bfd_discard_group bfd_generic_discard_group
 
 const bfd_target ecoffalpha_little_vec =
 {
@@ -2388,5 +2397,7 @@ const bfd_target ecoffalpha_little_vec =
      BFD_JUMP_TABLE_LINK (_bfd_ecoff),
      BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
 
+  NULL,
+
   (PTR) &alpha_ecoff_backend_data
 };
This page took 0.03288 seconds and 4 git commands to generate.