From d286971a6bf52ec49862a488ada6c0566263ad7b Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Wed, 1 Apr 2009 19:38:11 +0000 Subject: [PATCH] include/coff/ * xcoff.h (xcoff_link_hash_table): Move to bfd/xcofflink.c. bfd/ * xcofflink.c (xcoff_link_hash_table): Moved from include/coff/xcoff.h. --- bfd/ChangeLog | 29 ++++++++++++++++++++ bfd/xcofflink.c | 61 ++++++++++++++++++++++++++++++++++++++++++ include/coff/ChangeLog | 4 +++ include/coff/xcoff.h | 61 ------------------------------------------ 4 files changed, 94 insertions(+), 61 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index cbfad171d3a..217730145ce 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,32 @@ +2009-04-01 Richard Sandiford + + * xcofflink.c (xcoff_link_hash_table): Moved from include/coff/xcoff.h. + +2009-04-01 Richard Sandiford + + * xcofflink.c (xcoff_link_create_extra_sections): Don't create + a .loader section for relocatable links. + (xcoff_need_ldrel_p): New function. + (xcoff_mark): Use it. + (bfd_xcoff_link_count_reloc): Only count loader relocs if there's + a loader section. + (xcoff_build_ldsym): New function, split out from... + (xcoff_build_ldsyms): ...here. Rename to... + (xcoff_post_gc_symbol): ...this. Only export symbols, and only + call xcoff_build_ldsym, if there's a loader section. + (xcoff_build_loader_section): New function, extracted verbatim from... + (bfd_xcoff_size_dynamic_sections): ...here. Only call it if + there's a loader section. Only add an __rtinit loader symbol + if there's a loader section. Update after above name change. + (xcoff_symbol_section, xcoff_create_ldrel): New functions. + (bfd_link_input_bfd): Use xcoff_need_ldrel_p, xcoff_symbol_section + and xcoff_create_ldrel. + (xcoff_write_global_symbol): Use xcoff_create_ldrel. + (xcoff_reloc_link_order): Likewise, but only call it if there's + a loader section. Use xcoff_symbol_section. + (_bfd_xcoff_bfd_final_link): Only use fdinfo.ldrel and fdinfo.ldsym + if there's a loader section. + 2009-04-01 Richard Sandiford * xcofflink.c (bfd_link_input_bfd): Fix buffer overrun. diff --git a/bfd/xcofflink.c b/bfd/xcofflink.c index 6905a3a8153..1c205f934b8 100644 --- a/bfd/xcofflink.c +++ b/bfd/xcofflink.c @@ -75,6 +75,67 @@ struct xcoff_link_section_info } *toc_rel_hashes; }; +struct xcoff_link_hash_table +{ + struct bfd_link_hash_table root; + + /* The .debug string hash table. We need to compute this while + reading the input files, so that we know how large the .debug + section will be before we assign section positions. */ + struct bfd_strtab_hash *debug_strtab; + + /* The .debug section we will use for the final output. */ + asection *debug_section; + + /* The .loader section we will use for the final output. */ + asection *loader_section; + + /* A count of non TOC relative relocs which will need to be + allocated in the .loader section. */ + size_t ldrel_count; + + /* The .loader section header. */ + struct internal_ldhdr ldhdr; + + /* The .gl section we use to hold global linkage code. */ + asection *linkage_section; + + /* The .tc section we use to hold toc entries we build for global + linkage code. */ + asection *toc_section; + + /* The .ds section we use to hold function descriptors which we + create for exported symbols. */ + asection *descriptor_section; + + /* The list of import files. */ + struct xcoff_import_file *imports; + + /* Required alignment of sections within the output file. */ + unsigned long file_align; + + /* Whether the .text section must be read-only. */ + bfd_boolean textro; + + /* Whether -brtl was specified. */ + bfd_boolean rtld; + + /* Whether garbage collection was done. */ + bfd_boolean gc; + + /* A linked list of symbols for which we have size information. */ + struct xcoff_link_size_list + { + struct xcoff_link_size_list *next; + struct xcoff_link_hash_entry *h; + bfd_size_type size; + } + *size_list; + + /* Magic sections: _text, _etext, _data, _edata, _end, end. */ + asection *special_sections[XCOFF_NUMBER_OF_SPECIAL_SECTIONS]; +}; + /* Information that we pass around while doing the final link step. */ struct xcoff_final_link_info diff --git a/include/coff/ChangeLog b/include/coff/ChangeLog index ba5fa3fe08b..acfc3dcb748 100644 --- a/include/coff/ChangeLog +++ b/include/coff/ChangeLog @@ -1,3 +1,7 @@ +2009-04-01 Richard Sandiford + + * xcoff.h (xcoff_link_hash_table): Move to bfd/xcofflink.c. + 2009-03-14 Richard Sandiford * xcoff.h (XCOFF_EXPALL, XCOFF_EXPFULL): New flags. diff --git a/include/coff/xcoff.h b/include/coff/xcoff.h index 4439dc99b1f..f072b2541c2 100644 --- a/include/coff/xcoff.h +++ b/include/coff/xcoff.h @@ -333,67 +333,6 @@ struct xcoff_link_hash_entry #define XCOFF_SPECIAL_SECTION_END 4 #define XCOFF_SPECIAL_SECTION_END2 5 -struct xcoff_link_hash_table -{ - struct bfd_link_hash_table root; - - /* The .debug string hash table. We need to compute this while - reading the input files, so that we know how large the .debug - section will be before we assign section positions. */ - struct bfd_strtab_hash *debug_strtab; - - /* The .debug section we will use for the final output. */ - asection *debug_section; - - /* The .loader section we will use for the final output. */ - asection *loader_section; - - /* A count of non TOC relative relocs which will need to be - allocated in the .loader section. */ - size_t ldrel_count; - - /* The .loader section header. */ - struct internal_ldhdr ldhdr; - - /* The .gl section we use to hold global linkage code. */ - asection *linkage_section; - - /* The .tc section we use to hold toc entries we build for global - linkage code. */ - asection *toc_section; - - /* The .ds section we use to hold function descriptors which we - create for exported symbols. */ - asection *descriptor_section; - - /* The list of import files. */ - struct xcoff_import_file *imports; - - /* Required alignment of sections within the output file. */ - unsigned long file_align; - - /* Whether the .text section must be read-only. */ - bfd_boolean textro; - - /* Whether -brtl was specified. */ - bfd_boolean rtld; - - /* Whether garbage collection was done. */ - bfd_boolean gc; - - /* A linked list of symbols for which we have size information. */ - struct xcoff_link_size_list - { - struct xcoff_link_size_list *next; - struct xcoff_link_hash_entry *h; - bfd_size_type size; - } - *size_list; - - /* Magic sections: _text, _etext, _data, _edata, _end, end. */ - asection *special_sections[XCOFF_NUMBER_OF_SPECIAL_SECTIONS]; -}; - /* These flags indicate which of -bexpall and -bexpfull are in effect. */ #define XCOFF_EXPALL 1 #define XCOFF_EXPFULL 2 -- 2.30.2