From 28a0c103996c49ab0784f19e3813f3b6ac4a6619 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Wed, 25 Oct 1995 15:37:47 +0000 Subject: * xcofflink.c: Extensive changes to support linking shared objects and generating a .loader section. * libcoff-in.h (struct xcoff_tdata): Add import_file_id field. (struct xcoff_section_tdata): Add first_symndx, last_symndx, and ldrel_count fields. * libcoff.h: Rebuild. * coff-rs6000.c (xcoff_howto_table): Correct reloc names. * coffcode.h (styp_to_sec_flags): Don't set any flags if STYP_PAD is set. * bfd-in.h (bfd_xcoff_import_symbol): Declare. (bfd_xcoff_export_symbol): Declare. (bfd_xcoff_size_dynamic_sections): Declare. * bfd-in2.h: Rebuild. --- bfd/libcoff.h | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) (limited to 'bfd/libcoff.h') 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 -- cgit v1.1