]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - ld/scripttempl/elf.sc
Disable exec-dependent follow vfork tests for remote
[thirdparty/binutils-gdb.git] / ld / scripttempl / elf.sc
CommitLineData
b90efa5b 1# Copyright (C) 2014-2015 Free Software Foundation, Inc.
985743c7
NC
2#
3# Copying and distribution of this file, with or without modification,
4# are permitted in any medium without royalty provided the copyright
5# notice and this notice are preserved.
252b5132
RH
6#
7# Unusual variables checked by this code:
b7761f11 8# NOP - four byte opcode for no-op (defaults to none)
48459341
L
9# NO_SMALL_DATA - no .sbss/.sbss2/.sdata/.sdata2 sections if not
10# empty.
951e9133
L
11# SMALL_DATA_CTOR - .ctors contains small data.
12# SMALL_DATA_DTOR - .dtors contains small data.
252b5132
RH
13# DATA_ADDR - if end-of-text-plus-one-page isn't right for data start
14# INITIAL_READONLY_SECTIONS - at start of text segment
15# OTHER_READONLY_SECTIONS - other than .text .init .rodata ...
16# (e.g., .PARISC.milli)
17# OTHER_TEXT_SECTIONS - these get put in .text when relocating
1bbce132 18# INITIAL_READWRITE_SECTIONS - at start of data segment (after relro)
252b5132
RH
19# OTHER_READWRITE_SECTIONS - other than .data .bss .ctors .sdata ...
20# (e.g., .PARISC.global)
8c37241b
JJ
21# OTHER_RELRO_SECTIONS - other than .data.rel.ro ...
22# (e.g. PPC32 .fixup, .got[12])
3e2b0f31 23# OTHER_RELRO_SECTIONS_2 - as above, but after .dynamic in text segment
e9f53129 24# OTHER_BSS_SECTIONS - other than .bss .sbss ...
104d59d1 25# ATTRS_SECTIONS - at the end
252b5132
RH
26# OTHER_SECTIONS - at the end
27# EXECUTABLE_SYMBOLS - symbols that must be defined for an
28# executable (e.g., _DYNAMIC_LINK)
ba916c8a
MM
29# TEXT_START_ADDR - the first byte of the text segment, after any
30# headers.
31# TEXT_BASE_ADDRESS - the first byte of the text segment.
252b5132
RH
32# TEXT_START_SYMBOLS - symbols that appear at the start of the
33# .text section.
34# DATA_START_SYMBOLS - symbols that appear at the start of the
35# .data section.
eac338cf
PB
36# DATA_END_SYMBOLS - symbols that appear at the end of the
37# writeable data sections.
252b5132 38# OTHER_GOT_SYMBOLS - symbols defined just before .got.
5253f23b
AM
39# OTHER_GOT_SECTIONS - sections just after .got.
40# OTHER_SDATA_SECTIONS - sections just after .sdata.
252b5132
RH
41# OTHER_BSS_SYMBOLS - symbols that appear at the start of the
42# .bss section besides __bss_start.
1bbce132 43# PLT_NEXT_DATA - .plt next to data segment when .plt is in text segment.
252b5132 44# DATA_PLT - .plt should be in data segment, not text segment.
b71a5181 45# PLT_BEFORE_GOT - .plt just before .got when .plt is in data segement.
6c86c541 46# BSS_PLT - .plt should be in bss segment
485cf679
AM
47# NO_REL_RELOCS - Don't include .rel.* sections in script
48# NO_RELA_RELOCS - Don't include .rela.* sections in script
49# NON_ALLOC_DYN - Place dynamic sections after data segment.
252b5132 50# TEXT_DYNAMIC - .dynamic in text segment, not data segment.
5a68afcf 51# EMBEDDED - whether this is for an embedded system.
252b5132
RH
52# SHLIB_TEXT_START_ADDR - if set, add to SIZEOF_HEADERS to set
53# start address of shared library.
54# INPUT_FILES - INPUT command of files to always include
a8e53fb0 55# WRITABLE_RODATA - if set, the .rodata section should be writable
904ecb2d
JL
56# INIT_START, INIT_END - statements just before and just after
57# combination of .init sections.
58# FINI_START, FINI_END - statements just before and just after
59# combination of .fini sections.
465bc359 60# STACK_ADDR - start of a .stack section.
827a1c67 61# OTHER_SYMBOLS - symbols to place right at the end of the script.
eac338cf
PB
62# ETEXT_NAME - name of a symbol for the end of the text section,
63# normally etext.
5a68afcf
RM
64# SEPARATE_CODE - if set, .text and similar sections containing
65# actual machine instructions must be in wholly disjoint
66# pages from any other data, including headers
8c37241b
JJ
67# SEPARATE_GOTPLT - if set, .got.plt should be separate output section,
68# so that .got can be in the RELRO area. It should be set to
69# the number of bytes in the beginning of .got.plt which can be
70# in the RELRO area as well.
a817dba3 71# USER_LABEL_PREFIX - prefix to add to user-visible symbols.
349e935b
JM
72# RODATA_NAME, SDATA_NAME, SBSS_NAME, BSS_NAME - base parts of names
73# for standard sections, without initial "." or suffixes.
252b5132
RH
74#
75# When adding sections, do note that the names of some sections are used
76# when specifying the start address of the next.
77#
78
d73e9da0
AS
79# Many sections come in three flavours. There is the 'real' section,
80# like ".data". Then there are the per-procedure or per-variable
81# sections, generated by -ffunction-sections and -fdata-sections in GCC,
82# and useful for --gc-sections, which for a variable "foo" might be
83# ".data.foo". Then there are the linkonce sections, for which the linker
84# eliminates duplicates, which are named like ".gnu.linkonce.d.foo".
85# The exact correspondences are:
86#
87# Section Linkonce section
88# .text .gnu.linkonce.t.foo
89# .rodata .gnu.linkonce.r.foo
90# .data .gnu.linkonce.d.foo
91# .bss .gnu.linkonce.b.foo
92# .sdata .gnu.linkonce.s.foo
93# .sbss .gnu.linkonce.sb.foo
94# .sdata2 .gnu.linkonce.s2.foo
95# .sbss2 .gnu.linkonce.sb2.foo
465bc359 96# .debug_info .gnu.linkonce.wi.foo
13ae64f3
JJ
97# .tdata .gnu.linkonce.td.foo
98# .tbss .gnu.linkonce.tb.foo
3b22753a
L
99# .lrodata .gnu.linkonce.lr.foo
100# .ldata .gnu.linkonce.l.foo
101# .lbss .gnu.linkonce.lb.foo
d73e9da0
AS
102#
103# Each of these can also have corresponding .rel.* and .rela.* sections.
9ac4db9c 104
b7761f11
L
105if test -n "$NOP"; then
106 FILL="=$NOP"
107else
108 FILL=
109fi
110
349e935b
JM
111test -z "$RODATA_NAME" && RODATA_NAME=rodata
112test -z "$SDATA_NAME" && SDATA_NAME=sdata
113test -z "$SBSS_NAME" && SBSS_NAME=sbss
114test -z "$BSS_NAME" && BSS_NAME=bss
8d17e044 115test -z "$ENTRY" && ENTRY=${USER_LABEL_PREFIX}_start
252b5132
RH
116test -z "${BIG_OUTPUT_FORMAT}" && BIG_OUTPUT_FORMAT=${OUTPUT_FORMAT}
117test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
118if [ -z "$MACHINE" ]; then OUTPUT_ARCH=${ARCH}; else OUTPUT_ARCH=${ARCH}:${MACHINE}; fi
119test -z "${ELFSIZE}" && ELFSIZE=32
120test -z "${ALIGNMENT}" && ALIGNMENT="${ELFSIZE} / 8"
121test "$LD_FLAG" = "N" && DATA_ADDR=.
8d17e044 122test -z "${ETEXT_NAME}" && ETEXT_NAME=${USER_LABEL_PREFIX}etext
9203ba99
JJ
123test -n "$CREATE_SHLIB$CREATE_PIE" && test -n "$SHLIB_DATA_ADDR" && COMMONPAGESIZE=""
124test -z "$CREATE_SHLIB$CREATE_PIE" && test -n "$DATA_ADDR" && COMMONPAGESIZE=""
8c37241b 125test -n "$RELRO_NOW" && unset SEPARATE_GOTPLT
104d59d1 126test -z "$ATTRS_SECTIONS" && ATTRS_SECTIONS=".gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }"
1ddd7b13 127DATA_SEGMENT_ALIGN="ALIGN(${SEGMENT_SIZE}) + (. & (${MAXPAGESIZE} - 1))"
8c37241b 128DATA_SEGMENT_RELRO_END=""
2d13d8c5
JJ
129DATA_SEGMENT_END=""
130if test -n "${COMMONPAGESIZE}"; then
6c1aca3e
AM
131 if test "${SEGMENT_SIZE}" != "${MAXPAGESIZE}"; then
132 DATA_SEGMENT_ALIGN="ALIGN (${SEGMENT_SIZE}) - ((${MAXPAGESIZE} - .) & (${MAXPAGESIZE} - 1)); . = DATA_SEGMENT_ALIGN (${MAXPAGESIZE}, ${COMMONPAGESIZE})"
133 else
134 DATA_SEGMENT_ALIGN="DATA_SEGMENT_ALIGN (${MAXPAGESIZE}, ${COMMONPAGESIZE})"
135 fi
2d13d8c5 136 DATA_SEGMENT_END=". = DATA_SEGMENT_END (.);"
4ca02259 137 DATA_SEGMENT_RELRO_END=". = DATA_SEGMENT_RELRO_END (${SEPARATE_GOTPLT-0}, .);"
2d20f7bf 138fi
5a8e7be2 139if test -z "${INITIAL_READONLY_SECTIONS}${CREATE_SHLIB}"; then
ec2d9b29 140 INITIAL_READONLY_SECTIONS=".interp ${RELOCATING-0} : { *(.interp) }"
5a8e7be2 141fi
0cf7d72c 142if test -z "$PLT"; then
ec2d9b29
AM
143 IPLT=".iplt ${RELOCATING-0} : { *(.iplt) }"
144 PLT=".plt ${RELOCATING-0} : { *(.plt)${IREL_IN_PLT+ *(.iplt)} }
8dfab6dd 145 ${IREL_IN_PLT-$IPLT}"
0cf7d72c 146fi
1bbce132 147test -n "${DATA_PLT-${BSS_PLT-text}}" && TEXT_PLT=
8c37241b
JJ
148if test -z "$GOT"; then
149 if test -z "$SEPARATE_GOTPLT"; then
ec2d9b29 150 GOT=".got ${RELOCATING-0} : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }"
8c37241b 151 else
ec2d9b29
AM
152 GOT=".got ${RELOCATING-0} : { *(.got) *(.igot) }"
153 GOTPLT=".got.plt ${RELOCATING-0} : { *(.got.plt) *(.igot.plt) }"
8c37241b
JJ
154 fi
155fi
ec2d9b29
AM
156REL_IFUNC=".rel.ifunc ${RELOCATING-0} : { *(.rel.ifunc) }"
157RELA_IFUNC=".rela.ifunc ${RELOCATING-0} : { *(.rela.ifunc) }"
158REL_IPLT=".rel.iplt ${RELOCATING-0} :
8dfab6dd
AM
159 {
160 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rel_iplt_start = .);}}
161 *(.rel.iplt)
162 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rel_iplt_end = .);}}
163 }"
ec2d9b29 164RELA_IPLT=".rela.iplt ${RELOCATING-0} :
8dfab6dd
AM
165 {
166 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rela_iplt_start = .);}}
167 *(.rela.iplt)
168 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rela_iplt_end = .);}}
169 }"
ec2d9b29 170DYNAMIC=".dynamic ${RELOCATING-0} : { *(.dynamic) }"
349e935b 171RODATA=".${RODATA_NAME} ${RELOCATING-0} : { *(.${RODATA_NAME}${RELOCATING+ .${RODATA_NAME}.* .gnu.linkonce.r.*}) }"
18bbc1c5 172DATARELRO=".data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }"
032b94c5 173DISCARDED="/DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }"
48459341 174if test -z "${NO_SMALL_DATA}"; then
349e935b 175 SBSS=".${SBSS_NAME} ${RELOCATING-0} :
48459341 176 {
046183de 177 ${RELOCATING+${SBSS_START_SYMBOLS}}
349e935b
JM
178 ${CREATE_SHLIB+*(.${SBSS_NAME}2 .${SBSS_NAME}2.* .gnu.linkonce.sb2.*)}
179 *(.dyn${SBSS_NAME})
180 *(.${SBSS_NAME}${RELOCATING+ .${SBSS_NAME}.* .gnu.linkonce.sb.*})
48459341 181 *(.scommon)
046183de 182 ${RELOCATING+${SBSS_END_SYMBOLS}}
48459341 183 }"
349e935b 184 SBSS2=".${SBSS_NAME}2 ${RELOCATING-0} : { *(.${SBSS_NAME}2${RELOCATING+ .${SBSS_NAME}2.* .gnu.linkonce.sb2.*}) }"
48459341
L
185 SDATA="/* We want the small data sections together, so single-instruction offsets
186 can access them all, and initialized data all before uninitialized, so
187 we can shorten the on-disk segment size. */
5a68afcf 188 .${SDATA_NAME} ${RELOCATING-0} :
48459341
L
189 {
190 ${RELOCATING+${SDATA_START_SYMBOLS}}
349e935b
JM
191 ${CREATE_SHLIB+*(.${SDATA_NAME}2 .${SDATA_NAME}2.* .gnu.linkonce.s2.*)}
192 *(.${SDATA_NAME}${RELOCATING+ .${SDATA_NAME}.* .gnu.linkonce.s.*})
48459341 193 }"
349e935b 194 SDATA2=".${SDATA_NAME}2 ${RELOCATING-0} :
046183de
AM
195 {
196 ${RELOCATING+${SDATA2_START_SYMBOLS}}
349e935b 197 *(.${SDATA_NAME}2${RELOCATING+ .${SDATA_NAME}2.* .gnu.linkonce.s2.*})
046183de 198 }"
349e935b
JM
199 REL_SDATA=".rel.${SDATA_NAME} ${RELOCATING-0} : { *(.rel.${SDATA_NAME}${RELOCATING+ .rel.${SDATA_NAME}.* .rel.gnu.linkonce.s.*}) }
200 .rela.${SDATA_NAME} ${RELOCATING-0} : { *(.rela.${SDATA_NAME}${RELOCATING+ .rela.${SDATA_NAME}.* .rela.gnu.linkonce.s.*}) }"
201 REL_SBSS=".rel.${SBSS_NAME} ${RELOCATING-0} : { *(.rel.${SBSS_NAME}${RELOCATING+ .rel.${SBSS_NAME}.* .rel.gnu.linkonce.sb.*}) }
202 .rela.${SBSS_NAME} ${RELOCATING-0} : { *(.rela.${SBSS_NAME}${RELOCATING+ .rela.${SBSS_NAME}.* .rela.gnu.linkonce.sb.*}) }"
203 REL_SDATA2=".rel.${SDATA_NAME}2 ${RELOCATING-0} : { *(.rel.${SDATA_NAME}2${RELOCATING+ .rel.${SDATA_NAME}2.* .rel.gnu.linkonce.s2.*}) }
204 .rela.${SDATA_NAME}2 ${RELOCATING-0} : { *(.rela.${SDATA_NAME}2${RELOCATING+ .rela.${SDATA_NAME}2.* .rela.gnu.linkonce.s2.*}) }"
205 REL_SBSS2=".rel.${SBSS_NAME}2 ${RELOCATING-0} : { *(.rel.${SBSS_NAME}2${RELOCATING+ .rel.${SBSS_NAME}2.* .rel.gnu.linkonce.sb2.*}) }
206 .rela.${SBSS_NAME}2 ${RELOCATING-0} : { *(.rela.${SBSS_NAME}2${RELOCATING+ .rela.${SBSS_NAME}2.* .rela.gnu.linkonce.sb2.*}) }"
8c37241b
JJ
207else
208 NO_SMALL_DATA=" "
48459341 209fi
23283c1b 210if test -z "${SDATA_GOT}${DATA_GOT}"; then
0cf7d72c
AM
211 if test -n "${NO_SMALL_DATA}"; then
212 DATA_GOT=" "
213 fi
214fi
23283c1b 215if test -z "${SDATA_GOT}${DATA_GOT}"; then
0cf7d72c
AM
216 if test -z "${NO_SMALL_DATA}"; then
217 SDATA_GOT=" "
218 fi
219fi
8c37241b 220test -n "$SEPARATE_GOTPLT" && SEPARATE_GOTPLT=" "
9599dfb1 221test "${LARGE_SECTIONS}" = "yes" && REL_LARGE="
ec2d9b29
AM
222 .rel.ldata ${RELOCATING-0} : { *(.rel.ldata${RELOCATING+ .rel.ldata.* .rel.gnu.linkonce.l.*}) }
223 .rela.ldata ${RELOCATING-0} : { *(.rela.ldata${RELOCATING+ .rela.ldata.* .rela.gnu.linkonce.l.*}) }
224 .rel.lbss ${RELOCATING-0} : { *(.rel.lbss${RELOCATING+ .rel.lbss.* .rel.gnu.linkonce.lb.*}) }
225 .rela.lbss ${RELOCATING-0} : { *(.rela.lbss${RELOCATING+ .rela.lbss.* .rela.gnu.linkonce.lb.*}) }
226 .rel.lrodata ${RELOCATING-0} : { *(.rel.lrodata${RELOCATING+ .rel.lrodata.* .rel.gnu.linkonce.lr.*}) }
227 .rela.lrodata ${RELOCATING-0} : { *(.rela.lrodata${RELOCATING+ .rela.lrodata.* .rela.gnu.linkonce.lr.*}) }"
134960cc 228test "${LARGE_SECTIONS}" = "yes" && LARGE_BSS="
ec2d9b29 229 .lbss ${RELOCATING-0} :
9599dfb1
AM
230 {
231 *(.dynlbss)
232 *(.lbss${RELOCATING+ .lbss.* .gnu.linkonce.lb.*})
233 *(LARGE_COMMON)
1bc214ba
L
234 }"
235test "${LARGE_SECTIONS}" = "yes" && LARGE_SECTIONS="
ec2d9b29 236 .lrodata ${RELOCATING-0} ${RELOCATING+ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))} :
9599dfb1
AM
237 {
238 *(.lrodata${RELOCATING+ .lrodata.* .gnu.linkonce.lr.*})
239 }
ec2d9b29 240 .ldata ${RELOCATING-0} ${RELOCATING+ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))} :
9599dfb1
AM
241 {
242 *(.ldata${RELOCATING+ .ldata.* .gnu.linkonce.l.*})
243 ${RELOCATING+. = ALIGN(. != 0 ? ${ALIGNMENT} : 1);}
244 }"
02ecc8e9
L
245if test "${ENABLE_INITFINI_ARRAY}" = "yes"; then
246 SORT_INIT_ARRAY="KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))"
247 SORT_FINI_ARRAY="KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))"
7c00cf68
AM
248 CTORS_IN_INIT_ARRAY="EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .ctors"
249 DTORS_IN_FINI_ARRAY="EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .dtors"
02ecc8e9
L
250else
251 SORT_INIT_ARRAY="KEEP (*(SORT(.init_array.*)))"
252 SORT_FINI_ARRAY="KEEP (*(SORT(.fini_array.*)))"
253 CTORS_IN_INIT_ARRAY=
254 DTORS_IN_FINI_ARRAY=
255fi
3cff7cc7
JZ
256INIT_ARRAY=".init_array ${RELOCATING-0} :
257 {
576ee33a 258 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_start = .);}}
02ecc8e9 259 ${SORT_INIT_ARRAY}
7c00cf68 260 KEEP (*(.init_array ${CTORS_IN_INIT_ARRAY}))
576ee33a 261 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_end = .);}}
3cff7cc7
JZ
262 }"
263FINI_ARRAY=".fini_array ${RELOCATING-0} :
264 {
265 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_start = .);}}
02ecc8e9 266 ${SORT_FINI_ARRAY}
7c00cf68 267 KEEP (*(.fini_array ${DTORS_IN_FINI_ARRAY}))
3cff7cc7
JZ
268 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_end = .);}}
269 }"
5a68afcf 270CTOR=".ctors ${CONSTRUCTING-0} :
252b5132
RH
271 {
272 ${CONSTRUCTING+${CTOR_START}}
273 /* gcc uses crtbegin.o to find the start of
274 the constructors, so we make sure it is
275 first. Because this is a wildcard, it
276 doesn't matter if the user does not
277 actually link against crtbegin.o; the
278 linker won't look for a file to match a
279 wildcard. The wildcard also means that it
280 doesn't matter which directory crtbegin.o
281 is in. */
282
40cf2291
AM
283 KEEP (*crtbegin.o(.ctors))
284 KEEP (*crtbegin?.o(.ctors))
252b5132
RH
285
286 /* We don't want to include the .ctor section from
bd6791bc 287 the crtend.o file until after the sorted ctors.
252b5132
RH
288 The .ctor section from the crtend file contains the
289 end of ctors marker and it must be last */
290
40cf2291 291 KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .ctors))
252b5132
RH
292 KEEP (*(SORT(.ctors.*)))
293 KEEP (*(.ctors))
294 ${CONSTRUCTING+${CTOR_END}}
295 }"
ec2d9b29 296DTOR=".dtors ${CONSTRUCTING-0} :
252b5132
RH
297 {
298 ${CONSTRUCTING+${DTOR_START}}
40cf2291
AM
299 KEEP (*crtbegin.o(.dtors))
300 KEEP (*crtbegin?.o(.dtors))
301 KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .dtors))
252b5132
RH
302 KEEP (*(SORT(.dtors.*)))
303 KEEP (*(.dtors))
304 ${CONSTRUCTING+${DTOR_END}}
305 }"
ec2d9b29 306STACK=" .stack ${RELOCATING-0}${RELOCATING+${STACK_ADDR}} :
465bc359 307 {
8d17e044 308 ${RELOCATING+${USER_LABEL_PREFIX}_stack = .;}
465bc359
AM
309 *(.stack)
310 }"
252b5132 311
258795f5
L
312TEXT_START_ADDR="SEGMENT_START(\"text-segment\", ${TEXT_START_ADDR})"
313SHLIB_TEXT_START_ADDR="SEGMENT_START(\"text-segment\", ${SHLIB_TEXT_START_ADDR:-0})"
314
5a68afcf
RM
315if [ -z "$SEPARATE_CODE" ]; then
316 SIZEOF_HEADERS_CODE=" + SIZEOF_HEADERS"
317else
318 SIZEOF_HEADERS_CODE=
319fi
320
985743c7 321# If this is for an embedded system, don't add SIZEOF_HEADERS.
252b5132 322if [ -z "$EMBEDDED" ]; then
5a68afcf 323 test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR}${SIZEOF_HEADERS_CODE}"
252b5132
RH
324else
325 test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR}"
326fi
327
328cat <<EOF
b90efa5b 329/* Copyright (C) 2014-2015 Free Software Foundation, Inc.
985743c7
NC
330
331 Copying and distribution of this script, with or without modification,
332 are permitted in any medium without royalty provided the copyright
333 notice and this notice are preserved. */
334
252b5132
RH
335OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}",
336 "${LITTLE_OUTPUT_FORMAT}")
337OUTPUT_ARCH(${OUTPUT_ARCH})
ac69cbc6 338${RELOCATING+ENTRY(${ENTRY})}
252b5132
RH
339
340${RELOCATING+${LIB_SEARCH_DIRS}}
252b5132
RH
341${RELOCATING+${EXECUTABLE_SYMBOLS}}
342${RELOCATING+${INPUT_FILES}}
ec2d9b29
AM
343${RELOCATING- /* For some reason, the Solaris linker makes bad executables
344 if gld -r is used and the intermediate file has sections starting
345 at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld
346 bug. But for now assigning the zero vmas works. */}
252b5132
RH
347
348SECTIONS
349{
350 /* Read-only sections, merged into text segment: */
c6d3b05f 351 ${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+PROVIDE (__executable_start = ${TEXT_START_ADDR}); . = ${TEXT_BASE_ADDRESS};}}}
5a68afcf 352 ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_TEXT_START_ADDR}${SIZEOF_HEADERS_CODE};}}
11cba4ac 353 ${CREATE_PIE+${RELOCATING+PROVIDE (__executable_start = ${SHLIB_TEXT_START_ADDR}); . = ${SHLIB_TEXT_START_ADDR}${SIZEOF_HEADERS_CODE};}}
5a68afcf
RM
354EOF
355
356emit_early_ro()
357{
358 cat <<EOF
252b5132 359 ${INITIAL_READONLY_SECTIONS}
cd714b79 360 .note.gnu.build-id : { *(.note.gnu.build-id) }
485cf679 361EOF
5a68afcf
RM
362}
363
364test -n "${SEPARATE_CODE}" || emit_early_ro
485cf679
AM
365
366test -n "${RELOCATING+0}" || unset NON_ALLOC_DYN
367test -z "${NON_ALLOC_DYN}" || TEXT_DYNAMIC=
368cat > ldscripts/dyntmp.$$ <<EOF
252b5132 369 ${TEXT_DYNAMIC+${DYNAMIC}}
ec2d9b29
AM
370 .hash ${RELOCATING-0} : { *(.hash) }
371 .gnu.hash ${RELOCATING-0} : { *(.gnu.hash) }
372 .dynsym ${RELOCATING-0} : { *(.dynsym) }
373 .dynstr ${RELOCATING-0} : { *(.dynstr) }
374 .gnu.version ${RELOCATING-0} : { *(.gnu.version) }
375 .gnu.version_d ${RELOCATING-0}: { *(.gnu.version_d) }
376 .gnu.version_r ${RELOCATING-0}: { *(.gnu.version_r) }
db6751f2 377EOF
485cf679 378
db6751f2 379if [ "x$COMBRELOC" = x ]; then
485cf679 380 COMBRELOCCAT="cat >> ldscripts/dyntmp.$$"
db6751f2
JJ
381else
382 COMBRELOCCAT="cat > $COMBRELOC"
383fi
384eval $COMBRELOCCAT <<EOF
829da898 385 ${INITIAL_RELOC_SECTIONS}
ec2d9b29
AM
386 .rel.init ${RELOCATING-0} : { *(.rel.init) }
387 .rela.init ${RELOCATING-0} : { *(.rela.init) }
388 .rel.text ${RELOCATING-0} : { *(.rel.text${RELOCATING+ .rel.text.* .rel.gnu.linkonce.t.*}) }
389 .rela.text ${RELOCATING-0} : { *(.rela.text${RELOCATING+ .rela.text.* .rela.gnu.linkonce.t.*}) }
390 .rel.fini ${RELOCATING-0} : { *(.rel.fini) }
391 .rela.fini ${RELOCATING-0} : { *(.rela.fini) }
349e935b
JM
392 .rel.${RODATA_NAME} ${RELOCATING-0} : { *(.rel.${RODATA_NAME}${RELOCATING+ .rel.${RODATA_NAME}.* .rel.gnu.linkonce.r.*}) }
393 .rela.${RODATA_NAME} ${RELOCATING-0} : { *(.rela.${RODATA_NAME}${RELOCATING+ .rela.${RODATA_NAME}.* .rela.gnu.linkonce.r.*}) }
9e4141bc 394 ${OTHER_READONLY_RELOC_SECTIONS}
18bbc1c5
CC
395 .rel.data.rel.ro ${RELOCATING-0} : { *(.rel.data.rel.ro${RELOCATING+ .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*}) }
396 .rela.data.rel.ro ${RELOCATING-0} : { *(.rela.data.rel.ro${RELOCATING+ .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*}) }
ec2d9b29
AM
397 .rel.data ${RELOCATING-0} : { *(.rel.data${RELOCATING+ .rel.data.* .rel.gnu.linkonce.d.*}) }
398 .rela.data ${RELOCATING-0} : { *(.rela.data${RELOCATING+ .rela.data.* .rela.gnu.linkonce.d.*}) }
349e935b 399 ${OTHER_READWRITE_RELOC_SECTIONS}
ec2d9b29
AM
400 .rel.tdata ${RELOCATING-0} : { *(.rel.tdata${RELOCATING+ .rel.tdata.* .rel.gnu.linkonce.td.*}) }
401 .rela.tdata ${RELOCATING-0} : { *(.rela.tdata${RELOCATING+ .rela.tdata.* .rela.gnu.linkonce.td.*}) }
402 .rel.tbss ${RELOCATING-0} : { *(.rel.tbss${RELOCATING+ .rel.tbss.* .rel.gnu.linkonce.tb.*}) }
403 .rela.tbss ${RELOCATING-0} : { *(.rela.tbss${RELOCATING+ .rela.tbss.* .rela.gnu.linkonce.tb.*}) }
404 .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) }
405 .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) }
406 .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) }
407 .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) }
408 .rel.got ${RELOCATING-0} : { *(.rel.got) }
409 .rela.got ${RELOCATING-0} : { *(.rela.got) }
9e4141bc 410 ${OTHER_GOT_RELOC_SECTIONS}
48459341
L
411 ${REL_SDATA}
412 ${REL_SBSS}
413 ${REL_SDATA2}
414 ${REL_SBSS2}
349e935b
JM
415 .rel.${BSS_NAME} ${RELOCATING-0} : { *(.rel.${BSS_NAME}${RELOCATING+ .rel.${BSS_NAME}.* .rel.gnu.linkonce.b.*}) }
416 .rela.${BSS_NAME} ${RELOCATING-0} : { *(.rela.${BSS_NAME}${RELOCATING+ .rela.${BSS_NAME}.* .rela.gnu.linkonce.b.*}) }
827a1c67 417 ${REL_LARGE}
8dfab6dd
AM
418 ${IREL_IN_PLT+$REL_IFUNC}
419 ${IREL_IN_PLT+$RELA_IFUNC}
420 ${IREL_IN_PLT-$REL_IPLT}
421 ${IREL_IN_PLT-$RELA_IPLT}
db6751f2 422EOF
485cf679 423
db6751f2 424if [ -n "$COMBRELOC" ]; then
485cf679 425cat >> ldscripts/dyntmp.$$ <<EOF
ec2d9b29 426 .rel.dyn ${RELOCATING-0} :
db6751f2
JJ
427 {
428EOF
e1279d1d 429sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rela\./d;/__rela_iplt_/d;s/^.*: { *\(.*\)}$/ \1/' $COMBRELOC >> ldscripts/dyntmp.$$
485cf679 430cat >> ldscripts/dyntmp.$$ <<EOF
db6751f2 431 }
ec2d9b29 432 .rela.dyn ${RELOCATING-0} :
db6751f2
JJ
433 {
434EOF
e1279d1d 435sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rel\./d;/__rel_iplt_/d;s/^.*: { *\(.*\)}/ \1/' $COMBRELOC >> ldscripts/dyntmp.$$
485cf679 436cat >> ldscripts/dyntmp.$$ <<EOF
db6751f2
JJ
437 }
438EOF
439fi
485cf679
AM
440
441cat >> ldscripts/dyntmp.$$ <<EOF
ec2d9b29 442 .rel.plt ${RELOCATING-0} :
3aa14d16
L
443 {
444 *(.rel.plt)
8dfab6dd
AM
445 ${IREL_IN_PLT+${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rel_iplt_start = .);}}}
446 ${IREL_IN_PLT+${RELOCATING+*(.rel.iplt)}}
447 ${IREL_IN_PLT+${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rel_iplt_end = .);}}}
3aa14d16 448 }
ec2d9b29 449 .rela.plt ${RELOCATING-0} :
3aa14d16
L
450 {
451 *(.rela.plt)
8dfab6dd
AM
452 ${IREL_IN_PLT+${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rela_iplt_start = .);}}}
453 ${IREL_IN_PLT+${RELOCATING+*(.rela.iplt)}}
454 ${IREL_IN_PLT+${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rela_iplt_end = .);}}}
3aa14d16 455 }
9e673ad1 456 ${OTHER_PLT_RELOC_SECTIONS}
485cf679 457EOF
9e4141bc 458
5a68afcf
RM
459emit_dyn()
460{
485cf679
AM
461 if test -z "${NO_REL_RELOCS}${NO_RELA_RELOCS}"; then
462 cat ldscripts/dyntmp.$$
463 else
464 if test -z "${NO_REL_RELOCS}"; then
e1279d1d 465 sed -e '/^[ ]*\.rela\.[^}]*$/,/}/d;/^[ ]*\.rela\./d;/__rela_iplt_/d' ldscripts/dyntmp.$$
485cf679
AM
466 fi
467 if test -z "${NO_RELA_RELOCS}"; then
e1279d1d 468 sed -e '/^[ ]*\.rel\.[^}]*$/,/}/d;/^[ ]*\.rel\./d;/__rel_iplt_/d' ldscripts/dyntmp.$$
485cf679
AM
469 fi
470 fi
471 rm -f ldscripts/dyntmp.$$
5a68afcf
RM
472}
473
474test -n "${NON_ALLOC_DYN}${SEPARATE_CODE}" || emit_dyn
485cf679
AM
475
476cat <<EOF
5a68afcf
RM
477 .init ${RELOCATING-0} :
478 {
53db15ed 479 ${RELOCATING+${INIT_START}}
b2e4da5a 480 KEEP (*(SORT_NONE(.init)))
53db15ed 481 ${RELOCATING+${INIT_END}}
b7761f11 482 } ${FILL}
4ab10e93 483
1bbce132 484 ${TEXT_PLT+${PLT_NEXT_DATA-${PLT}}}
ecc49060 485 ${TINY_READONLY_SECTION}
ec2d9b29 486 .text ${RELOCATING-0} :
252b5132
RH
487 {
488 ${RELOCATING+${TEXT_START_SYMBOLS}}
1de778ed 489 ${RELOCATING+*(.text.unlikely .text.*_unlikely .text.unlikely.*)}
add44f8d
AM
490 ${RELOCATING+*(.text.exit .text.exit.*)}
491 ${RELOCATING+*(.text.startup .text.startup.*)}
492 ${RELOCATING+*(.text.hot .text.hot.*)}
465bc359 493 *(.text .stub${RELOCATING+ .text.* .gnu.linkonce.t.*})
252b5132
RH
494 /* .gnu.warning sections are handled specially by elf32.em. */
495 *(.gnu.warning)
252b5132 496 ${RELOCATING+${OTHER_TEXT_SECTIONS}}
b7761f11 497 } ${FILL}
ec2d9b29 498 .fini ${RELOCATING-0} :
904ecb2d 499 {
53db15ed 500 ${RELOCATING+${FINI_START}}
b2e4da5a 501 KEEP (*(SORT_NONE(.fini)))
53db15ed 502 ${RELOCATING+${FINI_END}}
b7761f11 503 } ${FILL}
eac338cf
PB
504 ${RELOCATING+PROVIDE (__${ETEXT_NAME} = .);}
505 ${RELOCATING+PROVIDE (_${ETEXT_NAME} = .);}
506 ${RELOCATING+PROVIDE (${ETEXT_NAME} = .);}
5a68afcf
RM
507EOF
508
509if test -n "${SEPARATE_CODE}"; then
9d5777a3
RM
510 if test -n "${RODATA_ADDR}"; then
511 RODATA_ADDR="\
512SEGMENT_START(\"rodata-segment\", ${RODATA_ADDR}) + SIZEOF_HEADERS"
513 else
34d56033 514 RODATA_ADDR="ALIGN(${SEGMENT_SIZE}) + (. & (${MAXPAGESIZE} - 1))"
9d5777a3
RM
515 RODATA_ADDR="SEGMENT_START(\"rodata-segment\", ${RODATA_ADDR})"
516 fi
517 if test -n "${SHLIB_RODATA_ADDR}"; then
518 SHLIB_RODATA_ADDR="\
519SEGMENT_START(\"rodata-segment\", ${SHLIB_RODATA_ADDR}) + SIZEOF_HEADERS"
520 else
521 SHLIB_RODATA_ADDR="SEGMENT_START(\"rodata-segment\", ${SHLIB_RODATA_ADDR})"
522 SHLIB_RODATA_ADDR="ALIGN(${SEGMENT_SIZE}) + (. & (${MAXPAGESIZE} - 1))"
523 fi
5a68afcf
RM
524 cat <<EOF
525 /* Adjust the address for the rodata segment. We want to adjust up to
526 the same address within the page on the next page up. */
9d5777a3
RM
527 ${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+. = ${RODATA_ADDR};}}}
528 ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_RODATA_ADDR};}}
529 ${CREATE_PIE+${RELOCATING+. = ${SHLIB_RODATA_ADDR};}}
5a68afcf
RM
530EOF
531 emit_early_ro
532 emit_dyn
533fi
534
535cat <<EOF
a8e53fb0 536 ${WRITABLE_RODATA-${RODATA}}
349e935b 537 .${RODATA_NAME}1 ${RELOCATING-0} : { *(.${RODATA_NAME}1) }
6c86c541
GK
538 ${CREATE_SHLIB-${SDATA2}}
539 ${CREATE_SHLIB-${SBSS2}}
465bc359 540 ${OTHER_READONLY_SECTIONS}
65765700 541 .eh_frame_hdr : { *(.eh_frame_hdr) }
ec2d9b29 542 .eh_frame ${RELOCATING-0} : ONLY_IF_RO { KEEP (*(.eh_frame)) }
ed0d9c71
NC
543 .gcc_except_table ${RELOCATING-0} : ONLY_IF_RO { *(.gcc_except_table
544 .gcc_except_table.*) }
545 /* These sections are generated by the Sun/Oracle C++ compiler. */
546 .exception_ranges ${RELOCATING-0} : ONLY_IF_RO { *(.exception_ranges
547 .exception_ranges*) }
1bbce132 548 ${TEXT_PLT+${PLT_NEXT_DATA+${PLT}}}
252b5132
RH
549
550 /* Adjust the address for the data segment. We want to adjust up to
551 the same address within the page on the next page up. */
9203ba99 552 ${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+. = ${DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}}
2d20f7bf 553 ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}
9203ba99 554 ${CREATE_PIE+${RELOCATING+. = ${SHLIB_DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}
252b5132 555
8c37241b 556 /* Exception handling */
ec2d9b29
AM
557 .eh_frame ${RELOCATING-0} : ONLY_IF_RW { KEEP (*(.eh_frame)) }
558 .gcc_except_table ${RELOCATING-0} : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
ed0d9c71 559 .exception_ranges ${RELOCATING-0} : ONLY_IF_RW { *(.exception_ranges .exception_ranges*) }
8c37241b
JJ
560
561 /* Thread Local Storage sections */
ec2d9b29
AM
562 .tdata ${RELOCATING-0} : { *(.tdata${RELOCATING+ .tdata.* .gnu.linkonce.td.*}) }
563 .tbss ${RELOCATING-0} : { *(.tbss${RELOCATING+ .tbss.* .gnu.linkonce.tb.*})${RELOCATING+ *(.tcommon)} }
8c37241b 564
ec2d9b29 565 .preinit_array ${RELOCATING-0} :
046183de 566 {
a817dba3 567 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__preinit_array_start = .);}}
046183de 568 KEEP (*(.preinit_array))
a817dba3 569 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__preinit_array_end = .);}}
046183de 570 }
3cff7cc7
JZ
571 ${RELOCATING+${INIT_ARRAY}}
572 ${RELOCATING+${FINI_ARRAY}}
951e9133
L
573 ${SMALL_DATA_CTOR-${RELOCATING+${CTOR}}}
574 ${SMALL_DATA_DTOR-${RELOCATING+${DTOR}}}
ec2d9b29 575 .jcr ${RELOCATING-0} : { KEEP (*(.jcr)) }
8c37241b
JJ
576
577 ${RELOCATING+${DATARELRO}}
578 ${OTHER_RELRO_SECTIONS}
579 ${TEXT_DYNAMIC-${DYNAMIC}}
3e2b0f31 580 ${OTHER_RELRO_SECTIONS_2}
23283c1b 581 ${DATA_GOT+${RELRO_NOW+${DATA_PLT+${PLT_BEFORE_GOT+${PLT}}}}}
0cf7d72c
AM
582 ${DATA_GOT+${RELRO_NOW+${GOT}}}
583 ${DATA_GOT+${RELRO_NOW+${GOTPLT}}}
584 ${DATA_GOT+${RELRO_NOW-${SEPARATE_GOTPLT+${GOT}}}}
8c37241b 585 ${RELOCATING+${DATA_SEGMENT_RELRO_END}}
1bbce132 586 ${INITIAL_READWRITE_SECTIONS}
23283c1b
AM
587 ${DATA_SDATA+${SDATA}}
588 ${DATA_SDATA+${OTHER_SDATA_SECTIONS}}
5ad18f16 589 ${DATA_SDATA+${SBSS}}
23283c1b 590 ${DATA_GOT+${RELRO_NOW-${DATA_PLT+${PLT_BEFORE_GOT+${PLT}}}}}
0cf7d72c
AM
591 ${DATA_GOT+${RELRO_NOW-${SEPARATE_GOTPLT-${GOT}}}}
592 ${DATA_GOT+${RELRO_NOW-${GOTPLT}}}
8c37241b 593
b71a5181 594 ${DATA_PLT+${PLT_BEFORE_GOT-${PLT}}}
8c37241b 595
ec2d9b29 596 .data ${RELOCATING-0} :
252b5132
RH
597 {
598 ${RELOCATING+${DATA_START_SYMBOLS}}
465bc359 599 *(.data${RELOCATING+ .data.* .gnu.linkonce.d.*})
252b5132
RH
600 ${CONSTRUCTING+SORT(CONSTRUCTORS)}
601 }
ec2d9b29 602 .data1 ${RELOCATING-0} : { *(.data1) }
a8e53fb0 603 ${WRITABLE_RODATA+${RODATA}}
465bc359 604 ${OTHER_READWRITE_SECTIONS}
951e9133
L
605 ${SMALL_DATA_CTOR+${RELOCATING+${CTOR}}}
606 ${SMALL_DATA_DTOR+${RELOCATING+${DTOR}}}
23283c1b 607 ${SDATA_GOT+${DATA_PLT+${PLT_BEFORE_GOT+${PLT}}}}
d2667025 608 ${SDATA_GOT+${RELOCATING+${OTHER_GOT_SYMBOLS+. = .; ${OTHER_GOT_SYMBOLS}}}}
0cf7d72c
AM
609 ${SDATA_GOT+${GOT}}
610 ${SDATA_GOT+${OTHER_GOT_SECTIONS}}
23283c1b
AM
611 ${DATA_SDATA-${SDATA}}
612 ${DATA_SDATA-${OTHER_SDATA_SECTIONS}}
a817dba3 613 ${RELOCATING+${DATA_END_SYMBOLS-${USER_LABEL_PREFIX}_edata = .; PROVIDE (${USER_LABEL_PREFIX}edata = .);}}
d2667025 614 ${RELOCATING+. = .;}
8d17e044 615 ${RELOCATING+${USER_LABEL_PREFIX}__bss_start = .;}
252b5132 616 ${RELOCATING+${OTHER_BSS_SYMBOLS}}
5ad18f16 617 ${DATA_SDATA-${SBSS}}
6c86c541 618 ${BSS_PLT+${PLT}}
349e935b 619 .${BSS_NAME} ${RELOCATING-0} :
252b5132 620 {
349e935b
JM
621 *(.dyn${BSS_NAME})
622 *(.${BSS_NAME}${RELOCATING+ .${BSS_NAME}.* .gnu.linkonce.b.*})
252b5132
RH
623 *(COMMON)
624 /* Align here to ensure that the .bss section occupies space up to
625 _end. Align after .bss to ensure correct alignment even if the
3b22753a
L
626 .bss section disappears because there are no input sections.
627 FIXME: Why do we need it? When there is no .bss section, we don't
628 pad the .data section. */
9d12f64c 629 ${RELOCATING+. = ALIGN(. != 0 ? ${ALIGNMENT} : 1);}
252b5132 630 }
e9f53129 631 ${OTHER_BSS_SECTIONS}
134960cc 632 ${LARGE_BSS_AFTER_BSS+${LARGE_BSS}}
827a1c67
AM
633 ${RELOCATING+${OTHER_BSS_END_SYMBOLS}}
634 ${RELOCATING+. = ALIGN(${ALIGNMENT});}
0d705e9f
AM
635EOF
636
637LARGE_DATA_ADDR=". = SEGMENT_START(\"ldata-segment\", ${LARGE_DATA_ADDR-.});"
638SHLIB_LARGE_DATA_ADDR=". = SEGMENT_START(\"ldata-segment\", ${SHLIB_LARGE_DATA_ADDR-.});"
639
640 cat <<EOF
641 ${RELOCATING+${CREATE_SHLIB-${CREATE_PIE-${LARGE_DATA_ADDR}}}}
642 ${RELOCATING+${CREATE_SHLIB+${SHLIB_LARGE_DATA_ADDR}}}
643 ${RELOCATING+${CREATE_PIE+${SHLIB_LARGE_DATA_ADDR}}}
3b22753a 644 ${LARGE_SECTIONS}
134960cc 645 ${LARGE_BSS_AFTER_BSS-${LARGE_BSS}}
252b5132 646 ${RELOCATING+. = ALIGN(${ALIGNMENT});}
9f4fb502 647 ${RELOCATING+${OTHER_END_SYMBOLS}}
a817dba3 648 ${RELOCATING+${END_SYMBOLS-${USER_LABEL_PREFIX}_end = .; PROVIDE (${USER_LABEL_PREFIX}end = .);}}
2d13d8c5 649 ${RELOCATING+${DATA_SEGMENT_END}}
485cf679 650EOF
252b5132 651
5a68afcf 652test -z "${NON_ALLOC_DYN}" || emit_dyn
485cf679
AM
653
654cat <<EOF
252b5132 655 /* Stabs debugging sections. */
465bc359
AM
656 .stab 0 : { *(.stab) }
657 .stabstr 0 : { *(.stabstr) }
658 .stab.excl 0 : { *(.stab.excl) }
659 .stab.exclstr 0 : { *(.stab.exclstr) }
660 .stab.index 0 : { *(.stab.index) }
252b5132
RH
661 .stab.indexstr 0 : { *(.stab.indexstr) }
662
465bc359 663 .comment 0 : { *(.comment) }
252b5132 664
ceb0a680
NC
665EOF
666
d061dfac 667. $srcdir/scripttempl/DWARF.sc
ceb0a680
NC
668
669cat <<EOF
9d5777a3 670
ecc49060
NC
671 ${TINY_DATA_SECTION}
672 ${TINY_BSS_SECTION}
673
465bc359 674 ${STACK_ADDR+${STACK}}
104d59d1 675 ${ATTRS_SECTIONS}
252b5132 676 ${OTHER_SECTIONS}
827a1c67 677 ${RELOCATING+${OTHER_SYMBOLS}}
1c68693b 678 ${RELOCATING+${DISCARDED}}
252b5132
RH
679}
680EOF