diff options
author | Kai Tietz <ktietz@redhat.com> | 2015-07-03 15:50:29 +0100 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2015-07-03 15:50:29 +0100 |
commit | 0f088b2a9417b1d4ed597849ffa671eba25f5051 (patch) | |
tree | 71be9adb049a632d7c572c0a8d82ad5ca8539de9 /bfd/libcoff.h | |
parent | b6b3dd8f31c96b6f7ba26de1508c3c1b2fd437f9 (diff) | |
download | gdb-0f088b2a9417b1d4ed597849ffa671eba25f5051.zip gdb-0f088b2a9417b1d4ed597849ffa671eba25f5051.tar.gz gdb-0f088b2a9417b1d4ed597849ffa671eba25f5051.tar.bz2 |
Add experimental support for --gc-sections with COFF and PE based targets.
PR ld/11539
bfd * coffcode.h (coff_bfd_gc_sections): Define default
to bfd_coff_gc_sections function.
* cofflink.c (init_reloc_cookie): Copy and adjust coff
related code about gc-sections from elflink.c to here.
(fini_reloc_cookie): Likewise.
(init_reloc_cookie_rels): Likewise.
(fini_reloc_cookie_rels): Likewise.
(init_reloc_cookie_for_section): Likewise.
(fini_reloc_cookie_for_section): Likewise.
(_bfd_coff_gc_mark_hook): Likewise.
(_bfd_coff_gc_mark_rsec): Likewise.
(_bfd_coff_gc_mark_reloc): Likewise.
(_bfd_coff_gc_mark): Likewise.
(_bfd_coff_gc_mark_extra_sections): Likewise.
(coff_gc_sweep_symbol_info): Likewise.
(coff_gc_sweep_symbol): Likewise.
(gc_sweep_hook_fn): Likewise.
(coff_gc_sweep): Likewise.
(bfd_coff_gc_sections): Likewise.
(_bfd_coff_gc_keep): Likewise.
* libcoff.h (coff_reloc_cookie): New struct.
(bfd_coff_gc_sections): New prototype.
(coff_gc_mark_hook_fn): New type.
ld * scripttempl/pep.sc: Mark .idata*, .CRT*, .tls*,
.rsrc*, .init, .ctor*, .dtor*, .fini, .jcr,
.eh_frame, .pdata. .xdata, and .gcc_except_table sections
as KEEP.
* scripttempl/pe.sc: Likewise.
Diffstat (limited to 'bfd/libcoff.h')
-rw-r--r-- | bfd/libcoff.h | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/bfd/libcoff.h b/bfd/libcoff.h index ee72de3..124e603 100644 --- a/bfd/libcoff.h +++ b/bfd/libcoff.h @@ -269,6 +269,16 @@ struct coff_link_hash_table struct stab_info stab_info; }; +struct coff_reloc_cookie +{ + struct internal_reloc * rels; + struct internal_reloc * rel; + struct internal_reloc * relend; + struct coff_symbol_struct * symbols; /* Symtab for input bfd. */ + bfd * abfd; + struct coff_link_hash_entry ** sym_hashes; +}; + /* Look up an entry in a COFF linker hash table. */ #define coff_link_hash_lookup(table, string, create, copy, follow) \ @@ -566,6 +576,8 @@ extern bfd_boolean _bfd_coff_link_input_bfd extern bfd_boolean _bfd_coff_reloc_link_order (bfd *, struct coff_final_link_info *, asection *, struct bfd_link_order *); +extern bfd_boolean bfd_coff_gc_sections + (bfd *, struct bfd_link_info *); #define coff_get_section_contents_in_window \ @@ -673,6 +685,10 @@ enum coff_symbol_classification COFF_SYMBOL_PE_SECTION }; +typedef asection * (*coff_gc_mark_hook_fn) + (asection *, struct bfd_link_info *, struct internal_reloc *, + struct coff_link_hash_entry *, struct internal_syment *); + typedef struct { void (*_bfd_coff_swap_aux_in) |