diff options
Diffstat (limited to 'lib/chibios-contrib/os/common/startup/MSP430X/compilers/GCC/ld/msp430fr6989.ld')
-rw-r--r-- | lib/chibios-contrib/os/common/startup/MSP430X/compilers/GCC/ld/msp430fr6989.ld | 437 |
1 files changed, 437 insertions, 0 deletions
diff --git a/lib/chibios-contrib/os/common/startup/MSP430X/compilers/GCC/ld/msp430fr6989.ld b/lib/chibios-contrib/os/common/startup/MSP430X/compilers/GCC/ld/msp430fr6989.ld new file mode 100644 index 000000000..06bacfecd --- /dev/null +++ b/lib/chibios-contrib/os/common/startup/MSP430X/compilers/GCC/ld/msp430fr6989.ld | |||
@@ -0,0 +1,437 @@ | |||
1 | /* This file supports MSP430FR6989 devices. */ | ||
2 | /* Version: 1.188 */ | ||
3 | /* ChibiOS linker script, for normal executables */ | ||
4 | |||
5 | OUTPUT_ARCH(msp430) | ||
6 | ENTRY(_start) | ||
7 | |||
8 | MEMORY { | ||
9 | TINYRAM : ORIGIN = 0x0006, LENGTH = 0x001A | ||
10 | BSL : ORIGIN = 0x1000, LENGTH = 0x0800 | ||
11 | RAM : ORIGIN = 0x1C00, LENGTH = 0x0800 /* END=0x23FF, size 2048 */ | ||
12 | INFOMEM : ORIGIN = 0x1800, LENGTH = 0x0200 /* END=0x19FF, size 512 as 4 128-byte segments */ | ||
13 | INFOA : ORIGIN = 0x1980, LENGTH = 0x0080 /* END=0x19FF, size 128 */ | ||
14 | INFOB : ORIGIN = 0x1900, LENGTH = 0x0080 /* END=0x197F, size 128 */ | ||
15 | INFOC : ORIGIN = 0x1880, LENGTH = 0x0080 /* END=0x18FF, size 128 */ | ||
16 | INFOD : ORIGIN = 0x1800, LENGTH = 0x0080 /* END=0x187F, size 128 */ | ||
17 | FRAM (rxw) : ORIGIN = 0x4400, LENGTH = 0xBB80 /* END=0xFF7F, size 48000 */ | ||
18 | HIFRAM (rxw) : ORIGIN = 0x00010000, LENGTH = 0x00013FFF | ||
19 | VECT1 : ORIGIN = 0xFF90, LENGTH = 0x0002 | ||
20 | VECT2 : ORIGIN = 0xFF92, LENGTH = 0x0002 | ||
21 | VECT3 : ORIGIN = 0xFF94, LENGTH = 0x0002 | ||
22 | VECT4 : ORIGIN = 0xFF96, LENGTH = 0x0002 | ||
23 | VECT5 : ORIGIN = 0xFF98, LENGTH = 0x0002 | ||
24 | VECT6 : ORIGIN = 0xFF9A, LENGTH = 0x0002 | ||
25 | VECT7 : ORIGIN = 0xFF9C, LENGTH = 0x0002 | ||
26 | VECT8 : ORIGIN = 0xFF9E, LENGTH = 0x0002 | ||
27 | VECT9 : ORIGIN = 0xFFA0, LENGTH = 0x0002 | ||
28 | VECT10 : ORIGIN = 0xFFA2, LENGTH = 0x0002 | ||
29 | VECT11 : ORIGIN = 0xFFA4, LENGTH = 0x0002 | ||
30 | VECT12 : ORIGIN = 0xFFA6, LENGTH = 0x0002 | ||
31 | VECT13 : ORIGIN = 0xFFA8, LENGTH = 0x0002 | ||
32 | VECT14 : ORIGIN = 0xFFAA, LENGTH = 0x0002 | ||
33 | VECT15 : ORIGIN = 0xFFAC, LENGTH = 0x0002 | ||
34 | VECT16 : ORIGIN = 0xFFAE, LENGTH = 0x0002 | ||
35 | VECT17 : ORIGIN = 0xFFB0, LENGTH = 0x0002 | ||
36 | VECT18 : ORIGIN = 0xFFB2, LENGTH = 0x0002 | ||
37 | VECT19 : ORIGIN = 0xFFB4, LENGTH = 0x0002 | ||
38 | VECT20 : ORIGIN = 0xFFB6, LENGTH = 0x0002 | ||
39 | VECT21 : ORIGIN = 0xFFB8, LENGTH = 0x0002 | ||
40 | VECT22 : ORIGIN = 0xFFBA, LENGTH = 0x0002 | ||
41 | VECT23 : ORIGIN = 0xFFBC, LENGTH = 0x0002 | ||
42 | VECT24 : ORIGIN = 0xFFBE, LENGTH = 0x0002 | ||
43 | VECT25 : ORIGIN = 0xFFC0, LENGTH = 0x0002 | ||
44 | VECT26 : ORIGIN = 0xFFC2, LENGTH = 0x0002 | ||
45 | VECT27 : ORIGIN = 0xFFC4, LENGTH = 0x0002 | ||
46 | VECT28 : ORIGIN = 0xFFC6, LENGTH = 0x0002 | ||
47 | VECT29 : ORIGIN = 0xFFC8, LENGTH = 0x0002 | ||
48 | VECT30 : ORIGIN = 0xFFCA, LENGTH = 0x0002 | ||
49 | VECT31 : ORIGIN = 0xFFCC, LENGTH = 0x0002 | ||
50 | VECT32 : ORIGIN = 0xFFCE, LENGTH = 0x0002 | ||
51 | VECT33 : ORIGIN = 0xFFD0, LENGTH = 0x0002 | ||
52 | VECT34 : ORIGIN = 0xFFD2, LENGTH = 0x0002 | ||
53 | VECT35 : ORIGIN = 0xFFD4, LENGTH = 0x0002 | ||
54 | VECT36 : ORIGIN = 0xFFD6, LENGTH = 0x0002 | ||
55 | VECT37 : ORIGIN = 0xFFD8, LENGTH = 0x0002 | ||
56 | VECT38 : ORIGIN = 0xFFDA, LENGTH = 0x0002 | ||
57 | VECT39 : ORIGIN = 0xFFDC, LENGTH = 0x0002 | ||
58 | VECT40 : ORIGIN = 0xFFDE, LENGTH = 0x0002 | ||
59 | VECT41 : ORIGIN = 0xFFE0, LENGTH = 0x0002 | ||
60 | VECT42 : ORIGIN = 0xFFE2, LENGTH = 0x0002 | ||
61 | VECT43 : ORIGIN = 0xFFE4, LENGTH = 0x0002 | ||
62 | VECT44 : ORIGIN = 0xFFE6, LENGTH = 0x0002 | ||
63 | VECT45 : ORIGIN = 0xFFE8, LENGTH = 0x0002 | ||
64 | VECT46 : ORIGIN = 0xFFEA, LENGTH = 0x0002 | ||
65 | VECT47 : ORIGIN = 0xFFEC, LENGTH = 0x0002 | ||
66 | VECT48 : ORIGIN = 0xFFEE, LENGTH = 0x0002 | ||
67 | VECT49 : ORIGIN = 0xFFF0, LENGTH = 0x0002 | ||
68 | VECT50 : ORIGIN = 0xFFF2, LENGTH = 0x0002 | ||
69 | VECT51 : ORIGIN = 0xFFF4, LENGTH = 0x0002 | ||
70 | VECT52 : ORIGIN = 0xFFF6, LENGTH = 0x0002 | ||
71 | VECT53 : ORIGIN = 0xFFF8, LENGTH = 0x0002 | ||
72 | VECT54 : ORIGIN = 0xFFFA, LENGTH = 0x0002 | ||
73 | VECT55 : ORIGIN = 0xFFFC, LENGTH = 0x0002 | ||
74 | RESETVEC : ORIGIN = 0xFFFE, LENGTH = 0x0002 | ||
75 | } | ||
76 | |||
77 | PHDRS { | ||
78 | vectors PT_LOAD ; | ||
79 | stack PT_LOAD ; | ||
80 | rodata PT_LOAD ; | ||
81 | data PT_LOAD ; | ||
82 | text PT_LOAD ; | ||
83 | upper_rodata PT_LOAD ; | ||
84 | upper_data PT_LOAD ; | ||
85 | upper_text PT_LOAD ; | ||
86 | } | ||
87 | |||
88 | SECTIONS | ||
89 | { | ||
90 | __interrupt_vector_1 : { KEEP (*(__interrupt_vector_1 )) } > VECT1 :vectors | ||
91 | __interrupt_vector_2 : { KEEP (*(__interrupt_vector_2 )) } > VECT2 | ||
92 | __interrupt_vector_3 : { KEEP (*(__interrupt_vector_3 )) } > VECT3 | ||
93 | __interrupt_vector_4 : { KEEP (*(__interrupt_vector_4 )) } > VECT4 | ||
94 | __interrupt_vector_5 : { KEEP (*(__interrupt_vector_5 )) } > VECT5 | ||
95 | __interrupt_vector_6 : { KEEP (*(__interrupt_vector_6 )) } > VECT6 | ||
96 | __interrupt_vector_7 : { KEEP (*(__interrupt_vector_7 )) } > VECT7 | ||
97 | __interrupt_vector_8 : { KEEP (*(__interrupt_vector_8 )) } > VECT8 | ||
98 | __interrupt_vector_9 : { KEEP (*(__interrupt_vector_9 )) } > VECT9 | ||
99 | __interrupt_vector_10 : { KEEP (*(__interrupt_vector_10)) } > VECT10 | ||
100 | __interrupt_vector_11 : { KEEP (*(__interrupt_vector_11)) } > VECT11 | ||
101 | __interrupt_vector_12 : { KEEP (*(__interrupt_vector_12)) } > VECT12 | ||
102 | __interrupt_vector_13 : { KEEP (*(__interrupt_vector_13)) } > VECT13 | ||
103 | __interrupt_vector_14 : { KEEP (*(__interrupt_vector_14)) } > VECT14 | ||
104 | __interrupt_vector_15 : { KEEP (*(__interrupt_vector_15)) } > VECT15 | ||
105 | __interrupt_vector_16 : { KEEP (*(__interrupt_vector_16)) } > VECT16 | ||
106 | __interrupt_vector_17 : { KEEP (*(__interrupt_vector_17)) } > VECT17 | ||
107 | __interrupt_vector_18 : { KEEP (*(__interrupt_vector_18)) } > VECT18 | ||
108 | __interrupt_vector_19 : { KEEP (*(__interrupt_vector_19)) } > VECT19 | ||
109 | __interrupt_vector_20 : { KEEP (*(__interrupt_vector_20)) } > VECT20 | ||
110 | __interrupt_vector_21 : { KEEP (*(__interrupt_vector_21)) } > VECT21 | ||
111 | __interrupt_vector_22 : { KEEP (*(__interrupt_vector_22)) } > VECT22 | ||
112 | __interrupt_vector_23 : { KEEP (*(__interrupt_vector_23)) } > VECT23 | ||
113 | __interrupt_vector_24 : { KEEP (*(__interrupt_vector_24)) } > VECT24 | ||
114 | __interrupt_vector_25 : { KEEP (*(__interrupt_vector_25)) } > VECT25 | ||
115 | __interrupt_vector_26 : { KEEP (*(__interrupt_vector_26)) } > VECT26 | ||
116 | __interrupt_vector_27 : { KEEP (*(__interrupt_vector_27)) } > VECT27 | ||
117 | __interrupt_vector_28 : { KEEP (*(__interrupt_vector_28)) KEEP (*(__interrupt_vector_aes256)) } > VECT28 | ||
118 | __interrupt_vector_29 : { KEEP (*(__interrupt_vector_29)) KEEP (*(__interrupt_vector_rtc)) } > VECT29 | ||
119 | __interrupt_vector_30 : { KEEP (*(__interrupt_vector_30)) KEEP (*(__interrupt_vector_lcd_c)) } > VECT30 | ||
120 | __interrupt_vector_31 : { KEEP (*(__interrupt_vector_31)) KEEP (*(__interrupt_vector_port4)) } > VECT31 | ||
121 | __interrupt_vector_32 : { KEEP (*(__interrupt_vector_32)) KEEP (*(__interrupt_vector_port3)) } > VECT32 | ||
122 | __interrupt_vector_33 : { KEEP (*(__interrupt_vector_33)) KEEP (*(__interrupt_vector_timer3_a1)) } > VECT33 | ||
123 | __interrupt_vector_34 : { KEEP (*(__interrupt_vector_34)) KEEP (*(__interrupt_vector_timer3_a0)) } > VECT34 | ||
124 | __interrupt_vector_35 : { KEEP (*(__interrupt_vector_35)) KEEP (*(__interrupt_vector_port2)) } > VECT35 | ||
125 | __interrupt_vector_36 : { KEEP (*(__interrupt_vector_36)) KEEP (*(__interrupt_vector_timer2_a1)) } > VECT36 | ||
126 | __interrupt_vector_37 : { KEEP (*(__interrupt_vector_37)) KEEP (*(__interrupt_vector_timer2_a0)) } > VECT37 | ||
127 | __interrupt_vector_38 : { KEEP (*(__interrupt_vector_38)) KEEP (*(__interrupt_vector_port1)) } > VECT38 | ||
128 | __interrupt_vector_39 : { KEEP (*(__interrupt_vector_39)) KEEP (*(__interrupt_vector_timer1_a1)) } > VECT39 | ||
129 | __interrupt_vector_40 : { KEEP (*(__interrupt_vector_40)) KEEP (*(__interrupt_vector_timer1_a0)) } > VECT40 | ||
130 | __interrupt_vector_41 : { KEEP (*(__interrupt_vector_41)) KEEP (*(__interrupt_vector_dma)) } > VECT41 | ||
131 | __interrupt_vector_42 : { KEEP (*(__interrupt_vector_42)) KEEP (*(__interrupt_vector_usci_b1)) } > VECT42 | ||
132 | __interrupt_vector_43 : { KEEP (*(__interrupt_vector_43)) KEEP (*(__interrupt_vector_usci_a1)) } > VECT43 | ||
133 | __interrupt_vector_44 : { KEEP (*(__interrupt_vector_44)) KEEP (*(__interrupt_vector_timer0_a1)) } > VECT44 | ||
134 | __interrupt_vector_45 : { KEEP (*(__interrupt_vector_45)) KEEP (*(__interrupt_vector_timer0_a0)) } > VECT45 | ||
135 | __interrupt_vector_46 : { KEEP (*(__interrupt_vector_46)) KEEP (*(__interrupt_vector_adc12)) } > VECT46 | ||
136 | __interrupt_vector_47 : { KEEP (*(__interrupt_vector_47)) KEEP (*(__interrupt_vector_usci_b0)) } > VECT47 | ||
137 | __interrupt_vector_48 : { KEEP (*(__interrupt_vector_48)) KEEP (*(__interrupt_vector_usci_a0)) } > VECT48 | ||
138 | __interrupt_vector_49 : { KEEP (*(__interrupt_vector_49)) KEEP (*(__interrupt_vector_escan_if)) } > VECT49 | ||
139 | __interrupt_vector_50 : { KEEP (*(__interrupt_vector_50)) KEEP (*(__interrupt_vector_wdt)) } > VECT50 | ||
140 | __interrupt_vector_51 : { KEEP (*(__interrupt_vector_51)) KEEP (*(__interrupt_vector_timer0_b1)) } > VECT51 | ||
141 | __interrupt_vector_52 : { KEEP (*(__interrupt_vector_52)) KEEP (*(__interrupt_vector_timer0_b0)) } > VECT52 | ||
142 | __interrupt_vector_53 : { KEEP (*(__interrupt_vector_53)) KEEP (*(__interrupt_vector_comp_e)) } > VECT53 | ||
143 | __interrupt_vector_54 : { KEEP (*(__interrupt_vector_54)) KEEP (*(__interrupt_vector_unmi)) } > VECT54 | ||
144 | __interrupt_vector_55 : { KEEP (*(__interrupt_vector_55)) KEEP (*(__interrupt_vector_sysnmi)) } > VECT55 | ||
145 | __reset_vector : | ||
146 | { | ||
147 | KEEP (*(__interrupt_vector_56)) | ||
148 | KEEP (*(__interrupt_vector_reset)) | ||
149 | KEEP (*(.resetvec)) | ||
150 | } > RESETVEC | ||
151 | |||
152 | .stack : | ||
153 | { | ||
154 | __main_thread_stack_base__ = .; | ||
155 | *(.stack) | ||
156 | . += __idle_stack_size__; | ||
157 | PROVIDE (__stack = .); | ||
158 | . = ALIGN(2); | ||
159 | __main_thread_stack_end__ = .; | ||
160 | } > FRAM :stack | ||
161 | |||
162 | .rodata : | ||
163 | { | ||
164 | . = ALIGN(2); | ||
165 | *(.plt) | ||
166 | *(.rodata .rodata.* .gnu.linkonce.r.* .const .const:*) | ||
167 | *(.rodata1) | ||
168 | *(.lower.rodata.* .lower.rodata) | ||
169 | KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) | ||
170 | PROVIDE (__preinit_array_start = .); | ||
171 | KEEP (*(.preinit_array)) | ||
172 | PROVIDE (__preinit_array_end = .); | ||
173 | PROVIDE (__init_array_start = .); | ||
174 | KEEP (*(SORT(.init_array.*))) | ||
175 | KEEP (*(.init_array)) | ||
176 | PROVIDE (__init_array_end = .); | ||
177 | PROVIDE (__fini_array_start = .); | ||
178 | KEEP (*(.fini_array)) | ||
179 | KEEP (*(SORT(.fini_array.*))) | ||
180 | PROVIDE (__fini_array_end = .); | ||
181 | } > FRAM :rodata | ||
182 | |||
183 | /* Note: This is a separate .rodata section for sections which are | ||
184 | read only but which older linkers treat as read-write. | ||
185 | This prevents older linkers from marking the entire .rodata | ||
186 | section as read-write. */ | ||
187 | .rodata2 : | ||
188 | { | ||
189 | . = ALIGN(2); | ||
190 | *(.eh_frame_hdr) | ||
191 | KEEP (*(.eh_frame)) | ||
192 | |||
193 | /* gcc uses crtbegin.o to find the start of the constructors, so | ||
194 | we make sure it is first. Because this is a wildcard, it | ||
195 | doesn't matter if the user does not actually link against | ||
196 | crtbegin.o; the linker won't look for a file to match a | ||
197 | wildcard. The wildcard also means that it doesn't matter which | ||
198 | directory crtbegin.o is in. */ | ||
199 | KEEP (*crtbegin*.o(.ctors)) | ||
200 | |||
201 | /* We don't want to include the .ctor section from from the | ||
202 | crtend.o file until after the sorted ctors. The .ctor section | ||
203 | from the crtend file contains the end of ctors marker and it | ||
204 | must be last */ | ||
205 | KEEP (*(EXCLUDE_FILE (*crtend*.o ) .ctors)) | ||
206 | KEEP (*(SORT(.ctors.*))) | ||
207 | KEEP (*(.ctors)) | ||
208 | |||
209 | KEEP (*crtbegin*.o(.dtors)) | ||
210 | KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors)) | ||
211 | KEEP (*(SORT(.dtors.*))) | ||
212 | KEEP (*(.dtors)) | ||
213 | } > FRAM | ||
214 | |||
215 | .data : | ||
216 | { | ||
217 | . = ALIGN(2); | ||
218 | PROVIDE (__datastart = .); | ||
219 | |||
220 | KEEP (*(.jcr)) | ||
221 | *(.data.rel.ro.local) *(.data.rel.ro*) | ||
222 | *(.dynamic) | ||
223 | |||
224 | *(.data .data.* .gnu.linkonce.d.*) | ||
225 | KEEP (*(.gnu.linkonce.d.*personality*)) | ||
226 | SORT(CONSTRUCTORS) | ||
227 | *(.data1) | ||
228 | *(.got.plt) *(.got) | ||
229 | |||
230 | /* We want the small data sections together, so single-instruction offsets | ||
231 | can access them all, and initialized data all before uninitialized, so | ||
232 | we can shorten the on-disk segment size. */ | ||
233 | . = ALIGN(2); | ||
234 | *(.sdata .sdata.* .gnu.linkonce.s.* D_2 D_1) | ||
235 | |||
236 | . = ALIGN(2); | ||
237 | *(.lower.data.* .lower.data) | ||
238 | . = ALIGN(2); | ||
239 | |||
240 | _edata = .; | ||
241 | PROVIDE (edata = .); | ||
242 | PROVIDE (__dataend = .); | ||
243 | } > FRAM :data | ||
244 | |||
245 | /* Note that crt0 assumes this is a multiple of two; all the | ||
246 | start/stop symbols are also assumed word-aligned. */ | ||
247 | PROVIDE(__romdatastart = LOADADDR(.data)); | ||
248 | PROVIDE (__romdatacopysize = SIZEOF(.data)); | ||
249 | |||
250 | .bss : | ||
251 | { | ||
252 | . = ALIGN(2); | ||
253 | PROVIDE (__bssstart = .); | ||
254 | *(.dynbss) | ||
255 | *(.sbss .sbss.*) | ||
256 | *(.bss .bss.* .gnu.linkonce.b.*) | ||
257 | *(.lower.bss.* .lower.bss) | ||
258 | . = ALIGN(2); | ||
259 | *(COMMON) | ||
260 | PROVIDE (__bssend = .); | ||
261 | } > FRAM | ||
262 | PROVIDE (__bsssize = SIZEOF(.bss)); | ||
263 | |||
264 | /* This section contains data that is not initialised during load | ||
265 | or application reset. */ | ||
266 | .noinit (NOLOAD) : | ||
267 | { | ||
268 | . = ALIGN(2); | ||
269 | PROVIDE (__noinit_start = .); | ||
270 | *(.noinit) | ||
271 | . = ALIGN(2); | ||
272 | PROVIDE (__noinit_end = .); | ||
273 | } > FRAM :text | ||
274 | |||
275 | _end = .; | ||
276 | PROVIDE (end = .); | ||
277 | |||
278 | .text : | ||
279 | { | ||
280 | PROVIDE (_start = .); | ||
281 | |||
282 | . = ALIGN(2); | ||
283 | KEEP (*(SORT(.crt_*))) | ||
284 | |||
285 | . = ALIGN(2); | ||
286 | KEEP (*(.lowtext)) | ||
287 | |||
288 | . = ALIGN(2); | ||
289 | *(.lower.text.* .lower.text) | ||
290 | |||
291 | . = ALIGN(2); | ||
292 | *(.text .stub .text.* .gnu.linkonce.t.* .text:*) | ||
293 | |||
294 | KEEP (*(.text.*personality*)) | ||
295 | /* .gnu.warning sections are handled specially by elf32.em. */ | ||
296 | *(.gnu.warning) | ||
297 | *(.interp .hash .dynsym .dynstr .gnu.version*) | ||
298 | PROVIDE (__etext = .); | ||
299 | PROVIDE (_etext = .); | ||
300 | PROVIDE (etext = .); | ||
301 | . = ALIGN(2); | ||
302 | KEEP (*(.init)) | ||
303 | KEEP (*(.fini)) | ||
304 | KEEP (*(.tm_clone_table)) | ||
305 | } > FRAM | ||
306 | |||
307 | .upper.rodata : | ||
308 | { | ||
309 | *(.upper.rodata.* .upper.rodata) | ||
310 | } > HIFRAM :upper_rodata | ||
311 | |||
312 | /* This section contains data that is initialised during load | ||
313 | but not on application reset. */ | ||
314 | .persistent : | ||
315 | { | ||
316 | . = ALIGN(2); | ||
317 | PROVIDE (__persistent_start = .); | ||
318 | *(.persistent) | ||
319 | . = ALIGN(2); | ||
320 | PROVIDE (__persistent_end = .); | ||
321 | } > HIFRAM :upper_data | ||
322 | |||
323 | .upper.data : | ||
324 | { | ||
325 | __upper_data_init = LOADADDR (.upper.data); | ||
326 | /* Status word. */ | ||
327 | SHORT(1); | ||
328 | __high_datastart = .; | ||
329 | *(.upper.data.* .upper.data) | ||
330 | __high_dataend = .; | ||
331 | } > HIFRAM | ||
332 | |||
333 | __rom_highdatacopysize = SIZEOF(.upper.data) - 2; | ||
334 | __rom_highdatastart = LOADADDR(.upper.data) + 2; | ||
335 | |||
336 | .upper.bss : | ||
337 | { | ||
338 | . = ALIGN(2); | ||
339 | __high_bssstart = .; | ||
340 | *(.upper.bss.* .upper.bss) | ||
341 | . = ALIGN(2); | ||
342 | __high_bssend = .; | ||
343 | __high_bsssize = SIZEOF(.upper.bss); | ||
344 | } > HIFRAM | ||
345 | |||
346 | .upper.text : | ||
347 | { | ||
348 | . = ALIGN(2); | ||
349 | *(.upper.text.* .upper.text) | ||
350 | } > HIFRAM :upper_text | ||
351 | |||
352 | /* We create this section so that "end" will always be in the | ||
353 | RAM region (matching .stack below), even if the .bss | ||
354 | section is empty. */ | ||
355 | .heap (NOLOAD) : | ||
356 | { | ||
357 | . = ALIGN(2); | ||
358 | __heap_start__ = .; | ||
359 | _end = __heap_start__; | ||
360 | PROVIDE (end = .); | ||
361 | KEEP (*(.heap)) | ||
362 | _end = .; | ||
363 | PROVIDE (end = .); | ||
364 | /* This word is here so that the section is not empty, and thus | ||
365 | not discarded by the linker. The actual value does not matter | ||
366 | and is ignored. */ | ||
367 | LONG(0); | ||
368 | __heap_end__ = .; | ||
369 | __HeapLimit = __heap_end__; | ||
370 | } > RAM | ||
371 | /* WARNING: Do not place anything in RAM here. | ||
372 | The heap section must be the last section in RAM and the stack | ||
373 | section must be placed at the very end of the RAM region. */ | ||
374 | |||
375 | .infoA : {} > INFOA /* MSP430 INFO FLASH MEMORY SEGMENTS */ | ||
376 | .infoB : {} > INFOB | ||
377 | .infoC : {} > INFOC | ||
378 | .infoD : {} > INFOD | ||
379 | |||
380 | /* The rest are all not normally part of the runtime image. */ | ||
381 | |||
382 | .MP430.attributes 0 : | ||
383 | { | ||
384 | KEEP (*(.MSP430.attributes)) | ||
385 | KEEP (*(.gnu.attributes)) | ||
386 | KEEP (*(__TI_build_attributes)) | ||
387 | } | ||
388 | |||
389 | /* Stabs debugging sections. */ | ||
390 | .stab 0 : { *(.stab) } | ||
391 | .stabstr 0 : { *(.stabstr) } | ||
392 | .stab.excl 0 : { *(.stab.excl) } | ||
393 | .stab.exclstr 0 : { *(.stab.exclstr) } | ||
394 | .stab.index 0 : { *(.stab.index) } | ||
395 | .stab.indexstr 0 : { *(.stab.indexstr) } | ||
396 | .comment 0 : { *(.comment) } | ||
397 | /* DWARF debug sections. | ||
398 | Symbols in the DWARF debugging sections are relative to the beginning | ||
399 | of the section so we begin them at 0. */ | ||
400 | /* DWARF 1. */ | ||
401 | .debug 0 : { *(.debug) } | ||
402 | .line 0 : { *(.line) } | ||
403 | /* GNU DWARF 1 extensions. */ | ||
404 | .debug_srcinfo 0 : { *(.debug_srcinfo) } | ||
405 | .debug_sfnames 0 : { *(.debug_sfnames) } | ||
406 | /* DWARF 1.1 and DWARF 2. */ | ||
407 | .debug_aranges 0 : { *(.debug_aranges) } | ||
408 | .debug_pubnames 0 : { *(.debug_pubnames) } | ||
409 | /* DWARF 2. */ | ||
410 | .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } | ||
411 | .debug_abbrev 0 : { *(.debug_abbrev) } | ||
412 | .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end ) } | ||
413 | .debug_frame 0 : { *(.debug_frame) } | ||
414 | .debug_str 0 : { *(.debug_str) } | ||
415 | .debug_loc 0 : { *(.debug_loc) } | ||
416 | .debug_macinfo 0 : { *(.debug_macinfo) } | ||
417 | /* SGI/MIPS DWARF 2 extensions. */ | ||
418 | .debug_weaknames 0 : { *(.debug_weaknames) } | ||
419 | .debug_funcnames 0 : { *(.debug_funcnames) } | ||
420 | .debug_typenames 0 : { *(.debug_typenames) } | ||
421 | .debug_varnames 0 : { *(.debug_varnames) } | ||
422 | /* DWARF 3 */ | ||
423 | .debug_pubtypes 0 : { *(.debug_pubtypes) } | ||
424 | .debug_ranges 0 : { *(.debug_ranges) } | ||
425 | /* DWARF Extension. */ | ||
426 | .debug_macro 0 : { *(.debug_macro) } | ||
427 | |||
428 | /DISCARD/ : { *(.note.GNU-stack) } | ||
429 | } | ||
430 | |||
431 | |||
432 | /****************************************************************************/ | ||
433 | /* Include peripherals memory map */ | ||
434 | /****************************************************************************/ | ||
435 | |||
436 | INCLUDE msp430fr6989_symbols.ld | ||
437 | |||