General cleanup--added prototypes, removed a few unused variables,
authorIan Lance Taylor <ian@airs.com>
Tue, 2 Feb 1993 22:17:27 +0000 (22:17 +0000)
committerIan Lance Taylor <ian@airs.com>
Tue, 2 Feb 1993 22:17:27 +0000 (22:17 +0000)
fixed up comments a bit.  Also set version stamp in a.out header to
0x20a rather than 0, to keep the Ultrix linker happy.

bfd/coff-mips.c

index bbd7b9eb57e090cb98f7451d8b3456703347a3c8..95dba88b2f84d5d2a41f20ef404624fc3459a94a 100644 (file)
@@ -1,7 +1,7 @@
 /* BFD back-end for MIPS Extended-Coff files.
-   Copyright 1990, 1991, 1992 Free Software Foundation, Inc.
+   Copyright 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
    Original version by Per Bothner.
-   Full support by Ian Lance Taylor, ian@cygnus.com.
+   Full support added by Ian Lance Taylor, ian@cygnus.com.
 
 This file is part of BFD, the Binary File Descriptor library.
 
@@ -133,7 +133,106 @@ typedef struct ecoff_symbol_struct
    of the swapping routines from coffswap.h, and some of the generic
    COFF routines in coffgen.c, but, unlike the real COFF targets, does
    not use coffcode.h itself.  */
-
+\f
+/* Prototypes for static functions.  */
+
+static boolean ecoff_bad_format_hook PARAMS ((bfd *abfd, PTR filehdr));
+static asection *ecoff_make_section_hook PARAMS ((bfd *abfd, char *name));
+static boolean ecoff_new_section_hook PARAMS ((bfd *abfd, asection *section));
+static boolean ecoff_mkobject PARAMS ((bfd *abfd));
+static PTR ecoff_mkobject_hook PARAMS ((bfd *abfd, PTR filehdr, PTR aouthdr));
+static boolean ecoff_set_arch_mach_hook PARAMS ((bfd *abfd, PTR filehdr));
+static long ecoff_sec_to_styp_flags PARAMS ((CONST char *name,
+                                            flagword flags));
+static flagword ecoff_styp_to_sec_flags PARAMS ((bfd *abfd, PTR hdr));
+static boolean ecoff_slurp_symbolic_info PARAMS ((bfd *abfd));
+static asymbol *ecoff_make_empty_symbol PARAMS ((bfd *abfd));
+static void ecoff_set_symbol_info PARAMS ((bfd *abfd, SYMR *ecoff_sym,
+                                          asymbol *asym, int ext));
+static boolean ecoff_slurp_symbol_table PARAMS ((bfd *abfd));
+static unsigned int ecoff_get_symtab_upper_bound PARAMS ((bfd *abfd));
+static unsigned int ecoff_get_symtab PARAMS ((bfd *abfd,
+                                             asymbol **alocation));
+static void ecoff_emit_aggregate PARAMS ((bfd *abfd, char *string,
+                                         RNDXR *rndx, long isym,
+                                         CONST char *which));
+static char *ecoff_type_to_string PARAMS ((bfd *abfd, union aux_ext *aux_ptr,
+                                          int indx, int bigendian));
+static void ecoff_print_symbol PARAMS ((bfd *abfd, PTR filep,
+                                       asymbol *symbol,
+                                       bfd_print_symbol_type how));
+static void ecoff_swap_reloc_in PARAMS ((bfd *abfd, RELOC *ext,
+                                        struct internal_reloc *intern));
+static unsigned int ecoff_swap_reloc_out PARAMS ((bfd *abfd, PTR src,
+                                                 PTR dst));
+static bfd_reloc_status_type ecoff_generic_reloc PARAMS ((bfd *abfd,
+                                                         arelent *reloc,
+                                                         asymbol *symbol,
+                                                         PTR data,
+                                                         asection *section,
+                                                         bfd *output_bfd));
+static bfd_reloc_status_type ecoff_refhi_reloc PARAMS ((bfd *abfd,
+                                                       arelent *reloc,
+                                                       asymbol *symbol,
+                                                       PTR data,
+                                                       asection *section,
+                                                       bfd *output_bfd));
+static bfd_reloc_status_type ecoff_gprel_reloc PARAMS ((bfd *abfd,
+                                                       arelent *reloc,
+                                                       asymbol *symbol,
+                                                       PTR data,
+                                                       asection *section,
+                                                       bfd *output_bfd));
+static boolean ecoff_slurp_reloc_table PARAMS ((bfd *abfd, asection *section,
+                                               asymbol **symbols));
+static unsigned int ecoff_canonicalize_reloc PARAMS ((bfd *abfd,
+                                                     asection *section,
+                                                     arelent **relptr,
+                                                     asymbol **symbols));
+static boolean ecoff_find_nearest_line PARAMS ((bfd *abfd,
+                                               asection *section,
+                                               asymbol **symbols,
+                                               bfd_vma offset,
+                                               CONST char **filename_ptr,
+                                               CONST char **fnname_ptr,
+                                               unsigned int *retline_ptr));
+static void ecoff_clear_output_flags PARAMS ((bfd *abfd));
+static boolean ecoff_rel PARAMS ((bfd *output_bfd, bfd_seclet_type *seclet,
+                                 asection *output_section, PTR data,
+                                 boolean relocateable));
+static boolean ecoff_dump_seclet PARAMS ((bfd *abfd, bfd_seclet_type *seclet,
+                                         asection *section, PTR data,
+                                         boolean relocateable));
+static long ecoff_add_string PARAMS ((bfd *output_bfd, FDR *fdr,
+                                     CONST char *string, boolean external));
+static boolean ecoff_get_debug PARAMS ((bfd *output_bfd,
+                                       bfd_seclet_type *seclet,
+                                       asection *section,
+                                       boolean relocateable));
+static boolean ecoff_bfd_seclet_link PARAMS ((bfd *abfd, PTR data,
+                                             boolean relocateable));
+static boolean ecoff_set_arch_mach PARAMS ((bfd *abfd,
+                                           enum bfd_architecture arch,
+                                           unsigned long machine));
+static int ecoff_sizeof_headers PARAMS ((bfd *abfd, boolean reloc));
+static void ecoff_compute_section_file_positions PARAMS ((bfd *abfd));
+static boolean ecoff_set_section_contents PARAMS ((bfd *abfd,
+                                                  asection *section,
+                                                  PTR location,
+                                                  file_ptr offset,
+                                                  bfd_size_type count));
+static boolean ecoff_write_object_contents PARAMS ((bfd *abfd));
+static unsigned int ecoff_armap_hash PARAMS ((CONST char *s,
+                                             unsigned int *rehash,
+                                             unsigned int size,
+                                             unsigned int hlog));
+static boolean ecoff_slurp_armap PARAMS ((bfd *abfd));
+static boolean ecoff_write_armap PARAMS ((bfd *abfd, unsigned int elength,
+                                         struct orl *map,
+                                         unsigned int orl_count,
+                                         int stridx));
+static bfd_target *ecoff_archive_p PARAMS ((bfd *abfd));
+\f
 /* Get the generic COFF swapping routines, except for the reloc,
    symbol, and lineno ones.  Give them ecoff names.  */
 #define MIPSECOFF
