#include "bfdlink.h"
#ifndef ECOFF_H
#include "coff/ecoff.h"
#endif
#define ecoff_backend(abfd) \
((struct ecoff_backend_data *) (abfd)->xvec->backend_data)
struct ecoff_backend_data
{
bfd_coff_backend_data coff;
enum bfd_architecture arch;
const char *armap_start;
bfd_vma round;
bfd_boolean rdata_in_text;
unsigned int constructor_bitsize;
reloc_howto_type *constructor_reloc;
struct ecoff_debug_swap debug_swap;
bfd_size_type external_reloc_size;
void (*swap_reloc_in) PARAMS ((bfd *, PTR, struct internal_reloc *));
void (*swap_reloc_out) PARAMS ((bfd *, const struct internal_reloc *, PTR));
void (*adjust_reloc_in)
PARAMS ((bfd *, const struct internal_reloc *, arelent *));
void (*adjust_reloc_out)
PARAMS ((bfd *, const arelent *, struct internal_reloc *));
bfd_boolean (*relocate_section)
PARAMS ((bfd *output_bfd, struct bfd_link_info *, bfd *input_bfd,
asection *input_section, bfd_byte *contents,
PTR external_relocs));
bfd_boolean (*adjust_headers)
PARAMS ((bfd *, struct internal_filehdr *, struct internal_aouthdr *));
bfd *(*get_elt_at_filepos) PARAMS ((bfd *, file_ptr));
};
#define ecoff_data(abfd) ((abfd)->tdata.ecoff_obj_data)
typedef struct ecoff_tdata
{
file_ptr reloc_filepos;
file_ptr sym_filepos;
unsigned long text_start;
unsigned long text_end;
bfd_vma gp;
unsigned int gp_size;
unsigned long gprmask;
unsigned long fprmask;
unsigned long cprmask[4];
struct ecoff_debug_info debug_info;
PTR raw_syments;
struct ecoff_symbol_struct *canonical_symbols;
struct ecoff_link_hash_entry **sym_hashes;
asection **symndx_to_section;
bfd_boolean linker;
bfd_boolean issued_multiple_gp_warning;
struct ecoff_find_line *find_line_info;
bfd_boolean rdata_in_text;
} ecoff_data_type;
typedef struct ecoff_symbol_struct
{
asymbol symbol;
FDR *fdr;
bfd_boolean local;
PTR native;
} ecoff_symbol_type;
#define ecoffsymbol(asymbol) ((ecoff_symbol_type *) (&((asymbol)->the_bfd)))
#define ecoff_get_sym_index(symbol) ((symbol)->udata.i)
#define ecoff_set_sym_index(symbol, idx) ((symbol)->udata.i = (idx))
struct ecoff_section_tdata
{
PTR external_relocs;
bfd_byte *contents;
long *offsets;
bfd_vma gp;
};
#define ecoff_section_data(abfd, sec) \
((struct ecoff_section_tdata *) (sec)->used_by_bfd)
struct ecoff_link_hash_entry
{
struct bfd_link_hash_entry root;
long indx;
bfd *abfd;
EXTR esym;
char written;
char small;
};
struct ecoff_link_hash_table
{
struct bfd_link_hash_table root;
};
extern bfd_boolean _bfd_ecoff_mkobject PARAMS ((bfd *));
extern bfd_boolean _bfd_ecoff_slurp_symbolic_info
PARAMS ((bfd *, asection *, struct ecoff_debug_info *));
extern bfd_boolean _bfd_ecoff_write_object_contents PARAMS ((bfd *abfd));
extern const bfd_target *_bfd_ecoff_archive_p PARAMS ((bfd *abfd));
#define _bfd_ecoff_close_and_cleanup _bfd_generic_close_and_cleanup
#define _bfd_ecoff_bfd_free_cached_info _bfd_generic_bfd_free_cached_info
extern bfd_boolean _bfd_ecoff_new_section_hook
PARAMS ((bfd *, asection *));
extern bfd_boolean _bfd_ecoff_get_section_contents
PARAMS ((bfd *, asection *, PTR location, file_ptr, bfd_size_type));
#define _bfd_ecoff_bfd_link_split_section _bfd_generic_link_split_section
extern bfd_boolean _bfd_ecoff_bfd_copy_private_bfd_data
PARAMS ((bfd *, bfd *));
#define _bfd_ecoff_bfd_copy_private_section_data \
_bfd_generic_bfd_copy_private_section_data
#define _bfd_ecoff_bfd_copy_private_symbol_data \
_bfd_generic_bfd_copy_private_symbol_data
#define _bfd_ecoff_bfd_print_private_bfd_data \
_bfd_generic_bfd_print_private_bfd_data
#define _bfd_ecoff_bfd_merge_private_bfd_data \
_bfd_generic_bfd_merge_private_bfd_data
#define _bfd_ecoff_bfd_set_private_flags _bfd_generic_bfd_set_private_flags
extern bfd_boolean _bfd_ecoff_slurp_armap PARAMS ((bfd *abfd));
#define _bfd_ecoff_slurp_extended_name_table _bfd_slurp_extended_name_table
#define _bfd_ecoff_construct_extended_name_table \
_bfd_archive_bsd_construct_extended_name_table
#define _bfd_ecoff_truncate_arname bfd_dont_truncate_arname
extern bfd_boolean _bfd_ecoff_write_armap
PARAMS ((bfd *, unsigned int, struct orl *, unsigned int, int));
#define _bfd_ecoff_read_ar_hdr _bfd_generic_read_ar_hdr
#define _bfd_ecoff_openr_next_archived_file \
bfd_generic_openr_next_archived_file
#define _bfd_ecoff_get_elt_at_index _bfd_generic_get_elt_at_index
#define _bfd_ecoff_generic_stat_arch_elt bfd_generic_stat_arch_elt
#define _bfd_ecoff_update_armap_timestamp bfd_true
extern long _bfd_ecoff_get_symtab_upper_bound PARAMS ((bfd *abfd));
extern long _bfd_ecoff_get_symtab PARAMS ((bfd *abfd, asymbol **alocation));
extern asymbol *_bfd_ecoff_make_empty_symbol PARAMS ((bfd *abfd));
extern void _bfd_ecoff_print_symbol
PARAMS ((bfd *, PTR filep, asymbol *, bfd_print_symbol_type));
extern void _bfd_ecoff_get_symbol_info
PARAMS ((bfd *, asymbol *, symbol_info *));
extern bfd_boolean _bfd_ecoff_bfd_is_local_label_name
PARAMS ((bfd *, const char *));
#define _bfd_ecoff_get_lineno _bfd_nosymbols_get_lineno
extern bfd_boolean _bfd_ecoff_find_nearest_line
PARAMS ((bfd *, asection *, asymbol **, bfd_vma offset,
const char **filename_ptr, const char **fnname_ptr,
unsigned int *retline_ptr));
#define _bfd_ecoff_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
#define _bfd_ecoff_read_minisymbols _bfd_generic_read_minisymbols
#define _bfd_ecoff_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol
#define _bfd_ecoff_get_reloc_upper_bound coff_get_reloc_upper_bound
extern long _bfd_ecoff_canonicalize_reloc
PARAMS ((bfd *, asection *, arelent **, asymbol **symbols));
extern bfd_boolean _bfd_ecoff_set_arch_mach
PARAMS ((bfd *, enum bfd_architecture, unsigned long));
extern bfd_boolean _bfd_ecoff_set_section_contents
PARAMS ((bfd *, asection *, PTR location, file_ptr, bfd_size_type));
extern int _bfd_ecoff_sizeof_headers PARAMS ((bfd *abfd, bfd_boolean reloc));
extern struct bfd_link_hash_table *_bfd_ecoff_bfd_link_hash_table_create
PARAMS ((bfd *));
#define _bfd_ecoff_bfd_link_hash_table_free _bfd_generic_link_hash_table_free
extern bfd_boolean _bfd_ecoff_bfd_link_add_symbols
PARAMS ((bfd *, struct bfd_link_info *));
#define _bfd_ecoff_bfd_link_just_syms _bfd_generic_link_just_syms
extern bfd_boolean _bfd_ecoff_bfd_final_link
PARAMS ((bfd *, struct bfd_link_info *));
extern PTR _bfd_ecoff_mkobject_hook PARAMS ((bfd *, PTR filehdr, PTR aouthdr));
#define _bfd_ecoff_set_alignment_hook \
((void (*) PARAMS ((bfd *, asection *, PTR))) bfd_void)
extern bfd_boolean _bfd_ecoff_set_arch_mach_hook
PARAMS ((bfd *abfd, PTR filehdr));
extern bfd_boolean _bfd_ecoff_styp_to_sec_flags
PARAMS ((bfd *, PTR, const char *, asection *, flagword *));
extern bfd_boolean _bfd_ecoff_slurp_symbol_table PARAMS ((bfd *abfd));
extern void _bfd_ecoff_swap_tir_in
PARAMS ((int, const struct tir_ext *, TIR *));
extern void _bfd_ecoff_swap_tir_out
PARAMS ((int, const TIR *, struct tir_ext *));
extern void _bfd_ecoff_swap_rndx_in
PARAMS ((int, const struct rndx_ext *, RNDXR *));
extern void _bfd_ecoff_swap_rndx_out
PARAMS ((int, const RNDXR *, struct rndx_ext *));