diff options
Diffstat (limited to 'ld/scripttempl/pe.sc')
-rw-r--r-- | ld/scripttempl/pe.sc | 34 |
1 files changed, 23 insertions, 11 deletions
diff --git a/ld/scripttempl/pe.sc b/ld/scripttempl/pe.sc index 59ce042..6cf59ea 100644 --- a/ld/scripttempl/pe.sc +++ b/ld/scripttempl/pe.sc @@ -39,12 +39,25 @@ if test "${RELOCATING}"; then R_CRT_XP='*(SORT(.CRT$XP*)) /* Pre-termination */' R_CRT_XT='*(SORT(.CRT$XT*)) /* Termination */' R_TLS=' - *(.tls$AAA) + *(.tls$AAA) *(.tls) *(.tls$) *(SORT(.tls$*)) *(.tls$ZZZ)' - R_RSRC='*(SORT(.rsrc$*))' + if test -z "$DEFAULT_MANIFEST"; then + R_RSRC=' + *(.rsrc) + *(SORT(.rsrc$*))' + else + R_RSRC=" + /* The default manifest contains information necessary for + binaries to run under Windows 8 (or later). It is included as + the last resource file so that if the application has provided + its own manifest then that one will take precedence. */ + *(EXCLUDE_FILE ($DEFAULT_MANIFEST) .rsrc) + *(SORT(.rsrc*)) + KEEP ($DEFAULT_MANIFEST(.rsrc))" + fi else R_TEXT= R_DATA= @@ -53,7 +66,7 @@ else R_IDATA5= R_IDATA67= R_CRT= - R_RSRC= + R_RSRC='*(.rsrc)' fi cat <<EOF @@ -69,7 +82,7 @@ SECTIONS ${RELOCATING+ lower than the target page size. */} ${RELOCATING+. = SIZEOF_HEADERS;} ${RELOCATING+. = ALIGN(__section_alignment__);} - .text ${RELOCATING+ __image_base__ + ( __section_alignment__ < ${TARGET_PAGE_SIZE} ? . : __section_alignment__ )} : + .text ${RELOCATING+ __image_base__ + ( __section_alignment__ < ${TARGET_PAGE_SIZE} ? . : __section_alignment__ )} : { ${RELOCATING+ *(.init)} *(.text) @@ -78,9 +91,9 @@ SECTIONS ${RELOCATING+ *(.gnu.linkonce.t.*)} *(.glue_7t) *(.glue_7) - ${CONSTRUCTING+ ___CTOR_LIST__ = .; __CTOR_LIST__ = . ; + ${CONSTRUCTING+ ___CTOR_LIST__ = .; __CTOR_LIST__ = . ; LONG (-1);*(.ctors); *(.ctor); *(SORT(.ctors.*)); LONG (0); } - ${CONSTRUCTING+ ___DTOR_LIST__ = .; __DTOR_LIST__ = . ; + ${CONSTRUCTING+ ___DTOR_LIST__ = .; __DTOR_LIST__ = . ; LONG (-1); *(.dtors); *(.dtor); *(SORT(.dtors.*)); LONG (0); } ${RELOCATING+ *(.fini)} /* ??? Why is .gcc_exc here? */ @@ -96,7 +109,7 @@ SECTIONS breaks building the cygwin32 dll. Instead, we name the section ".data_cygwin_nocopy" and explicitly include it after __data_end__. */ - .data ${RELOCATING+BLOCK(__section_alignment__)} : + .data ${RELOCATING+BLOCK(__section_alignment__)} : { ${RELOCATING+__data_start__ = . ;} *(.data) @@ -202,13 +215,12 @@ SECTIONS } .rsrc ${RELOCATING+BLOCK(__section_alignment__)} : - { - *(.rsrc) + { ${R_RSRC} } .reloc ${RELOCATING+BLOCK(__section_alignment__)} : - { + { *(.reloc) } @@ -226,7 +238,7 @@ SECTIONS Symbols in the DWARF debugging sections are relative to the beginning of the section. Unlike other targets that fake this by putting the section VMA at 0, the PE format will not allow it. */ - + /* DWARF 1.1 and DWARF 2. */ .debug_aranges ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : { |