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