dependency tracking fixes in ld
[deliverable/binutils-gdb.git] / ld / scripttempl / elfxtensa.sc
CommitLineData
e0001a05
NC
1#
2# Unusual variables checked by this code:
3# NOP - four byte opcode for no-op (defaults to 0)
4# NO_SMALL_DATA - no .sbss/.sbss2/.sdata/.sdata2 sections if not
5# empty.
be2c2e39
BW
6# SMALL_DATA_CTOR - .ctors contains small data.
7# SMALL_DATA_DTOR - .dtors contains small data.
e0001a05
NC
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)
43cd72b9
BW
15# OTHER_RELRO_SECTIONS - other than .data.rel.ro ...
16# (e.g. PPC32 .fixup, .got[12])
93c0f4a4 17# OTHER_BSS_SECTIONS - other than .bss .sbss ...
104d59d1 18# ATTRS_SECTIONS - at the end
e0001a05
NC
19# OTHER_SECTIONS - at the end
20# EXECUTABLE_SYMBOLS - symbols that must be defined for an
21# executable (e.g., _DYNAMIC_LINK)
be2c2e39
BW
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.
e0001a05
NC
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.
be2c2e39
BW
29# DATA_END_SYMBOLS - symbols that appear at the end of the
30# writeable data sections.
e0001a05
NC
31# OTHER_GOT_SYMBOLS - symbols defined just before .got.
32# OTHER_GOT_SECTIONS - sections just after .got.
33# OTHER_SDATA_SECTIONS - sections just after .sdata.
34# OTHER_BSS_SYMBOLS - symbols that appear at the start of the
35# .bss section besides __bss_start.
be2c2e39
BW
36# DATA_PLT - .plt should be in data segment, not text segment.
37# PLT_BEFORE_GOT - .plt just before .got when .plt is in data segement.
38# BSS_PLT - .plt should be in bss segment
e78c4c7e
BW
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.
e0001a05
NC
42# TEXT_DYNAMIC - .dynamic in text segment, not data segment.
43# EMBEDDED - whether this is for an embedded system.
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
47# WRITABLE_RODATA - if set, the .rodata section should be writable
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.
52# STACK_ADDR - start of a .stack section.
827a1c67 53# OTHER_SYMBOLS - symbols to place right at the end of the script.
be2c2e39
BW
54# ETEXT_NAME - name of a symbol for the end of the text section,
55# normally etext.
56# SEPARATE_GOTPLT - if set, .got.plt should be separate output section,
57# so that .got can be in the RELRO area. It should be set to
58# the number of bytes in the beginning of .got.plt which can be
59# in the RELRO area as well.
3c173cb1 60# USER_LABEL_PREFIX - prefix to add to user-visible symbols.
e0001a05
NC
61#
62# When adding sections, do note that the names of some sections are used
63# when specifying the start address of the next.
64#
65
66# Many sections come in three flavours. There is the 'real' section,
67# like ".data". Then there are the per-procedure or per-variable
68# sections, generated by -ffunction-sections and -fdata-sections in GCC,
69# and useful for --gc-sections, which for a variable "foo" might be
70# ".data.foo". Then there are the linkonce sections, for which the linker
71# eliminates duplicates, which are named like ".gnu.linkonce.d.foo".
72# The exact correspondences are:
73#
74# Section Linkonce section
75# .text .gnu.linkonce.t.foo
76# .rodata .gnu.linkonce.r.foo
77# .data .gnu.linkonce.d.foo
78# .bss .gnu.linkonce.b.foo
79# .sdata .gnu.linkonce.s.foo
80# .sbss .gnu.linkonce.sb.foo
81# .sdata2 .gnu.linkonce.s2.foo
82# .sbss2 .gnu.linkonce.sb2.foo
83# .debug_info .gnu.linkonce.wi.foo
84# .tdata .gnu.linkonce.td.foo
85# .tbss .gnu.linkonce.tb.foo
3c173cb1
BW
86# .lrodata .gnu.linkonce.lr.foo
87# .ldata .gnu.linkonce.l.foo
88# .lbss .gnu.linkonce.lb.foo
89#
90# plus exception-handling information for Tensilica's XCC compiler:
91# .xt_except_table .gnu.linkonce.e.foo
92# .xt_except_desc .gnu.linkonce.h.foo
93#
94# plus Xtensa-specific literal sections:
95# .literal .gnu.linkonce.literal.foo
96# .lit4 .gnu.linkonce.lit4.foo
97#
98# plus Xtensa-specific "property table" sections:
99# .xt.lit .gnu.linkonce.p.foo
100# .xt.insn .gnu.linkonce.x.foo (obsolete)
101# .xt.prop .gnu.linkonce.prop.foo
e0001a05
NC
102#
103# Each of these can also have corresponding .rel.* and .rela.* sections.
104
105test -z "$ENTRY" && ENTRY=_start
be2c2e39
BW
106test -z "${BIG_OUTPUT_FORMAT}" && BIG_OUTPUT_FORMAT=${OUTPUT_FORMAT}
107test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
108if [ -z "$MACHINE" ]; then OUTPUT_ARCH=${ARCH}; else OUTPUT_ARCH=${ARCH}:${MACHINE}; fi
e0001a05
NC
109test -z "${ELFSIZE}" && ELFSIZE=32
110test -z "${ALIGNMENT}" && ALIGNMENT="${ELFSIZE} / 8"
111test "$LD_FLAG" = "N" && DATA_ADDR=.
be2c2e39 112test -z "${ETEXT_NAME}" && ETEXT_NAME=etext
43cd72b9
BW
113test -n "$CREATE_SHLIB$CREATE_PIE" && test -n "$SHLIB_DATA_ADDR" && COMMONPAGESIZE=""
114test -z "$CREATE_SHLIB$CREATE_PIE" && test -n "$DATA_ADDR" && COMMONPAGESIZE=""
be2c2e39 115test -n "$RELRO_NOW" && unset SEPARATE_GOTPLT
104d59d1 116test -z "$ATTRS_SECTIONS" && ATTRS_SECTIONS=".gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }"
e0001a05 117DATA_SEGMENT_ALIGN="ALIGN(${SEGMENT_SIZE}) + (. & (${MAXPAGESIZE} - 1))"
43cd72b9 118DATA_SEGMENT_RELRO_END=""
e0001a05
NC
119DATA_SEGMENT_END=""
120if test -n "${COMMONPAGESIZE}"; then
121 DATA_SEGMENT_ALIGN="ALIGN (${SEGMENT_SIZE}) - ((${MAXPAGESIZE} - .) & (${MAXPAGESIZE} - 1)); . = DATA_SEGMENT_ALIGN (${MAXPAGESIZE}, ${COMMONPAGESIZE})"
122 DATA_SEGMENT_END=". = DATA_SEGMENT_END (.);"
be2c2e39 123 DATA_SEGMENT_RELRO_END=". = DATA_SEGMENT_RELRO_END (${SEPARATE_GOTPLT-0}, .);"
e0001a05 124fi
93c0f4a4
BW
125if test -z "${INITIAL_READONLY_SECTIONS}${CREATE_SHLIB}"; then
126 INITIAL_READONLY_SECTIONS=".interp ${RELOCATING-0} : { *(.interp) }"
127fi
be2c2e39
BW
128if test -z "$PLT"; then
129 PLT=".plt ${RELOCATING-0} : { *(.plt) }"
130fi
3c173cb1 131test -n "${DATA_PLT-${BSS_PLT-text}}" && TEXT_PLT=yes
43cd72b9 132if test -z "$GOT"; then
be2c2e39
BW
133 if test -z "$SEPARATE_GOTPLT"; then
134 GOT=".got ${RELOCATING-0} : { *(.got.plt) *(.got) }"
135 else
43cd72b9 136 GOT=".got ${RELOCATING-0} : { *(.got) }"
be2c2e39
BW
137 GOTPLT=".got.plt ${RELOCATING-0} : { *(.got.plt) }"
138 fi
43cd72b9 139fi
e0001a05
NC
140DYNAMIC=".dynamic ${RELOCATING-0} : { *(.dynamic) }"
141RODATA=".rodata ${RELOCATING-0} : { *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.*}) }"
3c173cb1 142DATARELRO=".data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) }"
1c68693b 143DISCARDED="/DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) }"
e0001a05
NC
144INIT_LIT=".init.literal 0 : { *(.init.literal) }"
145INIT=".init 0 : { *(.init) }"
146FINI_LIT=".fini.literal 0 : { *(.fini.literal) }"
147FINI=".fini 0 : { *(.fini) }"
148if test -z "${NO_SMALL_DATA}"; then
149 SBSS=".sbss ${RELOCATING-0} :
150 {
3c173cb1 151 ${RELOCATING+${SBSS_START_SYMBOLS}}
be2c2e39 152 ${CREATE_SHLIB+*(.sbss2 .sbss2.* .gnu.linkonce.sb2.*)}
e0001a05
NC
153 *(.dynsbss)
154 *(.sbss${RELOCATING+ .sbss.* .gnu.linkonce.sb.*})
155 *(.scommon)
3c173cb1 156 ${RELOCATING+${SBSS_END_SYMBOLS}}
e0001a05
NC
157 }"
158 SBSS2=".sbss2 ${RELOCATING-0} : { *(.sbss2${RELOCATING+ .sbss2.* .gnu.linkonce.sb2.*}) }"
159 SDATA="/* We want the small data sections together, so single-instruction offsets
160 can access them all, and initialized data all before uninitialized, so
161 we can shorten the on-disk segment size. */
162 .sdata ${RELOCATING-0} :
163 {
164 ${RELOCATING+${SDATA_START_SYMBOLS}}
be2c2e39 165 ${CREATE_SHLIB+*(.sdata2 .sdata2.* .gnu.linkonce.s2.*)}
e0001a05
NC
166 *(.sdata${RELOCATING+ .sdata.* .gnu.linkonce.s.*})
167 }"
3c173cb1
BW
168 SDATA2=".sdata2 ${RELOCATING-0} :
169 {
170 ${RELOCATING+${SDATA2_START_SYMBOLS}}
171 *(.sdata2${RELOCATING+ .sdata2.* .gnu.linkonce.s2.*})
172 }"
e0001a05
NC
173 REL_SDATA=".rel.sdata ${RELOCATING-0} : { *(.rel.sdata${RELOCATING+ .rel.sdata.* .rel.gnu.linkonce.s.*}) }
174 .rela.sdata ${RELOCATING-0} : { *(.rela.sdata${RELOCATING+ .rela.sdata.* .rela.gnu.linkonce.s.*}) }"
175 REL_SBSS=".rel.sbss ${RELOCATING-0} : { *(.rel.sbss${RELOCATING+ .rel.sbss.* .rel.gnu.linkonce.sb.*}) }
176 .rela.sbss ${RELOCATING-0} : { *(.rela.sbss${RELOCATING+ .rela.sbss.* .rela.gnu.linkonce.sb.*}) }"
177 REL_SDATA2=".rel.sdata2 ${RELOCATING-0} : { *(.rel.sdata2${RELOCATING+ .rel.sdata2.* .rel.gnu.linkonce.s2.*}) }
178 .rela.sdata2 ${RELOCATING-0} : { *(.rela.sdata2${RELOCATING+ .rela.sdata2.* .rela.gnu.linkonce.s2.*}) }"
179 REL_SBSS2=".rel.sbss2 ${RELOCATING-0} : { *(.rel.sbss2${RELOCATING+ .rel.sbss2.* .rel.gnu.linkonce.sb2.*}) }
180 .rela.sbss2 ${RELOCATING-0} : { *(.rela.sbss2${RELOCATING+ .rela.sbss2.* .rela.gnu.linkonce.sb2.*}) }"
43cd72b9
BW
181else
182 NO_SMALL_DATA=" "
e0001a05 183fi
be2c2e39
BW
184if test -z "${DATA_GOT}"; then
185 if test -n "${NO_SMALL_DATA}"; then
186 DATA_GOT=" "
187 fi
188fi
189if test -z "${SDATA_GOT}"; then
190 if test -z "${NO_SMALL_DATA}"; then
191 SDATA_GOT=" "
192 fi
193fi
194test -n "$SEPARATE_GOTPLT" && SEPARATE_GOTPLT=" "
3c173cb1
BW
195test "${LARGE_SECTIONS}" = "yes" && REL_LARGE="
196 .rel.ldata ${RELOCATING-0} : { *(.rel.ldata${RELOCATING+ .rel.ldata.* .rel.gnu.linkonce.l.*}) }
197 .rela.ldata ${RELOCATING-0} : { *(.rela.ldata${RELOCATING+ .rela.ldata.* .rela.gnu.linkonce.l.*}) }
198 .rel.lbss ${RELOCATING-0} : { *(.rel.lbss${RELOCATING+ .rel.lbss.* .rel.gnu.linkonce.lb.*}) }
199 .rela.lbss ${RELOCATING-0} : { *(.rela.lbss${RELOCATING+ .rela.lbss.* .rela.gnu.linkonce.lb.*}) }
200 .rel.lrodata ${RELOCATING-0} : { *(.rel.lrodata${RELOCATING+ .rel.lrodata.* .rel.gnu.linkonce.lr.*}) }
201 .rela.lrodata ${RELOCATING-0} : { *(.rela.lrodata${RELOCATING+ .rela.lrodata.* .rela.gnu.linkonce.lr.*}) }"
93c0f4a4
BW
202test "${LARGE_SECTIONS}" = "yes" && OTHER_BSS_SECTIONS="
203 ${OTHER_BSS_SECTIONS}
3c173cb1
BW
204 .lbss ${RELOCATING-0} :
205 {
206 *(.dynlbss)
207 *(.lbss${RELOCATING+ .lbss.* .gnu.linkonce.lb.*})
208 *(LARGE_COMMON)
93c0f4a4
BW
209 }"
210test "${LARGE_SECTIONS}" = "yes" && LARGE_SECTIONS="
3c173cb1
BW
211 .lrodata ${RELOCATING-0} ${RELOCATING+ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))} :
212 {
213 *(.lrodata${RELOCATING+ .lrodata.* .gnu.linkonce.lr.*})
214 }
215 .ldata ${RELOCATING-0} ${RELOCATING+ALIGN(${MAXPAGESIZE}) + (. & (${MAXPAGESIZE} - 1))} :
216 {
217 *(.ldata${RELOCATING+ .ldata.* .gnu.linkonce.l.*})
218 ${RELOCATING+. = ALIGN(. != 0 ? ${ALIGNMENT} : 1);}
219 }"
e0001a05
NC
220CTOR=".ctors ${CONSTRUCTING-0} :
221 {
222 ${CONSTRUCTING+${CTOR_START}}
223 /* gcc uses crtbegin.o to find the start of
224 the constructors, so we make sure it is
225 first. Because this is a wildcard, it
226 doesn't matter if the user does not
227 actually link against crtbegin.o; the
228 linker won't look for a file to match a
229 wildcard. The wildcard also means that it
230 doesn't matter which directory crtbegin.o
231 is in. */
232
40cf2291
AM
233 KEEP (*crtbegin.o(.ctors))
234 KEEP (*crtbegin?.o(.ctors))
e0001a05
NC
235
236 /* We don't want to include the .ctor section from
bd6791bc 237 the crtend.o file until after the sorted ctors.
e0001a05
NC
238 The .ctor section from the crtend file contains the
239 end of ctors marker and it must be last */
240
40cf2291 241 KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .ctors))
e0001a05
NC
242 KEEP (*(SORT(.ctors.*)))
243 KEEP (*(.ctors))
244 ${CONSTRUCTING+${CTOR_END}}
245 }"
246DTOR=".dtors ${CONSTRUCTING-0} :
247 {
248 ${CONSTRUCTING+${DTOR_START}}
40cf2291
AM
249 KEEP (*crtbegin.o(.dtors))
250 KEEP (*crtbegin?.o(.dtors))
251 KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .dtors))
e0001a05
NC
252 KEEP (*(SORT(.dtors.*)))
253 KEEP (*(.dtors))
254 ${CONSTRUCTING+${DTOR_END}}
255 }"
256STACK=" .stack ${RELOCATING-0}${RELOCATING+${STACK_ADDR}} :
257 {
258 ${RELOCATING+_stack = .;}
259 *(.stack)
260 }"
261
262# if this is for an embedded system, don't add SIZEOF_HEADERS.
263if [ -z "$EMBEDDED" ]; then
264 test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR} + SIZEOF_HEADERS"
265else
266 test -z "${TEXT_BASE_ADDRESS}" && TEXT_BASE_ADDRESS="${TEXT_START_ADDR}"
267fi
268
269cat <<EOF
c19f06f2 270${RELOCATING+ENTRY(${ENTRY})}
e0001a05
NC
271
272${RELOCATING+${LIB_SEARCH_DIRS}}
e0001a05
NC
273${RELOCATING+${EXECUTABLE_SYMBOLS}}
274${RELOCATING+${INPUT_FILES}}
275${RELOCATING- /* For some reason, the Solaris linker makes bad executables
276 if gld -r is used and the intermediate file has sections starting
277 at non-zero addresses. Could be a Solaris ld bug, could be a GNU ld
278 bug. But for now assigning the zero vmas works. */}
279
280SECTIONS
281{
282 /* Read-only sections, merged into text segment: */
43cd72b9 283 ${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+PROVIDE (__executable_start = ${TEXT_START_ADDR}); . = ${TEXT_BASE_ADDRESS};}}}
e0001a05 284 ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_TEXT_START_ADDR:-0} + SIZEOF_HEADERS;}}
43cd72b9 285 ${CREATE_PIE+${RELOCATING+. = ${SHLIB_TEXT_START_ADDR:-0} + SIZEOF_HEADERS;}}
e0001a05 286 ${INITIAL_READONLY_SECTIONS}
c19f06f2 287 .note.gnu.build-id : { *(.note.gnu.build-id) }
e78c4c7e
BW
288EOF
289
290test -n "${RELOCATING+0}" || unset NON_ALLOC_DYN
291test -z "${NON_ALLOC_DYN}" || TEXT_DYNAMIC=
292cat > ldscripts/dyntmp.$$ <<EOF
e0001a05
NC
293 ${TEXT_DYNAMIC+${DYNAMIC}}
294 .hash ${RELOCATING-0} : { *(.hash) }
3c173cb1 295 .gnu.hash ${RELOCATING-0} : { *(.gnu.hash) }
e0001a05
NC
296 .dynsym ${RELOCATING-0} : { *(.dynsym) }
297 .dynstr ${RELOCATING-0} : { *(.dynstr) }
298 .gnu.version ${RELOCATING-0} : { *(.gnu.version) }
299 .gnu.version_d ${RELOCATING-0}: { *(.gnu.version_d) }
300 .gnu.version_r ${RELOCATING-0}: { *(.gnu.version_r) }
e0001a05 301EOF
e78c4c7e 302
e0001a05 303if [ "x$COMBRELOC" = x ]; then
e78c4c7e 304 COMBRELOCCAT="cat >> ldscripts/dyntmp.$$"
e0001a05
NC
305else
306 COMBRELOCCAT="cat > $COMBRELOC"
307fi
308eval $COMBRELOCCAT <<EOF
309 .rel.init ${RELOCATING-0} : { *(.rel.init) }
310 .rela.init ${RELOCATING-0} : { *(.rela.init) }
311 .rel.text ${RELOCATING-0} : { *(.rel.text${RELOCATING+ .rel.text.* .rel.gnu.linkonce.t.*}) }
312 .rela.text ${RELOCATING-0} : { *(.rela.text${RELOCATING+ .rela.text.* .rela.gnu.linkonce.t.*}) }
313 .rel.fini ${RELOCATING-0} : { *(.rel.fini) }
314 .rela.fini ${RELOCATING-0} : { *(.rela.fini) }
315 .rel.rodata ${RELOCATING-0} : { *(.rel.rodata${RELOCATING+ .rel.rodata.* .rel.gnu.linkonce.r.*}) }
316 .rela.rodata ${RELOCATING-0} : { *(.rela.rodata${RELOCATING+ .rela.rodata.* .rela.gnu.linkonce.r.*}) }
317 ${OTHER_READONLY_RELOC_SECTIONS}
3c173cb1
BW
318 .rel.data.rel.ro ${RELOCATING-0} : { *(.rel.data.rel.ro${RELOCATING+* .rel.gnu.linkonce.d.rel.ro.*}) }
319 .rela.data.rel.ro ${RELOCATING-0} : { *(.rela.data.rel.ro${RELOCATING+* .rela.gnu.linkonce.d.rel.ro.*}) }
e0001a05
NC
320 .rel.data ${RELOCATING-0} : { *(.rel.data${RELOCATING+ .rel.data.* .rel.gnu.linkonce.d.*}) }
321 .rela.data ${RELOCATING-0} : { *(.rela.data${RELOCATING+ .rela.data.* .rela.gnu.linkonce.d.*}) }
322 .rel.tdata ${RELOCATING-0} : { *(.rel.tdata${RELOCATING+ .rel.tdata.* .rel.gnu.linkonce.td.*}) }
323 .rela.tdata ${RELOCATING-0} : { *(.rela.tdata${RELOCATING+ .rela.tdata.* .rela.gnu.linkonce.td.*}) }
324 .rel.tbss ${RELOCATING-0} : { *(.rel.tbss${RELOCATING+ .rel.tbss.* .rel.gnu.linkonce.tb.*}) }
325 .rela.tbss ${RELOCATING-0} : { *(.rela.tbss${RELOCATING+ .rela.tbss.* .rela.gnu.linkonce.tb.*}) }
326 .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) }
327 .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) }
328 .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) }
329 .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) }
330 .rel.got ${RELOCATING-0} : { *(.rel.got) }
331 .rela.got ${RELOCATING-0} : { *(.rela.got) }
332 ${OTHER_GOT_RELOC_SECTIONS}
333 ${REL_SDATA}
334 ${REL_SBSS}
335 ${REL_SDATA2}
336 ${REL_SBSS2}
337 .rel.bss ${RELOCATING-0} : { *(.rel.bss${RELOCATING+ .rel.bss.* .rel.gnu.linkonce.b.*}) }
338 .rela.bss ${RELOCATING-0} : { *(.rela.bss${RELOCATING+ .rela.bss.* .rela.gnu.linkonce.b.*}) }
3c173cb1 339 ${REL_LARGE}
e0001a05 340EOF
e78c4c7e 341
e0001a05 342if [ -n "$COMBRELOC" ]; then
e78c4c7e 343cat >> ldscripts/dyntmp.$$ <<EOF
e0001a05
NC
344 .rel.dyn ${RELOCATING-0} :
345 {
346EOF
e78c4c7e
BW
347sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rela\./d;s/^.*: { *\(.*\)}$/ \1/' $COMBRELOC >> ldscripts/dyntmp.$$
348cat >> ldscripts/dyntmp.$$ <<EOF
e0001a05
NC
349 }
350 .rela.dyn ${RELOCATING-0} :
351 {
352EOF
e78c4c7e
BW
353sed -e '/^[ ]*[{}][ ]*$/d;/:[ ]*$/d;/\.rel\./d;s/^.*: { *\(.*\)}/ \1/' $COMBRELOC >> ldscripts/dyntmp.$$
354cat >> ldscripts/dyntmp.$$ <<EOF
e0001a05
NC
355 }
356EOF
357fi
e78c4c7e
BW
358
359cat >> ldscripts/dyntmp.$$ <<EOF
e0001a05
NC
360 .rel.plt ${RELOCATING-0} : { *(.rel.plt) }
361 .rela.plt ${RELOCATING-0} : { *(.rela.plt) }
362 ${OTHER_PLT_RELOC_SECTIONS}
e78c4c7e 363EOF
e0001a05 364
e78c4c7e
BW
365if test -z "${NON_ALLOC_DYN}"; then
366 if test -z "${NO_REL_RELOCS}${NO_RELA_RELOCS}"; then
367 cat ldscripts/dyntmp.$$
368 else
369 if test -z "${NO_REL_RELOCS}"; then
370 sed -e '/^[ ]*\.rela\.[^}]*$/,/}/d' -e '/^[ ]*\.rela\./d' ldscripts/dyntmp.$$
371 fi
372 if test -z "${NO_RELA_RELOCS}"; then
373 sed -e '/^[ ]*\.rel\.[^}]*$/,/}/d' -e '/^[ ]*\.rel\./d' ldscripts/dyntmp.$$
374 fi
375 fi
376 rm -f ldscripts/dyntmp.$$
377fi
378
379cat <<EOF
e0001a05
NC
380 ${RELOCATING-$INIT_LIT}
381 ${RELOCATING-$INIT}
382
3c173cb1
BW
383 ${TEXT_PLT+${PLT}}
384 ${TINY_READONLY_SECTION}
e0001a05
NC
385 .text ${RELOCATING-0} :
386 {
387 *(.got.plt* .plt*)
388
389 ${RELOCATING+${INIT_START}}
390 ${RELOCATING+KEEP (*(.init.literal))}
391 ${RELOCATING+KEEP (*(.init))}
392 ${RELOCATING+${INIT_END}}
393
394 ${RELOCATING+${TEXT_START_SYMBOLS}}
74869ac7 395 *(.literal .text .stub${RELOCATING+ .literal.* .text.* .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*})
e0001a05
NC
396 /* .gnu.warning sections are handled specially by elf32.em. */
397 *(.gnu.warning)
398 ${RELOCATING+${OTHER_TEXT_SECTIONS}}
399
400 ${RELOCATING+${FINI_START}}
401 ${RELOCATING+KEEP (*(.fini.literal))}
402 ${RELOCATING+KEEP (*(.fini))}
403 ${RELOCATING+${FINI_END}}
404 } =${NOP-0}
405
406 ${RELOCATING-$FINI_LIT}
407 ${RELOCATING-$FINI}
408
be2c2e39
BW
409 ${RELOCATING+PROVIDE (__${ETEXT_NAME} = .);}
410 ${RELOCATING+PROVIDE (_${ETEXT_NAME} = .);}
411 ${RELOCATING+PROVIDE (${ETEXT_NAME} = .);}
e0001a05
NC
412 ${WRITABLE_RODATA-${RODATA}}
413 .rodata1 ${RELOCATING-0} : { *(.rodata1) }
414 ${CREATE_SHLIB-${SDATA2}}
415 ${CREATE_SHLIB-${SBSS2}}
416 ${OTHER_READONLY_SECTIONS}
417 .eh_frame_hdr : { *(.eh_frame_hdr) }
43cd72b9 418 .eh_frame ${RELOCATING-0} : ONLY_IF_RO { KEEP (*(.eh_frame)) }
3c173cb1 419 .gcc_except_table ${RELOCATING-0} : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
e0001a05
NC
420
421 /* Adjust the address for the data segment. We want to adjust up to
422 the same address within the page on the next page up. */
43cd72b9 423 ${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+. = ${DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}}
e0001a05 424 ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}
43cd72b9
BW
425 ${CREATE_PIE+${RELOCATING+. = ${SHLIB_DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}
426
427 /* Exception handling */
428 .eh_frame ${RELOCATING-0} : ONLY_IF_RW { KEEP (*(.eh_frame)) }
3c173cb1 429 .gcc_except_table ${RELOCATING-0} : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
43cd72b9
BW
430
431 /* Thread Local Storage sections */
432 .tdata ${RELOCATING-0} : { *(.tdata${RELOCATING+ .tdata.* .gnu.linkonce.td.*}) }
433 .tbss ${RELOCATING-0} : { *(.tbss${RELOCATING+ .tbss.* .gnu.linkonce.tb.*})${RELOCATING+ *(.tcommon)} }
e0001a05 434
6f2942ed
PB
435 .preinit_array ${RELOCATING-0} :
436 {
3c173cb1 437 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__preinit_array_start = .);}}
6f2942ed 438 KEEP (*(.preinit_array))
3c173cb1 439 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__preinit_array_end = .);}}
6f2942ed
PB
440 }
441 .init_array ${RELOCATING-0} :
442 {
3c173cb1 443 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_start = .);}}
6f2942ed
PB
444 KEEP (*(SORT(.init_array.*)))
445 KEEP (*(.init_array))
3c173cb1 446 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_end = .);}}
6f2942ed
PB
447 }
448 .fini_array ${RELOCATING-0} :
449 {
3c173cb1 450 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_start = .);}}
6f2942ed
PB
451 KEEP (*(.fini_array))
452 KEEP (*(SORT(.fini_array.*)))
3c173cb1 453 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_end = .);}}
6f2942ed 454 }
be2c2e39
BW
455 ${SMALL_DATA_CTOR-${RELOCATING+${CTOR}}}
456 ${SMALL_DATA_DTOR-${RELOCATING+${DTOR}}}
43cd72b9
BW
457 .jcr ${RELOCATING-0} : { KEEP (*(.jcr)) }
458
459 ${RELOCATING+${DATARELRO}}
460 ${OTHER_RELRO_SECTIONS}
461 ${TEXT_DYNAMIC-${DYNAMIC}}
be2c2e39
BW
462 ${DATA_GOT+${RELRO_NOW+${GOT}}}
463 ${DATA_GOT+${RELRO_NOW+${GOTPLT}}}
464 ${DATA_GOT+${RELRO_NOW-${SEPARATE_GOTPLT+${GOT}}}}
43cd72b9 465 ${RELOCATING+${DATA_SEGMENT_RELRO_END}}
be2c2e39
BW
466 ${DATA_GOT+${RELRO_NOW-${SEPARATE_GOTPLT-${GOT}}}}
467 ${DATA_GOT+${RELRO_NOW-${GOTPLT}}}
468
469 ${DATA_PLT+${PLT_BEFORE_GOT-${PLT}}}
43cd72b9 470
e0001a05
NC
471 .data ${RELOCATING-0} :
472 {
473 ${RELOCATING+${DATA_START_SYMBOLS}}
474 *(.data${RELOCATING+ .data.* .gnu.linkonce.d.*})
475 ${CONSTRUCTING+SORT(CONSTRUCTORS)}
476 }
477 .data1 ${RELOCATING-0} : { *(.data1) }
e0001a05
NC
478 ${WRITABLE_RODATA+${RODATA}}
479 ${OTHER_READWRITE_SECTIONS}
be2c2e39
BW
480 ${SMALL_DATA_CTOR+${RELOCATING+${CTOR}}}
481 ${SMALL_DATA_DTOR+${RELOCATING+${DTOR}}}
482 ${DATA_PLT+${PLT_BEFORE_GOT+${PLT}}}
483 ${SDATA_GOT+${RELOCATING+${OTHER_GOT_SYMBOLS}}}
484 ${SDATA_GOT+${GOT}}
485 ${SDATA_GOT+${OTHER_GOT_SECTIONS}}
e0001a05
NC
486 ${SDATA}
487 ${OTHER_SDATA_SECTIONS}
3c173cb1 488 ${RELOCATING+${DATA_END_SYMBOLS-${USER_LABEL_PREFIX}_edata = .; PROVIDE (${USER_LABEL_PREFIX}edata = .);}}
e0001a05
NC
489 ${RELOCATING+__bss_start = .;}
490 ${RELOCATING+${OTHER_BSS_SYMBOLS}}
491 ${SBSS}
be2c2e39 492 ${BSS_PLT+${PLT}}
e0001a05
NC
493 .bss ${RELOCATING-0} :
494 {
495 *(.dynbss)
496 *(.bss${RELOCATING+ .bss.* .gnu.linkonce.b.*})
497 *(COMMON)
498 /* Align here to ensure that the .bss section occupies space up to
499 _end. Align after .bss to ensure correct alignment even if the
3c173cb1
BW
500 .bss section disappears because there are no input sections.
501 FIXME: Why do we need it? When there is no .bss section, we don't
502 pad the .data section. */
503 ${RELOCATING+. = ALIGN(. != 0 ? ${ALIGNMENT} : 1);}
e0001a05 504 }
93c0f4a4 505 ${OTHER_BSS_SECTIONS}
827a1c67 506 ${RELOCATING+${OTHER_BSS_END_SYMBOLS}}
e0001a05 507 ${RELOCATING+. = ALIGN(${ALIGNMENT});}
3c173cb1
BW
508 ${LARGE_SECTIONS}
509 ${RELOCATING+. = ALIGN(${ALIGNMENT});}
9f4fb502 510 ${RELOCATING+${OTHER_END_SYMBOLS}}
3c173cb1 511 ${RELOCATING+${END_SYMBOLS-${USER_LABEL_PREFIX}_end = .; PROVIDE (${USER_LABEL_PREFIX}end = .);}}
e0001a05 512 ${RELOCATING+${DATA_SEGMENT_END}}
e78c4c7e 513EOF
e0001a05 514
e78c4c7e
BW
515if test -n "${NON_ALLOC_DYN}"; then
516 if test -z "${NO_REL_RELOCS}${NO_RELA_RELOCS}"; then
517 cat ldscripts/dyntmp.$$
518 else
519 if test -z "${NO_REL_RELOCS}"; then
520 sed -e '/^[ ]*\.rela\.[^}]*$/,/}/d' -e '/^[ ]*\.rela\./d' ldscripts/dyntmp.$$
521 fi
522 if test -z "${NO_RELA_RELOCS}"; then
523 sed -e '/^[ ]*\.rel\.[^}]*$/,/}/d' -e '/^[ ]*\.rel\./d' ldscripts/dyntmp.$$
524 fi
525 fi
526 rm -f ldscripts/dyntmp.$$
527fi
528
529cat <<EOF
e0001a05
NC
530 /* Stabs debugging sections. */
531 .stab 0 : { *(.stab) }
532 .stabstr 0 : { *(.stabstr) }
533 .stab.excl 0 : { *(.stab.excl) }
534 .stab.exclstr 0 : { *(.stab.exclstr) }
535 .stab.index 0 : { *(.stab.index) }
536 .stab.indexstr 0 : { *(.stab.indexstr) }
537
538 .comment 0 : { *(.comment) }
539
540 /* DWARF debug sections.
541 Symbols in the DWARF debugging sections are relative to the beginning
542 of the section so we begin them at 0. */
543
544 /* DWARF 1 */
545 .debug 0 : { *(.debug) }
546 .line 0 : { *(.line) }
547
548 /* GNU DWARF 1 extensions */
549 .debug_srcinfo 0 : { *(.debug_srcinfo) }
550 .debug_sfnames 0 : { *(.debug_sfnames) }
551
552 /* DWARF 1.1 and DWARF 2 */
553 .debug_aranges 0 : { *(.debug_aranges) }
554 .debug_pubnames 0 : { *(.debug_pubnames) }
555
556 /* DWARF 2 */
3c173cb1 557 .debug_info 0 : { *(.debug_info${RELOCATING+ .gnu.linkonce.wi.*}) }
e0001a05
NC
558 .debug_abbrev 0 : { *(.debug_abbrev) }
559 .debug_line 0 : { *(.debug_line) }
560 .debug_frame 0 : { *(.debug_frame) }
561 .debug_str 0 : { *(.debug_str) }
562 .debug_loc 0 : { *(.debug_loc) }
563 .debug_macinfo 0 : { *(.debug_macinfo) }
564
565 /* SGI/MIPS DWARF 2 extensions */
566 .debug_weaknames 0 : { *(.debug_weaknames) }
567 .debug_funcnames 0 : { *(.debug_funcnames) }
568 .debug_typenames 0 : { *(.debug_typenames) }
569 .debug_varnames 0 : { *(.debug_varnames) }
570
93c0f4a4
BW
571 /* DWARF 3 */
572 .debug_pubtypes 0 : { *(.debug_pubtypes) }
573 .debug_ranges 0 : { *(.debug_ranges) }
574
3c173cb1
BW
575 ${TINY_DATA_SECTION}
576 ${TINY_BSS_SECTION}
577
e0001a05 578 ${STACK_ADDR+${STACK}}
104d59d1 579 ${ATTRS_SECTIONS}
e0001a05 580 ${OTHER_SECTIONS}
827a1c67 581 ${RELOCATING+${OTHER_SYMBOLS}}
1c68693b 582 ${RELOCATING+${DISCARDED}}
e0001a05
NC
583}
584EOF
This page took 0.33219 seconds and 4 git commands to generate.