]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - ld/scripttempl/mcorepe.sc
19990502 sourceware import
[thirdparty/binutils-gdb.git] / ld / scripttempl / mcorepe.sc
1 # Linker script for PE.
2
3 if test -z "${RELOCATEABLE_OUTPUT_FORMAT}"; then
4 RELOCATEABLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
5 fi
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).
14 if 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_RSRC='*(SORT(.rsrc$*))'
29 else
30 R_TEXT=
31 R_DATA=
32 R_RDATA=
33 R_IDATA=
34 R_CRT=
35 R_RSRC=
36 fi
37
38 cat <<EOF
39 ${RELOCATING+OUTPUT_FORMAT(${OUTPUT_FORMAT})}
40 ${RELOCATING-OUTPUT_FORMAT(${RELOCATEABLE_OUTPUT_FORMAT})}
41
42 ${LIB_SEARCH_DIRS}
43
44 ENTRY(_mainCRTStartup)
45
46 SECTIONS
47 {
48 .text ${RELOCATING+ __image_base__ + __section_alignment__ } :
49 {
50 ${RELOCATING+ *(.init)}
51 *(.text)
52 ${R_TEXT}
53 *(.glue_7t)
54 *(.glue_7)
55 ${CONSTRUCTING+ ___CTOR_LIST__ = .; __CTOR_LIST__ = . ;
56 LONG (-1); *(.ctors); *(.ctor); LONG (0); }
57 ${CONSTRUCTING+ ___DTOR_LIST__ = .; __DTOR_LIST__ = . ;
58 LONG (-1); *(.dtors); *(.dtor); LONG (0); }
59 ${RELOCATING+ *(.fini)}
60 /* ??? Why is .gcc_exc here? */
61 ${RELOCATING+ *(.gcc_exc)}
62 ${RELOCATING+ etext = .;}
63 *(.gcc_except_table)
64 }
65
66 /* The Cygwin32 library uses a section to avoid copying certain data
67 on fork. This used to be named ".data$nocopy". The linker used
68 to include this between __data_start__ and __data_end__, but that
69 breaks building the cygwin32 dll. Instead, we name the section
70 ".data_cygwin_nocopy" and explictly include it after __data_end__. */
71
72 .data ${RELOCATING+BLOCK(__section_alignment__)} :
73 {
74 ${RELOCATING+__data_start__ = . ;}
75 *(.data)
76 *(.data2)
77 ${R_DATA}
78 ${RELOCATING+__data_end__ = . ;}
79 ${RELOCATING+*(.data_cygwin_nocopy)}
80 }
81
82 .bss ${RELOCATING+BLOCK(__section_alignment__)} :
83 {
84 ${RELOCATING+__bss_start__ = . ;}
85 *(.bss)
86 *(COMMON)
87 ${RELOCATING+__bss_end__ = . ;}
88 }
89
90 .rdata ${RELOCATING+BLOCK(__section_alignment__)} :
91 {
92 *(.rdata)
93 ${R_RDATA}
94 *(.eh_frame)
95 }
96
97 .edata ${RELOCATING+BLOCK(__section_alignment__)} :
98 {
99 *(.edata)
100 }
101
102 /DISCARD/ :
103 {
104 *(.debug\$S)
105 *(.debug\$T)
106 *(.debug\$F)
107 *(.drectve)
108 }
109
110 .idata ${RELOCATING+BLOCK(__section_alignment__)} :
111 {
112 /* This cannot currently be handled with grouped sections.
113 See pe.em:sort_sections. */
114 ${R_IDATA}
115 }
116 .CRT ${RELOCATING+BLOCK(__section_alignment__)} :
117 {
118 ${R_CRT}
119 }
120
121 .endjunk ${RELOCATING+BLOCK(__section_alignment__)} :
122 {
123 /* end is deprecated, don't use it */
124 ${RELOCATING+ end = .;}
125 ${RELOCATING+ _end = .;}
126 ${RELOCATING+ __end__ = .;}
127 }
128
129 .reloc ${RELOCATING+BLOCK(__section_alignment__)} :
130 {
131 *(.reloc)
132 }
133
134 .rsrc ${RELOCATING+BLOCK(__section_alignment__)} :
135 {
136 *(.rsrc)
137 ${R_RSRC}
138 }
139
140 .stab ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
141 {
142 [ .stab ]
143 }
144
145 .stabstr ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
146 {
147 [ .stabstr ]
148 }
149
150 .stack 0x80000 :
151 {
152 _stack = .;
153 *(.stack)
154 }
155 }
156 EOF