added k60d100m project
[adk-bluetooth-test.git] / examples / build / cw10gcc / bt_app_twrk60d100m / intflash.ld
blob354a19db349943470b0c1de270c34c36aee4598b
1 ENTRY(__boot)\r
2 \r
3 \r
4 /* \r
5 using both, gnulib & ewl symbols\r
6 _cfm - to keep vectors.c variables\r
7 __init_hardware - must be used from bsp.a, not from librt.a\r
8 */\r
9 EXTERN(_cfm __init_hardware)\r
12 MEMORY\r
13 {\r
14     vectorrom   (RX): ORIGIN = 0x00000000, LENGTH = 0x00000400\r
15     cfmprotrom  (R): ORIGIN = 0x00000400, LENGTH = 0x00000020\r
16     rom         (RX): ORIGIN = 0x00000420, LENGTH = 0x0007FBE0  /* Code + Const data */\r
17     ram         (RW): ORIGIN = 0x1FFF0000, LENGTH = 0x00020000  /* SRAM - RW data */\r
18     \r
19     /* kernel space starts after RAM variables (Location of MQX Kernel data + MQX heap) */\r
20     end_of_kd   (RW): ORIGIN = 0x2000FFF0, LENGTH = 0x00000000\r
21     \r
22     /* Boot stack reused by MQX Kernel data */\r
23     bstack      (RW): ORIGIN = 0x2000FA00, LENGTH = 0x00000200  /* Boot stack */\r
24     end_bstack  (RW): ORIGIN = 0x2000FC00, LENGTH = 0x00000000  /* Boot stack end address requires 4B alignment */\r
25 }\r
28 SECTIONS\r
29 {\r
30     __INTERNAL_SRAM_BASE  = 0x1FFF0000;\r
31     __INTERNAL_SRAM_SIZE  = 0x00020000;\r
32     \r
33     __INTERNAL_FLASH_BASE = 0x00000000;\r
34     __INTERNAL_FLASH_SIZE = 0x00080000;\r
35     \r
36     __INTERNAL_FLEXNVM_BASE = 0;\r
37     __INTERNAL_FLEXNVM_SIZE = 0;\r
38     \r
39     __EXTERNAL_MRAM_BASE  = 0x70000000;\r
40     __EXTERNAL_MRAM_SIZE  = 0x00080000;\r
41     __EXTERNAL_MRAM_ROM_BASE = 0x70000000;\r
42     __EXTERNAL_MRAM_ROM_SIZE = 0x00000000;\r
43     __EXTERNAL_MRAM_RAM_BASE = 0x70000000;\r
44     __EXTERNAL_MRAM_RAM_SIZE = 0x00080000;\r
45     \r
46     __EXTERNAL_LCD_BASE = 0x60000000;\r
47     __EXTERNAL_LCD_SIZE = 0x1FFFF;\r
48     __EXTERNAL_LCD_DC_BASE = 0x60010000;\r
49     \r
50     /* MQX link time configurations */\r
51     __DEFAULT_PROCESSOR_NUMBER = 1;\r
52     __DEFAULT_INTERRUPT_STACK_SIZE = 1024;\r
53     __KERNEL_DATA_VERIFY_ENABLE = 0;    /* Test SDRAM read/write */\r
54     \r
55     /* Flashx configurations */\r
56     __FLASHX_SECT_SIZE = 0x800;\r
57     \r
58     .vectors :\r
59     {\r
60         __vector_table = .;\r
61         __VECTOR_TABLE_ROM_START = __vector_table;\r
62         KEEP(*(.vectors_rom))\r
63         . = ALIGN (0x4); \r
64     } > vectorrom\r
65     \r
66     .cfmprotect :\r
67     {\r
68         KEEP(*(.cfmconfig))\r
69         . = ALIGN (0x4);\r
70     } > cfmprotrom\r
71     \r
72     .text :\r
73     {\r
74         *(KERNEL)\r
75         *(S_BOOT)\r
76         *(IPSUM)\r
77         *(.text*)\r
78         *(.eh_frame)\r
79         \r
80         KEEP (*(.init))\r
81         KEEP (*(.fini))\r
83         . = ALIGN(0x4);\r
84         *(.rodata*)\r
85         . = ALIGN(0x4);\r
86         *(.rdata*)\r
87         . = ALIGN(0x4);\r
88         *(.exception)\r
89         . = ALIGN(0x4);\r
90         __exception_table_start__ = .;\r
91         __exception_table_end__ = .;\r
92         __sinit__ = .;\r
93     } > rom\r
94     \r
95     .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) } > rom\r
96     .ARM : {\r
97         __exidx_start = .;\r
98         *(.ARM.exidx*)\r
99         __exidx_end = .;\r
100     } > rom\r
101     \r
102     .ctors :\r
103     {\r
104         __CTOR_LIST__ = .;\r
105         /* gcc uses crtbegin.o to find the start of\r
106         the constructors, so we make sure it is\r
107         first.  Because this is a wildcard, it\r
108         doesn't matter if the user does not\r
109         actually link against crtbegin.o; the\r
110         linker won't look for a file to match a\r
111         wildcard.  The wildcard also means that it\r
112         doesn't matter which directory crtbegin.o\r
113         is in.  */\r
114         KEEP (*crtbegin.o(.ctors))\r
115         /* We don't want to include the .ctor section from\r
116         from the crtend.o file until after the sorted ctors.\r
117         The .ctor section from the crtend file contains the\r
118         end of ctors marker and it must be last */\r
119         KEEP (*(EXCLUDE_FILE (*crtend.o ) .ctors))\r
120         KEEP (*(SORT(.ctors.*)))\r
121         KEEP (*(.ctors))\r
122         __CTOR_END__ = .;\r
123     } > rom\r
124     \r
125     .dtors :\r
126     {\r
127         __DTOR_LIST__ = .;\r
128         KEEP (*crtbegin.o(.dtors))\r
129         KEEP (*(EXCLUDE_FILE (*crtend.o ) .dtors))\r
130         KEEP (*(SORT(.dtors.*)))\r
131         KEEP (*(.dtors))\r
132         __DTOR_END__ = .;\r
133     } > rom\r
134     \r
135     .preinit_array :\r
136     {\r
137         PROVIDE_HIDDEN (__preinit_array_start = .);\r
138         KEEP (*(.preinit_array*))\r
139         PROVIDE_HIDDEN (__preinit_array_end = .);\r
140     } > rom\r
141     \r
142     .init_array :\r
143     {\r
144         PROVIDE_HIDDEN (__init_array_start = .);\r
145         KEEP (*(SORT(.init_array.*)))\r
146         KEEP (*(.init_array*))\r
147         PROVIDE_HIDDEN (__init_array_end = .);\r
148     } > rom\r
149     \r
150     .fini_array :\r
151     {\r
152         PROVIDE_HIDDEN (__fini_array_start = .);\r
153         KEEP (*(SORT(.fini_array.*)))\r
154         KEEP (*(.fini_array*))\r
155         PROVIDE_HIDDEN (__fini_array_end = .);\r
156     } > rom\r
158     /* create _etext symbol which keep \r
159     relocation(execution) address of "code" end */\r
160     _etext :\r
161     {\r
162         . = ALIGN(0x10);\r
163         _etext = .; \r
164     } > rom\r
165     \r
166     .data : AT(_etext)\r
167     {\r
168         . = ALIGN(128);\r
169         /* create _sdata symbol which keep \r
170         relocation(execution) address of data start */\r
171         _sdata = .;\r
172         __VECTOR_TABLE_RAM_START = .;\r
173         KEEP(*(.vectors_ram))\r
174         \r
175         . = ALIGN(512);\r
176         __BDT_BASE = .;\r
177         *(.usb_bdt)\r
178         __BDT_END = .;\r
179         \r
180         . = ALIGN(0x4);\r
181         *(.exception)\r
182         . = ALIGN(0x4);\r
183         __exception_table_start__ = .;\r
184         __exception_table_end__ = .;\r
185         \r
186         __START_DATA = .;\r
187         *(.data*)\r
188         __END_DATA = .;\r
189         \r
190         __START_SDATA = .;\r
191         *(.sdata*)\r
192         __END_SDATA = .;\r
193         \r
194         __SDA_BASE  = .;\r
195         __SDA_BASE_ = __SDA_BASE;\r
196         \r
197         . = ALIGN(0x10);\r
198         /* create _edata symbol which keep \r
199         relocation(execution) address of data end */\r
200         _edata = .;\r
201     } > ram\r
202     \r
203     .bss : \r
204     {\r
205         . = ALIGN(0x10);\r
206         __START_SBSS = .;\r
207         *(.sbss*)\r
208         *(SCOMMON)\r
209         __END_SBSS = .;\r
210         \r
211         __START_BSS = .;\r
212         __bss_start__ = __START_BSS;\r
213         *(.bss*)\r
214         *(COMMON)\r
215         __END_BSS = .;\r
216         __bss_end__ = __END_BSS;\r
217         . = ALIGN(0x10);\r
218     } > ram\r
219     \r
220     /* move "location counter" to next relocated address */\r
221     . = ALIGN(0x10);\r
222     \r
223    .kernel_data : \r
224     {\r
225         __KERNEL_DATA_START = ALIGN(0x10);\r
226     }\r
227     .end_of_kernel_data :\r
228     {\r
229         __KERNEL_DATA_END = .;\r
230         __KERNEL_AREA_END = .;\r
231     } > end_of_kd\r
232     \r
233     .boot_stack :\r
234     {\r
235         _stack_end = .;\r
236     } > bstack\r
237     \r
238     .end_of_boot_stack :\r
239     {\r
240         _stack_addr  = .;\r
241         _estack = _stack_addr;\r
242         __SP_INIT = _stack_addr;\r
243         __BOOT_STACK_ADDRESS = .;\r
244     } > end_bstack\r
245     \r
246     /* fill "__S_romp" table with memory region(s) to perform "rom to ram copy" */\r
247     _romp_at = _etext + SIZEOF(.data);\r
248     .romp : AT(_romp_at)\r
249     {\r
250         __S_romp = _romp_at;\r
251         LONG(_etext); /* source (rom) address */\r
252         LONG(_sdata); /* target (ram) address */\r
253         LONG(_edata - _sdata); /* size */\r
254         /* null terminated */\r
255         LONG(0);\r
256         LONG(0);\r
257         LONG(0);\r
258     }\r
259     \r
260     /* user flash area starts here */\r
261     _flashx_start = _etext + SIZEOF(.data) + SIZEOF(.romp);\r
262     \r
263     _flashx_start = __INTERNAL_FLASH_BASE + __FLASHX_SECT_SIZE;\r
264     /* flashx working area spans across the whole rest of Flash memory */\r
265     __FLASHX_START_ADDR = ((_flashx_start + __FLASHX_SECT_SIZE - 1) / __FLASHX_SECT_SIZE) * __FLASHX_SECT_SIZE;\r
266     __FLASHX_END_ADDR = __INTERNAL_FLASH_BASE + __INTERNAL_FLASH_SIZE;\r
267     \r
268     _end = .;\r