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