PR ld/22909 amendment; don't xfail ld-elf/pr19539.d for cris*-*-*.
[deliverable/binutils-gdb.git] / ld / scripttempl / elf32msp430.sc
CommitLineData
b3adc24a 1# Copyright (C) 2014-2020 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.
f2f489ac
NC
6
7HEAP_SECTION_MSP430=" "
8HEAP_MEMORY_MSP430=" "
9
6c19b93b
AM
10if test ${GOT_HEAP_MSP-0} -ne 0
11then
ec2d9b29 12HEAP_SECTION_MSP430=".heap ${RELOCATING-0} :
f2f489ac
NC
13 {
14 ${RELOCATING+ PROVIDE (__heap_data_start = .) ; }
15 *(.heap*)
16 ${RELOCATING+ PROVIDE (_heap_data_end = .) ; }
17 ${RELOCATING+. = ALIGN(2);}
18 ${RELOCATING+ PROVIDE (__heap_bottom = .) ; }
19 ${RELOCATING+ PROVIDE (__heap_top = ${HEAP_START} + ${HEAP_LENGTH}) ; }
20 } ${RELOCATING+ > heap}"
6c19b93b 21HEAP_MEMORY_MSP430="heap(rwx) : ORIGIN = $HEAP_START, LENGTH = $HEAP_LENGTH"
f2f489ac
NC
22fi
23
24
2469cfa2 25cat <<EOF
b3adc24a 26/* Copyright (C) 2014-2020 Free Software Foundation, Inc.
985743c7
NC
27
28 Copying and distribution of this script, with or without modification,
29 are permitted in any medium without royalty provided the copyright
30 notice and this notice are preserved. */
31
2469cfa2
NC
32OUTPUT_FORMAT("${OUTPUT_FORMAT}","${OUTPUT_FORMAT}","${OUTPUT_FORMAT}")
33OUTPUT_ARCH(${ARCH})
34
2bf2bf23
AM
35EOF
36
37test -n "${RELOCATING}" && cat <<EOF
2469cfa2
NC
38MEMORY
39{
6c19b93b
AM
40 text (rx) : ORIGIN = $ROM_START, LENGTH = $ROM_SIZE
41 data (rwx) : ORIGIN = $RAM_START, LENGTH = $RAM_SIZE
42 vectors (rw) : ORIGIN = 0xffe0, LENGTH = 0x20
2469cfa2
NC
43 bootloader(rx) : ORIGIN = 0x0c00, LENGTH = 1K
44 infomem(rx) : ORIGIN = 0x1000, LENGTH = 256
45 infomemnobits(rx) : ORIGIN = 0x1000, LENGTH = 256
f2f489ac 46 ${HEAP_MEMORY_MSP430}
2469cfa2
NC
47}
48
2bf2bf23
AM
49EOF
50
51cat <<EOF
2469cfa2
NC
52SECTIONS
53{
13761a11
NC
54 /* Bootloader. */
55 .bootloader ${RELOCATING-0} :
56 {
57 ${RELOCATING+ PROVIDE (__boot_start = .) ; }
58 *(.bootloader)
59 ${RELOCATING+. = ALIGN(2);}
2bf2bf23 60 ${RELOCATING+*(.bootloader.*)}
13761a11 61 } ${RELOCATING+ > bootloader}
6c19b93b 62
13761a11
NC
63 /* Information memory. */
64 .infomem ${RELOCATING-0} :
65 {
66 *(.infomem)
67 ${RELOCATING+. = ALIGN(2);}
2bf2bf23 68 ${RELOCATING+*(.infomem.*)}
13761a11
NC
69 } ${RELOCATING+ > infomem}
70
71 /* Information memory (not loaded into MPU). */
72 .infomemnobits ${RELOCATING-0} :
73 {
74 *(.infomemnobits)
75 ${RELOCATING+. = ALIGN(2);}
2bf2bf23 76 ${RELOCATING+*(.infomemnobits.*)}
13761a11
NC
77 } ${RELOCATING+ > infomemnobits}
78
2469cfa2
NC
79 /* Read-only sections, merged into text segment. */
80 ${TEXT_DYNAMIC+${DYNAMIC}}
ec2d9b29
AM
81 .hash ${RELOCATING-0} : { *(.hash) }
82 .dynsym ${RELOCATING-0} : { *(.dynsym) }
83 .dynstr ${RELOCATING-0} : { *(.dynstr) }
84 .gnu.version ${RELOCATING-0} : { *(.gnu.version) }
85 .gnu.version_d ${RELOCATING-0} : { *(.gnu.version_d) }
86 .gnu.version_r ${RELOCATING-0} : { *(.gnu.version_r) }
87
88 .rel.init ${RELOCATING-0} : { *(.rel.init) }
89 .rela.init ${RELOCATING-0} : { *(.rela.init) }
90 .rel.text ${RELOCATING-0} :
2469cfa2
NC
91 {
92 *(.rel.text)
93 ${RELOCATING+*(.rel.text.*)}
94 ${RELOCATING+*(.rel.gnu.linkonce.t*)}
95 }
ec2d9b29 96 .rela.text ${RELOCATING-0} :
2469cfa2
NC
97 {
98 *(.rela.text)
99 ${RELOCATING+*(.rela.text.*)}
100 ${RELOCATING+*(.rela.gnu.linkonce.t*)}
101 }
ec2d9b29
AM
102 .rel.fini ${RELOCATING-0} : { *(.rel.fini) }
103 .rela.fini ${RELOCATING-0} : { *(.rela.fini) }
104 .rel.rodata ${RELOCATING-0} :
2469cfa2
NC
105 {
106 *(.rel.rodata)
107 ${RELOCATING+*(.rel.rodata.*)}
108 ${RELOCATING+*(.rel.gnu.linkonce.r*)}
109 }
ec2d9b29 110 .rela.rodata ${RELOCATING-0} :
2469cfa2
NC
111 {
112 *(.rela.rodata)
113 ${RELOCATING+*(.rela.rodata.*)}
114 ${RELOCATING+*(.rela.gnu.linkonce.r*)}
115 }
ec2d9b29 116 .rel.data ${RELOCATING-0} :
2469cfa2
NC
117 {
118 *(.rel.data)
119 ${RELOCATING+*(.rel.data.*)}
120 ${RELOCATING+*(.rel.gnu.linkonce.d*)}
121 }
ec2d9b29 122 .rela.data ${RELOCATING-0} :
2469cfa2
NC
123 {
124 *(.rela.data)
125 ${RELOCATING+*(.rela.data.*)}
126 ${RELOCATING+*(.rela.gnu.linkonce.d*)}
127 }
ec2d9b29
AM
128 .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) }
129 .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) }
130 .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) }
131 .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) }
132 .rel.got ${RELOCATING-0} : { *(.rel.got) }
133 .rela.got ${RELOCATING-0} : { *(.rela.got) }
134 .rel.bss ${RELOCATING-0} : { *(.rel.bss) }
135 .rela.bss ${RELOCATING-0} : { *(.rela.bss) }
136 .rel.plt ${RELOCATING-0} : { *(.rel.plt) }
137 .rela.plt ${RELOCATING-0} : { *(.rela.plt) }
2469cfa2
NC
138
139 /* Internal text space. */
c2e86386 140 .text ${RELOCATING-0} :
2469cfa2 141 {
2bf2bf23 142 ${RELOCATING+. = ALIGN(2);
b2e4da5a
L
143 *(SORT_NONE(.init))
144 *(SORT_NONE(.init0)) /* Start here after reset. */
145 *(SORT_NONE(.init1))
146 *(SORT_NONE(.init2)) /* Copy data loop */
147 *(SORT_NONE(.init3))
148 *(SORT_NONE(.init4)) /* Clear bss */
149 *(SORT_NONE(.init5))
150 *(SORT_NONE(.init6)) /* C++ constructors. */
151 *(SORT_NONE(.init7))
152 *(SORT_NONE(.init8))
2bf2bf23 153 *(SORT_NONE(.init9)) /* Call main(). */}
d4b6ee67
NC
154
155 ${CONSTRUCTING+ __ctors_start = . ; }
156 ${CONSTRUCTING+ *(.ctors) }
157 ${CONSTRUCTING+ __ctors_end = . ; }
158 ${CONSTRUCTING+ __dtors_start = . ; }
159 ${CONSTRUCTING+ *(.dtors) }
160 ${CONSTRUCTING+ __dtors_end = . ; }
161
2bf2bf23 162 ${RELOCATING+. = ALIGN(2);
837a17b3
NC
163 *(.lower.text.* .lower.text)
164
2bf2bf23 165 . = ALIGN(2);}
2469cfa2 166 *(.text)
2bf2bf23 167 ${RELOCATING+. = ALIGN(2);
2469cfa2 168 *(.text.*)
2bf2bf23 169 . = ALIGN(2);
13761a11 170 *(.text:*)
d4b6ee67 171
837a17b3
NC
172 *(.either.text.* .either.text)
173
0c3d9485
JL
174 *(.upper.text.* .upper.text)
175
2bf2bf23 176 . = ALIGN(2);
b2e4da5a
L
177 *(SORT_NONE(.fini9))
178 *(SORT_NONE(.fini8))
179 *(SORT_NONE(.fini7))
180 *(SORT_NONE(.fini6)) /* C++ destructors. */
181 *(SORT_NONE(.fini5))
182 *(SORT_NONE(.fini4))
183 *(SORT_NONE(.fini3))
184 *(SORT_NONE(.fini2))
185 *(SORT_NONE(.fini1))
186 *(SORT_NONE(.fini0)) /* Infinite loop after program termination. */
187 *(SORT_NONE(.fini))
d4b6ee67 188
2bf2bf23 189 _etext = .;}
2469cfa2
NC
190 } ${RELOCATING+ > text}
191
c2e86386 192 .rodata ${RELOCATING-0} :
13761a11 193 {
2bf2bf23 194 ${RELOCATING+. = ALIGN(2);
837a17b3
NC
195 *(.lower.rodata.* .lower.rodata)
196
13761a11 197 . = ALIGN(2);
2bf2bf23
AM
198 *(.plt)}
199 *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.* .const .const:*})
200 ${RELOCATING+*(.rodata1)
13761a11 201
837a17b3 202 *(.either.rodata.*) *(.either.rodata)
0c3d9485
JL
203
204 *(.upper.rodata.* .upper.rodata)
205
13761a11
NC
206 *(.eh_frame_hdr)
207 KEEP (*(.eh_frame))
208
209 KEEP (*(.gcc_except_table)) *(.gcc_except_table.*)
210
211 PROVIDE (__preinit_array_start = .);
212 KEEP (*(.preinit_array))
213 PROVIDE (__preinit_array_end = .);
214
215 PROVIDE (__init_array_start = .);
216 KEEP (*(SORT(.init_array.*)))
217 KEEP (*(.init_array))
218 PROVIDE (__init_array_end = .);
219
220 PROVIDE (__fini_array_start = .);
221 KEEP (*(.fini_array))
222 KEEP (*(SORT(.fini_array.*)))
223 PROVIDE (__fini_array_end = .);
13761a11
NC
224
225 /* gcc uses crtbegin.o to find the start of the constructors, so
226 we make sure it is first. Because this is a wildcard, it
227 doesn't matter if the user does not actually link against
228 crtbegin.o; the linker won't look for a file to match a
229 wildcard. The wildcard also means that it doesn't matter which
230 directory crtbegin.o is in. */
231 KEEP (*crtbegin*.o(.ctors))
232
233 /* We don't want to include the .ctor section from from the
234 crtend.o file until after the sorted ctors. The .ctor section
235 from the crtend file contains the end of ctors marker and it
236 must be last */
237 KEEP (*(EXCLUDE_FILE (*crtend*.o ) .ctors))
238 KEEP (*(SORT(.ctors.*)))
239 KEEP (*(.ctors))
240
241 KEEP (*crtbegin*.o(.dtors))
242 KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors))
243 KEEP (*(SORT(.dtors.*)))
2bf2bf23 244 KEEP (*(.dtors))}
13761a11
NC
245 } ${RELOCATING+ > text}
246
c2e86386 247 .vectors ${RELOCATING-0} :
13761a11
NC
248 {
249 ${RELOCATING+ PROVIDE (__vectors_start = .) ; }
2bf2bf23 250 *(.vectors${RELOCATING+*})
13761a11
NC
251 ${RELOCATING+ _vectors_end = . ; }
252 } ${RELOCATING+ > vectors}
253
925bbbbb
NC
254 .data ${RELOCATING-0} :
255 {
2469cfa2 256 ${RELOCATING+ PROVIDE (__data_start = .) ; }
13761a11 257 ${RELOCATING+ PROVIDE (__datastart = .) ; }
2bf2bf23 258 ${RELOCATING+. = ALIGN(2);
13761a11
NC
259
260 KEEP (*(.jcr))
261 *(.data.rel.ro.local) *(.data.rel.ro*)
262 *(.dynamic)
263
2bf2bf23
AM
264 . = ALIGN(2);
265 *(.lower.data.* .lower.data)}
837a17b3 266
2469cfa2 267 *(.data)
2bf2bf23 268 ${RELOCATING+*(.data.*)
2469cfa2 269 *(.gnu.linkonce.d*)
13761a11
NC
270 KEEP (*(.gnu.linkonce.d.*personality*))
271 *(.data1)
837a17b3
NC
272
273 *(.either.data.* .either.data)
274
0c3d9485
JL
275 *(.upper.data.* .upper.data)
276
13761a11 277 *(.got.plt) *(.got)
2bf2bf23 278 . = ALIGN(2);
13761a11 279 *(.sdata .sdata.* .gnu.linkonce.s.*)
2bf2bf23
AM
280 . = ALIGN(2);
281 _edata = .;}
282 } ${RELOCATING+ > data AT> text}
837a17b3 283
2bf2bf23
AM
284 ${RELOCATING+__romdatastart = LOADADDR(.data);
285 __romdatacopysize = SIZEOF(.data);}
6c19b93b 286
c2e86386 287 .bss ${RELOCATING-0}${RELOCATING+SIZEOF(.data) + ADDR(.data)} :
2469cfa2 288 {
727f7031 289 ${RELOCATING+. = ALIGN(2);}
0d832c8e 290 ${RELOCATING+ PROVIDE (__bss_start = .); }
2bf2bf23 291 ${RELOCATING+ PROVIDE (__bssstart = .);
837a17b3 292 *(.lower.bss.* .lower.bss)
2bf2bf23 293 . = ALIGN(2);}
2469cfa2 294 *(.bss)
2bf2bf23 295 ${RELOCATING+*(.either.bss.* .either.bss)
0c3d9485 296 *(.upper.bss.* .upper.bss)
2469cfa2 297 *(COMMON)
2bf2bf23 298 PROVIDE (__bss_end = .);}
2469cfa2 299 } ${RELOCATING+ > data}
0d832c8e 300 ${RELOCATING+ PROVIDE (__bsssize = SIZEOF(.bss)); }
2469cfa2 301
c2e86386 302 .noinit ${RELOCATING-0}${RELOCATING+SIZEOF(.bss) + ADDR(.bss)} :
2469cfa2
NC
303 {
304 ${RELOCATING+ PROVIDE (__noinit_start = .) ; }
305 *(.noinit)
2469cfa2 306 ${RELOCATING+ PROVIDE (__noinit_end = .) ; }
2469cfa2
NC
307 } ${RELOCATING+ > data}
308
c2e86386 309 .persistent ${RELOCATING-0}${RELOCATING+SIZEOF(.noinit) + ADDR(.noinit)} :
886a2506
NC
310 {
311 ${RELOCATING+ PROVIDE (__persistent_start = .) ; }
312 *(.persistent)
313 ${RELOCATING+ PROVIDE (__persistent_end = .) ; }
314 } ${RELOCATING+ > data}
315
316 ${RELOCATING+ _end = . ; }
f2f489ac 317 ${HEAP_SECTION_MSP430}
2469cfa2 318
b18c562e
NC
319 /* Stabs for profiling information*/
320 .profiler 0 : { *(.profiler) }
6c19b93b 321
2469cfa2 322 /* Stabs debugging sections. */
6c19b93b 323 .stab 0 : { *(.stab) }
2469cfa2
NC
324 .stabstr 0 : { *(.stabstr) }
325 .stab.excl 0 : { *(.stab.excl) }
326 .stab.exclstr 0 : { *(.stab.exclstr) }
327 .stab.index 0 : { *(.stab.index) }
328 .stab.indexstr 0 : { *(.stab.indexstr) }
329 .comment 0 : { *(.comment) }
ceb0a680 330EOF
2a995fc1 331
d1f70bdc 332. $srcdir/scripttempl/DWARF.sc
2a995fc1 333
2bf2bf23 334test -n "${RELOCATING}" && cat <<EOF
df154dc1 335 .MSP430.attributes 0 :
13761a11
NC
336 {
337 KEEP (*(.MSP430.attributes))
338 KEEP (*(.gnu.attributes))
339 KEEP (*(__TI_build_attributes))
340 }
341
2469cfa2 342 PROVIDE (__stack = ${STACK}) ;
db6a5910
NC
343 PROVIDE (__data_start_rom = _etext) ;
344 PROVIDE (__data_end_rom = _etext + SIZEOF (.data)) ;
345 PROVIDE (__noinit_start_rom = _etext + SIZEOF (.data)) ;
346 PROVIDE (__noinit_end_rom = _etext + SIZEOF (.data) + SIZEOF (.noinit)) ;
f2f489ac 347 PROVIDE (__subdevice_has_heap = ${GOT_HEAP_MSP-0}) ;
2bf2bf23
AM
348EOF
349
350cat <<EOF
2469cfa2
NC
351}
352EOF
This page took 0.799328 seconds and 4 git commands to generate.