General cleanup--added prototypes, removed a few unused variables,

fixed up comments a bit.  Also set version stamp in a.out header to
0x20a rather than 0, to keep the Ultrix linker happy.
This commit is contained in:
Ian Lance Taylor
1993-02-02 22:17:27 +00:00
parent cb4005ffe2
commit f6409552c7

View File

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