xref: /aosp_15_r20/external/ms-tpm-20-ref/Samples/Nucleo-TPM/L476RG/STM32L476RG_FLASH.ld (revision 5c591343844d1f9da7da26467c4bf7efc8a7a413)
1*5c591343SA. Cody Schuffelen/*
2*5c591343SA. Cody Schuffelen*****************************************************************************
3*5c591343SA. Cody Schuffelen**
4*5c591343SA. Cody Schuffelen
5*5c591343SA. Cody Schuffelen**  File        : stm32_flash.ld
6*5c591343SA. Cody Schuffelen**
7*5c591343SA. Cody Schuffelen**  Abstract    : Linker script for STM32L476RG Device with
8*5c591343SA. Cody Schuffelen**                1024KByte FLASH, 128KByte RAM
9*5c591343SA. Cody Schuffelen**
10*5c591343SA. Cody Schuffelen**                Set heap size, stack size and stack location according
11*5c591343SA. Cody Schuffelen**                to application requirements.
12*5c591343SA. Cody Schuffelen**
13*5c591343SA. Cody Schuffelen**                Set memory bank area and size if external memory is used.
14*5c591343SA. Cody Schuffelen**
15*5c591343SA. Cody Schuffelen**  Target      : STMicroelectronics STM32
16*5c591343SA. Cody Schuffelen**
17*5c591343SA. Cody Schuffelen**  Environment : Atollic TrueSTUDIO(R)
18*5c591343SA. Cody Schuffelen**
19*5c591343SA. Cody Schuffelen**  Distribution: The file is distributed as is, without any warranty
20*5c591343SA. Cody Schuffelen**                of any kind.
21*5c591343SA. Cody Schuffelen**
22*5c591343SA. Cody Schuffelen**  (c)Copyright Atollic AB.
23*5c591343SA. Cody Schuffelen**  You may use this file as-is or modify it according to the needs of your
24*5c591343SA. Cody Schuffelen**  project. This file may only be built (assembled or compiled and linked)
25*5c591343SA. Cody Schuffelen**  using the Atollic TrueSTUDIO(R) product. The use of this file together
26*5c591343SA. Cody Schuffelen**  with other tools than Atollic TrueSTUDIO(R) is not permitted.
27*5c591343SA. Cody Schuffelen**
28*5c591343SA. Cody Schuffelen*****************************************************************************
29*5c591343SA. Cody Schuffelen*/
30*5c591343SA. Cody Schuffelen
31*5c591343SA. Cody Schuffelen/* Entry Point */
32*5c591343SA. Cody SchuffelenENTRY(Reset_Handler)
33*5c591343SA. Cody Schuffelen
34*5c591343SA. Cody Schuffelen/* Highest address of the user mode stack */
35*5c591343SA. Cody Schuffelen_estack = 0x20018000;    /* end of RAM */
36*5c591343SA. Cody Schuffelen/* Generate a link error if heap and stack don't fit into RAM */
37*5c591343SA. Cody Schuffelen_Min_Heap_Size = 0x200;      /* required amount of heap  */
38*5c591343SA. Cody Schuffelen_Min_Stack_Size = 0xf000; /* required amount of stack */
39*5c591343SA. Cody Schuffelen
40*5c591343SA. Cody Schuffelen/* Specify the memory areas */
41*5c591343SA. Cody SchuffelenMEMORY
42*5c591343SA. Cody Schuffelen{
43*5c591343SA. Cody SchuffelenRAM (xrw)       : ORIGIN = 0x20000000, LENGTH = 96K
44*5c591343SA. Cody SchuffelenRAM2 (xrw)      : ORIGIN = 0x10000000, LENGTH = 32K
45*5c591343SA. Cody SchuffelenFLASH (rx)      : ORIGIN = 0x8000000,  LENGTH = 1006K
46*5c591343SA. Cody SchuffelenINTEGRITY (rx)  : ORIGIN = 0x80FB800,  LENGTH = 2K
47*5c591343SA. Cody SchuffelenNVFILE (rx)     : ORIGIN = 0x80FC000,  LENGTH = 16K
48*5c591343SA. Cody Schuffelen}
49*5c591343SA. Cody Schuffelen
50*5c591343SA. Cody Schuffelen/* Define output sections */
51*5c591343SA. Cody SchuffelenSECTIONS
52*5c591343SA. Cody Schuffelen{
53*5c591343SA. Cody Schuffelen  /* The startup code goes first into FLASH */
54*5c591343SA. Cody Schuffelen  .isr_vector :
55*5c591343SA. Cody Schuffelen  {
56*5c591343SA. Cody Schuffelen    . = ALIGN(4);
57*5c591343SA. Cody Schuffelen    KEEP(*(.isr_vector)) /* Startup code */
58*5c591343SA. Cody Schuffelen    . = ALIGN(4);
59*5c591343SA. Cody Schuffelen  } >FLASH
60*5c591343SA. Cody Schuffelen
61*5c591343SA. Cody Schuffelen  /* The program code and other data goes into FLASH */
62*5c591343SA. Cody Schuffelen  .text :
63*5c591343SA. Cody Schuffelen  {
64*5c591343SA. Cody Schuffelen    . = ALIGN(4);
65*5c591343SA. Cody Schuffelen    *(.text)           /* .text sections (code) */
66*5c591343SA. Cody Schuffelen    *(.text*)          /* .text* sections (code) */
67*5c591343SA. Cody Schuffelen    *(.glue_7)         /* glue arm to thumb code */
68*5c591343SA. Cody Schuffelen    *(.glue_7t)        /* glue thumb to arm code */
69*5c591343SA. Cody Schuffelen    *(.eh_frame)
70*5c591343SA. Cody Schuffelen
71*5c591343SA. Cody Schuffelen    KEEP (*(.init))
72*5c591343SA. Cody Schuffelen    KEEP (*(.fini))
73*5c591343SA. Cody Schuffelen
74*5c591343SA. Cody Schuffelen    . = ALIGN(4);
75*5c591343SA. Cody Schuffelen    _etext = .;        /* define a global symbols at end of code */
76*5c591343SA. Cody Schuffelen  } >FLASH
77*5c591343SA. Cody Schuffelen
78*5c591343SA. Cody Schuffelen  /* Constant data goes into FLASH */
79*5c591343SA. Cody Schuffelen  .rodata :
80*5c591343SA. Cody Schuffelen  {
81*5c591343SA. Cody Schuffelen    . = ALIGN(4);
82*5c591343SA. Cody Schuffelen    *(.rodata)         /* .rodata sections (constants, strings, etc.) */
83*5c591343SA. Cody Schuffelen    *(.rodata*)        /* .rodata* sections (constants, strings, etc.) */
84*5c591343SA. Cody Schuffelen    . = ALIGN(4);
85*5c591343SA. Cody Schuffelen  } >FLASH
86*5c591343SA. Cody Schuffelen
87*5c591343SA. Cody Schuffelen  .integrity (NOLOAD):
88*5c591343SA. Cody Schuffelen  {
89*5c591343SA. Cody Schuffelen    . = ALIGN(4);
90*5c591343SA. Cody Schuffelen    *(.integrity)         /* .integrity internal integrity protection of NVFile */
91*5c591343SA. Cody Schuffelen    *(.integrity*)        /* .integrity* internal integrity protection of NVFile */
92*5c591343SA. Cody Schuffelen    . = ALIGN(4);
93*5c591343SA. Cody Schuffelen  } >INTEGRITY
94*5c591343SA. Cody Schuffelen
95*5c591343SA. Cody Schuffelen  .nvfile (NOLOAD):
96*5c591343SA. Cody Schuffelen  {
97*5c591343SA. Cody Schuffelen    . = ALIGN(4);
98*5c591343SA. Cody Schuffelen    *(.nvfile)         /* .nvfile persisted NV storage for the TPM */
99*5c591343SA. Cody Schuffelen    *(.nvfile*)        /* .nvfile* persisted NV storage for the TPM */
100*5c591343SA. Cody Schuffelen    . = ALIGN(4);
101*5c591343SA. Cody Schuffelen  } >NVFILE
102*5c591343SA. Cody Schuffelen
103*5c591343SA. Cody Schuffelen  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH
104*5c591343SA. Cody Schuffelen  .ARM : {
105*5c591343SA. Cody Schuffelen    __exidx_start = .;
106*5c591343SA. Cody Schuffelen    *(.ARM.exidx*)
107*5c591343SA. Cody Schuffelen    __exidx_end = .;
108*5c591343SA. Cody Schuffelen  } >FLASH
109*5c591343SA. Cody Schuffelen
110*5c591343SA. Cody Schuffelen  .preinit_array     :
111*5c591343SA. Cody Schuffelen  {
112*5c591343SA. Cody Schuffelen    PROVIDE_HIDDEN (__preinit_array_start = .);
113*5c591343SA. Cody Schuffelen    KEEP (*(.preinit_array*))
114*5c591343SA. Cody Schuffelen    PROVIDE_HIDDEN (__preinit_array_end = .);
115*5c591343SA. Cody Schuffelen  } >FLASH
116*5c591343SA. Cody Schuffelen  .init_array :
117*5c591343SA. Cody Schuffelen  {
118*5c591343SA. Cody Schuffelen    PROVIDE_HIDDEN (__init_array_start = .);
119*5c591343SA. Cody Schuffelen    KEEP (*(SORT(.init_array.*)))
120*5c591343SA. Cody Schuffelen    KEEP (*(.init_array*))
121*5c591343SA. Cody Schuffelen    PROVIDE_HIDDEN (__init_array_end = .);
122*5c591343SA. Cody Schuffelen  } >FLASH
123*5c591343SA. Cody Schuffelen  .fini_array :
124*5c591343SA. Cody Schuffelen  {
125*5c591343SA. Cody Schuffelen    PROVIDE_HIDDEN (__fini_array_start = .);
126*5c591343SA. Cody Schuffelen    KEEP (*(SORT(.fini_array.*)))
127*5c591343SA. Cody Schuffelen    KEEP (*(.fini_array*))
128*5c591343SA. Cody Schuffelen    PROVIDE_HIDDEN (__fini_array_end = .);
129*5c591343SA. Cody Schuffelen  } >FLASH
130*5c591343SA. Cody Schuffelen
131*5c591343SA. Cody Schuffelen  /* used by the startup to initialize data */
132*5c591343SA. Cody Schuffelen  _sidata = LOADADDR(.data);
133*5c591343SA. Cody Schuffelen
134*5c591343SA. Cody Schuffelen  /* Initialized data sections goes into RAM, load LMA copy after code */
135*5c591343SA. Cody Schuffelen  .data :
136*5c591343SA. Cody Schuffelen  {
137*5c591343SA. Cody Schuffelen    . = ALIGN(4);
138*5c591343SA. Cody Schuffelen    _sdata = .;        /* create a global symbol at data start */
139*5c591343SA. Cody Schuffelen    *(.data)           /* .data sections */
140*5c591343SA. Cody Schuffelen    *(.data*)          /* .data* sections */
141*5c591343SA. Cody Schuffelen
142*5c591343SA. Cody Schuffelen    . = ALIGN(4);
143*5c591343SA. Cody Schuffelen    _edata = .;        /* define a global symbol at data end */
144*5c591343SA. Cody Schuffelen  } >RAM AT> FLASH
145*5c591343SA. Cody Schuffelen
146*5c591343SA. Cody Schuffelen
147*5c591343SA. Cody Schuffelen  /* Uninitialized data section */
148*5c591343SA. Cody Schuffelen  . = ALIGN(4);
149*5c591343SA. Cody Schuffelen  .bss2 :
150*5c591343SA. Cody Schuffelen  {
151*5c591343SA. Cody Schuffelen    . = ALIGN(4);
152*5c591343SA. Cody Schuffelen    *(.ram2)
153*5c591343SA. Cody Schuffelen    *(.ram2*)
154*5c591343SA. Cody Schuffelen    Middlewares\Platform\Cancel.o
155*5c591343SA. Cody Schuffelen    Middlewares\Platform\Clock.o
156*5c591343SA. Cody Schuffelen    Middlewares\Platform\Entropy.o
157*5c591343SA. Cody Schuffelen/*    Middlewares\Platform\LocalityPlat.o*/
158*5c591343SA. Cody Schuffelen/*    Middlewares\Platform\NVMem.o*/
159*5c591343SA. Cody Schuffelen    Middlewares\Platform\PlatformData.o
160*5c591343SA. Cody Schuffelen/*    Middlewares\Platform\PowerPlat.o*/
161*5c591343SA. Cody Schuffelen/*    Middlewares\Platform\PPPlat.o*/
162*5c591343SA. Cody Schuffelen/*    Middlewares\Platform\RunCommand.o*/
163*5c591343SA. Cody Schuffelen/*    Middlewares\Platform\Unique.o*/
164*5c591343SA. Cody Schuffelen    . = ALIGN(4);
165*5c591343SA. Cody Schuffelen  } >RAM2
166*5c591343SA. Cody Schuffelen  .bss :
167*5c591343SA. Cody Schuffelen  {
168*5c591343SA. Cody Schuffelen    /* This is used by the startup in order to initialize the .bss secion */
169*5c591343SA. Cody Schuffelen    _sbss = .;         /* define a global symbol at bss start */
170*5c591343SA. Cody Schuffelen    __bss_start__ = _sbss;
171*5c591343SA. Cody Schuffelen    *(.bss)
172*5c591343SA. Cody Schuffelen    *(.bss*)
173*5c591343SA. Cody Schuffelen    *(COMMON)
174*5c591343SA. Cody Schuffelen
175*5c591343SA. Cody Schuffelen    . = ALIGN(4);
176*5c591343SA. Cody Schuffelen    _ebss = .;         /* define a global symbol at bss end */
177*5c591343SA. Cody Schuffelen    __bss_end__ = _ebss;
178*5c591343SA. Cody Schuffelen  } >RAM
179*5c591343SA. Cody Schuffelen
180*5c591343SA. Cody Schuffelen  /* User_heap_stack section, used to check that there is enough RAM left */
181*5c591343SA. Cody Schuffelen  ._user_heap_stack :
182*5c591343SA. Cody Schuffelen  {
183*5c591343SA. Cody Schuffelen    . = ALIGN(4);
184*5c591343SA. Cody Schuffelen    PROVIDE ( end = . );
185*5c591343SA. Cody Schuffelen    PROVIDE ( _end = . );
186*5c591343SA. Cody Schuffelen    . = . + _Min_Heap_Size;
187*5c591343SA. Cody Schuffelen    . = . + _Min_Stack_Size;
188*5c591343SA. Cody Schuffelen    . = ALIGN(4);
189*5c591343SA. Cody Schuffelen  } >RAM
190*5c591343SA. Cody Schuffelen
191*5c591343SA. Cody Schuffelen
192*5c591343SA. Cody Schuffelen
193*5c591343SA. Cody Schuffelen  /* Remove information from the standard libraries */
194*5c591343SA. Cody Schuffelen  /DISCARD/ :
195*5c591343SA. Cody Schuffelen  {
196*5c591343SA. Cody Schuffelen    libc.a ( * )
197*5c591343SA. Cody Schuffelen    libm.a ( * )
198*5c591343SA. Cody Schuffelen    libgcc.a ( * )
199*5c591343SA. Cody Schuffelen  }
200*5c591343SA. Cody Schuffelen
201*5c591343SA. Cody Schuffelen  .ARM.attributes 0 : { *(.ARM.attributes) }
202*5c591343SA. Cody Schuffelen}
203*5c591343SA. Cody Schuffelen
204*5c591343SA. Cody Schuffelen
205