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