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