From 0f088b2a9417b1d4ed597849ffa671eba25f5051 Mon Sep 17 00:00:00 2001 From: Kai Tietz Date: Fri, 3 Jul 2015 15:50:29 +0100 Subject: 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. --- bfd/libcoff-in.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'bfd/libcoff-in.h') diff --git a/bfd/libcoff-in.h b/bfd/libcoff-in.h index 34e71a89447..83775c681b9 100644 --- a/bfd/libcoff-in.h +++ b/bfd/libcoff-in.h @@ -265,6 +265,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) \ @@ -562,6 +572,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 \ -- cgit v1.2.1