Define USE_LATE_TASK_STATISTICS for AT32 (#12328)
[betaflight.git] / src / link / stm32_h730_common.ld
blobdb81e6c9e6df5f809abbdfbf6e4db0a913441269
2 /* Entry Point */
3 ENTRY(Reset_Handler)
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 __octospi1_start = ORIGIN(OCTOSPI1);
10 __octospi2_start = ORIGIN(OCTOSPI2);
12 /* Generate a link error if heap and stack don't fit into RAM */
13 _Min_Heap_Size = 0;      /* required amount of heap  */
14 _Min_Stack_Size = 0x800; /* required amount of stack */
16 /* Define output sections */
17 SECTIONS
19   _isr_vector_table_flash_base = LOADADDR(.isr_vector);
20   PROVIDE (isr_vector_table_flash_base = _isr_vector_table_flash_base);
22   .isr_vector :
23   {
24     . = ALIGN(512);
25     PROVIDE (isr_vector_table_base = .);
26     KEEP(*(.isr_vector)) /* Startup code */
27     . = ALIGN(4);
28     PROVIDE (isr_vector_table_end = .);
29   } >VECTAB AT> MAIN
31   _ram_isr_vector_table_base = LOADADDR(.ram_isr_vector);
32   PROVIDE (ram_isr_vector_table_base = _ram_isr_vector_table_base);
34   .ram_isr_vector (NOLOAD) :
35   {
36     . = ALIGN(512); /* Vector table offset must be multiple of 0x200 */
37     PROVIDE (ram_isr_vector_table_base = .);
38     . += (isr_vector_table_end - isr_vector_table_base);
39     . = ALIGN(4);    
40     PROVIDE (ram_isr_vector_table_end = .);
41   } >DTCM_RAM
43   /* The program code and other data goes into MAIN */
44   .text :
45   {
46     . = ALIGN(4);
47     *(.text)           /* .text sections (code) */
48     *(.text*)          /* .text* sections (code) */
49     *(.rodata)         /* .rodata sections (constants, strings, etc.) */
50     *(.rodata*)        /* .rodata* sections (constants, strings, etc.) */
51     *(.glue_7)         /* glue arm to thumb code */
52     *(.glue_7t)        /* glue thumb to arm code */
53     *(.eh_frame)
55     KEEP (*(.init))
56     KEEP (*(.fini))
58     . = ALIGN(4);
59     _etext = .;        /* define a global symbols at end of code */
60   } >MAIN
62   /* Critical program code goes into ITCM RAM */
63   /* Copy specific fast-executing code to ITCM RAM */ 
64   tcm_code = LOADADDR(.tcm_code); 
65   .tcm_code :
66   {
67     . = ALIGN(4);
68     tcm_code_start = .; 
69     *(.tcm_code)
70     *(.tcm_code*)
71     . = ALIGN(4);
72     tcm_code_end = .; 
73   } >ITCM_RAM AT >MAIN
75   .ARM.extab   : 
76   { 
77     *(.ARM.extab* .gnu.linkonce.armextab.*) 
78   } >MAIN
79   
80   .ARM : 
81   {
82     __exidx_start = .;
83     *(.ARM.exidx*) __exidx_end = .;
84   } >MAIN
86   .pg_registry :
87   {
88     PROVIDE_HIDDEN (__pg_registry_start = .);
89     KEEP (*(.pg_registry))
90     KEEP (*(SORT(.pg_registry.*)))
91     PROVIDE_HIDDEN (__pg_registry_end = .);
92   } >MAIN
93   
94   .pg_resetdata :
95   {
96     PROVIDE_HIDDEN (__pg_resetdata_start = .);
97     KEEP (*(.pg_resetdata))
98     PROVIDE_HIDDEN (__pg_resetdata_end = .);
99   } >MAIN
101   /* Storage for the address for the configuration section so we can grab it out of the hex file */
102   .custom_defaults :
103   {
104     . = ALIGN(4);
105     KEEP (*(.custom_defaults_start_address))
106     . = ALIGN(4);
107     KEEP (*(.custom_defaults_end_address))
108     . = ALIGN(4);
109     __custom_defaults_internal_start = .;
110     *(.custom_defaults);
111   } >CUSTOM_DEFAULTS
113   PROVIDE_HIDDEN (__custom_defaults_start = __custom_defaults_internal_start);
114   PROVIDE_HIDDEN (__custom_defaults_end = ORIGIN(CUSTOM_DEFAULTS) + LENGTH(CUSTOM_DEFAULTS));
116   /* used by the startup to initialize data */
117   _sidata = LOADADDR(.data);
119   /* Initialized data sections goes into RAM, load LMA copy after code */
120   .data :
121   {
122     . = ALIGN(4);
123     _sdata = .;        /* create a global symbol at data start */
124     *(.data)           /* .data sections */
125     *(.data*)          /* .data* sections */
127     . = ALIGN(4);
128     _edata = .;        /* define a global symbol at data end */
129   } >DTCM_RAM AT >MAIN
131   /* Non-critical program code goes into RAM */
132   /* Copy specific slow-executing code to RAM */ 
133   ram_code = LOADADDR(.ram_code); 
134   .ram_code :
135   {
136     . = ALIGN(4);
137     ram_code_start = .; 
138     *(.ram_code)
139     *(.ram_code*)
140     . = ALIGN(4);
141     ram_code_end = .; 
142   } >RAM AT >MAIN
144   /* Uninitialized data section */
145   . = ALIGN(4);
146   .bss (NOLOAD) :
147   {
148     /* This is used by the startup in order to initialize the .bss secion */
149     _sbss = .;         /* define a global symbol at bss start */
150     __bss_start__ = _sbss;
151     *(.bss)
152     *(SORT_BY_ALIGNMENT(.bss*))
153     *(COMMON)
155     . = ALIGN(4);
156     _ebss = .;         /* define a global symbol at bss end */
157     __bss_end__ = _ebss;
158   } >RAM
160   /* Uninitialized data section */
161   . = ALIGN(4);
162   .sram2 (NOLOAD) :
163   {
164     /* This is used by the startup in order to initialize the .sram2 secion */
165     _ssram2 = .;         /* define a global symbol at sram2 start */
166     __sram2_start__ = _ssram2;
167     *(.sram2)
168     *(SORT_BY_ALIGNMENT(.sram2*))
170     . = ALIGN(4);
171     _esram2 = .;         /* define a global symbol at sram2 end */
172     __sram2_end__ = _esram2;
173   } >RAM
175   /* used during startup to initialized fastram_data */
176   _sfastram_idata = LOADADDR(.fastram_data);
178   /* Initialized FAST_DATA section for unsuspecting developers */
179   .fastram_data :
180   {
181     . = ALIGN(4);
182     _sfastram_data = .;        /* create a global symbol at data start */
183     *(.fastram_data)           /* .data sections */
184     *(.fastram_data*)          /* .data* sections */
186     . = ALIGN(4);
187     _efastram_data = .;        /* define a global symbol at data end */
188   } >FASTRAM AT >MAIN
190   . = ALIGN(4);
191   .fastram_bss (NOLOAD) :
192   {
193     _sfastram_bss = .;
194     __fastram_bss_start__ = _sfastram_bss;
195     *(.fastram_bss)
196     *(SORT_BY_ALIGNMENT(.fastram_bss*))
198     . = ALIGN(4);
199     _efastram_bss = .;
200     __fastram_bss_end__ = _efastram_bss;
201   } >FASTRAM