bfd:
[deliverable/binutils-gdb.git] / ld / scripttempl / elf.sc
CommitLineData
252b5132
RH
1#
2# Unusual variables checked by this code:
563e308f 3# NOP - four byte opcode for no-op (defaults to 0)
48459341
L
4# NO_SMALL_DATA - no .sbss/.sbss2/.sdata/.sdata2 sections if not
5# empty.
951e9133
L
6# SMALL_DATA_CTOR - .ctors contains small data.
7# SMALL_DATA_DTOR - .dtors contains small data.
252b5132
RH
8# DATA_ADDR - if end-of-text-plus-one-page isn't right for data start
9# INITIAL_READONLY_SECTIONS - at start of text segment
10# OTHER_READONLY_SECTIONS - other than .text .init .rodata ...
11# (e.g., .PARISC.milli)
12# OTHER_TEXT_SECTIONS - these get put in .text when relocating
13# OTHER_READWRITE_SECTIONS - other than .data .bss .ctors .sdata ...
14# (e.g., .PARISC.global)
8c37241b
JJ
15# OTHER_RELRO_SECTIONS - other than .data.rel.ro ...
16# (e.g. PPC32 .fixup, .got[12])
e9f53129 17# OTHER_BSS_SECTIONS - other than .bss .sbss ...
104d59d1 18# ATTRS_SECTIONS - at the end
252b5132
RH
19# OTHER_SECTIONS - at the end
20# EXECUTABLE_SYMBOLS - symbols that must be defined for an
21# executable (e.g., _DYNAMIC_LINK)
ba916c8a
MM
22# TEXT_START_ADDR - the first byte of the text segment, after any
23# headers.
24# TEXT_BASE_ADDRESS - the first byte of the text segment.
252b5132
RH
25# TEXT_START_SYMBOLS - symbols that appear at the start of the
26# .text section.
27# DATA_START_SYMBOLS - symbols that appear at the start of the
28# .data section.
eac338cf
PB
29# DATA_END_SYMBOLS - symbols that appear at the end of the
30# writeable data sections.
252b5132 31# OTHER_GOT_SYMBOLS - symbols defined just before .got.
5253f23b
AM
32# OTHER_GOT_SECTIONS - sections just after .got.
33# OTHER_SDATA_SECTIONS - sections just after .sdata.
252b5132
RH
34# OTHER_BSS_SYMBOLS - symbols that appear at the start of the
35# .bss section besides __bss_start.
36# DATA_PLT - .plt should be in data segment, not text segment.
b71a5181 37# PLT_BEFORE_GOT - .plt just before .got when .plt is in data segement.
6c86c541 38# BSS_PLT - .plt should be in bss segment
252b5132
RH
39# TEXT_DYNAMIC - .dynamic in text segment, not data segment.
40# EMBEDDED - whether this is for an embedded system.
41# SHLIB_TEXT_START_ADDR - if set, add to SIZEOF_HEADERS to set
42# start address of shared library.
43# INPUT_FILES - INPUT command of files to always include
a8e53fb0 44# WRITABLE_RODATA - if set, the .rodata section should be writable
904ecb2d
JL
45# INIT_START, INIT_END - statements just before and just after
46# combination of .init sections.
47# FINI_START, FINI_END - statements just before and just after
48# combination of .fini sections.
465bc359 49# STACK_ADDR - start of a .stack section.
827a1c67 50# OTHER_SYMBOLS - symbols to place right at the end of the script.
eac338cf
PB
51# ETEXT_NAME - name of a symbol for the end of the text section,
52# normally etext.
8c37241b
JJ
53# SEPARATE_GOTPLT - if set, .got.plt should be separate output section,
54# so that .got can be in the RELRO area. It should be set to
55# the number of bytes in the beginning of .got.plt which can be
56# in the RELRO area as well.
a817dba3 57# USER_LABEL_PREFIX - prefix to add to user-visible symbols.
252b5132
RH
58#
59# When adding sections, do note that the names of some sections are used
60# when specifying the start address of the next.
61#
62
d73e9da0
AS
63# Many sections come in three flavours. There is the 'real' section,
64# like ".data". Then there are the per-procedure or per-variable
65# sections, generated by -ffunction-sections and -fdata-sections in GCC,
66# and useful for --gc-sections, which for a variable "foo" might be
67# ".data.foo". Then there are the linkonce sections, for which the linker
68# eliminates duplicates, which are named like ".gnu.linkonce.d.foo".
69# The exact correspondences are:
70#
71# Section Linkonce section
72# .text .gnu.linkonce.t.foo
73# .rodata .gnu.linkonce.r.foo
74# .data .gnu.linkonce.d.foo
75# .bss .gnu.linkonce.b.foo
76# .sdata .gnu.linkonce.s.foo
77# .sbss .gnu.linkonce.sb.foo
78# .sdata2 .gnu.linkonce.s2.foo
79# .sbss2 .gnu.linkonce.sb2.foo
465bc359 80# .debug_info .gnu.linkonce.wi.foo
13ae64f3
JJ
81# .tdata .gnu.linkonce.td.foo
82# .tbss .gnu.linkonce.tb.foo
3b22753a
L
83# .lrodata .gnu.linkonce.lr.foo
84# .ldata .gnu.linkonce.l.foo
85# .lbss .gnu.linkonce.lb.foo
d73e9da0
AS
86#
87# Each of these can also have corresponding .rel.* and .rela.* sections.
9ac4db9c 88
252b5132
RH
89test -z "$ENTRY" && ENTRY=_start
90test -z "${BIG_OUTPUT_FORMAT}" && BIG_OUTPUT_FORMAT=${OUTPUT_FORMAT}
91test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
92if [ -z "$MACHINE" ]; then OUTPUT_ARCH=${ARCH}; else OUTPUT_ARCH=${ARCH}:${MACHINE}; fi
93test -z "${ELFSIZE}" && ELFSIZE=32
94test -z "${ALIGNMENT}" && ALIGNMENT="${ELFSIZE} / 8"
95test "$LD_FLAG" = "N" && DATA_ADDR=.
eac338cf 96test -z "${ETEXT_NAME}" && ETEXT_NAME=etext
9203ba99
JJ
97test -n "$CREATE_SHLIB$CREATE_PIE" && test -n "$SHLIB_DATA_ADDR" && COMMONPAGESIZE=""
98test -z "$CREATE_SHLIB$CREATE_PIE" && test -n "$DATA_ADDR" && COMMONPAGESIZE=""
8c37241b 99test -n "$RELRO_NOW" && unset SEPARATE_GOTPLT
104d59d1 100test -z "$ATTRS_SECTIONS" && ATTRS_SECTIONS=".gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }"
1ddd7b13 101DATA_SEGMENT_ALIGN="ALIGN(${SEGMENT_SIZE}) + (. & (${MAXPAGESIZE} - 1))"
8c37241b 102DATA_SEGMENT_RELRO_END=""
2d13d8c5
JJ
103DATA_SEGMENT_END=""
104if test -n "${COMMONPAGESIZE}"; then
1ddd7b13 105 DATA_SEGMENT_ALIGN="ALIGN (${SEGMENT_SIZE}) - ((${MAXPAGESIZE} - .) & (${MAXPAGESIZE} - 1)); . = DATA_SEGMENT_ALIGN (${MAXPAGESIZE}, ${COMMONPAGESIZE})"
2d13d8c5 106 DATA_SEGMENT_END=". = DATA_SEGMENT_END (.);"
4ca02259 107 DATA_SEGMENT_RELRO_END=". = DATA_SEGMENT_RELRO_END (${SEPARATE_GOTPLT-0}, .);"
2d20f7bf 108fi
5a8e7be2
AM
109if test -z "${INITIAL_READONLY_SECTIONS}${CREATE_SHLIB}"; then
110 INITIAL_READONLY_SECTIONS=".interp ${RELOCATING-0} : { *(.interp) }"
111fi
0cf7d72c
AM
112if test -z "$PLT"; then
113 PLT=".plt ${RELOCATING-0} : { *(.plt) }"
114fi
8d6d53d4 115test -n "${DATA_PLT-${BSS_PLT-text}}" && TEXT_PLT=yes
8c37241b
JJ
116if test -z "$GOT"; then
117 if test -z "$SEPARATE_GOTPLT"; then
118 GOT=".got ${RELOCATING-0} : { *(.got.plt) *(.got) }"
119 else
120 GOT=".got ${RELOCATING-0} : { *(.got) }"
4ca02259 121 GOTPLT=".got.plt ${RELOCATING-0} : { *(.got.plt) }"
8c37241b
JJ
122 fi
123fi
465bc359
AM
124DYNAMIC=".dynamic ${RELOCATING-0} : { *(.dynamic) }"
125RODATA=".rodata ${RELOCATING-0} : { *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.*}) }"
4e8aba04 126DATARELRO=".data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) }"
9ee5e499 127STACKNOTE="/DISCARD/ : { *(.note.GNU-stack) }"
48459341
L
128if test -z "${NO_SMALL_DATA}"; then
129 SBSS=".sbss ${RELOCATING-0} :
130 {
046183de 131 ${RELOCATING+${SBSS_START_SYMBOLS}}
0fb53118 132 ${CREATE_SHLIB+*(.sbss2 .sbss2.* .gnu.linkonce.sb2.*)}
48459341
L
133 *(.dynsbss)
134 *(.sbss${RELOCATING+ .sbss.* .gnu.linkonce.sb.*})
135 *(.scommon)
046183de 136 ${RELOCATING+${SBSS_END_SYMBOLS}}
48459341
L
137 }"
138 SBSS2=".sbss2 ${RELOCATING-0} : { *(.sbss2${RELOCATING+ .sbss2.* .gnu.linkonce.sb2.*}) }"
139 SDATA="/* We want the small data sections together, so single-instruction offsets
140 can access them all, and initialized data all before uninitialized, so
141 we can shorten the on-disk segment size. */
142 .sdata ${RELOCATING-0} :
143 {
144 ${RELOCATING+${SDATA_START_SYMBOLS}}
0fb53118 145 ${CREATE_SHLIB+*(.sdata2 .sdata2.* .gnu.linkonce.s2.*)}
48459341
L
146 *(.sdata${RELOCATING+ .sdata.* .gnu.linkonce.s.*})
147 }"
046183de
AM
148 SDATA2=".sdata2 ${RELOCATING-0} :
149 {
150 ${RELOCATING+${SDATA2_START_SYMBOLS}}
151 *(.sdata2${RELOCATING+ .sdata2.* .gnu.linkonce.s2.*})
152 }"
48459341
L
153 REL_SDATA=".rel.sdata ${RELOCATING-0} : { *(.rel.sdata${RELOCATING+ .rel.sdata.* .rel.gnu.linkonce.s.*}) }
154 .rela.sdata ${RELOCATING-0} : { *(.rela.sdata${RELOCATING+ .rela.sdata.* .rela.gnu.linkonce.s.*}) }"
155 REL_SBSS=".rel.sbss ${RELOCATING-0} : { *(.rel.sbss${RELOCATING+ .rel.sbss.* .rel.gnu.linkonce.sb.*}) }
156 .rela.sbss ${RELOCATING-0} : { *(.rela.sbss${RELOCATING+ .rela.sbss.* .rela.gnu.linkonce.sb.*}) }"
157 REL_SDATA2=".rel.sdata2 ${RELOCATING-0} : { *(.rel.sdata2${RELOCATING+ .rel.sdata2.* .rel.gnu.linkonce.s2.*}) }
158 .rela.sdata2 ${RELOCATING-0} : { *(.rela.sdata2${RELOCATING+ .rela.sdata2.* .rela.gnu.linkonce.s2.*}) }"
159 REL_SBSS2=".rel.sbss2 ${RELOCATING-0} : { *(.rel.sbss2${RELOCATING+ .rel.sbss2.* .rel.gnu.linkonce.sb2.*}) }
160 .rela.sbss2 ${RELOCATING-0} : { *(.rela.sbss2${RELOCATING+ .rela.sbss2.* .rela.gnu.linkonce.sb2.*}) }"
8c37241b
JJ
161else
162 NO_SMALL_DATA=" "
48459341 163fi
0cf7d72c
AM
164if test -z "${DATA_GOT}"; then
165 if test -n "${NO_SMALL_DATA}"; then
166 DATA_GOT=" "
167 fi
168fi
169if test -z "${SDATA_GOT}"; then
170 if test -z "${NO_SMALL_DATA}"; then
171 SDATA_GOT=" "
172 fi
173fi
8c37241b 174test -n "$SEPARATE_GOTPLT" && SEPARATE_GOTPLT=" "
9599dfb1
AM
175test "${LARGE_SECTIONS}" = "yes" && REL_LARGE="
176 .rel.ldata ${RELOCATING-0} : { *(.rel.ldata${RELOCATING+ .rel.ldata.* .rel.gnu.linkonce.l.*}) }
177 .rela.ldata ${RELOCATING-0} : { *(.rela.ldata${RELOCATING+ .rela.ldata.* .rela.gnu.linkonce.l.*}) }
178 .rel.lbss ${RELOCATING-0} : { *(.rel.lbss${RELOCATING+ .rel.lbss.* .rel.gnu.linkonce.lb.*}) }
179 .rela.lbss ${RELOCATING-0} : { *(.rela.lbss${RELOCATING+ .rela.lbss.* .rela.gnu.linkonce.lb.*}) }
180 .rel.lrodata ${RELOCATING-0} : { *(.rel.lrodata${RELOCATING+ .rel.lrodata.* .rel.gnu.linkonce.lr.*}) }
181 .rela.lrodata ${RELOCATING-0} : { *(.rela.lrodata${RELOCATING+ .rela.lrodata.* .rela.gnu.linkonce.lr.*}) }"
1bc214ba
L
182test "${LARGE_SECTIONS}" = "yes" && OTHER_BSS_SECTIONS="
183 ${OTHER_BSS_SECTIONS}
9599dfb1
AM
184 .lbss ${RELOCATING-0} :
185 {
186 *(.dynlbss)
187 *(.lbss${RELOCATING+ .lbss.* .gnu.linkonce.lb.*})
188 *(LARGE_COMMON)
1bc214ba
L
189 }"
190test "${LARGE_SECTIONS}" = "yes" && LARGE_SECTIONS="
9599dfb1
AM
191 .lrodata ${RELOCATING-0} ${RELOCATING+ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))} :
192 {
193 *(.lrodata${RELOCATING+ .lrodata.* .gnu.linkonce.lr.*})
194 }
195 .ldata ${RELOCATING-0} ${RELOCATING+ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))} :
196 {
197 *(.ldata${RELOCATING+ .ldata.* .gnu.linkonce.l.*})
198 ${RELOCATING+. = ALIGN(. != 0 ? ${ALIGNMENT} : 1);}
199 }"
465bc359 200CTOR=".ctors ${CONSTRUCTING-0} :
252b5132
RH
201 {
202 ${CONSTRUCTING+${CTOR_START}}
203 /* gcc uses crtbegin.o to find the start of
204 the constructors, so we make sure it is
205 first. Because this is a wildcard, it
206 doesn't matter if the user does not
207 actually link against crtbegin.o; the
208 linker won't look for a file to match a
209 wildcard. The wildcard also means that it
210 doesn't matter which directory crtbegin.o
211 is in. */
212
40cf2291
AM
213 KEEP (*crtbegin.o(.ctors))
214 KEEP (*crtbegin?.o(.ctors))
252b5132
RH
215
216 /* We don't want to include the .ctor section from
bd6791bc 217 the crtend.o file until after the sorted ctors.
252b5132
RH
218 The .ctor section from the crtend file contains the
219 end of ctors marker and it must be last */
220
40cf2291 221 KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .ctors))
252b5132
RH
222 KEEP (*(SORT(.ctors.*)))
223 KEEP (*(.ctors))
224 ${CONSTRUCTING+${CTOR_END}}
225 }"
465bc359 226DTOR=".dtors ${CONSTRUCTING-0} :
252b5132
RH
227 {
228 ${CONSTRUCTING+${DTOR_START}}
40cf2291
AM
229 KEEP (*crtbegin.o(.dtors))
230 KEEP (*crtbegin?.o(.dtors))
231 KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .dtors))
252b5132
RH
232 KEEP (*(SORT(.dtors.*)))
233 KEEP (*(.dtors))
234 ${CONSTRUCTING+${DTOR_END}}
235 }"
465bc359
AM
236STACK=" .stack ${RELOCATING-0}${RELOCATING+${STACK_ADDR}} :
237 {
238 ${RELOCATING+_stack = .;}
239 *(.stack)
240 }"
252b5132
RH
241
242# if this is for an embedded system, don't add SIZEOF_HEADERS.
243if [ -z "$EMBEDDED" ]; then
244 test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR} + SIZEOF_HEADERS"
245else
246 test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR}"
247fi
248
249cat <<EOF
250OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}",
251 "${LITTLE_OUTPUT_FORMAT}")
252OUTPUT_ARCH(${OUTPUT_ARCH})
253ENTRY(${ENTRY})
254
255${RELOCATING+${LIB_SEARCH_DIRS}}
252b5132
RH
256${RELOCATING+${EXECUTABLE_SYMBOLS}}
257${RELOCATING+${INPUT_FILES}}
258${RELOCATING- /* For some reason, the Solaris linker makes bad executables
259 if gld -r is used and the intermediate file has sections starting
260 at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld
261 bug. But for now assigning the zero vmas works. */}
262
263SECTIONS
264{
265 /* Read-only sections, merged into text segment: */
c6d3b05f 266 ${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+PROVIDE (__executable_start = ${TEXT_START_ADDR}); . = ${TEXT_BASE_ADDRESS};}}}
252b5132 267 ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_TEXT_START_ADDR:-0} + SIZEOF_HEADERS;}}
36af4a4e 268 ${CREATE_PIE+${RELOCATING+. = ${SHLIB_TEXT_START_ADDR:-0} + SIZEOF_HEADERS;}}
252b5132
RH
269 ${INITIAL_READONLY_SECTIONS}
270 ${TEXT_DYNAMIC+${DYNAMIC}}
465bc359 271 .hash ${RELOCATING-0} : { *(.hash) }
fdc90cb4 272 .gnu.hash ${RELOCATING-0} : { *(.gnu.hash) }
465bc359
AM
273 .dynsym ${RELOCATING-0} : { *(.dynsym) }
274 .dynstr ${RELOCATING-0} : { *(.dynstr) }
275 .gnu.version ${RELOCATING-0} : { *(.gnu.version) }
276 .gnu.version_d ${RELOCATING-0}: { *(.gnu.version_d) }
277 .gnu.version_r ${RELOCATING-0}: { *(.gnu.version_r) }
9e4141bc 278
db6751f2
JJ
279EOF
280if [ "x$COMBRELOC" = x ]; then
281 COMBRELOCCAT=cat
282else
283 COMBRELOCCAT="cat > $COMBRELOC"
284fi
285eval $COMBRELOCCAT <<EOF
465bc359
AM
286 .rel.init ${RELOCATING-0} : { *(.rel.init) }
287 .rela.init ${RELOCATING-0} : { *(.rela.init) }
288 .rel.text ${RELOCATING-0} : { *(.rel.text${RELOCATING+ .rel.text.* .rel.gnu.linkonce.t.*}) }
289 .rela.text ${RELOCATING-0} : { *(.rela.text${RELOCATING+ .rela.text.* .rela.gnu.linkonce.t.*}) }
290 .rel.fini ${RELOCATING-0} : { *(.rel.fini) }
291 .rela.fini ${RELOCATING-0} : { *(.rela.fini) }
292 .rel.rodata ${RELOCATING-0} : { *(.rel.rodata${RELOCATING+ .rel.rodata.* .rel.gnu.linkonce.r.*}) }
293 .rela.rodata ${RELOCATING-0} : { *(.rela.rodata${RELOCATING+ .rela.rodata.* .rela.gnu.linkonce.r.*}) }
9e4141bc 294 ${OTHER_READONLY_RELOC_SECTIONS}
4e8aba04
JJ
295 .rel.data.rel.ro ${RELOCATING-0} : { *(.rel.data.rel.ro${RELOCATING+* .rel.gnu.linkonce.d.rel.ro.*}) }
296 .rela.data.rel.ro ${RELOCATING-0} : { *(.rela.data.rel.ro${RELOCATING+* .rela.gnu.linkonce.d.rel.ro.*}) }
465bc359
AM
297 .rel.data ${RELOCATING-0} : { *(.rel.data${RELOCATING+ .rel.data.* .rel.gnu.linkonce.d.*}) }
298 .rela.data ${RELOCATING-0} : { *(.rela.data${RELOCATING+ .rela.data.* .rela.gnu.linkonce.d.*}) }
13ae64f3
JJ
299 .rel.tdata ${RELOCATING-0} : { *(.rel.tdata${RELOCATING+ .rel.tdata.* .rel.gnu.linkonce.td.*}) }
300 .rela.tdata ${RELOCATING-0} : { *(.rela.tdata${RELOCATING+ .rela.tdata.* .rela.gnu.linkonce.td.*}) }
301 .rel.tbss ${RELOCATING-0} : { *(.rel.tbss${RELOCATING+ .rel.tbss.* .rel.gnu.linkonce.tb.*}) }
302 .rela.tbss ${RELOCATING-0} : { *(.rela.tbss${RELOCATING+ .rela.tbss.* .rela.gnu.linkonce.tb.*}) }
465bc359
AM
303 .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) }
304 .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) }
305 .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) }
306 .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) }
307 .rel.got ${RELOCATING-0} : { *(.rel.got) }
308 .rela.got ${RELOCATING-0} : { *(.rela.got) }
9e4141bc 309 ${OTHER_GOT_RELOC_SECTIONS}
48459341
L
310 ${REL_SDATA}
311 ${REL_SBSS}
312 ${REL_SDATA2}
313 ${REL_SBSS2}
465bc359
AM
314 .rel.bss ${RELOCATING-0} : { *(.rel.bss${RELOCATING+ .rel.bss.* .rel.gnu.linkonce.b.*}) }
315 .rela.bss ${RELOCATING-0} : { *(.rela.bss${RELOCATING+ .rela.bss.* .rela.gnu.linkonce.b.*}) }
827a1c67 316 ${REL_LARGE}
db6751f2
JJ
317EOF
318if [ -n "$COMBRELOC" ]; then
319cat <<EOF
465bc359 320 .rel.dyn ${RELOCATING-0} :
db6751f2
JJ
321 {
322EOF
323sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rela\./d;s/^.*: { *\(.*\)}$/ \1/' $COMBRELOC
324cat <<EOF
325 }
465bc359 326 .rela.dyn ${RELOCATING-0} :
db6751f2
JJ
327 {
328EOF
329sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rel\./d;s/^.*: { *\(.*\)}/ \1/' $COMBRELOC
330cat <<EOF
331 }
332EOF
333fi
334cat <<EOF
465bc359
AM
335 .rel.plt ${RELOCATING-0} : { *(.rel.plt) }
336 .rela.plt ${RELOCATING-0} : { *(.rela.plt) }
9e673ad1 337 ${OTHER_PLT_RELOC_SECTIONS}
9e4141bc 338
465bc359 339 .init ${RELOCATING-0} :
4ab10e93 340 {
53db15ed 341 ${RELOCATING+${INIT_START}}
4ab10e93 342 KEEP (*(.init))
53db15ed 343 ${RELOCATING+${INIT_END}}
4ab10e93
GK
344 } =${NOP-0}
345
8d6d53d4 346 ${TEXT_PLT+${PLT}}
ecc49060 347 ${TINY_READONLY_SECTION}
465bc359 348 .text ${RELOCATING-0} :
252b5132
RH
349 {
350 ${RELOCATING+${TEXT_START_SYMBOLS}}
465bc359 351 *(.text .stub${RELOCATING+ .text.* .gnu.linkonce.t.*})
a85bf78e 352 KEEP (*(.text.*personality*))
252b5132
RH
353 /* .gnu.warning sections are handled specially by elf32.em. */
354 *(.gnu.warning)
252b5132
RH
355 ${RELOCATING+${OTHER_TEXT_SECTIONS}}
356 } =${NOP-0}
465bc359 357 .fini ${RELOCATING-0} :
904ecb2d 358 {
53db15ed 359 ${RELOCATING+${FINI_START}}
904ecb2d 360 KEEP (*(.fini))
53db15ed 361 ${RELOCATING+${FINI_END}}
904ecb2d 362 } =${NOP-0}
eac338cf
PB
363 ${RELOCATING+PROVIDE (__${ETEXT_NAME} = .);}
364 ${RELOCATING+PROVIDE (_${ETEXT_NAME} = .);}
365 ${RELOCATING+PROVIDE (${ETEXT_NAME} = .);}
a8e53fb0 366 ${WRITABLE_RODATA-${RODATA}}
465bc359 367 .rodata1 ${RELOCATING-0} : { *(.rodata1) }
6c86c541
GK
368 ${CREATE_SHLIB-${SDATA2}}
369 ${CREATE_SHLIB-${SBSS2}}
465bc359 370 ${OTHER_READONLY_SECTIONS}
65765700 371 .eh_frame_hdr : { *(.eh_frame_hdr) }
0841712e 372 .eh_frame ${RELOCATING-0} : ONLY_IF_RO { KEEP (*(.eh_frame)) }
c8c9c297 373 .gcc_except_table ${RELOCATING-0} : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
252b5132
RH
374
375 /* Adjust the address for the data segment. We want to adjust up to
376 the same address within the page on the next page up. */
9203ba99 377 ${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+. = ${DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}}
2d20f7bf 378 ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}
9203ba99 379 ${CREATE_PIE+${RELOCATING+. = ${SHLIB_DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}
252b5132 380
8c37241b 381 /* Exception handling */
0841712e 382 .eh_frame ${RELOCATING-0} : ONLY_IF_RW { KEEP (*(.eh_frame)) }
c8c9c297 383 .gcc_except_table ${RELOCATING-0} : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
8c37241b
JJ
384
385 /* Thread Local Storage sections */
386 .tdata ${RELOCATING-0} : { *(.tdata${RELOCATING+ .tdata.* .gnu.linkonce.td.*}) }
387 .tbss ${RELOCATING-0} : { *(.tbss${RELOCATING+ .tbss.* .gnu.linkonce.tb.*})${RELOCATING+ *(.tcommon)} }
388
046183de
AM
389 .preinit_array ${RELOCATING-0} :
390 {
a817dba3 391 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__preinit_array_start = .);}}
046183de 392 KEEP (*(.preinit_array))
a817dba3 393 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__preinit_array_end = .);}}
046183de
AM
394 }
395 .init_array ${RELOCATING-0} :
396 {
a817dba3 397 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_start = .);}}
6f2942ed 398 KEEP (*(SORT(.init_array.*)))
046183de 399 KEEP (*(.init_array))
a817dba3 400 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_end = .);}}
046183de
AM
401 }
402 .fini_array ${RELOCATING-0} :
403 {
a817dba3 404 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_start = .);}}
046183de 405 KEEP (*(.fini_array))
6f2942ed 406 KEEP (*(SORT(.fini_array.*)))
a817dba3 407 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_end = .);}}
046183de 408 }
951e9133
L
409 ${SMALL_DATA_CTOR-${RELOCATING+${CTOR}}}
410 ${SMALL_DATA_DTOR-${RELOCATING+${DTOR}}}
8c37241b
JJ
411 .jcr ${RELOCATING-0} : { KEEP (*(.jcr)) }
412
413 ${RELOCATING+${DATARELRO}}
414 ${OTHER_RELRO_SECTIONS}
415 ${TEXT_DYNAMIC-${DYNAMIC}}
0cf7d72c
AM
416 ${DATA_GOT+${RELRO_NOW+${GOT}}}
417 ${DATA_GOT+${RELRO_NOW+${GOTPLT}}}
418 ${DATA_GOT+${RELRO_NOW-${SEPARATE_GOTPLT+${GOT}}}}
8c37241b 419 ${RELOCATING+${DATA_SEGMENT_RELRO_END}}
0cf7d72c
AM
420 ${DATA_GOT+${RELRO_NOW-${SEPARATE_GOTPLT-${GOT}}}}
421 ${DATA_GOT+${RELRO_NOW-${GOTPLT}}}
8c37241b 422
b71a5181 423 ${DATA_PLT+${PLT_BEFORE_GOT-${PLT}}}
8c37241b 424
465bc359 425 .data ${RELOCATING-0} :
252b5132
RH
426 {
427 ${RELOCATING+${DATA_START_SYMBOLS}}
465bc359 428 *(.data${RELOCATING+ .data.* .gnu.linkonce.d.*})
779dafb4 429 ${RELOCATING+KEEP (*(.gnu.linkonce.d.*personality*))}
252b5132
RH
430 ${CONSTRUCTING+SORT(CONSTRUCTORS)}
431 }
465bc359 432 .data1 ${RELOCATING-0} : { *(.data1) }
a8e53fb0 433 ${WRITABLE_RODATA+${RODATA}}
465bc359 434 ${OTHER_READWRITE_SECTIONS}
951e9133
L
435 ${SMALL_DATA_CTOR+${RELOCATING+${CTOR}}}
436 ${SMALL_DATA_DTOR+${RELOCATING+${DTOR}}}
b71a5181 437 ${DATA_PLT+${PLT_BEFORE_GOT+${PLT}}}
0cf7d72c
AM
438 ${SDATA_GOT+${RELOCATING+${OTHER_GOT_SYMBOLS}}}
439 ${SDATA_GOT+${GOT}}
440 ${SDATA_GOT+${OTHER_GOT_SECTIONS}}
48459341 441 ${SDATA}
465bc359 442 ${OTHER_SDATA_SECTIONS}
a817dba3 443 ${RELOCATING+${DATA_END_SYMBOLS-${USER_LABEL_PREFIX}_edata = .; PROVIDE (${USER_LABEL_PREFIX}edata = .);}}
252b5132
RH
444 ${RELOCATING+__bss_start = .;}
445 ${RELOCATING+${OTHER_BSS_SYMBOLS}}
48459341 446 ${SBSS}
6c86c541 447 ${BSS_PLT+${PLT}}
465bc359 448 .bss ${RELOCATING-0} :
252b5132
RH
449 {
450 *(.dynbss)
465bc359 451 *(.bss${RELOCATING+ .bss.* .gnu.linkonce.b.*})
252b5132
RH
452 *(COMMON)
453 /* Align here to ensure that the .bss section occupies space up to
454 _end. Align after .bss to ensure correct alignment even if the
3b22753a
L
455 .bss section disappears because there are no input sections.
456 FIXME: Why do we need it? When there is no .bss section, we don't
457 pad the .data section. */
9d12f64c 458 ${RELOCATING+. = ALIGN(. != 0 ? ${ALIGNMENT} : 1);}
252b5132 459 }
e9f53129 460 ${OTHER_BSS_SECTIONS}
827a1c67
AM
461 ${RELOCATING+${OTHER_BSS_END_SYMBOLS}}
462 ${RELOCATING+. = ALIGN(${ALIGNMENT});}
3b22753a 463 ${LARGE_SECTIONS}
252b5132 464 ${RELOCATING+. = ALIGN(${ALIGNMENT});}
9f4fb502 465 ${RELOCATING+${OTHER_END_SYMBOLS}}
a817dba3 466 ${RELOCATING+${END_SYMBOLS-${USER_LABEL_PREFIX}_end = .; PROVIDE (${USER_LABEL_PREFIX}end = .);}}
2d13d8c5 467 ${RELOCATING+${DATA_SEGMENT_END}}
252b5132
RH
468
469 /* Stabs debugging sections. */
465bc359
AM
470 .stab 0 : { *(.stab) }
471 .stabstr 0 : { *(.stabstr) }
472 .stab.excl 0 : { *(.stab.excl) }
473 .stab.exclstr 0 : { *(.stab.exclstr) }
474 .stab.index 0 : { *(.stab.index) }
252b5132
RH
475 .stab.indexstr 0 : { *(.stab.indexstr) }
476
465bc359 477 .comment 0 : { *(.comment) }
252b5132
RH
478
479 /* DWARF debug sections.
480 Symbols in the DWARF debugging sections are relative to the beginning
481 of the section so we begin them at 0. */
482
483 /* DWARF 1 */
484 .debug 0 : { *(.debug) }
485 .line 0 : { *(.line) }
486
487 /* GNU DWARF 1 extensions */
488 .debug_srcinfo 0 : { *(.debug_srcinfo) }
489 .debug_sfnames 0 : { *(.debug_sfnames) }
490
491 /* DWARF 1.1 and DWARF 2 */
492 .debug_aranges 0 : { *(.debug_aranges) }
493 .debug_pubnames 0 : { *(.debug_pubnames) }
494
495 /* DWARF 2 */
779dafb4 496 .debug_info 0 : { *(.debug_info${RELOCATING+ .gnu.linkonce.wi.*}) }
252b5132
RH
497 .debug_abbrev 0 : { *(.debug_abbrev) }
498 .debug_line 0 : { *(.debug_line) }
499 .debug_frame 0 : { *(.debug_frame) }
500 .debug_str 0 : { *(.debug_str) }
501 .debug_loc 0 : { *(.debug_loc) }
502 .debug_macinfo 0 : { *(.debug_macinfo) }
503
504 /* SGI/MIPS DWARF 2 extensions */
505 .debug_weaknames 0 : { *(.debug_weaknames) }
506 .debug_funcnames 0 : { *(.debug_funcnames) }
507 .debug_typenames 0 : { *(.debug_typenames) }
508 .debug_varnames 0 : { *(.debug_varnames) }
509
083a6ddf
AM
510 /* DWARF 3 */
511 .debug_pubtypes 0 : { *(.debug_pubtypes) }
512 .debug_ranges 0 : { *(.debug_ranges) }
513
ecc49060
NC
514 ${TINY_DATA_SECTION}
515 ${TINY_BSS_SECTION}
516
465bc359 517 ${STACK_ADDR+${STACK}}
104d59d1 518 ${ATTRS_SECTIONS}
252b5132 519 ${OTHER_SECTIONS}
827a1c67 520 ${RELOCATING+${OTHER_SYMBOLS}}
9ee5e499 521 ${RELOCATING+${STACKNOTE}}
252b5132
RH
522}
523EOF
This page took 0.350131 seconds and 4 git commands to generate.