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