bfd/
[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 115if test -z "$PLT"; then
3aa14d16 116 PLT=".plt ${RELOCATING-0} : { *(.plt) *(.iplt)}"
0cf7d72c 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
3aa14d16 121 GOT=".got ${RELOCATING-0} : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }"
8c37241b 122 else
3aa14d16
L
123 GOT=".got ${RELOCATING-0} : { *(.got) *(.igot) }"
124 GOTPLT=".got.plt ${RELOCATING-0} : { *(.got.plt) *(.igot.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
3aa14d16
L
357 .rel.plt ${RELOCATING-0} :
358 {
359 *(.rel.plt)
360 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rel_iplt_start = .);}}
361 *(.rel.iplt)
362 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rel_iplt_end = .);}}
363 }
364 .rela.plt ${RELOCATING-0} :
365 {
366 *(.rela.plt)
367 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rela_iplt_start = .);}}
368 *(.rela.iplt)
369 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__rela_iplt_end = .);}}
370 }
9e673ad1 371 ${OTHER_PLT_RELOC_SECTIONS}
485cf679 372EOF
9e4141bc 373
485cf679
AM
374if test -z "${NON_ALLOC_DYN}"; then
375 if test -z "${NO_REL_RELOCS}${NO_RELA_RELOCS}"; then
376 cat ldscripts/dyntmp.$$
377 else
378 if test -z "${NO_REL_RELOCS}"; then
379 sed -e '/^[ ]*\.rela\.[^}]*$/,/}/d' -e '/^[ ]*\.rela\./d' ldscripts/dyntmp.$$
380 fi
381 if test -z "${NO_RELA_RELOCS}"; then
382 sed -e '/^[ ]*\.rel\.[^}]*$/,/}/d' -e '/^[ ]*\.rel\./d' ldscripts/dyntmp.$$
383 fi
384 fi
385 rm -f ldscripts/dyntmp.$$
386fi
387
388cat <<EOF
465bc359 389 .init ${RELOCATING-0} :
4ab10e93 390 {
53db15ed 391 ${RELOCATING+${INIT_START}}
4ab10e93 392 KEEP (*(.init))
53db15ed 393 ${RELOCATING+${INIT_END}}
4ab10e93
GK
394 } =${NOP-0}
395
8d6d53d4 396 ${TEXT_PLT+${PLT}}
ecc49060 397 ${TINY_READONLY_SECTION}
465bc359 398 .text ${RELOCATING-0} :
252b5132
RH
399 {
400 ${RELOCATING+${TEXT_START_SYMBOLS}}
465bc359 401 *(.text .stub${RELOCATING+ .text.* .gnu.linkonce.t.*})
252b5132
RH
402 /* .gnu.warning sections are handled specially by elf32.em. */
403 *(.gnu.warning)
252b5132
RH
404 ${RELOCATING+${OTHER_TEXT_SECTIONS}}
405 } =${NOP-0}
465bc359 406 .fini ${RELOCATING-0} :
904ecb2d 407 {
53db15ed 408 ${RELOCATING+${FINI_START}}
904ecb2d 409 KEEP (*(.fini))
53db15ed 410 ${RELOCATING+${FINI_END}}
904ecb2d 411 } =${NOP-0}
eac338cf
PB
412 ${RELOCATING+PROVIDE (__${ETEXT_NAME} = .);}
413 ${RELOCATING+PROVIDE (_${ETEXT_NAME} = .);}
414 ${RELOCATING+PROVIDE (${ETEXT_NAME} = .);}
a8e53fb0 415 ${WRITABLE_RODATA-${RODATA}}
465bc359 416 .rodata1 ${RELOCATING-0} : { *(.rodata1) }
6c86c541
GK
417 ${CREATE_SHLIB-${SDATA2}}
418 ${CREATE_SHLIB-${SBSS2}}
465bc359 419 ${OTHER_READONLY_SECTIONS}
65765700 420 .eh_frame_hdr : { *(.eh_frame_hdr) }
0841712e 421 .eh_frame ${RELOCATING-0} : ONLY_IF_RO { KEEP (*(.eh_frame)) }
c8c9c297 422 .gcc_except_table ${RELOCATING-0} : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
252b5132
RH
423
424 /* Adjust the address for the data segment. We want to adjust up to
425 the same address within the page on the next page up. */
9203ba99 426 ${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+. = ${DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}}
2d20f7bf 427 ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}
9203ba99 428 ${CREATE_PIE+${RELOCATING+. = ${SHLIB_DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}
252b5132 429
8c37241b 430 /* Exception handling */
0841712e 431 .eh_frame ${RELOCATING-0} : ONLY_IF_RW { KEEP (*(.eh_frame)) }
c8c9c297 432 .gcc_except_table ${RELOCATING-0} : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
8c37241b
JJ
433
434 /* Thread Local Storage sections */
435 .tdata ${RELOCATING-0} : { *(.tdata${RELOCATING+ .tdata.* .gnu.linkonce.td.*}) }
436 .tbss ${RELOCATING-0} : { *(.tbss${RELOCATING+ .tbss.* .gnu.linkonce.tb.*})${RELOCATING+ *(.tcommon)} }
437
046183de
AM
438 .preinit_array ${RELOCATING-0} :
439 {
a817dba3 440 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__preinit_array_start = .);}}
046183de 441 KEEP (*(.preinit_array))
a817dba3 442 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__preinit_array_end = .);}}
046183de
AM
443 }
444 .init_array ${RELOCATING-0} :
445 {
a817dba3 446 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_start = .);}}
6f2942ed 447 KEEP (*(SORT(.init_array.*)))
046183de 448 KEEP (*(.init_array))
a817dba3 449 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_end = .);}}
046183de
AM
450 }
451 .fini_array ${RELOCATING-0} :
452 {
a817dba3 453 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_start = .);}}
046183de 454 KEEP (*(.fini_array))
6f2942ed 455 KEEP (*(SORT(.fini_array.*)))
a817dba3 456 ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_end = .);}}
046183de 457 }
951e9133
L
458 ${SMALL_DATA_CTOR-${RELOCATING+${CTOR}}}
459 ${SMALL_DATA_DTOR-${RELOCATING+${DTOR}}}
8c37241b
JJ
460 .jcr ${RELOCATING-0} : { KEEP (*(.jcr)) }
461
462 ${RELOCATING+${DATARELRO}}
463 ${OTHER_RELRO_SECTIONS}
464 ${TEXT_DYNAMIC-${DYNAMIC}}
0cf7d72c
AM
465 ${DATA_GOT+${RELRO_NOW+${GOT}}}
466 ${DATA_GOT+${RELRO_NOW+${GOTPLT}}}
467 ${DATA_GOT+${RELRO_NOW-${SEPARATE_GOTPLT+${GOT}}}}
8c37241b 468 ${RELOCATING+${DATA_SEGMENT_RELRO_END}}
0cf7d72c
AM
469 ${DATA_GOT+${RELRO_NOW-${SEPARATE_GOTPLT-${GOT}}}}
470 ${DATA_GOT+${RELRO_NOW-${GOTPLT}}}
8c37241b 471
b71a5181 472 ${DATA_PLT+${PLT_BEFORE_GOT-${PLT}}}
8c37241b 473
465bc359 474 .data ${RELOCATING-0} :
252b5132
RH
475 {
476 ${RELOCATING+${DATA_START_SYMBOLS}}
465bc359 477 *(.data${RELOCATING+ .data.* .gnu.linkonce.d.*})
252b5132
RH
478 ${CONSTRUCTING+SORT(CONSTRUCTORS)}
479 }
465bc359 480 .data1 ${RELOCATING-0} : { *(.data1) }
a8e53fb0 481 ${WRITABLE_RODATA+${RODATA}}
465bc359 482 ${OTHER_READWRITE_SECTIONS}
951e9133
L
483 ${SMALL_DATA_CTOR+${RELOCATING+${CTOR}}}
484 ${SMALL_DATA_DTOR+${RELOCATING+${DTOR}}}
b71a5181 485 ${DATA_PLT+${PLT_BEFORE_GOT+${PLT}}}
0cf7d72c
AM
486 ${SDATA_GOT+${RELOCATING+${OTHER_GOT_SYMBOLS}}}
487 ${SDATA_GOT+${GOT}}
488 ${SDATA_GOT+${OTHER_GOT_SECTIONS}}
48459341 489 ${SDATA}
465bc359 490 ${OTHER_SDATA_SECTIONS}
a817dba3 491 ${RELOCATING+${DATA_END_SYMBOLS-${USER_LABEL_PREFIX}_edata = .; PROVIDE (${USER_LABEL_PREFIX}edata = .);}}
252b5132
RH
492 ${RELOCATING+__bss_start = .;}
493 ${RELOCATING+${OTHER_BSS_SYMBOLS}}
48459341 494 ${SBSS}
6c86c541 495 ${BSS_PLT+${PLT}}
465bc359 496 .bss ${RELOCATING-0} :
252b5132
RH
497 {
498 *(.dynbss)
465bc359 499 *(.bss${RELOCATING+ .bss.* .gnu.linkonce.b.*})
252b5132
RH
500 *(COMMON)
501 /* Align here to ensure that the .bss section occupies space up to
502 _end. Align after .bss to ensure correct alignment even if the
3b22753a
L
503 .bss section disappears because there are no input sections.
504 FIXME: Why do we need it? When there is no .bss section, we don't
505 pad the .data section. */
9d12f64c 506 ${RELOCATING+. = ALIGN(. != 0 ? ${ALIGNMENT} : 1);}
252b5132 507 }
e9f53129 508 ${OTHER_BSS_SECTIONS}
827a1c67
AM
509 ${RELOCATING+${OTHER_BSS_END_SYMBOLS}}
510 ${RELOCATING+. = ALIGN(${ALIGNMENT});}
3b22753a 511 ${LARGE_SECTIONS}
252b5132 512 ${RELOCATING+. = ALIGN(${ALIGNMENT});}
9f4fb502 513 ${RELOCATING+${OTHER_END_SYMBOLS}}
a817dba3 514 ${RELOCATING+${END_SYMBOLS-${USER_LABEL_PREFIX}_end = .; PROVIDE (${USER_LABEL_PREFIX}end = .);}}
2d13d8c5 515 ${RELOCATING+${DATA_SEGMENT_END}}
485cf679 516EOF
252b5132 517
485cf679
AM
518if test -n "${NON_ALLOC_DYN}"; then
519 if test -z "${NO_REL_RELOCS}${NO_RELA_RELOCS}"; then
520 cat ldscripts/dyntmp.$$
521 else
522 if test -z "${NO_REL_RELOCS}"; then
523 sed -e '/^[ ]*\.rela\.[^}]*$/,/}/d' -e '/^[ ]*\.rela\./d' ldscripts/dyntmp.$$
524 fi
525 if test -z "${NO_RELA_RELOCS}"; then
526 sed -e '/^[ ]*\.rel\.[^}]*$/,/}/d' -e '/^[ ]*\.rel\./d' ldscripts/dyntmp.$$
527 fi
528 fi
529 rm -f ldscripts/dyntmp.$$
530fi
531
532cat <<EOF
252b5132 533 /* Stabs debugging sections. */
465bc359
AM
534 .stab 0 : { *(.stab) }
535 .stabstr 0 : { *(.stabstr) }
536 .stab.excl 0 : { *(.stab.excl) }
537 .stab.exclstr 0 : { *(.stab.exclstr) }
538 .stab.index 0 : { *(.stab.index) }
252b5132
RH
539 .stab.indexstr 0 : { *(.stab.indexstr) }
540
465bc359 541 .comment 0 : { *(.comment) }
252b5132
RH
542
543 /* DWARF debug sections.
544 Symbols in the DWARF debugging sections are relative to the beginning
545 of the section so we begin them at 0. */
546
547 /* DWARF 1 */
548 .debug 0 : { *(.debug) }
549 .line 0 : { *(.line) }
550
551 /* GNU DWARF 1 extensions */
552 .debug_srcinfo 0 : { *(.debug_srcinfo) }
553 .debug_sfnames 0 : { *(.debug_sfnames) }
554
555 /* DWARF 1.1 and DWARF 2 */
556 .debug_aranges 0 : { *(.debug_aranges) }
557 .debug_pubnames 0 : { *(.debug_pubnames) }
558
559 /* DWARF 2 */
779dafb4 560 .debug_info 0 : { *(.debug_info${RELOCATING+ .gnu.linkonce.wi.*}) }
252b5132
RH
561 .debug_abbrev 0 : { *(.debug_abbrev) }
562 .debug_line 0 : { *(.debug_line) }
563 .debug_frame 0 : { *(.debug_frame) }
564 .debug_str 0 : { *(.debug_str) }
565 .debug_loc 0 : { *(.debug_loc) }
566 .debug_macinfo 0 : { *(.debug_macinfo) }
567
568 /* SGI/MIPS DWARF 2 extensions */
569 .debug_weaknames 0 : { *(.debug_weaknames) }
570 .debug_funcnames 0 : { *(.debug_funcnames) }
571 .debug_typenames 0 : { *(.debug_typenames) }
572 .debug_varnames 0 : { *(.debug_varnames) }
573
083a6ddf
AM
574 /* DWARF 3 */
575 .debug_pubtypes 0 : { *(.debug_pubtypes) }
576 .debug_ranges 0 : { *(.debug_ranges) }
577
ecc49060
NC
578 ${TINY_DATA_SECTION}
579 ${TINY_BSS_SECTION}
580
465bc359 581 ${STACK_ADDR+${STACK}}
104d59d1 582 ${ATTRS_SECTIONS}
252b5132 583 ${OTHER_SECTIONS}
827a1c67 584 ${RELOCATING+${OTHER_SYMBOLS}}
1c68693b 585 ${RELOCATING+${DISCARDED}}
252b5132
RH
586}
587EOF
This page took 0.451796 seconds and 4 git commands to generate.