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