* Makefile.in (ALLDEPFILES): Add alphanbsd-nat.c and
[deliverable/binutils-gdb.git] / ld / scripttempl / ppcpe.sc
1 # A PE linker script for PowerPC.
2 # Loosely based on Steve Chamberlain's pe.sc.
3 # All new mistakes should be credited to Kim Knuttila (krk@cygnus.com)
4 #
5 # These are substituted in as variables in order to get '}' in a shell
6 # conditional expansion.
7 INIT='.init : { *(.init) }'
8 FINI='.fini : { *(.fini) }'
9 cat <<EOF
10 OUTPUT_FORMAT(${OUTPUT_FORMAT})
11 ${LIB_SEARCH_DIRS}
12
13 /* Much of this layout was determined by delving into .exe files for
14 the box generated by other compilers/linkers/etc. This means that
15 if a particular feature did not happen to appear in one of the
16 subject files, then it may not be yet supported.
17 */
18
19 /* It's "mainCRTStartup", not "_mainCRTStartup", and it's located in
20 one of the two .lib files (libc.lib and kernel32.lib) that currently
21 must be present on the link line. This means that you must use
22 "-u mainCRTStartup" to make sure it gets included in the link.
23 */
24
25 ENTRY(mainCRTStartup)
26
27 SECTIONS
28 {
29
30 /* text - the usual meaning */
31 .text ${RELOCATING+ __image_base__ + __section_alignment__ } :
32 {
33 ${RELOCATING+ *(.init);}
34 *(.text)
35 *(.gcc_except_table)
36 ${CONSTRUCTING+ ___CTOR_LIST__ = .; __CTOR_LIST__ = . ;
37 LONG (-1); *(.ctors); *(.ctor); LONG (0); }
38 ${CONSTRUCTING+ ___DTOR_LIST__ = .; __DTOR_LIST__ = . ;
39 LONG (-1); *(.dtors); *(.dtor); LONG (0); }
40 ${RELOCATING+ *(.fini);}
41 ${RELOCATING+ etext = .};
42 }
43
44 /* rdata - Read Only Runtime Data
45 CTR sections: All of the CRT (read only C runtime data) sections
46 appear at the start of the .rdata (read only runtime data)
47 section, in the following order. Don't know if it matters or not.
48 Not all sections are always present either.
49 .rdata: compiler generated read only data
50 .xdata: compiler generated exception handling table. (Most docs
51 seem to suggest that this section is now deprecated infavor
52 of the ydata section)
53 .edata: The exported names table.
54 */
55 .rdata BLOCK(__section_alignment__) :
56 {
57 *(.CRT\$XCA);
58 *(.CRT\$XCC);
59 *(.CRT\$XCZ);
60 *(.CRT\$XIA);
61 *(.CRT\$XIC);
62 *(.CRT\$XIZ);
63 *(.CRT\$XLA);
64 *(.CRT\$XLZ);
65 *(.CRT\$XPA);
66 *(.CRT\$XPX);
67 *(.CRT\$XPZ);
68 *(.CRT\$XTA);
69 *(.CRT\$XTZ);
70 *(.rdata);
71 *(.xdata);
72 }
73
74 .edata BLOCK(__section_alignment__) :
75 {
76 *(.edata);
77 }
78
79 /* data - initialized data
80 .ydata: exception handling information.
81 .data: the usual meaning.
82 .data2: more of the same.
83 .bss: For some reason, bss appears to be included in the data
84 section, as opposed to being given a section of it's own.
85 COMMON:
86 */
87 .data BLOCK(__section_alignment__) :
88 {
89 __data_start__ = . ;
90 *(.ydata);
91 *(.data);
92 *(.data2);
93 __bss_start__ = . ;
94 *(.bss) ;
95 *(COMMON);
96 __bss_end__ = . ;
97 ${RELOCATING+ end = .};
98 __data_end__ = . ;
99 }
100
101 /* The exception handling table. A sequence of 5 word entries. Section
102 address and extent are placed in the DataDirectory.
103 */
104 .pdata BLOCK(__section_alignment__) :
105 {
106 *(.pdata)
107 ;
108 }
109
110 /* The idata section is chock full of magic bits.
111 1. Boundaries around various idata parts are used to initialize
112 some of the fields of the DataDirectory. In particular, the
113 magic for 2, 4 and 5 are known to be used. Some compilers
114 appear to generate magic section symbols for this purpose.
115 Where we can, we catch such symbols and use our own. This of
116 course is something less than a perfect strategy.
117 2. The table of contents is placed immediately after idata4.
118 The ".private.toc" sections are generated by the ppc bfd. The
119 .toc variable is generated by gas, and resolved here. It is
120 used to initialized function descriptors (and anyone else who
121 needs the address of the module's toc). The only thing
122 interesting about it at all? Most ppc instructions using it
123 have a 16bit displacement field. The convention for addressing
124 is to initialize the .toc value to 32K past the start of the
125 actual toc, and subtract 32K from all references, thus using
126 the entire 64K range. Naturally, the reloc code must agree
127 on this number or you get pretty stupid results.
128 */
129 .idata BLOCK(__section_alignment__) :
130 {
131 __idata2_magic__ = .;
132 *(.idata\$2);
133 __idata3_magic__ = .;
134 *(.idata\$3);
135 __idata4_magic__ = .;
136 *(.idata\$4);
137 . = ALIGN(4);
138 .toc = . + 32768;
139 *(.private.toc);
140 __idata5_magic__ = .;
141 *(.idata\$5);
142 __idata6_magic__ = .;
143 *(.idata\$6);
144 __idata7_magic__ = .;
145 *(.idata\$7);
146 ;
147 }
148
149 /* reldata -- data that requires relocation
150 */
151 .reldata BLOCK(__section_alignment__) :
152 {
153 *(.reldata)
154 ;
155 }
156
157
158 /* Resources */
159 .rsrc BLOCK(__section_alignment__) :
160 {
161 *(.rsrc\$01)
162 *(.rsrc\$02)
163 ;
164 }
165
166 .stab BLOCK(__section_alignment__) ${RELOCATING+(NOLOAD)} :
167 {
168 [ .stab ]
169 }
170
171 .stabstr BLOCK(__section_alignment__) ${RELOCATING+(NOLOAD)} :
172 {
173 [ .stabstr ]
174 }
175
176 /* The .reloc section is currently generated by the dlltool from Steve
177 Chamberlain in a second pass of linking. Section address and extent
178 are placed in the DataDirectory.
179 */
180 .reloc BLOCK(__section_alignment__) :
181 {
182 *(.reloc)
183 ;
184 }
185
186 /* We don't do anything useful with codeview debugger support or the
187 directive section (yet). Hopefully, we junk them correctly.
188 */
189 /DISCARD/ BLOCK(__section_alignment__) :
190 {
191 *(.debug\$S)
192 *(.debug\$T)
193 *(.debug\$F)
194 *(.drectve)
195 ;
196 }
197 }
198 EOF
This page took 0.068052 seconds and 4 git commands to generate.