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