diff options
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__)} : |