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