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 /ld/scripttempl/pep.sc | |
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 'ld/scripttempl/pep.sc')
-rw-r--r-- | ld/scripttempl/pep.sc | 60 |
1 files changed, 34 insertions, 26 deletions
diff --git a/ld/scripttempl/pep.sc b/ld/scripttempl/pep.sc index 50b4104..6e78b21 100644 --- a/ld/scripttempl/pep.sc +++ b/ld/scripttempl/pep.sc @@ -30,29 +30,29 @@ if test "${RELOCATING}"; then *(SORT(.rdata$*))' fi R_IDATA234=' - SORT(*)(.idata$2) - SORT(*)(.idata$3) + KEEP (SORT(*)(.idata$2)) + KEEP (SORT(*)(.idata$3)) /* These zeroes mark the end of the import list. */ LONG (0); LONG (0); LONG (0); LONG (0); LONG (0); - SORT(*)(.idata$4)' + KEEP (SORT(*)(.idata$4))' R_IDATA5='SORT(*)(.idata$5)' R_IDATA67=' - SORT(*)(.idata$6) - SORT(*)(.idata$7)' - R_CRT_XC='*(SORT(.CRT$XC*)) /* C initialization */' - R_CRT_XI='*(SORT(.CRT$XI*)) /* C++ initialization */' - R_CRT_XL='*(SORT(.CRT$XL*)) /* TLS callbacks */' - R_CRT_XP='*(SORT(.CRT$XP*)) /* Pre-termination */' - R_CRT_XT='*(SORT(.CRT$XT*)) /* Termination */' + KEEP (SORT(*)(.idata$6)) + KEEP (SORT(*)(.idata$7))' + R_CRT_XC='KEEP (*(SORT(.CRT$XC*))) /* C initialization */' + R_CRT_XI='KEEP (*(SORT(.CRT$XI*))) /* C++ initialization */' + R_CRT_XL='KEEP (*(SORT(.CRT$XL*))) /* TLS callbacks */' + R_CRT_XP='KEEP (*(SORT(.CRT$XP*))) /* Pre-termination */' + R_CRT_XT='KEEP (*(SORT(.CRT$XT*))) /* Termination */' R_TLS=' - *(.tls$AAA) - *(.tls) - *(.tls$) - *(SORT(.tls$*)) - *(.tls$ZZZ)' + KEEP (*(.tls$AAA)) + KEEP (*(.tls)) + KEEP (*(.tls$)) + KEEP (*(SORT(.tls$*))) + KEEP (*(.tls$ZZZ))' R_RSRC=' - *(.rsrc) - *(.rsrc$*)' + KEEP (*(.rsrc)) + KEEP (*(.rsrc$*))' else R_TEXT= R_DATA= @@ -85,7 +85,7 @@ SECTIONS ${RELOCATING+. = ALIGN(__section_alignment__);} .text ${RELOCATING+ __image_base__ + ( __section_alignment__ < ${TARGET_PAGE_SIZE} ? . : __section_alignment__ )} : { - ${RELOCATING+ *(.init)} + ${RELOCATING+ KEEP(*(.init))} *(.text) ${R_TEXT} ${RELOCATING+ *(.text.*)} @@ -94,14 +94,22 @@ SECTIONS *(.glue_7) ${CONSTRUCTING+. = ALIGN(8);} ${CONSTRUCTING+ ___CTOR_LIST__ = .; __CTOR_LIST__ = . ; - LONG (-1); LONG (-1);*(.ctors); *(.ctor); *(SORT(.ctors.*)); LONG (0); LONG (0); } + LONG (-1); LONG (-1); + KEEP (*(.ctors)); + KEEP (*(.ctor)); + KEEP (*(SORT(.ctors.*))); + LONG (0); LONG (0); } ${CONSTRUCTING+ ___DTOR_LIST__ = .; __DTOR_LIST__ = . ; - LONG (-1); LONG (-1); *(.dtors); *(.dtor); *(SORT(.dtors.*)); LONG (0); LONG (0); } - ${RELOCATING+ *(.fini)} + LONG (-1); LONG (-1); + KEEP (*(.dtors)); + KEEP (*(.dtor)); + KEEP (*(SORT(.dtors.*))); + LONG (0); LONG (0); } + ${RELOCATING+ KEEP (*(.fini))} /* ??? Why is .gcc_exc here? */ ${RELOCATING+ *(.gcc_exc)} ${RELOCATING+PROVIDE (etext = .);} - ${RELOCATING+ *(.gcc_except_table)} + ${RELOCATING+ KEEP (*(.gcc_except_table))} } /* The Cygwin32 library uses a section to avoid copying certain data @@ -116,7 +124,7 @@ SECTIONS *(.data) *(.data2) ${R_DATA} - *(.jcr) + KEEP(*(.jcr)) ${RELOCATING+__data_end__ = . ;} ${RELOCATING+*(.data_cygwin_nocopy)} } @@ -136,17 +144,17 @@ SECTIONS .eh_frame ${RELOCATING+BLOCK(__section_alignment__)} : { - *(.eh_frame*) + KEEP (*(.eh_frame*)) } .pdata ${RELOCATING+BLOCK(__section_alignment__)} : { - *(.pdata*) + KEEP(*(.pdata*)) } .xdata ${RELOCATING+BLOCK(__section_alignment__)} : { - *(.xdata*) + KEEP(*(.xdata*)) } .bss ${RELOCATING+BLOCK(__section_alignment__)} : |