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