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