X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=ld%2Fscripttempl%2Fpe.sc;h=c9eb16f6dc2d1fb1d0d9bb9eaac254367f42b4f4;hb=5f294ed6805ce3931f9c04cfedff38e20010c819;hp=6212d4243467fe464e3aee3aa25ccf4843bdcc7c;hpb=c6c37250e98f113755e0d787f7070e2ac80ce77e;p=binutils-gdb.git diff --git a/ld/scripttempl/pe.sc b/ld/scripttempl/pe.sc index 6212d424346..c9eb16f6dc2 100644 --- a/ld/scripttempl/pe.sc +++ b/ld/scripttempl/pe.sc @@ -24,7 +24,15 @@ if test "${RELOCATING}"; then SORT(*)(.idata$5) SORT(*)(.idata$6) SORT(*)(.idata$7)' - R_CRT='*(SORT(.CRT$*))' + 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 */' + R_TLS=' + *(.tls) + *(.tls$) + *(SORT(.tls$*))' R_RSRC='*(SORT(.rsrc$*))' else R_TEXT= @@ -42,11 +50,13 @@ ${OUTPUT_ARCH+OUTPUT_ARCH(${OUTPUT_ARCH})} ${LIB_SEARCH_DIRS} -ENTRY(_mainCRTStartup) - SECTIONS { - .text ${RELOCATING+ __image_base__ + __section_alignment__ } : + ${RELOCATING+/* Make the virtual address and file offset synced if the alignment is} + ${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__ )} : { ${RELOCATING+ *(.init)} *(.text) @@ -54,14 +64,14 @@ SECTIONS *(.glue_7t) *(.glue_7) ${CONSTRUCTING+ ___CTOR_LIST__ = .; __CTOR_LIST__ = . ; - LONG (-1); *(.ctors); *(.ctor); LONG (0); } + LONG (-1);*(.ctors); *(.ctor); *(SORT(.ctors.*)); LONG (0); } ${CONSTRUCTING+ ___DTOR_LIST__ = .; __DTOR_LIST__ = . ; - LONG (-1); *(.dtors); *(.dtor); LONG (0); } + LONG (-1); *(.dtors); *(.dtor); *(SORT(.dtors.*)); LONG (0); } ${RELOCATING+ *(.fini)} /* ??? Why is .gcc_exc here? */ ${RELOCATING+ *(.gcc_exc)} - ${RELOCATING+ etext = .;} - *(.gcc_except_table) + ${RELOCATING+PROVIDE (etext = .);} + ${RELOCATING+ *(.gcc_except_table)} } /* The Cygwin32 library uses a section to avoid copying certain data @@ -76,10 +86,28 @@ SECTIONS *(.data) *(.data2) ${R_DATA} + *(.jcr) ${RELOCATING+__data_end__ = . ;} ${RELOCATING+*(.data_cygwin_nocopy)} } + .rdata ${RELOCATING+BLOCK(__section_alignment__)} : + { + *(.rdata) + ${R_RDATA} + ${RELOCATING+ *(.eh_frame)} + ${RELOCATING+___RUNTIME_PSEUDO_RELOC_LIST__ = .;} + ${RELOCATING+__RUNTIME_PSEUDO_RELOC_LIST__ = .;} + *(.rdata_runtime_pseudo_reloc) + ${RELOCATING+___RUNTIME_PSEUDO_RELOC_LIST_END__ = .;} + ${RELOCATING+__RUNTIME_PSEUDO_RELOC_LIST_END__ = .;} + } + + .pdata ${RELOCATING+BLOCK(__section_alignment__)} : + { + *(.pdata) + } + .bss ${RELOCATING+BLOCK(__section_alignment__)} : { ${RELOCATING+__bss_start__ = . ;} @@ -88,13 +116,6 @@ SECTIONS ${RELOCATING+__bss_end__ = . ;} } - .rdata ${RELOCATING+BLOCK(__section_alignment__)} : - { - *(.rdata) - ${R_RDATA} - *(.eh_frame) - } - .edata ${RELOCATING+BLOCK(__section_alignment__)} : { *(.edata) @@ -116,37 +137,136 @@ SECTIONS } .CRT ${RELOCATING+BLOCK(__section_alignment__)} : { - ${R_CRT} + ${RELOCATING+___crt_xc_start__ = . ;} + ${R_CRT_XC} + ${RELOCATING+___crt_xc_end__ = . ;} + ${RELOCATING+___crt_xi_start__ = . ;} + ${R_CRT_XI} + ${RELOCATING+___crt_xi_end__ = . ;} + ${RELOCATING+___crt_xl_start__ = . ;} + ${R_CRT_XL} + /* ___crt_xl_end__ is defined in the TLS Directory support code */ + ${RELOCATING+___crt_xp_start__ = . ;} + ${R_CRT_XP} + ${RELOCATING+___crt_xp_end__ = . ;} + ${RELOCATING+___crt_xt_start__ = . ;} + ${R_CRT_XT} + ${RELOCATING+___crt_xt_end__ = . ;} + } + + .tls ${RELOCATING+BLOCK(__section_alignment__)} : + { + ${RELOCATING+___tls_start__ = . ;} + ${R_TLS} + ${RELOCATING+___tls_end__ = . ;} } .endjunk ${RELOCATING+BLOCK(__section_alignment__)} : { /* end is deprecated, don't use it */ - ${RELOCATING+ end = .;} - ${RELOCATING+ _end = .;} + ${RELOCATING+PROVIDE (end = .);} + ${RELOCATING+PROVIDE ( _end = .);} ${RELOCATING+ __end__ = .;} } - .reloc ${RELOCATING+BLOCK(__section_alignment__)} : - { - *(.reloc) - } - .rsrc ${RELOCATING+BLOCK(__section_alignment__)} : { *(.rsrc) ${R_RSRC} } + .reloc ${RELOCATING+BLOCK(__section_alignment__)} : + { + *(.reloc) + } + .stab ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : { - [ .stab ] + *(.stab) } .stabstr ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : { - [ .stabstr ] + *(.stabstr) + } + + /* DWARF debug 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)} : + { + *(.debug_aranges) + } + + .debug_pubnames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : + { + *(.debug_pubnames) } + /* DWARF 2. */ + .debug_info ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : + { + *(.debug_info) *(.gnu.linkonce.wi.*) + } + + .debug_abbrev ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : + { + *(.debug_abbrev) + } + + .debug_line ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : + { + *(.debug_line) + } + + .debug_frame ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : + { + *(.debug_frame) + } + + .debug_str ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : + { + *(.debug_str) + } + + .debug_loc ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : + { + *(.debug_loc) + } + + .debug_macinfo ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : + { + *(.debug_macinfo) + } + + /* SGI/MIPS DWARF 2 extensions. */ + .debug_weaknames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : + { + *(.debug_weaknames) + } + + .debug_funcnames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : + { + *(.debug_funcnames) + } + + .debug_typenames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : + { + *(.debug_typenames) + } + + .debug_varnames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : + { + *(.debug_varnames) + } + + /* DWARF 3. */ + .debug_ranges ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : + { + *(.debug_ranges) + } } EOF