]> git.sur5r.net Git - openocd/blob - contrib/loaders/flash/msp432/msp432e4x/msp432e4x.lds
flash/nor: add support for TI MSP432 devices
[openocd] / contrib / loaders / flash / msp432 / msp432e4x / msp432e4x.lds
1 /******************************************************************************
2 *
3 * Copyright (C) 2017-2018 Texas Instruments Incorporated - http://www.ti.com/
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 *  Redistributions of source code must retain the above copyright
10 *  notice, this list of conditions and the following disclaimer.
11 *
12 *  Redistributions in binary form must reproduce the above copyright
13 *  notice, this list of conditions and the following disclaimer in the
14 *  documentation and/or other materials provided with the
15 *  distribution.
16 *
17 *  Neither the name of Texas Instruments Incorporated nor the names of
18 *  its contributors may be used to endorse or promote products derived
19 *  from this software without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 *
33 ******************************************************************************/
34
35 MEMORY {
36         MAIN_FLASH (RX) : ORIGIN = 0x00000000, LENGTH = 0x00100000
37         SRAM_CODE_0(RWX): ORIGIN = 0x20000000, LENGTH = 0x00000110
38         SRAM_CODE_1(RWX): ORIGIN = 0x20000110, LENGTH = 0x00000030
39         SRAM_CODE_2(RWX): ORIGIN = 0x20000150, LENGTH = 0x00000040
40         SRAM_CODE_3(RWX): ORIGIN = 0x20000190, LENGTH = 0x00000F70
41         SRAM_CODE_4(RWX): ORIGIN = 0x20001170, LENGTH = 0x00000200
42         SRAM_DATA  (RW) : ORIGIN = 0x20002000, LENGTH = 0x00001000
43 }
44
45 REGION_ALIAS("REGION_INTVECT", SRAM_CODE_0);
46 REGION_ALIAS("REGION_RESET", SRAM_CODE_1);
47 REGION_ALIAS("REGION_DESCRIPTOR", SRAM_CODE_2);
48 REGION_ALIAS("REGION_TEXT", SRAM_CODE_3);
49 REGION_ALIAS("REGION_BSS", SRAM_CODE_3);
50 REGION_ALIAS("REGION_DATA", SRAM_DATA);
51 REGION_ALIAS("REGION_STACK", SRAM_CODE_4);
52 REGION_ALIAS("REGION_HEAP", SRAM_DATA);
53 REGION_ALIAS("REGION_ARM_EXIDX", SRAM_CODE_3);
54 REGION_ALIAS("REGION_ARM_EXTAB", SRAM_CODE_3);
55
56 SECTIONS {
57         /* section for the interrupt vector area */
58         .intvecs : {
59                 KEEP (*(.intvecs))
60         } > REGION_INTVECT
61
62         PROVIDE (_vtable_base_address =
63                 DEFINED(_vtable_base_address) ? _vtable_base_address : 0x20000000);
64
65         .vtable (_vtable_base_address) : AT (_vtable_base_address) {
66                 KEEP (*(.vtable))
67         } > REGION_DATA
68
69         .descriptor :{
70                 FILL(0x00000000);
71                 . = ORIGIN(REGION_DESCRIPTOR) + LENGTH(REGION_DESCRIPTOR) - 1;
72                 BYTE(0x00);
73                 __ROM_AT = .;
74         } > REGION_DESCRIPTOR
75
76         .reset : {
77                 KEEP(*(.reset))
78         } > REGION_RESET AT> REGION_RESET
79
80         .text : {
81                 CREATE_OBJECT_SYMBOLS
82                 KEEP (*(.text))
83                 *(.text.*)
84                 . = ALIGN(0x4);
85                 KEEP (*(.ctors))
86                 . = ALIGN(0x4);
87                 KEEP (*(.dtors))
88                 . = ALIGN(0x4);
89                 __init_array_start = .;
90                 KEEP (*(.init_array*))
91                 __init_array_end = .;
92                 KEEP (*(.init))
93                 KEEP (*(.fini*))
94         } > REGION_TEXT AT> REGION_TEXT
95
96         .rodata : {
97                 *(.rodata)
98                 *(.rodata.*)
99         } > REGION_TEXT AT> REGION_TEXT
100
101         .ARM.exidx : {
102                 __exidx_start = .;
103                 *(.ARM.exidx* .gnu.linkonce.armexidx.*)
104                 __exidx_end = .;
105         } > REGION_ARM_EXIDX AT> REGION_ARM_EXIDX
106
107         .ARM.extab : {
108                 KEEP (*(.ARM.extab* .gnu.linkonce.armextab.*))
109         } > REGION_ARM_EXTAB AT> REGION_ARM_EXTAB
110
111         __etext = .;
112
113         .data : {
114                 __data_load__ = LOADADDR (.data);
115                 __data_start__ = .;
116                 KEEP (*(.data))
117                 KEEP (*(.data*))
118                 . = ALIGN (4);
119                 __data_end__ = .;
120         } > REGION_DATA AT> REGION_TEXT
121
122         .bss : {
123                 __bss_start__ = .;
124                 *(.shbss)
125                 KEEP (*(.bss))
126                 *(.bss.*)
127                 *(COMMON)
128                 . = ALIGN (4);
129                 __bss_end__ = .;
130         } > REGION_BSS AT> REGION_BSS
131
132         .heap : {
133                 __heap_start__ = .;
134                 end = __heap_start__;
135                 _end = end;
136                 __end = end;
137                 KEEP (*(.heap))
138                 __heap_end__ = .;
139                 __HeapLimit = __heap_end__;
140         } > REGION_HEAP AT> REGION_HEAP
141
142         .stack (NOLOAD) : ALIGN(0x8) {
143                 _stack = .;
144                 KEEP(*(.stack))
145         } > REGION_STACK AT> REGION_STACK
146
147         __stack_top = ORIGIN(REGION_STACK) + LENGTH(REGION_STACK);
148         PROVIDE(__stack = __stack_top);
149 }