aboutsummaryrefslogtreecommitdiff
path: root/bfd/libcoff.h
diff options
context:
space:
mode:
authorKai Tietz <ktietz@redhat.com>2015-07-03 15:50:29 +0100
committerNick Clifton <nickc@redhat.com>2015-07-03 15:50:29 +0100
commit0f088b2a9417b1d4ed597849ffa671eba25f5051 (patch)
tree71be9adb049a632d7c572c0a8d82ad5ca8539de9 /bfd/libcoff.h
parentb6b3dd8f31c96b6f7ba26de1508c3c1b2fd437f9 (diff)
downloadgdb-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.h16
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)