1 # Copyright (C) 2014-2020 Free Software Foundation, Inc.
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.
7 HEAP_SECTION_MSP430=" "
10 if test ${GOT_HEAP_MSP-0} -ne 0
12 HEAP_SECTION_MSP430=".heap ${RELOCATING-0} :
14 ${RELOCATING+ PROVIDE (__heap_data_start = .) ; }
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}"
21 HEAP_MEMORY_MSP430="heap(rwx) : ORIGIN = $HEAP_START, LENGTH = $HEAP_LENGTH"
26 /* Copyright (C) 2014-2020 Free Software Foundation, Inc.
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. */
32 OUTPUT_FORMAT("${OUTPUT_FORMAT}","${OUTPUT_FORMAT}","${OUTPUT_FORMAT}")
37 test -n "${RELOCATING}" && cat <<EOF
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
43 bootloader(rx) : ORIGIN = 0x0c00, LENGTH = 1K
44 infomem(rx) : ORIGIN = 0x1000, LENGTH = 256
45 infomemnobits(rx) : ORIGIN = 0x1000, LENGTH = 256
55 .bootloader ${RELOCATING-0} :
57 ${RELOCATING+ PROVIDE (__boot_start = .) ; }
59 ${RELOCATING+. = ALIGN(2);}
60 ${RELOCATING+*(.bootloader.*)}
61 } ${RELOCATING+ > bootloader}
63 /* Information memory. */
64 .infomem ${RELOCATING-0} :
67 ${RELOCATING+. = ALIGN(2);}
68 ${RELOCATING+*(.infomem.*)}
69 } ${RELOCATING+ > infomem}
71 /* Information memory (not loaded into MPU). */
72 .infomemnobits ${RELOCATING-0} :
75 ${RELOCATING+. = ALIGN(2);}
76 ${RELOCATING+*(.infomemnobits.*)}
77 } ${RELOCATING+ > infomemnobits}
79 /* Read-only sections, merged into text segment. */
80 ${TEXT_DYNAMIC+${DYNAMIC}}
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) }
88 .rel.init ${RELOCATING-0} : { *(.rel.init) }
89 .rela.init ${RELOCATING-0} : { *(.rela.init) }
90 .rel.text ${RELOCATING-0} :
93 ${RELOCATING+*(.rel.text.*)}
94 ${RELOCATING+*(.rel.gnu.linkonce.t*)}
96 .rela.text ${RELOCATING-0} :
99 ${RELOCATING+*(.rela.text.*)}
100 ${RELOCATING+*(.rela.gnu.linkonce.t*)}
102 .rel.fini ${RELOCATING-0} : { *(.rel.fini) }
103 .rela.fini ${RELOCATING-0} : { *(.rela.fini) }
104 .rel.rodata ${RELOCATING-0} :
107 ${RELOCATING+*(.rel.rodata.*)}
108 ${RELOCATING+*(.rel.gnu.linkonce.r*)}
110 .rela.rodata ${RELOCATING-0} :
113 ${RELOCATING+*(.rela.rodata.*)}
114 ${RELOCATING+*(.rela.gnu.linkonce.r*)}
116 .rel.data ${RELOCATING-0} :
119 ${RELOCATING+*(.rel.data.*)}
120 ${RELOCATING+*(.rel.gnu.linkonce.d*)}
122 .rela.data ${RELOCATING-0} :
125 ${RELOCATING+*(.rela.data.*)}
126 ${RELOCATING+*(.rela.gnu.linkonce.d*)}
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) }
139 /* Internal text space. */
140 .text ${RELOCATING-0} :
142 ${RELOCATING+. = ALIGN(2);
144 *(SORT_NONE(.init0)) /* Start here after reset. */
146 *(SORT_NONE(.init2)) /* Copy data loop */
148 *(SORT_NONE(.init4)) /* Clear bss */
150 *(SORT_NONE(.init6)) /* C++ constructors. */
153 *(SORT_NONE(.init9)) /* Call main(). */}
155 ${CONSTRUCTING+ __ctors_start = . ; }
156 ${CONSTRUCTING+ *(.ctors) }
157 ${CONSTRUCTING+ __ctors_end = . ; }
158 ${CONSTRUCTING+ __dtors_start = . ; }
159 ${CONSTRUCTING+ *(.dtors) }
160 ${CONSTRUCTING+ __dtors_end = . ; }
162 ${RELOCATING+. = ALIGN(2);
163 *(.lower.text.* .lower.text)
167 ${RELOCATING+. = ALIGN(2);
172 *(.either.text.* .either.text)
174 *(.upper.text.* .upper.text)
180 *(SORT_NONE(.fini6)) /* C++ destructors. */
186 *(SORT_NONE(.fini0)) /* Infinite loop after program termination. */
190 } ${RELOCATING+ > text}
192 .rodata ${RELOCATING-0} :
194 ${RELOCATING+. = ALIGN(2);
195 *(.lower.rodata.* .lower.rodata)
199 *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.* .const .const:*})
200 ${RELOCATING+*(.rodata1)
202 *(.either.rodata.*) *(.either.rodata)
204 *(.upper.rodata.* .upper.rodata)
209 KEEP (*(.gcc_except_table)) *(.gcc_except_table.*)
211 PROVIDE (__preinit_array_start = .);
212 KEEP (*(.preinit_array))
213 PROVIDE (__preinit_array_end = .);
215 PROVIDE (__init_array_start = .);
216 KEEP (*(SORT(.init_array.*)))
217 KEEP (*(.init_array))
218 PROVIDE (__init_array_end = .);
220 PROVIDE (__fini_array_start = .);
221 KEEP (*(.fini_array))
222 KEEP (*(SORT(.fini_array.*)))
223 PROVIDE (__fini_array_end = .);
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))
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
237 KEEP (*(EXCLUDE_FILE (*crtend*.o ) .ctors))
238 KEEP (*(SORT(.ctors.*)))
241 KEEP (*crtbegin*.o(.dtors))
242 KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors))
243 KEEP (*(SORT(.dtors.*)))
245 } ${RELOCATING+ > text}
247 .vectors ${RELOCATING-0} :
249 ${RELOCATING+ PROVIDE (__vectors_start = .) ; }
250 *(.vectors${RELOCATING+*})
251 ${RELOCATING+ _vectors_end = . ; }
252 } ${RELOCATING+ > vectors}
254 .data ${RELOCATING-0} :
256 ${RELOCATING+ PROVIDE (__data_start = .) ; }
257 ${RELOCATING+ PROVIDE (__datastart = .) ; }
258 ${RELOCATING+. = ALIGN(2);
261 *(.data.rel.ro.local) *(.data.rel.ro*)
265 *(.lower.data.* .lower.data)}
268 ${RELOCATING+*(.data.*)
270 KEEP (*(.gnu.linkonce.d.*personality*))
273 *(.either.data.* .either.data)
275 *(.upper.data.* .upper.data)
279 *(.sdata .sdata.* .gnu.linkonce.s.*)
282 } ${RELOCATING+ > data AT> text}
284 ${RELOCATING+__romdatastart = LOADADDR(.data);
285 __romdatacopysize = SIZEOF(.data);}
287 .bss ${RELOCATING-0}${RELOCATING+SIZEOF(.data) + ADDR(.data)} :
289 ${RELOCATING+. = ALIGN(2);}
290 ${RELOCATING+ PROVIDE (__bss_start = .); }
291 ${RELOCATING+ PROVIDE (__bssstart = .);
292 *(.lower.bss.* .lower.bss)
295 ${RELOCATING+*(.either.bss.* .either.bss)
296 *(.upper.bss.* .upper.bss)
298 PROVIDE (__bss_end = .);}
299 } ${RELOCATING+ > data}
300 ${RELOCATING+ PROVIDE (__bsssize = SIZEOF(.bss)); }
302 .noinit ${RELOCATING-0}${RELOCATING+SIZEOF(.bss) + ADDR(.bss)} :
304 ${RELOCATING+ PROVIDE (__noinit_start = .) ; }
306 ${RELOCATING+ PROVIDE (__noinit_end = .) ; }
307 } ${RELOCATING+ > data}
309 .persistent ${RELOCATING-0}${RELOCATING+SIZEOF(.noinit) + ADDR(.noinit)} :
311 ${RELOCATING+ PROVIDE (__persistent_start = .) ; }
313 ${RELOCATING+ PROVIDE (__persistent_end = .) ; }
314 } ${RELOCATING+ > data}
316 ${RELOCATING+ _end = . ; }
317 ${HEAP_SECTION_MSP430}
319 /* Stabs for profiling information*/
320 .profiler 0 : { *(.profiler) }
322 /* Stabs debugging sections. */
323 .stab 0 : { *(.stab) }
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) }
332 . $srcdir/scripttempl/DWARF.sc
334 test -n "${RELOCATING}" && cat <<EOF
335 .MSP430.attributes 0 :
337 KEEP (*(.MSP430.attributes))
338 KEEP (*(.gnu.attributes))
339 KEEP (*(__TI_build_attributes))
342 PROVIDE (__stack = ${STACK}) ;
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)) ;
347 PROVIDE (__subdevice_has_heap = ${GOT_HEAP_MSP-0}) ;