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>© 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