@@ -155,9 +254,9 @@ static asection bfd_debug_section = { "*DEBUG*" };
 /* See whether the magic number matches.  */
 
 static boolean
-DEFUN(ecoff_bad_format_hook, (abfd, filehdr),
-      bfd *abfd AND
-      PTR filehdr)
+ecoff_bad_format_hook (abfd, filehdr)
+     bfd *abfd;
+     PTR filehdr;
 {
   struct internal_filehdr *internal_f = (struct internal_filehdr *) filehdr;
 
@@ -170,9 +269,9 @@ DEFUN(ecoff_bad_format_hook, (abfd, filehdr),
 /* This is a hook needed by SCO COFF, but we have nothing to do.  */
 
 static asection *
-DEFUN (ecoff_make_section_hook, (abfd, name),
-       bfd *abfd AND
-       char *name)
+ecoff_make_section_hook (abfd, name)
+     bfd *abfd;
+     char *name;
 {
   return (asection *) NULL;
 }
@@ -180,9 +279,9 @@ DEFUN (ecoff_make_section_hook, (abfd, name),
 /* Initialize a new section.  */
 
 static boolean
-DEFUN (ecoff_new_section_hook, (abfd, section),
-       bfd *abfd AND
-       asection *section)
+ecoff_new_section_hook (abfd, section)
+     bfd *abfd;
+     asection *section;
 {
   section->alignment_power = abfd->xvec->align_power_min;
 
@@ -206,12 +305,16 @@ DEFUN (ecoff_new_section_hook, (abfd, section),
   return true;
 }
 
+/* Set the alignment of a section; we have nothing to do.  */
+
 #define ecoff_set_alignment_hook \
   ((void (*) PARAMS ((bfd *, asection *, PTR))) bfd_void)
 
+/* Create an ECOFF object.  */
+
 static boolean
-DEFUN (ecoff_mkobject, (abfd),
-       bfd *abfd)
+ecoff_mkobject (abfd)
+     bfd *abfd;
 {
   abfd->tdata.ecoff_obj_data = ((struct ecoff_tdata *)
                                bfd_zalloc (abfd, sizeof(ecoff_data_type)));
@@ -228,7 +331,7 @@ DEFUN (ecoff_mkobject, (abfd),
   return true;
 }
 
-/* Create the COFF backend specific information.  */
+/* Create the ECOFF backend specific information.  */
 
 static PTR
 ecoff_mkobject_hook (abfd, filehdr, aouthdr)
@@ -260,39 +363,39 @@ ecoff_mkobject_hook (abfd, filehdr, aouthdr)
 }
 
 /* Determine the machine architecture and type.  */
+
 static boolean
-DEFUN (ecoff_set_arch_mach_hook, (abfd, filehdr),
-       bfd *abfd AND
-       PTR filehdr)
+ecoff_set_arch_mach_hook (abfd, filehdr)
+     bfd *abfd;
+     PTR filehdr;
 {
-  long machine;
-  enum bfd_architecture arch;
   struct internal_filehdr *internal_f = (struct internal_filehdr *) filehdr;
+  enum bfd_architecture arch;
 
-  machine = 0;
-  switch (internal_f->f_magic) {
-  case  MIPS_MAGIC_1:
-  case  MIPS_MAGIC_2:
-  case  MIPS_MAGIC_3:
-    arch = bfd_arch_mips;
-    machine = 0;
-    break;
-
-  default:                     /* Unreadable input file type */
-    arch = bfd_arch_obscure;
-    break;
-  }
+  switch (internal_f->f_magic)
+    {
+    case MIPS_MAGIC_1:
+    case MIPS_MAGIC_2:
+    case MIPS_MAGIC_3:
+      arch = bfd_arch_mips;
+      break;
+
+    default:
+      arch = bfd_arch_obscure;
+      break;
+    }
+
+  bfd_default_set_arch_mach (abfd, arch, (unsigned long) 0);
 
-  bfd_default_set_arch_mach(abfd, arch, machine);
   return true;
 }
 
 /* Get the section s_flags to use for a section.  */
 
 static long
-DEFUN (sec_to_styp_flags, (name, flags),
-       CONST char *name AND
-       flagword flags)
+ecoff_sec_to_styp_flags (name, flags)
+     CONST char *name;
+     flagword flags;
 {
   long styp;
 
@@ -334,9 +437,9 @@ DEFUN (sec_to_styp_flags, (name, flags),
 /* Get the BFD flags to use for a section.  */
 
 static flagword
-DEFUN (styp_to_sec_flags, (abfd, hdr),
-       bfd *abfd AND
-       PTR hdr)
+ecoff_styp_to_sec_flags (abfd, hdr)
+     bfd *abfd;
+     PTR hdr;
 {
   struct internal_scnhdr *internal_s = (struct internal_scnhdr *) hdr;
   long styp_flags = internal_s->s_flags;
@@ -391,8 +494,8 @@ DEFUN (styp_to_sec_flags, (abfd, hdr),
    object file.  */
 
 static boolean
-DEFUN (ecoff_slurp_symbolic_info, (abfd),
-       bfd *abfd)
+ecoff_slurp_symbolic_info (abfd)
+     bfd *abfd;
 {
   struct hdr_ext external_symhdr;
   HDRR *internal_symhdr;
@@ -553,8 +656,8 @@ static asymbol *ecoff_scom_symbol_ptr;
 /* Create an empty symbol.  */
 
 static asymbol *
-DEFUN (ecoff_make_empty_symbol, (abfd),
-       bfd *abfd)
+ecoff_make_empty_symbol (abfd)
+     bfd *abfd;
 {
   ecoff_symbol_type *new;
 
@@ -575,11 +678,11 @@ DEFUN (ecoff_make_empty_symbol, (abfd),
 /* Set the BFD flags and section for an ECOFF symbol.  */
 
 static void
-DEFUN (ecoff_set_symbol_info, (abfd, ecoff_sym, asym, ext),
-       bfd *abfd AND
-       SYMR *ecoff_sym AND
-       asymbol *asym AND
-       int ext)
+ecoff_set_symbol_info (abfd, ecoff_sym, asym, ext)
+     bfd *abfd;
+     SYMR *ecoff_sym;
+     asymbol *asym;
+     int ext;
 {
   asym->the_bfd = abfd;
   asym->value = ecoff_sym->value;
@@ -729,8 +832,8 @@ DEFUN (ecoff_set_symbol_info, (abfd, ecoff_sym, asym, ext),
 /* Read an ECOFF symbol table.  */
 
 static boolean
-DEFUN (ecoff_slurp_symbol_table, (abfd),
-       bfd *abfd)
+ecoff_slurp_symbol_table (abfd)
+     bfd *abfd;
 {
   bfd_size_type internal_size;
   ecoff_symbol_type *internal;
@@ -808,8 +911,8 @@ DEFUN (ecoff_slurp_symbol_table, (abfd),
 }
 
 static unsigned int
-DEFUN (ecoff_get_symtab_upper_bound, (abfd),
-       bfd *abfd)
+ecoff_get_symtab_upper_bound (abfd)
+     bfd *abfd;
 {
   if (ecoff_slurp_symbolic_info (abfd) == false
       || bfd_get_symcount (abfd) == 0)
@@ -819,9 +922,9 @@ DEFUN (ecoff_get_symtab_upper_bound, (abfd),
 }
 
 static unsigned int
-DEFUN (ecoff_get_symtab, (abfd, alocation),
-       bfd *abfd AND
-       asymbol **alocation)
+ecoff_get_symtab (abfd, alocation)
+     bfd *abfd;
+     asymbol **alocation;
 {
   unsigned int counter = 0;
   ecoff_symbol_type *symbase;
@@ -842,18 +945,18 @@ DEFUN (ecoff_get_symtab, (abfd, alocation),
 }
 
 /* Turn ECOFF type information into a printable string.
-   emit_aggregate and type_to_string are from gcc/mips-tdump.c, with
-   swapping added and used_ptr removed.  */
+   ecoff_emit_aggregate and ecoff_type_to_string are from
+   gcc/mips-tdump.c, with swapping added and used_ptr removed.  */
 
 /* Write aggregate information to a string.  */
 
 static void
-DEFUN (emit_aggregate, (abfd, string, rndx, isym, which),
-       bfd *abfd AND
-       char *string AND
-       RNDXR *rndx AND
-       long isym AND
-       CONST char *which)
+ecoff_emit_aggregate (abfd, string, rndx, isym, which)
+     bfd *abfd;
+     char *string;
+     RNDXR *rndx;
+     long isym;
+     CONST char *which;
 {
   int ifd = rndx->rfd;
   int indx = rndx->index;
@@ -888,11 +991,11 @@ DEFUN (emit_aggregate, (abfd, string, rndx, isym, which),
 /* Convert the type information to string format.  */
 
 static char *
-DEFUN (type_to_string, (abfd, aux_ptr, indx, bigendian),
-       bfd *abfd AND
-       union aux_ext *aux_ptr AND
-       int indx AND
-       int bigendian)
+ecoff_type_to_string (abfd, aux_ptr, indx, bigendian)
+     bfd *abfd;
+     union aux_ext *aux_ptr;
+     int indx;
+     int bigendian;
 {
   AUXU u;
   struct qual {
@@ -989,9 +1092,9 @@ DEFUN (type_to_string, (abfd, aux_ptr, indx, bigendian),
 
     case btStruct:             /* Structure (Record) */
       ecoff_swap_rndx_in (bigendian, &aux_ptr[indx].a_rndx, &rndx);
-      emit_aggregate (abfd, p1, &rndx,
-                     AUX_GET_ISYM (bigendian, &aux_ptr[indx+1]),
-                     "struct");
+      ecoff_emit_aggregate (abfd, p1, &rndx,
+                           AUX_GET_ISYM (bigendian, &aux_ptr[indx+1]),
+                           "struct");
       indx++;                  /* skip aux words */
       break;
 
@@ -1001,9 +1104,9 @@ DEFUN (type_to_string, (abfd, aux_ptr, indx, bigendian),
 
     case btUnion:              /* Union */
       ecoff_swap_rndx_in (bigendian, &aux_ptr[indx].a_rndx, &rndx);
-      emit_aggregate (abfd, p1, &rndx,
-                     AUX_GET_ISYM (bigendian, &aux_ptr[indx+1]),
-                     "union");
+      ecoff_emit_aggregate (abfd, p1, &rndx,
+                           AUX_GET_ISYM (bigendian, &aux_ptr[indx+1]),
+                           "union");
       indx++;                  /* skip aux words */
       break;
 
@@ -1013,9 +1116,9 @@ DEFUN (type_to_string, (abfd, aux_ptr, indx, bigendian),
 
     case btEnum:               /* Enumeration */
       ecoff_swap_rndx_in (bigendian, &aux_ptr[indx].a_rndx, &rndx);
-      emit_aggregate (abfd, p1, &rndx,
-                     AUX_GET_ISYM (bigendian, &aux_ptr[indx+1]),
-                     "enum");
+      ecoff_emit_aggregate (abfd, p1, &rndx,
+                           AUX_GET_ISYM (bigendian, &aux_ptr[indx+1]),
+                           "enum");
       indx++;                  /* skip aux words */
       break;
 
@@ -1194,11 +1297,11 @@ DEFUN (type_to_string, (abfd, aux_ptr, indx, bigendian),
 /* Print information about an ECOFF symbol.  */
 
 static void
-DEFUN (ecoff_print_symbol, (abfd, filep, symbol, how),
-       bfd *abfd AND
-       PTR filep AND
-       asymbol *symbol AND
-       bfd_print_symbol_type how)
+ecoff_print_symbol (abfd, filep, symbol, how)
+     bfd *abfd;
+     PTR filep;
+     asymbol *symbol;
+     bfd_print_symbol_type how;
 {
   FILE *file = (FILE *)filep;
 
@@ -1341,8 +1444,8 @@ DEFUN (ecoff_print_symbol, (abfd, filep, symbol, how),
                          (AUX_GET_ISYM (bigendian,
                                         &aux_base[ecoff_ext.asym.index])
                           + sym_base),
-                         type_to_string (abfd, aux_base, indx + 1,
-                                         bigendian));
+                         ecoff_type_to_string (abfd, aux_base, indx + 1,
+                                               bigendian));
                else
                  printf ("\n      Local symbol: %d",
                          (indx
@@ -1353,7 +1456,8 @@ DEFUN (ecoff_print_symbol, (abfd, filep, symbol, how),
              default:
                if (!MIPS_IS_STAB (&ecoff_ext.asym))
                  printf ("\n      Type: %s",
-                         type_to_string (abfd, aux_base, indx, bigendian));
+                         ecoff_type_to_string (abfd, aux_base, indx,
+                                               bigendian));
                break;
              }
          }
@@ -1369,10 +1473,10 @@ DEFUN (ecoff_print_symbol, (abfd, filep, symbol, how),
 /* Swap a reloc in.  */
 
 static void
-DEFUN (ecoff_swap_reloc_in, (abfd, ext, intern),
-       bfd *abfd AND
-       RELOC *ext AND
-       struct internal_reloc *intern)
+ecoff_swap_reloc_in (abfd, ext, intern)
+     bfd *abfd;
+     RELOC *ext;
+     struct internal_reloc *intern;
 {
   intern->r_vaddr = bfd_h_get_32 (abfd, (bfd_byte *) ext->r_vaddr);
   if (abfd->xvec->header_byteorder_big_p != false)
@@ -1404,10 +1508,10 @@ DEFUN (ecoff_swap_reloc_in, (abfd, ext, intern),
 /* Swap a reloc out.  */
 
 static unsigned int
-DEFUN (ecoff_swap_reloc_out, (abfd, src, dst),
-       bfd *abfd AND
-       PTR src AND
-       PTR dst)
+ecoff_swap_reloc_out (abfd, src, dst)
+     bfd *abfd;
+     PTR src;
+     PTR dst;
 {
   struct internal_reloc *intern = (struct internal_reloc *) src;
   RELOC *ext = (RELOC *) dst;
@@ -1813,10 +1917,10 @@ static reloc_howto_type ecoff_howto_table[] =
 /* Read in the relocs for a section.  */
 
 static boolean
-DEFUN (ecoff_slurp_reloc_table, (abfd, section, symbols),
-       bfd *abfd AND
-       asection *section AND
-       asymbol **symbols)
+ecoff_slurp_reloc_table (abfd, section, symbols)
+     bfd *abfd;
+     asection *section;
+     asymbol **symbols;
 {
   RELOC *external_relocs;
   arelent *internal_relocs;
@@ -1918,11 +2022,11 @@ DEFUN (ecoff_slurp_reloc_table, (abfd, section, symbols),
 /* Get a canonical list of relocs.  */
 
 static unsigned int
-DEFUN (ecoff_canonicalize_reloc, (abfd, section, relptr, symbols),
-       bfd *abfd AND
-       asection *section AND
-       arelent **relptr AND
-       asymbol **symbols)
+ecoff_canonicalize_reloc (abfd, section, relptr, symbols)
+     bfd *abfd;
+     asection *section;
+     arelent **relptr;
+     asymbol **symbols;
 {
   unsigned int count;
 
@@ -1963,20 +2067,20 @@ DEFUN (ecoff_canonicalize_reloc, (abfd, section, relptr, symbols),
    wanted location.  */
 
 static boolean
-DEFUN (ecoff_find_nearest_line, (abfd,
-                                section,
-                                ignore_symbols,
-                                offset,
-                                filename_ptr,
-                                functionname_ptr,
-                                retline_ptr),
-       bfd *abfd AND
-       asection *section AND
-       asymbol **ignore_symbols AND
-       bfd_vma offset AND
-       CONST char **filename_ptr AND
-       CONST char **functionname_ptr AND
-       unsigned int *retline_ptr)
+ecoff_find_nearest_line (abfd,
+                        section,
+                        ignore_symbols,
+                        offset,
+                        filename_ptr,
+                        functionname_ptr,
+                        retline_ptr)
+     bfd *abfd;
+     asection *section;
+     asymbol **ignore_symbols;
+     bfd_vma offset;
+     CONST char **filename_ptr;
+     CONST char **functionname_ptr;
+     unsigned int *retline_ptr;
 {
   FDR *fdr_ptr;
   FDR *fdr_start;
@@ -2137,8 +2241,8 @@ DEFUN (ecoff_find_nearest_line, (abfd,
    once.  */
 
 static void
-DEFUN (ecoff_clear_output_flags, (abfd),
-       bfd *abfd)
+ecoff_clear_output_flags (abfd)
+     bfd *abfd;
 {
   register asection *o;
   register bfd_seclet_type *p;
@@ -2156,18 +2260,16 @@ DEFUN (ecoff_clear_output_flags, (abfd),
    any.  */
 
 static boolean
-DEFUN (ecoff_rel, (output_bfd, seclet, output_section, data, relocateable),
-       bfd *output_bfd AND
-       bfd_seclet_type *seclet AND
-       asection *output_section AND
-       PTR data AND
-       boolean relocateable)
+ecoff_rel (output_bfd, seclet, output_section, data, relocateable)
+     bfd *output_bfd;
+     bfd_seclet_type *seclet;
+     asection *output_section;
+     PTR data;
+     boolean relocateable;
 {
   bfd *input_bfd;
   HDRR *output_symhdr;
   HDRR *input_symhdr;
-  ecoff_symbol_type *sym_ptr;
-  ecoff_symbol_type *sym_end;
 
   if ((output_section->flags & SEC_HAS_CONTENTS)
       && !(output_section->flags & SEC_NEVER_LOAD)
@@ -2274,12 +2376,12 @@ DEFUN (ecoff_rel, (output_bfd, seclet, output_section, data, relocateable),
 /* Handle an arbitrary seclet on the first pass.  */
 
 static boolean
-DEFUN (ecoff_dump_seclet, (abfd, seclet, section, data, relocateable),
-       bfd *abfd AND
-       bfd_seclet_type *seclet AND
-       asection *section AND
-       PTR data AND
-       boolean relocateable)
+ecoff_dump_seclet (abfd, seclet, section, data, relocateable)
+     bfd *abfd;
+     bfd_seclet_type *seclet;
+     asection *section;
+     PTR data;
+     boolean relocateable;
 {
   switch (seclet->type) 
     {
@@ -2325,11 +2427,11 @@ DEFUN (ecoff_dump_seclet, (abfd, seclet, section, data, relocateable),
    external string base.  */
 
 static long
-DEFUN (ecoff_add_string, (output_bfd, fdr, string, external),
-       bfd *output_bfd AND
-       FDR *fdr AND
-       CONST char *string AND
-       boolean external)
+ecoff_add_string (output_bfd, fdr, string, external)
+     bfd *output_bfd;
+     FDR *fdr;
+     CONST char *string;
+     boolean external;
 {
   HDRR *symhdr;
   size_t len;
@@ -2356,11 +2458,11 @@ DEFUN (ecoff_add_string, (output_bfd, fdr, string, external),
 /* Accumulate the debugging information from an input section.  */
 
 static boolean
-DEFUN (ecoff_get_debug, (output_bfd, seclet, section, relocateable),
-       bfd *output_bfd AND
-       bfd_seclet_type *seclet AND
-       asection *section AND
-       boolean relocateable)
+ecoff_get_debug (output_bfd, seclet, section, relocateable)
+     bfd *output_bfd;
+     bfd_seclet_type *seclet;
+     asection *section;
+     boolean relocateable;
 {
   bfd *input_bfd;
   HDRR *output_symhdr;
@@ -2369,7 +2471,6 @@ DEFUN (ecoff_get_debug, (output_bfd, seclet, section, relocateable),
   ecoff_data_type *input_ecoff;
   unsigned int count;
   struct sym_ext *sym_out;
-  struct ext_ext *ext_out;
   ecoff_symbol_type *esym_ptr;
   ecoff_symbol_type *esym_end;
   FDR *fdr_ptr;
@@ -2698,10 +2799,10 @@ DEFUN (ecoff_get_debug, (output_bfd, seclet, section, relocateable),
    seclets.  */
 
 static boolean
-DEFUN (ecoff_bfd_seclet_link, (abfd, data, relocateable),
-       bfd *abfd AND
-       PTR data AND
-       boolean relocateable)
+ecoff_bfd_seclet_link (abfd, data, relocateable)
+     bfd *abfd;
+     PTR data;
+     boolean relocateable;
 {
   HDRR *symhdr;
   int ipass;
@@ -2970,10 +3071,10 @@ DEFUN (ecoff_bfd_seclet_link, (abfd, data, relocateable),
    the return value.  */
 
 static boolean
-DEFUN (ecoff_set_arch_mach, (abfd, arch, machine),
-       bfd *abfd AND
-       enum bfd_architecture arch AND
-       unsigned long machine)
+ecoff_set_arch_mach (abfd, arch, machine)
+     bfd *abfd;
+     enum bfd_architecture arch;
+     unsigned long machine;
 {
   bfd_default_set_arch_mach (abfd, arch, machine);
   return arch == bfd_arch_mips;
@@ -2994,8 +3095,8 @@ ecoff_sizeof_headers (abfd, reloc)
    reloc_filepos.  */
 
 static void
-DEFUN (ecoff_compute_section_file_positions, (abfd),
-       bfd *abfd)
+ecoff_compute_section_file_positions (abfd)
+     bfd *abfd;
 {
   asection *current;
   file_ptr sofar;
@@ -3050,12 +3151,12 @@ DEFUN (ecoff_compute_section_file_positions, (abfd),
 /* Set the contents of a section.  */
 
 static boolean
-DEFUN (ecoff_set_section_contents, (abfd, section, location, offset, count),
-       bfd *abfd AND
-       asection *section AND
-       PTR location AND
-       file_ptr offset AND
-       bfd_size_type count)
+ecoff_set_section_contents (abfd, section, location, offset, count)
+     bfd *abfd;
+     asection *section;
+     PTR location;
+     file_ptr offset;
+     bfd_size_type count;
 {
   if (abfd->output_has_begun == false)
     ecoff_compute_section_file_positions (abfd);
@@ -3071,8 +3172,8 @@ DEFUN (ecoff_set_section_contents, (abfd, section, location, offset, count),
 /* Write out an ECOFF file.  */
 
 static boolean
-DEFUN (ecoff_write_object_contents, (abfd),
-       bfd *abfd)
+ecoff_write_object_contents (abfd)
+     bfd *abfd;
 {
   asection *current;
   unsigned int count;
@@ -3193,7 +3294,8 @@ DEFUN (ecoff_write_object_contents, (abfd),
 
       section.s_nreloc = current->reloc_count;
       section.s_nlnno = 0;
-      section.s_flags = sec_to_styp_flags (current->name, current->flags);
+      section.s_flags = ecoff_sec_to_styp_flags (current->name,
+                                                current->flags);
 
       {
        SCNHDR buff;
@@ -3267,8 +3369,9 @@ DEFUN (ecoff_write_object_contents, (abfd),
   /* Set up the ``optional'' header.  */
   internal_a.magic = ZMAGIC;
 
-  /* FIXME: What should this be?  */
-  internal_a.vstamp = 0;
+  /* FIXME: This is what Ultrix puts in, and it makes the Ultrix
+     linker happy.  But, is it right?  */
+  internal_a.vstamp = 0x20a;
 
   /* At least on Ultrix, these have to be rounded to page boundaries.
      FIXME: Is this true on other platforms?  */
@@ -3515,8 +3618,8 @@ ecoff_armap_hash (s, rehash, size, hlog)
 /* Read in the armap.  */
 
 static boolean
-DEFUN (ecoff_slurp_armap, (abfd),
-       bfd *abfd)
+ecoff_slurp_armap (abfd)
+     bfd *abfd;
 {
   char nextname[17];
   unsigned int i;
@@ -3665,12 +3768,12 @@ DEFUN (ecoff_slurp_armap, (abfd),
 /* Write out an armap.  */
 
 static boolean
-DEFUN (ecoff_write_armap, (abfd, elength, map, orl_count, stridx),
-       bfd *abfd AND
-       unsigned int elength AND
-       struct orl *map AND
-       unsigned int orl_count AND
-       int stridx)
+ecoff_write_armap (abfd, elength, map, orl_count, stridx)
+     bfd *abfd;
+     unsigned int elength;
+     struct orl *map;
+     unsigned int orl_count;
+     int stridx;
 {
   unsigned int hashsize, hashlog;
   unsigned int symdefsize;
@@ -3720,8 +3823,7 @@ DEFUN (ecoff_write_armap, (abfd, elength, map, orl_count, stridx),
      complain that the index is out of date.  Actually, the Ultrix
      linker just checks the archive name; the GNU linker may check the
      date.  */
-  if (stat (abfd->filename, &statbuf) < 0)
-    statbuf.st_mtime = time ((PTR) NULL);
+  stat (abfd->filename, &statbuf);
   sprintf (hdr.ar_date, "%ld", (long) (statbuf.st_mtime + 60));
 
   /* The DECstation uses zeroes for the uid, gid and mode of the
@@ -3837,8 +3939,8 @@ DEFUN (ecoff_write_armap, (abfd, elength, map, orl_count, stridx),
    and the extended name table.  */
 
 static bfd_target *
-DEFUN (ecoff_archive_p, (abfd),
-       bfd *abfd)
+ecoff_archive_p (abfd)
+     bfd *abfd;
 {
   char armag[SARMAG + 1];
 
@@ -3874,6 +3976,10 @@ DEFUN (ecoff_archive_p, (abfd),
   return abfd->xvec;
 }
 \f
+/* This is the COFF backend structure.  The backend_data field of the
+   bfd_target structure is set to this.  The section reading code in
+   coffgen.c uses this structure.  */
+
 static CONST bfd_coff_backend_data bfd_ecoff_std_swap_table = {
   (void (*) PARAMS ((bfd *,PTR,int,int,PTR))) bfd_void, /* aux_in */
   (void (*) PARAMS ((bfd *,PTR,PTR))) bfd_void, /* sym_in */
@@ -3886,7 +3992,7 @@ static CONST bfd_coff_backend_data bfd_ecoff_std_swap_table = {
   FILHSZ, AOUTSZ, SCNHSZ, 0, 0, 0, true,
   ecoff_swap_filehdr_in, ecoff_swap_aouthdr_in, ecoff_swap_scnhdr_in,
   ecoff_bad_format_hook, ecoff_set_arch_mach_hook, ecoff_mkobject_hook,
-  styp_to_sec_flags, ecoff_make_section_hook, ecoff_set_alignment_hook,
+  ecoff_styp_to_sec_flags, ecoff_make_section_hook, ecoff_set_alignment_hook,
   ecoff_slurp_symbol_table
 };
 
@@ -3896,9 +4002,12 @@ static CONST bfd_coff_backend_data bfd_ecoff_std_swap_table = {
 #define ecoff_get_lineno \
   ((alent *(*) PARAMS ((bfd *, asymbol *))) bfd_nullvoidptr)
 
+/* These bfd_target functions are defined in other files.  */
+
 #define ecoff_core_file_failing_command        _bfd_dummy_core_file_failing_command
 #define ecoff_core_file_failing_signal _bfd_dummy_core_file_failing_signal
-#define ecoff_core_file_matches_executable_p   _bfd_dummy_core_file_matches_executable_p
+#define ecoff_core_file_matches_executable_p \
+  _bfd_dummy_core_file_matches_executable_p
 #define ecoff_truncate_arname          bfd_dont_truncate_arname
 #define ecoff_openr_next_archived_file bfd_generic_openr_next_archived_file
 #define ecoff_generic_stat_arch_elt    bfd_generic_stat_arch_elt
@@ -3909,7 +4018,8 @@ static CONST bfd_coff_backend_data bfd_ecoff_std_swap_table = {
 #define ecoff_bfd_debug_info_end       bfd_void
 #define ecoff_bfd_debug_info_accumulate        \
   ((void (*) PARAMS ((bfd *, struct sec *))) bfd_void)
-#define ecoff_bfd_get_relocated_section_contents  bfd_generic_get_relocated_section_contents
+#define ecoff_bfd_get_relocated_section_contents \
+  bfd_generic_get_relocated_section_contents
 #define ecoff_bfd_relax_section                bfd_generic_relax_section
 
 bfd_target ecoff_little_vec =