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