1# Linker script for PE. 2 3if test -z "${RELOCATEABLE_OUTPUT_FORMAT}"; then 4 RELOCATEABLE_OUTPUT_FORMAT=${OUTPUT_FORMAT} 5fi 6 7# We can't easily and portably get an unquoted $ in a shell 8# substitution, so we do this instead. 9# Sorting of the .foo$* sections is required by the definition of 10# grouped sections in PE. 11# Sorting of the file names in R_IDATA is required by the 12# current implementation of dlltool (this could probably be changed to 13# use grouped sections instead). 14if test "${RELOCATING}"; then 15 R_TEXT='*(SORT(.text$*))' 16 R_DATA='*(SORT(.data$*))' 17 R_RDATA='*(SORT(.rdata$*))' 18 R_IDATA=' 19 SORT(*)(.idata$2) 20 SORT(*)(.idata$3) 21 /* These zeroes mark the end of the import list. */ 22 LONG (0); LONG (0); LONG (0); LONG (0); LONG (0); 23 SORT(*)(.idata$4) 24 SORT(*)(.idata$5) 25 SORT(*)(.idata$6) 26 SORT(*)(.idata$7)' 27 R_CRT='*(SORT(.CRT$*))' 28 R_TLS=' 29 *(.tls) 30 *(.tls$) 31 *(SORT(.tls$*))' 32 R_RSRC='*(SORT(.rsrc$*))' 33else 34 R_TEXT= 35 R_DATA= 36 R_RDATA= 37 R_IDATA= 38 R_CRT= 39 R_RSRC= 40fi 41 42cat <<EOF 43${RELOCATING+OUTPUT_FORMAT(${OUTPUT_FORMAT})} 44${RELOCATING-OUTPUT_FORMAT(${RELOCATEABLE_OUTPUT_FORMAT})} 45${OUTPUT_ARCH+OUTPUT_ARCH(${OUTPUT_ARCH})} 46 47${LIB_SEARCH_DIRS} 48 49ENTRY(${ENTRY}) 50 51SECTIONS 52{ 53 .text ${RELOCATING+ __image_base__ + __section_alignment__ } : 54 { 55 ${RELOCATING+ *(.init)} 56 *(.text) 57 ${R_TEXT} 58 *(.glue_7t) 59 *(.glue_7) 60 ${CONSTRUCTING+ ___CTOR_LIST__ = .; __CTOR_LIST__ = . ; 61 LONG (-1); *(SORT(.ctors.*)); *(.ctors); *(.ctor); LONG (0); } 62 ${CONSTRUCTING+ ___DTOR_LIST__ = .; __DTOR_LIST__ = . ; 63 LONG (-1); *(SORT(.dtors.*)); *(.dtors); *(.dtor); LONG (0); } 64 ${RELOCATING+ *(.fini)} 65 /* ??? Why is .gcc_exc here? */ 66 ${RELOCATING+ *(.gcc_exc)} 67 ${RELOCATING+PROVIDE (etext = .);} 68 *(.gcc_except_table) 69 } 70 71 /* The Cygwin32 library uses a section to avoid copying certain data 72 on fork. This used to be named ".data$nocopy". The linker used 73 to include this between __data_start__ and __data_end__, but that 74 breaks building the cygwin32 dll. Instead, we name the section 75 ".data_cygwin_nocopy" and explictly include it after __data_end__. */ 76 77 .data ${RELOCATING+BLOCK(__section_alignment__)} : 78 { 79 ${RELOCATING+__data_start__ = . ;} 80 *(.data) 81 *(.data2) 82 ${R_DATA} 83 ${RELOCATING+__data_end__ = . ;} 84 ${RELOCATING+*(.data_cygwin_nocopy)} 85 } 86 87 .rdata ${RELOCATING+BLOCK(__section_alignment__)} : 88 { 89 *(.rdata) 90 ${R_RDATA} 91 *(.eh_frame) 92 ${RELOCATING+___RUNTIME_PSEUDO_RELOC_LIST__ = .;} 93 ${RELOCATING+__RUNTIME_PSEUDO_RELOC_LIST__ = .;} 94 *(.rdata_runtime_pseudo_reloc) 95 ${RELOCATING+___RUNTIME_PSEUDO_RELOC_LIST_END__ = .;} 96 ${RELOCATING+__RUNTIME_PSEUDO_RELOC_LIST_END__ = .;} 97 } 98 99 .pdata ${RELOCATING+BLOCK(__section_alignment__)} : 100 { 101 *(.pdata) 102 } 103 104 .bss ${RELOCATING+BLOCK(__section_alignment__)} : 105 { 106 ${RELOCATING+__bss_start__ = . ;} 107 *(.bss) 108 *(COMMON) 109 ${RELOCATING+__bss_end__ = . ;} 110 } 111 112 .edata ${RELOCATING+BLOCK(__section_alignment__)} : 113 { 114 *(.edata) 115 } 116 117 /DISCARD/ : 118 { 119 *(.debug\$S) 120 *(.debug\$T) 121 *(.debug\$F) 122 *(.drectve) 123 } 124 125 .idata ${RELOCATING+BLOCK(__section_alignment__)} : 126 { 127 /* This cannot currently be handled with grouped sections. 128 See pe.em:sort_sections. */ 129 ${R_IDATA} 130 } 131 .CRT ${RELOCATING+BLOCK(__section_alignment__)} : 132 { 133 ${R_CRT} 134 } 135 136 .tls ${RELOCATING+BLOCK(__section_alignment__)} : 137 { 138 ${R_TLS} 139 } 140 141 .endjunk ${RELOCATING+BLOCK(__section_alignment__)} : 142 { 143 /* end is deprecated, don't use it */ 144 ${RELOCATING+PROVIDE (end = .);} 145 ${RELOCATING+PROVIDE ( _end = .);} 146 ${RELOCATING+ __end__ = .;} 147 } 148 149 .rsrc ${RELOCATING+BLOCK(__section_alignment__)} : 150 { 151 *(.rsrc) 152 ${R_RSRC} 153 } 154 155 .reloc ${RELOCATING+BLOCK(__section_alignment__)} : 156 { 157 *(.reloc) 158 } 159 160 .stab ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : 161 { 162 [ .stab ] 163 } 164 165 .stabstr ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : 166 { 167 [ .stabstr ] 168 } 169 170} 171EOF 172