diff options
Diffstat (limited to 'bfd/libcoff.h')
-rw-r--r-- | bfd/libcoff.h | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/bfd/libcoff.h b/bfd/libcoff.h index df83b65..bf6bd5f 100644 --- a/bfd/libcoff.h +++ b/bfd/libcoff.h @@ -93,6 +93,7 @@ typedef struct pe_tdata struct internal_extra_pe_aouthdr pe_opthdr; int dll; int has_reloc_section; + boolean (*in_reloc_p) PARAMS((bfd *, reloc_howto_type *)); } pe_data_type; #define pe_data(bfd) ((bfd)->tdata.pe_obj_data) @@ -116,11 +117,19 @@ struct xcoff_tdata /* modtype from optional header. */ short modtype; + /* cputype from optional header. */ + short cputype; + /* maxdata from optional header. */ bfd_size_type maxdata; /* maxstack from optional header. */ bfd_size_type maxstack; + + /* Used by the XCOFF backend linker. */ + asection **csects; + unsigned long *debug_indices; + unsigned int import_file_id; }; #define xcoff_data(abfd) ((abfd)->tdata.xcoff_obj_data) @@ -155,6 +164,25 @@ struct coff_section_tdata #define coff_section_data(abfd, sec) \ ((struct coff_section_tdata *) (sec)->used_by_bfd) +/* Tdata for sections in XCOFF files. This is used by the linker. */ + +struct xcoff_section_tdata +{ + /* Used for XCOFF csects created by the linker; points to the real + XCOFF section which contains this csect. */ + asection *enclosing; + /* The first and one past the last symbol indices for symbols used + by this csect. */ + unsigned long first_symndx; + unsigned long last_symndx; + /* The number of .loader relocs in this csect. */ + size_t ldrel_count; +}; + +/* An accessor macro the xcoff_section_tdata structure. */ +#define xcoff_section_data(abfd, sec) \ + ((struct xcoff_section_tdata *) coff_section_data ((abfd), (sec))->tdata) + /* COFF linker hash table entries. */ struct coff_link_hash_entry @@ -254,6 +282,13 @@ extern void bfd_perform_slip PARAMS ((bfd *abfd, unsigned int slip, /* Functions in cofflink.c. */ +extern struct bfd_hash_entry *_bfd_coff_link_hash_newfunc + PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *, const char *)); +extern boolean _bfd_coff_link_hash_table_init + PARAMS ((struct coff_link_hash_table *, bfd *, + struct bfd_hash_entry *(*) (struct bfd_hash_entry *, + struct bfd_hash_table *, + const char *))); extern struct bfd_link_hash_table *_bfd_coff_link_hash_table_create PARAMS ((bfd *)); extern const char *_bfd_coff_internal_syment_name @@ -269,6 +304,18 @@ extern boolean _bfd_coff_generic_relocate_section PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *, struct internal_reloc *, struct internal_syment *, asection **)); +/* Functions in xcofflink.c. */ + +extern struct bfd_link_hash_table *_bfd_xcoff_bfd_link_hash_table_create + PARAMS ((bfd *)); +extern boolean _bfd_xcoff_bfd_link_add_symbols + PARAMS ((bfd *, struct bfd_link_info *)); +extern boolean _bfd_xcoff_bfd_final_link + PARAMS ((bfd *, struct bfd_link_info *)); +extern boolean _bfd_ppc_xcoff_relocate_section + PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *, + struct internal_reloc *, struct internal_syment *, asection **)); + /* And more taken from the source .. */ typedef struct coff_ptr_struct |