5 /* Highest address of the user mode stack */
6 _estack = ORIGIN(STACKRAM) + LENGTH(STACKRAM); /* end of RAM */
8 /* Base address where the quad spi. */
9 __quad_spi_start = ORIGIN(QUADSPI);
11 /* Generate a link error if heap and stack don't fit into RAM */
12 _Min_Heap_Size = 0; /* required amount of heap */
13 _Min_Stack_Size = 0x800; /* required amount of stack */
15 /* Define output sections */
18 /* The vector table goes first into MAIN */
22 PROVIDE (isr_vector_table_base = .);
23 KEEP(*(.isr_vector)) /* Startup code */
27 /* The program code and other data goes into MAIN */
31 *(.text) /* .text sections (code) */
32 *(.text*) /* .text* sections (code) */
33 *(.rodata) /* .rodata sections (constants, strings, etc.) */
34 *(.rodata*) /* .rodata* sections (constants, strings, etc.) */
35 *(.glue_7) /* glue arm to thumb code */
36 *(.glue_7t) /* glue thumb to arm code */
43 _etext = .; /* define a global symbols at end of code */
46 /* Critical program code goes into ITCM RAM */
47 /* Copy specific fast-executing code to ITCM RAM */
48 tcm_code = LOADADDR(.tcm_code);
61 *(.ARM.extab* .gnu.linkonce.armextab.*)
67 *(.ARM.exidx*) __exidx_end = .;
72 PROVIDE_HIDDEN (__pg_registry_start = .);
73 KEEP (*(.pg_registry))
74 KEEP (*(SORT(.pg_registry.*)))
75 PROVIDE_HIDDEN (__pg_registry_end = .);
80 PROVIDE_HIDDEN (__pg_resetdata_start = .);
81 KEEP (*(.pg_resetdata))
82 PROVIDE_HIDDEN (__pg_resetdata_end = .);
85 /* used by the startup to initialize data */
86 _sidata = LOADADDR(.data);
88 /* Initialized data sections goes into RAM, load LMA copy after code */
92 _sdata = .; /* create a global symbol at data start */
93 *(.data) /* .data sections */
94 *(.data*) /* .data* sections */
97 _edata = .; /* define a global symbol at data end */
100 /* Uninitialized data section */
104 /* This is used by the startup in order to initialize the .bss secion */
105 _sbss = .; /* define a global symbol at bss start */
106 __bss_start__ = _sbss;
108 *(SORT_BY_ALIGNMENT(.bss*))
112 _ebss = .; /* define a global symbol at bss end */
116 /* Uninitialized data section */
120 /* This is used by the startup in order to initialize the .sram2 secion */
121 _ssram2 = .; /* define a global symbol at sram2 start */
122 __sram2_start__ = _ssram2;
124 *(SORT_BY_ALIGNMENT(.sram2*))
127 _esram2 = .; /* define a global symbol at sram2 end */
128 __sram2_end__ = _esram2;
131 /* used during startup to initialized fastram_data */
132 _sfastram_idata = LOADADDR(.fastram_data);
134 /* Initialized FAST_DATA section for unsuspecting developers */
138 _sfastram_data = .; /* create a global symbol at data start */
139 *(.fastram_data) /* .data sections */
140 *(.fastram_data*) /* .data* sections */
143 _efastram_data = .; /* define a global symbol at data end */
147 .fastram_bss (NOLOAD) :
150 __fastram_bss_start__ = _sfastram_bss;
152 *(SORT_BY_ALIGNMENT(.fastram_bss*))
156 __fastram_bss_end__ = _efastram_bss;