Mercurial > public > ostc4
comparison Small_CPU/CPU2-RTE.ld @ 38:5f11787b4f42
include in ostc4 repository
author | heinrichsweikamp |
---|---|
date | Sat, 28 Apr 2018 11:52:34 +0200 |
parents | |
children | da86a7adc4fa |
comparison
equal
deleted
inserted
replaced
37:ccc45c0e1ea2 | 38:5f11787b4f42 |
---|---|
1 /* ---------------------------------------------------------------------------- */ | |
2 /* Em::Blocks embedded development Support */ | |
3 /* ---------------------------------------------------------------------------- */ | |
4 /* Copyright (c) 2014, EmBlocks */ | |
5 /* */ | |
6 /* All rights reserved. */ | |
7 /* */ | |
8 /* Redistribution and use in source and binary forms, with or without */ | |
9 /* modification, are permitted provided that the following condition is met: */ | |
10 /* */ | |
11 /* - Redistributions of source code must retain the above copyright notice, */ | |
12 /* this list of conditions and the disclaimer below. */ | |
13 /* */ | |
14 /* EmBlocks's name may not be used to endorse or promote products derived from */ | |
15 /* this software without specific prior written permission. */ | |
16 /* */ | |
17 /* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY EBLOCKS "AS IS" AND ANY EXPRESS OR */ | |
18 /* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ | |
19 /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE */ | |
20 /* DISCLAIMED. IN NO EVENT SHALL EMBLOCKS BE LIABLE FOR ANY DIRECT, INDIRECT, */ | |
21 /* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT */ | |
22 /* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ | |
23 /* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF */ | |
24 /* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ | |
25 /* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ | |
26 /* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ | |
27 /* ---------------------------------------------------------------------------- */ | |
28 | |
29 /*------------------------------------------------------------------------------ | |
30 * Linker script for running in internal FLASH on the STM32F401RE | |
31 *----------------------------------------------------------------------------*/ | |
32 | |
33 OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") | |
34 OUTPUT_ARCH(arm) | |
35 SEARCH_DIR(.) | |
36 | |
37 /* Memory Spaces Definitions */ | |
38 MEMORY | |
39 { | |
40 ROM (rx) : ORIGIN = 0x08000000, LENGTH = 512K /* 80000 */ | |
41 RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 96K | |
42 } | |
43 /* Linker script to place sections and symbol values. Should be used together | |
44 * with other linker script that defines memory regions FLASH and RAM. | |
45 * It references following symbols, which must be defined in code: | |
46 * Reset_Handler : Entry of reset handler | |
47 * | |
48 * It defines following symbols, which code can use without definition: | |
49 * __exidx_start | |
50 * __exidx_end | |
51 * __etext | |
52 * __data_start__ | |
53 * __preinit_array_start | |
54 * __preinit_array_end | |
55 * __init_array_start | |
56 * __init_array_end | |
57 * __fini_array_start | |
58 * __fini_array_end | |
59 * __data_end__ | |
60 * __bss_start__ | |
61 * __bss_end__ | |
62 * __end__ | |
63 * end | |
64 * __HeapLimit | |
65 * __StackLimit | |
66 * __StackTop | |
67 * __stack | |
68 */ | |
69 | |
70 | |
71 SECTIONS | |
72 { | |
73 /* Place FirmwareData at absolute address */ | |
74 .firmware_data 0x08005000: | |
75 { | |
76 cpu2_FirmwareData = 0x08005000; | |
77 } > ROM | |
78 | |
79 .text ORIGIN(ROM) : | |
80 { | |
81 KEEP(*(.isr_vector)) | |
82 *(.text*) | |
83 | |
84 KEEP(*(.init)) | |
85 KEEP(*(.fini)) | |
86 | |
87 /* .ctors */ | |
88 *crtbegin.o(.ctors) | |
89 *crtbegin?.o(.ctors) | |
90 *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) | |
91 *(SORT(.ctors.*)) | |
92 *(.ctors) | |
93 | |
94 /* .dtors */ | |
95 *crtbegin.o(.dtors) | |
96 *crtbegin?.o(.dtors) | |
97 *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) | |
98 *(SORT(.dtors.*)) | |
99 *(.dtors) | |
100 | |
101 *(.rodata*) | |
102 | |
103 KEEP(*(.eh_frame*)) | |
104 } > ROM | |
105 | |
106 .ARM.extab : | |
107 { | |
108 *(.ARM.extab* .gnu.linkonce.armextab.*) | |
109 } > ROM | |
110 | |
111 __exidx_start = .; | |
112 .ARM.exidx : | |
113 { | |
114 *(.ARM.exidx* .gnu.linkonce.armexidx.*) | |
115 } > ROM | |
116 __exidx_end = .; | |
117 | |
118 __etext = .; | |
119 | |
120 .data : AT (__etext) | |
121 { | |
122 __data_start__ = .; | |
123 *(vtable) | |
124 *(.data*) | |
125 | |
126 . = ALIGN(4); | |
127 /* preinit data */ | |
128 PROVIDE_HIDDEN (__preinit_array_start = .); | |
129 KEEP(*(.preinit_array)) | |
130 PROVIDE_HIDDEN (__preinit_array_end = .); | |
131 | |
132 . = ALIGN(4); | |
133 /* init data */ | |
134 PROVIDE_HIDDEN (__init_array_start = .); | |
135 KEEP(*(SORT(.init_array.*))) | |
136 KEEP(*(.init_array)) | |
137 PROVIDE_HIDDEN (__init_array_end = .); | |
138 | |
139 | |
140 . = ALIGN(4); | |
141 /* finit data */ | |
142 PROVIDE_HIDDEN (__fini_array_start = .); | |
143 KEEP(*(SORT(.fini_array.*))) | |
144 KEEP(*(.fini_array)) | |
145 PROVIDE_HIDDEN (__fini_array_end = .); | |
146 | |
147 . = ALIGN(4); | |
148 /* All data end */ | |
149 __data_end__ = .; | |
150 | |
151 } > RAM | |
152 | |
153 .bss (NOLOAD): | |
154 { | |
155 __bss_start__ = .; | |
156 *(.bss*) | |
157 *(COMMON) | |
158 __bss_end__ = .; | |
159 } > RAM | |
160 | |
161 .heap (NOLOAD): | |
162 { | |
163 __end__ = .; | |
164 end = __end__; | |
165 *(.heap*) | |
166 __HeapLimit = .; | |
167 } > RAM | |
168 | |
169 /* .stack_dummy section doesn't contains any symbols. It is only | |
170 * used for linker to calculate size of stack sections, and assign | |
171 * values to stack symbols later */ | |
172 .stack_dummy (NOLOAD): | |
173 { | |
174 *(.stack) | |
175 } > RAM | |
176 | |
177 /* Set stack top to end of RAM, and stack limit move down by | |
178 * size of stack_dummy section */ | |
179 __StackTop = ORIGIN(RAM) + LENGTH(RAM); | |
180 __StackLimit = __StackTop - SIZEOF(.stack_dummy); | |
181 PROVIDE(__stack = __StackTop); | |
182 | |
183 /* Check if data + heap + stack exceeds RAM limit */ | |
184 ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") | |
185 } |