Remove warnings. ST lib Hal configuration.
[lwext4.git] / demos / stm32f429_disco / stm32f429.ld
1 /******************************************************************************\r
2 * author: Freddie Chopin, http://www.freddiechopin.info/\r
3 * file: STM32F4xxxG_rom.ld\r
4 * last change: 2012-03-15\r
5 *\r
6 * chip: STM32F4xxxG\r
7 * compiler: arm-none-eabi-gcc (GNU Tools for ARM Embedded Processors) 4.6.2\r
8 *       20110921 (release) [ARM/embedded-4_6-branch revision 182083]\r
9 *\r
10 * description:\r
11 * Linker script for STM32F4xxxG chip (1MB Flash, 112kB SRAM, 16kB aux SRAM,\r
12 * 64kB CCM RAM and 4kB backup SRAM). Only main block o SRAM (112kB) is used.\r
13 ******************************************************************************/\r
14 \r
15 SEARCH_DIR(.);\r
16 \r
17 /*\r
18 +=============================================================================+\r
19 | format configurations\r
20 +=============================================================================+\r
21 */\r
22 \r
23 OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm");\r
24 OUTPUT_ARCH(arm);\r
25 \r
26 /*\r
27 +=============================================================================+\r
28 | stacks sizes\r
29 +=============================================================================+\r
30 */\r
31 \r
32 /* Handler mode (core exceptions / interrupts) can use only main stack */\r
33 /* Thread mode can use main stack (default) or process stack - selected in CONTROL special register */\r
34 \r
35 __main_stack_size = 2048;\r
36 __process_stack_size = 2048;\r
37 \r
38 PROVIDE(__main_stack_size = __main_stack_size);\r
39 PROVIDE(__process_stack_size = __process_stack_size);\r
40 \r
41 /*\r
42 +=============================================================================+\r
43 | available memories definitions\r
44 +=============================================================================+\r
45 */\r
46 \r
47 MEMORY\r
48 {\r
49         rom (rx)                : org = 0x08000000, len = 2M\r
50         ram (rwx)               : org = 0x20000000, len = 112k\r
51         aux_ram (rwx)   : org = 0x2001C000, len = 16k\r
52         ccm_ram (rw)    : org = 0x10000000, len = 64k\r
53         bkp_ram (rwx)   : org = 0x40024000, len = 4k\r
54 }\r
55 \r
56 __rom_start = ORIGIN(rom);\r
57 __rom_size = LENGTH(rom);\r
58 __rom_end = __rom_start + __rom_size;\r
59 \r
60 __ram_start = ORIGIN(ram);\r
61 __ram_size = LENGTH(ram);\r
62 __ram_end = __ram_start + __ram_size;\r
63 \r
64 __aux_ram_start = ORIGIN(aux_ram);\r
65 __aux_ram_size = LENGTH(aux_ram);\r
66 __aux_ram_end = __aux_ram_start + __aux_ram_size;\r
67 \r
68 __ccm_ram_start = ORIGIN(ccm_ram);\r
69 __ccm_ram_size = LENGTH(ccm_ram);\r
70 __ccm_ram_end = __ccm_ram_start + __ccm_ram_size;\r
71 \r
72 __bkp_ram_start = ORIGIN(bkp_ram);\r
73 __bkp_ram_size = LENGTH(bkp_ram);\r
74 __bkp_ram_end = __bkp_ram_start + __bkp_ram_size;\r
75 \r
76 PROVIDE(__rom_start = __rom_start);\r
77 PROVIDE(__rom_size = __rom_size);\r
78 PROVIDE(__rom_end = __rom_end);\r
79 \r
80 PROVIDE(__ram_start = __ram_start);\r
81 PROVIDE(__ram_size = __ram_size);\r
82 PROVIDE(__ram_end = __ram_end);\r
83 \r
84 PROVIDE(__aux_ram_start = __aux_ram_start);\r
85 PROVIDE(__aux_ram_size = __aux_ram_size);\r
86 PROVIDE(__aux_ram_end = __aux_ram_end);\r
87 \r
88 PROVIDE(__ccm_ram_start = __ccm_ram_start);\r
89 PROVIDE(__ccm_ram_size = __ccm_ram_size);\r
90 PROVIDE(__ccm_ram_end = __ccm_ram_end);\r
91 \r
92 PROVIDE(__bkp_ram_start = __bkp_ram_start);\r
93 PROVIDE(__bkp_ram_size = __bkp_ram_size);\r
94 PROVIDE(__bkp_ram_end = __bkp_ram_end);\r
95 \r
96 /*\r
97 +=============================================================================+\r
98 | entry point\r
99 +=============================================================================+\r
100 */\r
101 \r
102 ENTRY(Reset_Handler);\r
103 \r
104 /*\r
105 +=============================================================================+\r
106 | put data in sections\r
107 +=============================================================================+\r
108 */\r
109 \r
110 SECTIONS\r
111 {\r
112         .text :\r
113         {\r
114                 . = ALIGN(4);\r
115                 __text_start = .;\r
116                 PROVIDE(__text_start = __text_start);\r
117 \r
118                 . = ALIGN(4);\r
119                 KEEP(*(.vectors));\r
120                 . = ALIGN(4);\r
121                 *(.text .text.* .gnu.linkonce.t.*);\r
122                 . = ALIGN(4);\r
123                 *(.glue_7t .glue_7);\r
124                 . = ALIGN(4);\r
125                 *(.rodata .rodata.* .gnu.linkonce.r.*);\r
126 \r
127                 . = ALIGN(4);\r
128                 *(.ARM.extab* .gnu.linkonce.armextab.*);        /* exception unwinding information */\r
129                 . = ALIGN(4);\r
130                 *(.gcc_except_table);                                           /* information used for stack unwinding during exception */\r
131                 . = ALIGN(4);\r
132                 *(.eh_frame_hdr);                                                       /* additional information about .ex_frame section */\r
133                 . = ALIGN(4);\r
134                 *(.eh_frame);                                                           /* information used for stack unwinding during exception */\r
135 \r
136                 . = ALIGN(4);\r
137                 KEEP(*(.init));\r
138                 . = ALIGN(4);\r
139                 __preinit_array_start = .;\r
140                 KEEP(*(.preinit_array));\r
141                 . = ALIGN(4);\r
142                 __preinit_array_end = .;\r
143                 __init_array_start = .;\r
144                 KEEP(*(SORT(.init_array.*)));\r
145                 . = ALIGN(4);\r
146                 KEEP(*(.init_array));\r
147                 . = ALIGN(4);\r
148                 __init_array_end = .;\r
149                 KEEP(*(.fini));\r
150                 . = ALIGN(4);\r
151                 __fini_array_start = .;\r
152                 KEEP(*(.fini_array));\r
153                 . = ALIGN(4);\r
154                 KEEP(*(SORT(.fini_array.*)));\r
155                 . = ALIGN(4);\r
156                 __fini_array_end = .;\r
157 \r
158                 . = ALIGN(4);\r
159                 __text_end = .;\r
160                 PROVIDE(__text_end = __text_end);\r
161         } > rom AT > rom\r
162 \r
163         . = ALIGN(4);\r
164         __exidx_start = .;\r
165         PROVIDE(__exidx_start = __exidx_start);\r
166 \r
167         .ARM.exidx :\r
168         {\r
169                 *(.ARM.exidx* .gnu.linkonce.armexidx.*);\r
170         } > rom AT > rom                                                                /* index entries for section unwinding */\r
171 \r
172         . = ALIGN(4);\r
173         __exidx_end = .;\r
174         PROVIDE(__exidx_end = __exidx_end);\r
175 \r
176         .data :\r
177         {\r
178                 . = ALIGN(4);\r
179                 __data_init_start = LOADADDR (.data);\r
180                 PROVIDE(__data_init_start = __data_init_start);\r
181                 __data_start = .;\r
182                 PROVIDE(__data_start = __data_start);\r
183 \r
184                 . = ALIGN(4);\r
185                 *(.data .data.* .gnu.linkonce.d.*)\r
186 \r
187                 . = ALIGN(4);\r
188                 __data_end = .;\r
189                 PROVIDE(__data_end = __data_end);\r
190         } > ram AT > rom\r
191 \r
192         .bss :\r
193         {\r
194                 . = ALIGN(4);\r
195                 __bss_start = .;\r
196                 PROVIDE(__bss_start = __bss_start);\r
197 \r
198                 . = ALIGN(4);\r
199                 *(.bss .bss.* .gnu.linkonce.b.*)\r
200                 . = ALIGN(4);\r
201                 *(COMMON);\r
202 \r
203                 . = ALIGN(4);\r
204                 __bss_end = .;\r
205                 PROVIDE(__bss_end = __bss_end);\r
206         } > ram AT > ram\r
207 \r
208         .stack :\r
209         {\r
210                 . = ALIGN(8);\r
211                 __stack_start = .;\r
212                 PROVIDE(__stack_start = __stack_start);\r
213 \r
214                 . = ALIGN(8);\r
215                 __main_stack_start = .;\r
216                 PROVIDE(__main_stack_start = __main_stack_start);\r
217 \r
218                 . += __main_stack_size;\r
219 \r
220                 . = ALIGN(8);\r
221                 __main_stack_end = .;\r
222                 PROVIDE(__main_stack_end = __main_stack_end);\r
223 \r
224                 . = ALIGN(8);\r
225                 __process_stack_start = .;\r
226                 PROVIDE(__process_stack_start = __process_stack_start);\r
227 \r
228                 . += __process_stack_size;\r
229 \r
230                 . = ALIGN(8);\r
231                 __process_stack_end = .;\r
232                 PROVIDE(__process_stack_end = __process_stack_end);\r
233 \r
234                 . = ALIGN(8);\r
235                 __stack_end = .;\r
236                 PROVIDE(__stack_end = __stack_end);\r
237         } > ram AT > ram\r
238 \r
239         . = ALIGN(4);\r
240         __heap_start = .;\r
241         PROVIDE(__heap_start = __heap_start);\r
242 \r
243         . = ALIGN(4);\r
244         __heap_end = __ram_end;\r
245         PROVIDE(__heap_end = __heap_end);\r
246 \r
247         .stab                           0 (NOLOAD) : { *(.stab) }\r
248         .stabstr                        0 (NOLOAD) : { *(.stabstr) }\r
249         /* DWARF debug sections.\r
250         * Symbols in the DWARF debugging sections are relative to the beginning\r
251         * of the section so we begin them at 0. */\r
252         /* DWARF 1 */\r
253         .debug                          0 : { *(.debug) }\r
254         .line                           0 : { *(.line) }\r
255         /* GNU DWARF 1 extensions */\r
256         .debug_srcinfo          0 : { *(.debug_srcinfo) }\r
257         .debug_sfnames          0 : { *(.debug_sfnames) }\r
258         /* DWARF 1.1 and DWARF 2 */\r
259         .debug_aranges          0 : { *(.debug_aranges) }\r
260         .debug_pubnames         0 : { *(.debug_pubnames) }\r
261         /* DWARF 2 */\r
262         .debug_info                     0 : { *(.debug_info .gnu.linkonce.wi.*) }\r
263         .debug_abbrev           0 : { *(.debug_abbrev) }\r
264         .debug_line                     0 : { *(.debug_line) }\r
265         .debug_frame            0 : { *(.debug_frame) }\r
266         .debug_str                      0 : { *(.debug_str) }\r
267         .debug_loc                      0 : { *(.debug_loc) }\r
268         .debug_macinfo          0 : { *(.debug_macinfo) }\r
269         /* SGI/MIPS DWARF 2 extensions */\r
270         .debug_weaknames        0 : { *(.debug_weaknames) }\r
271         .debug_funcnames        0 : { *(.debug_funcnames) }\r
272         .debug_typenames        0 : { *(.debug_typenames) }\r
273         .debug_varnames         0 : { *(.debug_varnames) }\r
274 \r
275         .note.gnu.arm.ident     0 : { KEEP(*(.note.gnu.arm.ident)) }\r
276         .ARM.attributes         0 : { KEEP(*(.ARM.attributes)) }\r
277         /DISCARD/                               : { *(.note.GNU-stack) }\r
278 }\r
279 \r
280 PROVIDE(__text_size = __text_end - __text_start);\r
281 PROVIDE(__exidx_size = __exidx_end - __exidx_start);\r
282 PROVIDE(__data_size = __data_end - __data_start);\r
283 PROVIDE(__bss_size = __bss_end - __bss_start);\r
284 PROVIDE(__stack_size = __stack_end - __stack_start);\r
285 PROVIDE(__heap_size = __heap_end - __heap_start);\r
286 \r
287 /******************************************************************************\r
288 * END OF FILE\r
289 ******************************************************************************/\r