xref: /btstack/port/stm32-f4discovery-cc256x/STM32F407VGTx_FLASH.ld (revision 225f4ba4fe806afeda1ee8519bb5f4a8ce540af2)
1*225f4ba4SMatthias Ringwald/*
2*225f4ba4SMatthias Ringwald******************************************************************************
3*225f4ba4SMatthias Ringwald**
4*225f4ba4SMatthias Ringwald
5*225f4ba4SMatthias Ringwald**  File        : LinkerScript.ld
6*225f4ba4SMatthias Ringwald**
7*225f4ba4SMatthias Ringwald**  Author		: Auto-generated by Ac6 System Workbench
8*225f4ba4SMatthias Ringwald**
9*225f4ba4SMatthias Ringwald**  Abstract    : Linker script for STM32F407VGTx series
10*225f4ba4SMatthias Ringwald**                1024Kbytes FLASH and 128Kbytes RAM
11*225f4ba4SMatthias Ringwald**
12*225f4ba4SMatthias Ringwald**                Set heap size, stack size and stack location according
13*225f4ba4SMatthias Ringwald**                to application requirements.
14*225f4ba4SMatthias Ringwald**
15*225f4ba4SMatthias Ringwald**                Set memory bank area and size if external memory is used.
16*225f4ba4SMatthias Ringwald**
17*225f4ba4SMatthias Ringwald**  Target      : STMicroelectronics STM32
18*225f4ba4SMatthias Ringwald**
19*225f4ba4SMatthias Ringwald**  Distribution: The file is distributed “as is,” without any warranty
20*225f4ba4SMatthias Ringwald**                of any kind.
21*225f4ba4SMatthias Ringwald**
22*225f4ba4SMatthias Ringwald*****************************************************************************
23*225f4ba4SMatthias Ringwald** @attention
24*225f4ba4SMatthias Ringwald**
25*225f4ba4SMatthias Ringwald** <h2><center>&copy; COPYRIGHT(c) 2014 Ac6</center></h2>
26*225f4ba4SMatthias Ringwald**
27*225f4ba4SMatthias Ringwald** Redistribution and use in source and binary forms, with or without modification,
28*225f4ba4SMatthias Ringwald** are permitted provided that the following conditions are met:
29*225f4ba4SMatthias Ringwald**   1. Redistributions of source code must retain the above copyright notice,
30*225f4ba4SMatthias Ringwald**      this list of conditions and the following disclaimer.
31*225f4ba4SMatthias Ringwald**   2. Redistributions in binary form must reproduce the above copyright notice,
32*225f4ba4SMatthias Ringwald**      this list of conditions and the following disclaimer in the documentation
33*225f4ba4SMatthias Ringwald**      and/or other materials provided with the distribution.
34*225f4ba4SMatthias Ringwald**   3. Neither the name of Ac6 nor the names of its contributors
35*225f4ba4SMatthias Ringwald**      may be used to endorse or promote products derived from this software
36*225f4ba4SMatthias Ringwald**      without specific prior written permission.
37*225f4ba4SMatthias Ringwald**
38*225f4ba4SMatthias Ringwald** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
39*225f4ba4SMatthias Ringwald** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
40*225f4ba4SMatthias Ringwald** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
41*225f4ba4SMatthias Ringwald** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
42*225f4ba4SMatthias Ringwald** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
43*225f4ba4SMatthias Ringwald** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
44*225f4ba4SMatthias Ringwald** SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
45*225f4ba4SMatthias Ringwald** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
46*225f4ba4SMatthias Ringwald** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
47*225f4ba4SMatthias Ringwald** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
48*225f4ba4SMatthias Ringwald**
49*225f4ba4SMatthias Ringwald*****************************************************************************
50*225f4ba4SMatthias Ringwald*/
51*225f4ba4SMatthias Ringwald
52*225f4ba4SMatthias Ringwald/* Entry Point */
53*225f4ba4SMatthias RingwaldENTRY(Reset_Handler)
54*225f4ba4SMatthias Ringwald
55*225f4ba4SMatthias Ringwald/* Highest address of the user mode stack */
56*225f4ba4SMatthias Ringwald_estack = 0x20020000;    /* end of RAM */
57*225f4ba4SMatthias Ringwald/* Generate a link error if heap and stack don't fit into RAM */
58*225f4ba4SMatthias Ringwald_Min_Heap_Size = 0x200;      /* required amount of heap  */
59*225f4ba4SMatthias Ringwald_Min_Stack_Size = 0x400; /* required amount of stack */
60*225f4ba4SMatthias Ringwald
61*225f4ba4SMatthias Ringwald/* Specify the memory areas */
62*225f4ba4SMatthias RingwaldMEMORY
63*225f4ba4SMatthias Ringwald{
64*225f4ba4SMatthias RingwaldRAM (xrw)      : ORIGIN = 0x20000000, LENGTH = 128K
65*225f4ba4SMatthias RingwaldCCMRAM (rw)      : ORIGIN = 0x10000000, LENGTH = 64K
66*225f4ba4SMatthias RingwaldFLASH (rx)      : ORIGIN = 0x8000000, LENGTH = 1024K
67*225f4ba4SMatthias Ringwald}
68*225f4ba4SMatthias Ringwald
69*225f4ba4SMatthias Ringwald/* Define output sections */
70*225f4ba4SMatthias RingwaldSECTIONS
71*225f4ba4SMatthias Ringwald{
72*225f4ba4SMatthias Ringwald  /* The startup code goes first into FLASH */
73*225f4ba4SMatthias Ringwald  .isr_vector :
74*225f4ba4SMatthias Ringwald  {
75*225f4ba4SMatthias Ringwald    . = ALIGN(4);
76*225f4ba4SMatthias Ringwald    KEEP(*(.isr_vector)) /* Startup code */
77*225f4ba4SMatthias Ringwald    . = ALIGN(4);
78*225f4ba4SMatthias Ringwald  } >FLASH
79*225f4ba4SMatthias Ringwald
80*225f4ba4SMatthias Ringwald  /* The program code and other data goes into FLASH */
81*225f4ba4SMatthias Ringwald  .text :
82*225f4ba4SMatthias Ringwald  {
83*225f4ba4SMatthias Ringwald    . = ALIGN(4);
84*225f4ba4SMatthias Ringwald    *(.text)           /* .text sections (code) */
85*225f4ba4SMatthias Ringwald    *(.text*)          /* .text* sections (code) */
86*225f4ba4SMatthias Ringwald    *(.glue_7)         /* glue arm to thumb code */
87*225f4ba4SMatthias Ringwald    *(.glue_7t)        /* glue thumb to arm code */
88*225f4ba4SMatthias Ringwald    *(.eh_frame)
89*225f4ba4SMatthias Ringwald
90*225f4ba4SMatthias Ringwald    KEEP (*(.init))
91*225f4ba4SMatthias Ringwald    KEEP (*(.fini))
92*225f4ba4SMatthias Ringwald
93*225f4ba4SMatthias Ringwald    . = ALIGN(4);
94*225f4ba4SMatthias Ringwald    _etext = .;        /* define a global symbols at end of code */
95*225f4ba4SMatthias Ringwald  } >FLASH
96*225f4ba4SMatthias Ringwald
97*225f4ba4SMatthias Ringwald  /* Constant data goes into FLASH */
98*225f4ba4SMatthias Ringwald  .rodata :
99*225f4ba4SMatthias Ringwald  {
100*225f4ba4SMatthias Ringwald    . = ALIGN(4);
101*225f4ba4SMatthias Ringwald    *(.rodata)         /* .rodata sections (constants, strings, etc.) */
102*225f4ba4SMatthias Ringwald    *(.rodata*)        /* .rodata* sections (constants, strings, etc.) */
103*225f4ba4SMatthias Ringwald    . = ALIGN(4);
104*225f4ba4SMatthias Ringwald  } >FLASH
105*225f4ba4SMatthias Ringwald
106*225f4ba4SMatthias Ringwald  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH
107*225f4ba4SMatthias Ringwald  .ARM : {
108*225f4ba4SMatthias Ringwald    __exidx_start = .;
109*225f4ba4SMatthias Ringwald    *(.ARM.exidx*)
110*225f4ba4SMatthias Ringwald    __exidx_end = .;
111*225f4ba4SMatthias Ringwald  } >FLASH
112*225f4ba4SMatthias Ringwald
113*225f4ba4SMatthias Ringwald  .preinit_array     :
114*225f4ba4SMatthias Ringwald  {
115*225f4ba4SMatthias Ringwald    PROVIDE_HIDDEN (__preinit_array_start = .);
116*225f4ba4SMatthias Ringwald    KEEP (*(.preinit_array*))
117*225f4ba4SMatthias Ringwald    PROVIDE_HIDDEN (__preinit_array_end = .);
118*225f4ba4SMatthias Ringwald  } >FLASH
119*225f4ba4SMatthias Ringwald  .init_array :
120*225f4ba4SMatthias Ringwald  {
121*225f4ba4SMatthias Ringwald    PROVIDE_HIDDEN (__init_array_start = .);
122*225f4ba4SMatthias Ringwald    KEEP (*(SORT(.init_array.*)))
123*225f4ba4SMatthias Ringwald    KEEP (*(.init_array*))
124*225f4ba4SMatthias Ringwald    PROVIDE_HIDDEN (__init_array_end = .);
125*225f4ba4SMatthias Ringwald  } >FLASH
126*225f4ba4SMatthias Ringwald  .fini_array :
127*225f4ba4SMatthias Ringwald  {
128*225f4ba4SMatthias Ringwald    PROVIDE_HIDDEN (__fini_array_start = .);
129*225f4ba4SMatthias Ringwald    KEEP (*(SORT(.fini_array.*)))
130*225f4ba4SMatthias Ringwald    KEEP (*(.fini_array*))
131*225f4ba4SMatthias Ringwald    PROVIDE_HIDDEN (__fini_array_end = .);
132*225f4ba4SMatthias Ringwald  } >FLASH
133*225f4ba4SMatthias Ringwald
134*225f4ba4SMatthias Ringwald  /* used by the startup to initialize data */
135*225f4ba4SMatthias Ringwald  _sidata = LOADADDR(.data);
136*225f4ba4SMatthias Ringwald
137*225f4ba4SMatthias Ringwald  /* Initialized data sections goes into RAM, load LMA copy after code */
138*225f4ba4SMatthias Ringwald  .data :
139*225f4ba4SMatthias Ringwald  {
140*225f4ba4SMatthias Ringwald    . = ALIGN(4);
141*225f4ba4SMatthias Ringwald    _sdata = .;        /* create a global symbol at data start */
142*225f4ba4SMatthias Ringwald    *(.data)           /* .data sections */
143*225f4ba4SMatthias Ringwald    *(.data*)          /* .data* sections */
144*225f4ba4SMatthias Ringwald
145*225f4ba4SMatthias Ringwald    . = ALIGN(4);
146*225f4ba4SMatthias Ringwald    _edata = .;        /* define a global symbol at data end */
147*225f4ba4SMatthias Ringwald  } >RAM AT> FLASH
148*225f4ba4SMatthias Ringwald
149*225f4ba4SMatthias Ringwald  _siccmram = LOADADDR(.ccmram);
150*225f4ba4SMatthias Ringwald
151*225f4ba4SMatthias Ringwald  /* CCM-RAM section
152*225f4ba4SMatthias Ringwald  *
153*225f4ba4SMatthias Ringwald  * IMPORTANT NOTE!
154*225f4ba4SMatthias Ringwald  * If initialized variables will be placed in this section,
155*225f4ba4SMatthias Ringwald  * the startup code needs to be modified to copy the init-values.
156*225f4ba4SMatthias Ringwald  */
157*225f4ba4SMatthias Ringwald  .ccmram :
158*225f4ba4SMatthias Ringwald  {
159*225f4ba4SMatthias Ringwald    . = ALIGN(4);
160*225f4ba4SMatthias Ringwald    _sccmram = .;       /* create a global symbol at ccmram start */
161*225f4ba4SMatthias Ringwald    *(.ccmram)
162*225f4ba4SMatthias Ringwald    *(.ccmram*)
163*225f4ba4SMatthias Ringwald
164*225f4ba4SMatthias Ringwald    . = ALIGN(4);
165*225f4ba4SMatthias Ringwald    _eccmram = .;       /* create a global symbol at ccmram end */
166*225f4ba4SMatthias Ringwald  } >CCMRAM AT> FLASH
167*225f4ba4SMatthias Ringwald
168*225f4ba4SMatthias Ringwald
169*225f4ba4SMatthias Ringwald  /* Uninitialized data section */
170*225f4ba4SMatthias Ringwald  . = ALIGN(4);
171*225f4ba4SMatthias Ringwald  .bss :
172*225f4ba4SMatthias Ringwald  {
173*225f4ba4SMatthias Ringwald    /* This is used by the startup in order to initialize the .bss secion */
174*225f4ba4SMatthias Ringwald    _sbss = .;         /* define a global symbol at bss start */
175*225f4ba4SMatthias Ringwald    __bss_start__ = _sbss;
176*225f4ba4SMatthias Ringwald    *(.bss)
177*225f4ba4SMatthias Ringwald    *(.bss*)
178*225f4ba4SMatthias Ringwald    *(COMMON)
179*225f4ba4SMatthias Ringwald
180*225f4ba4SMatthias Ringwald    . = ALIGN(4);
181*225f4ba4SMatthias Ringwald    _ebss = .;         /* define a global symbol at bss end */
182*225f4ba4SMatthias Ringwald    __bss_end__ = _ebss;
183*225f4ba4SMatthias Ringwald  } >RAM
184*225f4ba4SMatthias Ringwald
185*225f4ba4SMatthias Ringwald  /* User_heap_stack section, used to check that there is enough RAM left */
186*225f4ba4SMatthias Ringwald  ._user_heap_stack :
187*225f4ba4SMatthias Ringwald  {
188*225f4ba4SMatthias Ringwald    . = ALIGN(8);
189*225f4ba4SMatthias Ringwald    PROVIDE ( end = . );
190*225f4ba4SMatthias Ringwald    PROVIDE ( _end = . );
191*225f4ba4SMatthias Ringwald    . = . + _Min_Heap_Size;
192*225f4ba4SMatthias Ringwald    . = . + _Min_Stack_Size;
193*225f4ba4SMatthias Ringwald    . = ALIGN(8);
194*225f4ba4SMatthias Ringwald  } >RAM
195*225f4ba4SMatthias Ringwald
196*225f4ba4SMatthias Ringwald
197*225f4ba4SMatthias Ringwald
198*225f4ba4SMatthias Ringwald  /* Remove information from the standard libraries */
199*225f4ba4SMatthias Ringwald  /DISCARD/ :
200*225f4ba4SMatthias Ringwald  {
201*225f4ba4SMatthias Ringwald    libc.a ( * )
202*225f4ba4SMatthias Ringwald    libm.a ( * )
203*225f4ba4SMatthias Ringwald    libgcc.a ( * )
204*225f4ba4SMatthias Ringwald  }
205*225f4ba4SMatthias Ringwald
206*225f4ba4SMatthias Ringwald  .ARM.attributes 0 : { *(.ARM.attributes) }
207*225f4ba4SMatthias Ringwald}
208*225f4ba4SMatthias Ringwald
209*225f4ba4SMatthias Ringwald
210