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