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:
parent
cb4005ffe2
commit
f6409552c7
1 changed files with 288 additions and 178 deletions
466
bfd/coff-mips.c
466
bfd/coff-mips.c
|
@ -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. */
|
||||
|
||||
/* 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,
|
||||
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;
|
||||
switch (internal_f->f_magic)
|
||||
{
|
||||
case MIPS_MAGIC_1:
|
||||
case MIPS_MAGIC_2:
|
||||
case MIPS_MAGIC_3:
|
||||
arch = bfd_arch_mips;
|
||||
break;
|
||||
|
||||
default: /* Unreadable input file type */
|
||||
arch = bfd_arch_obscure;
|
||||
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;
|
||||
}
|
||||
|
||||
/* 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 =
|
||||
|
|
Loading…
Reference in a new issue