diff options
Diffstat (limited to 'ld/scripttempl/pe.sc')
-rw-r--r-- | ld/scripttempl/pe.sc | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/ld/scripttempl/pe.sc b/ld/scripttempl/pe.sc new file mode 100644 index 0000000..cc9e78e --- /dev/null +++ b/ld/scripttempl/pe.sc @@ -0,0 +1,97 @@ +# Linker script for PE. +# These are substituted in as variables in order to get '}' in a shell +# conditional expansion. +INIT='.init : { *(.init) }' +FINI='.fini : { *(.fini) }' +cat <<EOF +OUTPUT_FORMAT(${OUTPUT_FORMAT}) +${LIB_SEARCH_DIRS} + +ENTRY(_mainCRTStartup) + +SECTIONS +{ + + .text ${RELOCATING+ 0x401000} : + { + ${RELOCATING+ *(.init);} + *(.text) + ${CONSTRUCTING+ ___CTOR_LIST__ = .; LONG (-1); *(.ctor); LONG (0); } + ${CONSTRUCTING+ ___DTOR_LIST__ = .; LONG (-1); *(.dtor); LONG (0); } + ${RELOCATING+ *(.fini);} + ${RELOCATING+ etext = .}; + } + + .bss BLOCK(0x1000) : + { + *(.bss) + *(COMMON); + } + + .rdata BLOCK(0x1000) : + { + *(.rdata) + ; + } + .data BLOCK(0x1000) : { + *(.data) + *(.data2) + ; + } + .idata BLOCK(0x1000) : + { + *(.idata\$2) + *(.idata\$3) + *(.idata\$4) + *(.idata\$5) + *(.idata\$6) + *(.idata\$7) + ; + } + .CRT BLOCK(0x1000) : + { + *(.CRT\$XCA) + *(.CRT\$XCC) + *(.CRT\$XCZ) + *(.CRT\$XIA) + *(.CRT\$XIC) + *(.CRT\$XIZ) + *(.CRT\$XLA) + *(.CRT\$XLZ) + *(.CRT\$XPA) + *(.CRT\$XPX) + *(.CRT\$XPZ) + *(.CRT\$XTA) + *(.CRT\$XTZ) + ; + } + .rsrc BLOCK(0x1000) : + { + *(.rsrc\$01) + *(.rsrc\$02) + ; + } + .reloc BLOCK(0x1000) : + { + *(.reloc) + ; + } + .junk BLOCK(0x1000) : + { + *(.debug\$S) + *(.debug\$T) + *(.debug\$F) + *(.drectve) + ; + } + .stab 0 ${RELOCATING+(NOLOAD)} : + { + [ .stab ] + } + + .stabstr 0 ${RELOCATING+(NOLOAD)} : + { + [ .stabstr ] + } +} +EOF |