aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorRichard Sandiford <rdsandiford@googlemail.com>2009-04-01 19:38:11 +0000
committerRichard Sandiford <rdsandiford@googlemail.com>2009-04-01 19:38:11 +0000
commitd286971a6bf52ec49862a488ada6c0566263ad7b (patch)
treee0ed335152a4d4dede7d2af54628e1d832914624 /bfd
parentb3d1832c347fbfdf0c816aaa8910fc327c929b02 (diff)
downloadgdb-d286971a6bf52ec49862a488ada6c0566263ad7b.zip
gdb-d286971a6bf52ec49862a488ada6c0566263ad7b.tar.gz
gdb-d286971a6bf52ec49862a488ada6c0566263ad7b.tar.bz2
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.
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog29
-rw-r--r--bfd/xcofflink.c61
2 files changed, 90 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index cbfad17..2177301 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,32 @@
+2009-04-01 Richard Sandiford <r.sandiford@uk.ibm.com>
+
+ * xcofflink.c (xcoff_link_hash_table): Moved from include/coff/xcoff.h.
+
+2009-04-01 Richard Sandiford <r.sandiford@uk.ibm.com>
+
+ * 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 <rdsandiford@googlemail.com>
* xcofflink.c (bfd_link_input_bfd): Fix buffer overrun.
diff --git a/bfd/xcofflink.c b/bfd/xcofflink.c
index 6905a3a..1c205f9 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