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