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.*) }"
1c68693b 127DISCARDED="/DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) }"
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 269 ${INITIAL_READONLY_SECTIONS}
cd714b79 270 .note.gnu.build-id : { *(.note.gnu.build-id) }
252b5132 271 ${TEXT_DYNAMIC+${DYNAMIC}}
465bc359 272 .hash ${RELOCATING-0} : { *(.hash) }
fdc90cb4 273 .gnu.hash ${RELOCATING-0} : { *(.gnu.hash) }
465bc359
AM
274 .dynsym ${RELOCATING-0} : { *(.dynsym) }
275 .dynstr ${RELOCATING-0} : { *(.dynstr) }
276 .gnu.version ${RELOCATING-0} : { *(.gnu.version) }
277 .gnu.version_d ${RELOCATING-0}: { *(.gnu.version_d) }
278 .gnu.version_r ${RELOCATING-0}: { *(.gnu.version_r) }
9e4141bc 279
db6751f2
JJ
280EOF
281if [ "x$COMBRELOC" = x ]; then
282 COMBRELOCCAT=cat
283else
284 COMBRELOCCAT="cat > $COMBRELOC"
285fi
286eval $COMBRELOCCAT <<EOF
465bc359
AM
287 .rel.init ${RELOCATING-0} : { *(.rel.init) }
288 .rela.init ${RELOCATING-0} : { *(.rela.init) }
289 .rel.text ${RELOCATING-0} : { *(.rel.text${RELOCATING+ .rel.text.* .rel.gnu.linkonce.t.*}) }
290 .rela.text ${RELOCATING-0} : { *(.rela.text${RELOCATING+ .rela.text.* .rela.gnu.linkonce.t.*}) }
291 .rel.fini ${RELOCATING-0} : { *(.rel.fini) }
292 .rela.fini ${RELOCATING-0} : { *(.rela.fini) }
293 .rel.rodata ${RELOCATING-0} : { *(.rel.rodata${RELOCATING+ .rel.rodata.* .rel.gnu.linkonce.r.*}) }
294 .rela.rodata ${RELOCATING-0} : { *(.rela.rodata${RELOCATING+ .rela.rodata.* .rela.gnu.linkonce.r.*}) }
9e4141bc 295 ${OTHER_READONLY_RELOC_SECTIONS}
4e8aba04
JJ
296 .rel.data.rel.ro ${RELOCATING-0} : { *(.rel.data.rel.ro${RELOCATING+* .rel.gnu.linkonce.d.rel.ro.*}) }
297 .rela.data.rel.ro ${RELOCATING-0} : { *(.rela.data.rel.ro${RELOCATING+* .rela.gnu.linkonce.d.rel.ro.*}) }
465bc359
AM
298 .rel.data ${RELOCATING-0} : { *(.rel.data${RELOCATING+ .rel.data.* .rel.gnu.linkonce.d.*}) }
299 .rela.data ${RELOCATING-0} : { *(.rela.data${RELOCATING+ .rela.data.* .rela.gnu.linkonce.d.*}) }
13ae64f3
JJ
300 .rel.tdata ${RELOCATING-0} : { *(.rel.tdata${RELOCATING+ .rel.tdata.* .rel.gnu.linkonce.td.*}) }
301 .rela.tdata ${RELOCATING-0} : { *(.rela.tdata${RELOCATING+ .rela.tdata.* .rela.gnu.linkonce.td.*}) }
302 .rel.tbss ${RELOCATING-0} : { *(.rel.tbss${RELOCATING+ .rel.tbss.* .rel.gnu.linkonce.tb.*}) }
303 .rela.tbss ${RELOCATING-0} : { *(.rela.tbss${RELOCATING+ .rela.tbss.* .rela.gnu.linkonce.tb.*}) }
465bc359
AM
304 .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) }
305 .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) }
306 .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) }
307 .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) }
308 .rel.got ${RELOCATING-0} : { *(.rel.got) }
309 .rela.got ${RELOCATING-0} : { *(.rela.got) }
9e4141bc 310 ${OTHER_GOT_RELOC_SECTIONS}
48459341
L
311 ${REL_SDATA}
312 ${REL_SBSS}
313 ${REL_SDATA2}
314 ${REL_SBSS2}
465bc359
AM
315 .rel.bss ${RELOCATING-0} : { *(.rel.bss${RELOCATING+ .rel.bss.* .rel.gnu.linkonce.b.*}) }
316 .rela.bss ${RELOCATING-0} : { *(.rela.bss${RELOCATING+ .rela.bss.* .rela.gnu.linkonce.b.*}) }
827a1c67 317 ${REL_LARGE}
db6751f2
JJ
318EOF
319if [ -n "$COMBRELOC" ]; then
320cat <<EOF
465bc359 321 .rel.dyn ${RELOCATING-0} :
db6751f2
JJ
322 {
323EOF
324sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rela\./d;s/^.*: { *\(.*\)}$/ \1/' $COMBRELOC
325cat <<EOF
326 }
465bc359 327 .rela.dyn ${RELOCATING-0} :
db6751f2
JJ
328 {
329EOF
330sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rel\./d;s/^.*: { *\(.*\)}/ \1/' $COMBRELOC
331cat <<EOF
332 }
333EOF
334fi
335cat <<EOF
465bc359
AM
336 .rel.plt ${RELOCATING-0} : { *(.rel.plt) }
337 .rela.plt ${RELOCATING-0} : { *(.rela.plt) }
9e673ad1 338 ${OTHER_PLT_RELOC_SECTIONS}
9e4141bc 339
465bc359 340 .init ${RELOCATING-0} :
4ab10e93 341 {
53db15ed 342 ${RELOCATING+${INIT_START}}
4ab10e93 343 KEEP (*(.init))
53db15ed 344 ${RELOCATING+${INIT_END}}
4ab10e93
GK
345 } =${NOP-0}
346
8d6d53d4 347 ${TEXT_PLT+${PLT}}
ecc49060 348 ${TINY_READONLY_SECTION}
465bc359 349 .text ${RELOCATING-0} :
252b5132
RH
350 {
351 ${RELOCATING+${TEXT_START_SYMBOLS}}
465bc359 352 *(.text .stub${RELOCATING+ .text.* .gnu.linkonce.t.*})
a85bf78e 353 KEEP (*(.text.*personality*))
252b5132
RH
354 /* .gnu.warning sections are handled specially by elf32.em. */
355 *(.gnu.warning)
252b5132
RH
356 ${RELOCATING+${OTHER_TEXT_SECTIONS}}
357 } =${NOP-0}
465bc359 358 .fini ${RELOCATING-0} :
904ecb2d 359 {
53db15ed 360 ${RELOCATING+${FINI_START}}
904ecb2d 361 KEEP (*(.fini))
53db15ed 362 ${RELOCATING+${FINI_END}}
904ecb2d 363 } =${NOP-0}
eac338cf
PB
364 ${RELOCATING+PROVIDE (__${ETEXT_NAME} = .);}
365 ${RELOCATING+PROVIDE (_${ETEXT_NAME} = .);}
366 ${RELOCATING+PROVIDE (${ETEXT_NAME} = .);}
a8e53fb0 367 ${WRITABLE_RODATA-${RODATA}}
465bc359 368 .rodata1 ${RELOCATING-0} : { *(.rodata1) }
6c86c541
GK
369 ${CREATE_SHLIB-${SDATA2}}
370 ${CREATE_SHLIB-${SBSS2}}
465bc359 371 ${OTHER_READONLY_SECTIONS}
65765700 372 .eh_frame_hdr : { *(.eh_frame_hdr) }
0841712e 373 .eh_frame ${RELOCATING-0} : ONLY_IF_RO { KEEP (*(.eh_frame)) }
c8c9c297 374 .gcc_except_table ${RELOCATING-0} : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
252b5132
RH
375
376 /* Adjust the address for the data segment. We want to adjust up to
377 the same address within the page on the next page up. */
9203ba99 378 ${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+. = ${DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}}
2d20f7bf 379 ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}
9203ba99 380 ${CREATE_PIE+${RELOCATING+. = ${SHLIB_DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}
252b5132 381
8c37241b 382 /* Exception handling */
0841712e 383 .eh_frame ${RELOCATING-0} : ONLY_IF_RW { KEEP (*(.eh_frame)) }
c8c9c297 384 .gcc_except_table ${RELOCATING-0} : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
8c37241b
JJ
385
386 /* Thread Local Storage sections */
387 .tdata ${RELOCATING-0} : { *(.tdata${RELOCATING+ .tdata.* .gnu.linkonce.td.*}) }
388 .tbss ${RELOCATING-0} : { *(.tbss${RELOCATING+ .tbss.* .gnu.linkonce.tb.*})${RELOCATING+ *(.tcommon)} }
389
046183de
AM
390 .preinit_array ${RELOCATING-0} :
391 {
a817dba3 392 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__preinit_array_start = .);}}
046183de 393 KEEP (*(.preinit_array))
a817dba3 394 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__preinit_array_end = .);}}
046183de
AM
395 }
396 .init_array ${RELOCATING-0} :
397 {
a817dba3 398 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_start = .);}}
6f2942ed 399 KEEP (*(SORT(.init_array.*)))
046183de 400 KEEP (*(.init_array))
a817dba3 401 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_end = .);}}
046183de
AM
402 }
403 .fini_array ${RELOCATING-0} :
404 {
a817dba3 405 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_start = .);}}
046183de 406 KEEP (*(.fini_array))
6f2942ed 407 KEEP (*(SORT(.fini_array.*)))
a817dba3 408 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_end = .);}}
046183de 409 }
951e9133
L
410 ${SMALL_DATA_CTOR-${RELOCATING+${CTOR}}}
411 ${SMALL_DATA_DTOR-${RELOCATING+${DTOR}}}
8c37241b
JJ
412 .jcr ${RELOCATING-0} : { KEEP (*(.jcr)) }
413
414 ${RELOCATING+${DATARELRO}}
415 ${OTHER_RELRO_SECTIONS}
416 ${TEXT_DYNAMIC-${DYNAMIC}}
0cf7d72c
AM
417 ${DATA_GOT+${RELRO_NOW+${GOT}}}
418 ${DATA_GOT+${RELRO_NOW+${GOTPLT}}}
419 ${DATA_GOT+${RELRO_NOW-${SEPARATE_GOTPLT+${GOT}}}}
8c37241b 420 ${RELOCATING+${DATA_SEGMENT_RELRO_END}}
0cf7d72c
AM
421 ${DATA_GOT+${RELRO_NOW-${SEPARATE_GOTPLT-${GOT}}}}
422 ${DATA_GOT+${RELRO_NOW-${GOTPLT}}}
8c37241b 423
b71a5181 424 ${DATA_PLT+${PLT_BEFORE_GOT-${PLT}}}
8c37241b 425
465bc359 426 .data ${RELOCATING-0} :
252b5132
RH
427 {
428 ${RELOCATING+${DATA_START_SYMBOLS}}
465bc359 429 *(.data${RELOCATING+ .data.* .gnu.linkonce.d.*})
779dafb4 430 ${RELOCATING+KEEP (*(.gnu.linkonce.d.*personality*))}
252b5132
RH
431 ${CONSTRUCTING+SORT(CONSTRUCTORS)}
432 }
465bc359 433 .data1 ${RELOCATING-0} : { *(.data1) }
a8e53fb0 434 ${WRITABLE_RODATA+${RODATA}}
465bc359 435 ${OTHER_READWRITE_SECTIONS}
951e9133
L
436 ${SMALL_DATA_CTOR+${RELOCATING+${CTOR}}}
437 ${SMALL_DATA_DTOR+${RELOCATING+${DTOR}}}
b71a5181 438 ${DATA_PLT+${PLT_BEFORE_GOT+${PLT}}}
0cf7d72c
AM
439 ${SDATA_GOT+${RELOCATING+${OTHER_GOT_SYMBOLS}}}
440 ${SDATA_GOT+${GOT}}
441 ${SDATA_GOT+${OTHER_GOT_SECTIONS}}
48459341 442 ${SDATA}
465bc359 443 ${OTHER_SDATA_SECTIONS}
a817dba3 444 ${RELOCATING+${DATA_END_SYMBOLS-${USER_LABEL_PREFIX}_edata = .; PROVIDE (${USER_LABEL_PREFIX}edata = .);}}
252b5132
RH
445 ${RELOCATING+__bss_start = .;}
446 ${RELOCATING+${OTHER_BSS_SYMBOLS}}
48459341 447 ${SBSS}
6c86c541 448 ${BSS_PLT+${PLT}}
465bc359 449 .bss ${RELOCATING-0} :
252b5132
RH
450 {
451 *(.dynbss)
465bc359 452 *(.bss${RELOCATING+ .bss.* .gnu.linkonce.b.*})
252b5132
RH
453 *(COMMON)
454 /* Align here to ensure that the .bss section occupies space up to
455 _end. Align after .bss to ensure correct alignment even if the
3b22753a
L
456 .bss section disappears because there are no input sections.
457 FIXME: Why do we need it? When there is no .bss section, we don't
458 pad the .data section. */
9d12f64c 459 ${RELOCATING+. = ALIGN(. != 0 ? ${ALIGNMENT} : 1);}
252b5132 460 }
e9f53129 461 ${OTHER_BSS_SECTIONS}
827a1c67
AM
462 ${RELOCATING+${OTHER_BSS_END_SYMBOLS}}
463 ${RELOCATING+. = ALIGN(${ALIGNMENT});}
3b22753a 464 ${LARGE_SECTIONS}
252b5132 465 ${RELOCATING+. = ALIGN(${ALIGNMENT});}
9f4fb502 466 ${RELOCATING+${OTHER_END_SYMBOLS}}
a817dba3 467 ${RELOCATING+${END_SYMBOLS-${USER_LABEL_PREFIX}_end = .; PROVIDE (${USER_LABEL_PREFIX}end = .);}}
2d13d8c5 468 ${RELOCATING+${DATA_SEGMENT_END}}
252b5132
RH
469
470 /* Stabs debugging sections. */
465bc359
AM
471 .stab 0 : { *(.stab) }
472 .stabstr 0 : { *(.stabstr) }
473 .stab.excl 0 : { *(.stab.excl) }
474 .stab.exclstr 0 : { *(.stab.exclstr) }
475 .stab.index 0 : { *(.stab.index) }
252b5132
RH
476 .stab.indexstr 0 : { *(.stab.indexstr) }
477
465bc359 478 .comment 0 : { *(.comment) }
252b5132
RH
479
480 /* DWARF debug sections.
481 Symbols in the DWARF debugging sections are relative to the beginning
482 of the section so we begin them at 0. */
483
484 /* DWARF 1 */
485 .debug 0 : { *(.debug) }
486 .line 0 : { *(.line) }
487
488 /* GNU DWARF 1 extensions */
489 .debug_srcinfo 0 : { *(.debug_srcinfo) }
490 .debug_sfnames 0 : { *(.debug_sfnames) }
491
492 /* DWARF 1.1 and DWARF 2 */
493 .debug_aranges 0 : { *(.debug_aranges) }
494 .debug_pubnames 0 : { *(.debug_pubnames) }
495
496 /* DWARF 2 */
779dafb4 497 .debug_info 0 : { *(.debug_info${RELOCATING+ .gnu.linkonce.wi.*}) }
252b5132
RH
498 .debug_abbrev 0 : { *(.debug_abbrev) }
499 .debug_line 0 : { *(.debug_line) }
500 .debug_frame 0 : { *(.debug_frame) }
501 .debug_str 0 : { *(.debug_str) }
502 .debug_loc 0 : { *(.debug_loc) }
503 .debug_macinfo 0 : { *(.debug_macinfo) }
504
505 /* SGI/MIPS DWARF 2 extensions */
506 .debug_weaknames 0 : { *(.debug_weaknames) }
507 .debug_funcnames 0 : { *(.debug_funcnames) }
508 .debug_typenames 0 : { *(.debug_typenames) }
509 .debug_varnames 0 : { *(.debug_varnames) }
510
083a6ddf
AM
511 /* DWARF 3 */
512 .debug_pubtypes 0 : { *(.debug_pubtypes) }
513 .debug_ranges 0 : { *(.debug_ranges) }
514
ecc49060
NC
515 ${TINY_DATA_SECTION}
516 ${TINY_BSS_SECTION}
517
465bc359 518 ${STACK_ADDR+${STACK}}
104d59d1 519 ${ATTRS_SECTIONS}
252b5132 520 ${OTHER_SECTIONS}
827a1c67 521 ${RELOCATING+${OTHER_SYMBOLS}}
1c68693b 522 ${RELOCATING+${DISCARDED}}
252b5132
RH
523}
524EOF
This page took 0.352663 seconds and 4 git commands to generate.