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