aboutsummaryrefslogtreecommitdiff
path: root/ld/scripttempl/pep.sc
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 /ld/scripttempl/pep.sc
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 'ld/scripttempl/pep.sc')
-rw-r--r--ld/scripttempl/pep.sc60
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__)} :