1214571Sdim# Linker script for PE. 2214571Sdim 3214571Sdimif test -z "${RELOCATEABLE_OUTPUT_FORMAT}"; then 4214571Sdim RELOCATEABLE_OUTPUT_FORMAT=${OUTPUT_FORMAT} 5214571Sdimfi 6214571Sdim 7214571Sdim# We can't easily and portably get an unquoted $ in a shell 8214571Sdim# substitution, so we do this instead. 9214571Sdim# Sorting of the .foo$* sections is required by the definition of 10214571Sdim# grouped sections in PE. 11214571Sdim# Sorting of the file names in R_IDATA is required by the 12214571Sdim# current implementation of dlltool (this could probably be changed to 13214571Sdim# use grouped sections instead). 14214571Sdimif test "${RELOCATING}"; then 15214571Sdim R_TEXT='*(SORT(.text$*))' 16214571Sdim R_DATA='*(SORT(.data$*))' 17214571Sdim R_RDATA='*(SORT(.rdata$*))' 18214571Sdim R_IDATA=' 19214571Sdim SORT(*)(.idata$2) 20214571Sdim SORT(*)(.idata$3) 21214571Sdim /* These zeroes mark the end of the import list. */ 22214571Sdim LONG (0); LONG (0); LONG (0); LONG (0); LONG (0); 23214571Sdim SORT(*)(.idata$4) 24214571Sdim SORT(*)(.idata$5) 25214571Sdim SORT(*)(.idata$6) 26214571Sdim SORT(*)(.idata$7)' 27214571Sdim R_CRT_XC='*(SORT(.CRT$XC*)) /* C initialization */' 28214571Sdim R_CRT_XI='*(SORT(.CRT$XI*)) /* C++ initialization */' 29214571Sdim R_CRT_XL='*(SORT(.CRT$XL*)) /* TLS callbacks */' 30214571Sdim R_CRT_XP='*(SORT(.CRT$XP*)) /* Pre-termination */' 31214571Sdim R_CRT_XT='*(SORT(.CRT$XT*)) /* Termination */' 32214571Sdim R_TLS=' 33214571Sdim *(.tls) 34214571Sdim *(.tls$) 35214571Sdim *(SORT(.tls$*))' 36214571Sdim R_RSRC='*(SORT(.rsrc$*))' 37214571Sdimelse 38214571Sdim R_TEXT= 39214571Sdim R_DATA= 40214571Sdim R_RDATA= 41214571Sdim R_IDATA= 42214571Sdim R_CRT= 43214571Sdim R_RSRC= 44214571Sdimfi 45214571Sdim 46214571Sdimcat <<EOF 47214571Sdim${RELOCATING+OUTPUT_FORMAT(${OUTPUT_FORMAT})} 48214571Sdim${RELOCATING-OUTPUT_FORMAT(${RELOCATEABLE_OUTPUT_FORMAT})} 49214571Sdim${OUTPUT_ARCH+OUTPUT_ARCH(${OUTPUT_ARCH})} 50214571Sdim 51214571Sdim${LIB_SEARCH_DIRS} 52214571Sdim 53214571SdimSECTIONS 54214571Sdim{ 55214571Sdim ${RELOCATING+/* Make the virtual address and file offset synced if the alignment is} 56214571Sdim ${RELOCATING+ lower than the target page size. */} 57214571Sdim ${RELOCATING+. = SIZEOF_HEADERS;} 58214571Sdim ${RELOCATING+. = ALIGN(__section_alignment__);} 59214571Sdim .text ${RELOCATING+ __image_base__ + ( __section_alignment__ < ${TARGET_PAGE_SIZE} ? . : __section_alignment__ )} : 60214571Sdim { 61214571Sdim ${RELOCATING+ *(.init)} 62214571Sdim *(.text) 63214571Sdim ${R_TEXT} 64214571Sdim *(.glue_7t) 65214571Sdim *(.glue_7) 66214571Sdim ${CONSTRUCTING+ ___CTOR_LIST__ = .; __CTOR_LIST__ = . ; 67214571Sdim LONG (-1);*(.ctors); *(.ctor); *(SORT(.ctors.*)); LONG (0); } 68214571Sdim ${CONSTRUCTING+ ___DTOR_LIST__ = .; __DTOR_LIST__ = . ; 69214571Sdim LONG (-1); *(.dtors); *(.dtor); *(SORT(.dtors.*)); LONG (0); } 70214571Sdim ${RELOCATING+ *(.fini)} 71214571Sdim /* ??? Why is .gcc_exc here? */ 72214571Sdim ${RELOCATING+ *(.gcc_exc)} 73214571Sdim ${RELOCATING+PROVIDE (etext = .);} 74214571Sdim *(.gcc_except_table) 75214571Sdim } 76214571Sdim 77214571Sdim /* The Cygwin32 library uses a section to avoid copying certain data 78214571Sdim on fork. This used to be named ".data$nocopy". The linker used 79214571Sdim to include this between __data_start__ and __data_end__, but that 80214571Sdim breaks building the cygwin32 dll. Instead, we name the section 81214571Sdim ".data_cygwin_nocopy" and explictly include it after __data_end__. */ 82214571Sdim 83214571Sdim .data ${RELOCATING+BLOCK(__section_alignment__)} : 84214571Sdim { 85214571Sdim ${RELOCATING+__data_start__ = . ;} 86214571Sdim *(.data) 87214571Sdim *(.data2) 88214571Sdim ${R_DATA} 89214571Sdim *(.jcr) 90214571Sdim ${RELOCATING+__data_end__ = . ;} 91214571Sdim ${RELOCATING+*(.data_cygwin_nocopy)} 92214571Sdim } 93214571Sdim 94214571Sdim .rdata ${RELOCATING+BLOCK(__section_alignment__)} : 95214571Sdim { 96214571Sdim *(.rdata) 97214571Sdim ${R_RDATA} 98214571Sdim *(.eh_frame) 99214571Sdim ${RELOCATING+___RUNTIME_PSEUDO_RELOC_LIST__ = .;} 100214571Sdim ${RELOCATING+__RUNTIME_PSEUDO_RELOC_LIST__ = .;} 101214571Sdim *(.rdata_runtime_pseudo_reloc) 102214571Sdim ${RELOCATING+___RUNTIME_PSEUDO_RELOC_LIST_END__ = .;} 103214571Sdim ${RELOCATING+__RUNTIME_PSEUDO_RELOC_LIST_END__ = .;} 104214571Sdim } 105214571Sdim 106214571Sdim .pdata ${RELOCATING+BLOCK(__section_alignment__)} : 107214571Sdim { 108214571Sdim *(.pdata) 109214571Sdim } 110214571Sdim 111214571Sdim .bss ${RELOCATING+BLOCK(__section_alignment__)} : 112214571Sdim { 113214571Sdim ${RELOCATING+__bss_start__ = . ;} 114214571Sdim *(.bss) 115214571Sdim *(COMMON) 116214571Sdim ${RELOCATING+__bss_end__ = . ;} 117214571Sdim } 118214571Sdim 119214571Sdim .edata ${RELOCATING+BLOCK(__section_alignment__)} : 120214571Sdim { 121214571Sdim *(.edata) 122214571Sdim } 123214571Sdim 124214571Sdim /DISCARD/ : 125214571Sdim { 126214571Sdim *(.debug\$S) 127214571Sdim *(.debug\$T) 128214571Sdim *(.debug\$F) 129214571Sdim *(.drectve) 130214571Sdim } 131214571Sdim 132214571Sdim .idata ${RELOCATING+BLOCK(__section_alignment__)} : 133214571Sdim { 134214571Sdim /* This cannot currently be handled with grouped sections. 135214571Sdim See pep.em:sort_sections. */ 136214571Sdim ${R_IDATA} 137214571Sdim } 138214571Sdim .CRT ${RELOCATING+BLOCK(__section_alignment__)} : 139214571Sdim { 140214571Sdim ${RELOCATING+___crt_xc_start__ = . ;} 141214571Sdim ${R_CRT_XC} 142214571Sdim ${RELOCATING+___crt_xc_end__ = . ;} 143214571Sdim ${RELOCATING+___crt_xi_start__ = . ;} 144214571Sdim ${R_CRT_XI} 145214571Sdim ${RELOCATING+___crt_xi_end__ = . ;} 146214571Sdim ${RELOCATING+___crt_xl_start__ = . ;} 147214571Sdim ${R_CRT_XL} 148214571Sdim /* ___crt_xl_end__ is defined in the TLS Directory support code */ 149214571Sdim ${RELOCATING+___crt_xp_start__ = . ;} 150214571Sdim ${R_CRT_XP} 151214571Sdim ${RELOCATING+___crt_xp_end__ = . ;} 152214571Sdim ${RELOCATING+___crt_xt_start__ = . ;} 153214571Sdim ${R_CRT_XT} 154214571Sdim ${RELOCATING+___crt_xt_end__ = . ;} 155214571Sdim } 156214571Sdim 157214571Sdim .tls ${RELOCATING+BLOCK(__section_alignment__)} : 158214571Sdim { 159214571Sdim ${RELOCATING+___tls_start__ = . ;} 160214571Sdim ${R_TLS} 161214571Sdim ${RELOCATING+___tls_end__ = . ;} 162214571Sdim } 163214571Sdim 164214571Sdim .endjunk ${RELOCATING+BLOCK(__section_alignment__)} : 165214571Sdim { 166214571Sdim /* end is deprecated, don't use it */ 167214571Sdim ${RELOCATING+PROVIDE (end = .);} 168214571Sdim ${RELOCATING+PROVIDE ( _end = .);} 169214571Sdim ${RELOCATING+ __end__ = .;} 170214571Sdim } 171214571Sdim 172214571Sdim .rsrc ${RELOCATING+BLOCK(__section_alignment__)} : 173214571Sdim { 174214571Sdim *(.rsrc) 175214571Sdim ${R_RSRC} 176214571Sdim } 177214571Sdim 178214571Sdim .reloc ${RELOCATING+BLOCK(__section_alignment__)} : 179214571Sdim { 180214571Sdim *(.reloc) 181214571Sdim } 182214571Sdim 183214571Sdim .stab ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : 184214571Sdim { 185214571Sdim *(.stab) 186214571Sdim } 187214571Sdim 188214571Sdim .stabstr ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : 189214571Sdim { 190214571Sdim *(.stabstr) 191214571Sdim } 192214571Sdim 193214571Sdim /* DWARF debug sections. 194214571Sdim Symbols in the DWARF debugging sections are relative to the beginning 195214571Sdim of the section. Unlike other targets that fake this by putting the 196214571Sdim section VMA at 0, the PE format will not allow it. */ 197214571Sdim 198214571Sdim /* DWARF 1.1 and DWARF 2. */ 199214571Sdim .debug_aranges ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : 200214571Sdim { 201214571Sdim *(.debug_aranges) 202214571Sdim } 203214571Sdim 204214571Sdim .debug_pubnames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : 205214571Sdim { 206214571Sdim *(.debug_pubnames) 207214571Sdim } 208214571Sdim 209214571Sdim /* DWARF 2. */ 210214571Sdim .debug_info ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : 211214571Sdim { 212214571Sdim *(.debug_info) *(.gnu.linkonce.wi.*) 213214571Sdim } 214214571Sdim 215214571Sdim .debug_abbrev ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : 216214571Sdim { 217214571Sdim *(.debug_abbrev) 218214571Sdim } 219214571Sdim 220214571Sdim .debug_line ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : 221214571Sdim { 222214571Sdim *(.debug_line) 223214571Sdim } 224214571Sdim 225214571Sdim .debug_frame ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : 226214571Sdim { 227214571Sdim *(.debug_frame) 228214571Sdim } 229214571Sdim 230214571Sdim .debug_str ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : 231214571Sdim { 232214571Sdim *(.debug_str) 233214571Sdim } 234214571Sdim 235214571Sdim .debug_loc ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : 236214571Sdim { 237214571Sdim *(.debug_loc) 238214571Sdim } 239214571Sdim 240214571Sdim .debug_macinfo ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : 241214571Sdim { 242214571Sdim *(.debug_macinfo) 243214571Sdim } 244214571Sdim 245214571Sdim /* SGI/MIPS DWARF 2 extensions. */ 246214571Sdim .debug_weaknames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : 247214571Sdim { 248214571Sdim *(.debug_weaknames) 249214571Sdim } 250214571Sdim 251214571Sdim .debug_funcnames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : 252214571Sdim { 253214571Sdim *(.debug_funcnames) 254214571Sdim } 255214571Sdim 256214571Sdim .debug_typenames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : 257214571Sdim { 258214571Sdim *(.debug_typenames) 259214571Sdim } 260214571Sdim 261214571Sdim .debug_varnames ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : 262214571Sdim { 263214571Sdim *(.debug_varnames) 264214571Sdim } 265214571Sdim 266214571Sdim /* DWARF 3. */ 267214571Sdim .debug_ranges ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : 268214571Sdim { 269214571Sdim *(.debug_ranges) 270214571Sdim } 271214571Sdim} 272214571SdimEOF 273