Add missing wifi targets for some DIY modules (#1210)
[ExpressLRS.git] / src / variants / ldscript_gen.ld
blobd686f8f669f42e56420b9cdfa586ee601aae8e96
2 /* Entry Point */
3 ENTRY(Reset_Handler)
5 /* Highest address of the user mode stack */
6 _estack = ORIGIN(RAM_DATA) + LENGTH(RAM_DATA) - 0x80;
7 /* Reserve some RAM to exchange data for bootloader */
8 _bootloader_data = ORIGIN(RAM_DATA) + LENGTH(RAM_DATA) - 0x7C;
9 /* Generate a link error if heap and stack don't fit into RAM */
10 _Min_Heap_Size = 0x200;   /* required amount of heap  */
11 _Min_Stack_Size = 0x1000; /* required amount of stack */
12 _Min_BL_Size = 0x80;      /* required amount of bootloader data */
14 /* Define output sections */
15 SECTIONS
17   /* The startup code goes first into FLASH */
18   .isr_vector :
19   {
20     . = ALIGN(4);
21     KEEP(*(.isr_vector)) /* Startup code */
22     . = ALIGN(4);
23   } >FLASH
25   /* The program code and other data goes into FLASH */
26   .text :
27   {
28     . = ALIGN(4);
29     *(.text)           /* .text sections (code) */
30     *(.text*)          /* .text* sections (code) */
31     *(.glue_7)         /* glue arm to thumb code */
32     *(.glue_7t)        /* glue thumb to arm code */
33     *(.eh_frame)
35     KEEP (*(.init))
36     KEEP (*(.fini))
38     . = ALIGN(4);
39     _etext = .;        /* define a global symbols at end of code */
40   } >FLASH
42   /* Constant data goes into FLASH */
43   .rodata :
44   {
45     . = ALIGN(4);
46     *(.rodata)         /* .rodata sections (constants, strings, etc.) */
47     *(.rodata*)        /* .rodata* sections (constants, strings, etc.) */
48     . = ALIGN(4);
49   } >FLASH
51   .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH
52   .ARM : {
53     __exidx_start = .;
54     *(.ARM.exidx*)
55     __exidx_end = .;
56   } >FLASH
58   .preinit_array     :
59   {
60     PROVIDE_HIDDEN (__preinit_array_start = .);
61     KEEP (*(.preinit_array*))
62     PROVIDE_HIDDEN (__preinit_array_end = .);
63   } >FLASH
64   .init_array :
65   {
66     PROVIDE_HIDDEN (__init_array_start = .);
67     KEEP (*(SORT(.init_array.*)))
68     KEEP (*(.init_array*))
69     PROVIDE_HIDDEN (__init_array_end = .);
70   } >FLASH
71   .fini_array :
72   {
73     PROVIDE_HIDDEN (__fini_array_start = .);
74     KEEP (*(SORT(.fini_array.*)))
75     KEEP (*(.fini_array*))
76     PROVIDE_HIDDEN (__fini_array_end = .);
77   } >FLASH
79   /* Critical program code goes into RAM_CODE */
80   ram_code = LOADADDR(.ram_code);
81   .ram_code :
82   {
83     . = ALIGN(4);
84     ram_code_start = .;
85     *(.ram_code)
86     *(.ram_code*)
87     . = ALIGN(4);
88     ram_code_end = .;
89   } >RAM_CODE AT> FLASH
91   /* used by the startup to initialize data */
92   _sidata = LOADADDR(.data);
94   /* Initialized data sections goes into RAM, load LMA copy after code */
95   .data :
96   {
97     . = ALIGN(4);
98     _sdata = .;        /* create a global symbol at data start */
99     *(.data)           /* .data sections */
100     *(.data*)          /* .data* sections */
102     . = ALIGN(4);
103     _edata = .;        /* define a global symbol at data end */
104   } >RAM_DATA AT> FLASH
106   _siccmram = LOADADDR(.ccmram);
108   /* CCM-RAM section
109   *
110   * IMPORTANT NOTE!
111   * If initialized variables will be placed in this section,
112   * the startup code needs to be modified to copy the init-values.
113   */
114   .ccmram :
115   {
116     . = ALIGN(4);
117     _sccmram = .;       /* create a global symbol at ccmram start */
118     *(.ccmram)
119     *(.ccmram*)
121     . = ALIGN(4);
122     _eccmram = .;       /* create a global symbol at ccmram end */
123   } >CCMRAM AT> FLASH
125   /* Uninitialized data section */
126   . = ALIGN(4);
127   .bss (NOLOAD) :
128   {
129     /* This is used by the startup in order to initialize the .bss secion */
130     _sbss = .;         /* define a global symbol at bss start */
131     __bss_start__ = _sbss;
132     *(.bss)
133     *(.bss*)
134     *(COMMON)
136     . = ALIGN(4);
137     _ebss = .;         /* define a global symbol at bss end */
138     __bss_end__ = _ebss;
139   } >RAM_DATA
141   /* User_heap_stack section, used to check that there is enough RAM left */
142   ._user_heap_stack (NOLOAD) :
143   {
144     . = ALIGN(8);
145     PROVIDE ( end = . );
146     PROVIDE ( _end = . );
147     . = . + _Min_Heap_Size;
148     . = . + _Min_Stack_Size;
149     . = . + _Min_BL_Size;
150     . = ALIGN(8);
151   } >RAM_DATA
153   /* Remove information from the standard libraries */
154   /DISCARD/ :
155   {
156     libc.a ( * )
157     libm.a ( * )
158     libgcc.a ( * )
159   }
161   .ARM.attributes 0 : { *(.ARM.attributes) }