#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) (bfd *, void *, struct internal_reloc *);
void (*swap_reloc_out) (bfd *, const struct internal_reloc *, void *);
void (*adjust_reloc_in)
(bfd *, const struct internal_reloc *, arelent *);
void (*adjust_reloc_out)
(bfd *, const arelent *, struct internal_reloc *);
bfd_boolean (*relocate_section)
(bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *, void *);
bfd_boolean (*adjust_headers)
(bfd *, struct internal_filehdr *, struct internal_aouthdr *);
bfd *(*get_elt_at_filepos) (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;
void * 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;
void * 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
{
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 (bfd *);
extern bfd_boolean _bfd_ecoff_slurp_symbolic_info
(bfd *, asection *, struct ecoff_debug_info *);
extern bfd_boolean _bfd_ecoff_write_object_contents (bfd *);
extern const bfd_target *_bfd_ecoff_archive_p (bfd *);
#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
(bfd *, asection *);
extern bfd_boolean _bfd_ecoff_get_section_contents
(bfd *, asection *, void * 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
(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_copy_private_header_data \
_bfd_generic_bfd_copy_private_header_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 (bfd *);
#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
(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
#define _bfd_ecoff_bfd_is_target_special_symbol \
((bfd_boolean (*) (bfd *, asymbol *)) bfd_false)
extern long _bfd_ecoff_get_symtab_upper_bound (bfd *);
extern long _bfd_ecoff_canonicalize_symtab (bfd *, asymbol **);
extern asymbol *_bfd_ecoff_make_empty_symbol (bfd *);
extern void _bfd_ecoff_print_symbol
(bfd *, void *, asymbol *, bfd_print_symbol_type);
extern void _bfd_ecoff_get_symbol_info
(bfd *, asymbol *, symbol_info *);
extern bfd_boolean _bfd_ecoff_bfd_is_local_label_name
(bfd *, const char *);
#define _bfd_ecoff_get_lineno _bfd_nosymbols_get_lineno
extern bfd_boolean _bfd_ecoff_find_nearest_line
(bfd *, asection *, asymbol **, bfd_vma, const char **, const char **,
unsigned int *);
#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_find_inliner_info _bfd_nosymbols_find_inliner_info
#define _bfd_ecoff_get_reloc_upper_bound coff_get_reloc_upper_bound
extern long _bfd_ecoff_canonicalize_reloc
(bfd *, asection *, arelent **, asymbol **symbols);
extern bfd_boolean _bfd_ecoff_set_arch_mach
(bfd *, enum bfd_architecture, unsigned long);
extern bfd_boolean _bfd_ecoff_set_section_contents
(bfd *, asection *, const void * location, file_ptr, bfd_size_type);
extern int _bfd_ecoff_sizeof_headers (bfd *, bfd_boolean);
extern struct bfd_link_hash_table *_bfd_ecoff_bfd_link_hash_table_create
(bfd *);
#define _bfd_ecoff_bfd_link_hash_table_free _bfd_generic_link_hash_table_free
extern bfd_boolean _bfd_ecoff_bfd_link_add_symbols
(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
(bfd *, struct bfd_link_info *);
extern void * _bfd_ecoff_mkobject_hook (bfd *, void *, void *);
#define _bfd_ecoff_set_alignment_hook \
((void (*) (bfd *, asection *, void *)) bfd_void)
extern bfd_boolean _bfd_ecoff_set_arch_mach_hook
(bfd *, void *);
extern bfd_boolean _bfd_ecoff_styp_to_sec_flags
(bfd *, void *, const char *, asection *, flagword *);
extern bfd_boolean _bfd_ecoff_slurp_symbol_table (bfd *);
extern void _bfd_ecoff_swap_tir_in
(int, const struct tir_ext *, TIR *);
extern void _bfd_ecoff_swap_tir_out
(int, const TIR *, struct tir_ext *);
extern void _bfd_ecoff_swap_rndx_in
(int, const struct rndx_ext *, RNDXR *);
extern void _bfd_ecoff_swap_rndx_out
(int, const RNDXR *, struct rndx_ext *);