LP-602 significant change to USB layer. force complete USB stack reset on replug...
[librepilot.git] / flight / pios / stm32f4xx / link_STM32F4xx_OSD_sections.ld
blobb46c691c844c8c837e7cc57717b5162333e07752
2 /* Section Definitions */
3 SECTIONS
5         /*
6          * Vectors, code and constant data.
7          */
8     .text :
9     {
10         PROVIDE (pios_isr_vector_table_base = .);
11         KEEP(*(.cpu_vectors))   /* CPU exception vectors */
12         KEEP(*(.io_vectors))    /* I/O interrupt vectors */
13         *(.text .text.* .gnu.linkonce.t.*)
14         *(.glue_7t) *(.glue_7)
15         *(.rodata .rodata* .gnu.linkonce.r.*)
16     } > FLASH
18     /* 
19      * Init section for UAVObjects. 
20      */
21     .initcalluavobj.init :
22     {
23         . = ALIGN(4);
24                 __uavobj_initcall_start = .;
25         KEEP(*(.initcalluavobj.init))
26                 . = ALIGN(4);
27                 __uavobj_initcall_end   = .;
28     } >FLASH
30     /* 
31      * Module init section section
32      */
33     .initcallmodule.init :
34     {
35         . = ALIGN(4);
36                 __module_initcall_start = .;
37         KEEP(*(.initcallmodule.init))
38                 . = ALIGN(4);
39                 __module_initcall_end   = .;
40     } >FLASH
42     /* settings init sections */
43     .initcallsettings.init :
44     {
45         . = ALIGN(4);
46         __settings_initcall_start = .;
47         KEEP(*(.initcallsettings.init))
48         . = ALIGN(4);
49         __settings_initcall_end   = .;
50     } >FLASH
51     
52         /*
53          * C++ exception handling.
54          */
55     .ARM.extab :
56     {
57         *(.ARM.extab* .gnu.linkonce.armextab.*)
58     } > FLASH
59     .ARM.exidx :
60     {
61         __exidx_start = .;
62         *(.ARM.exidx* .gnu.linkonce.armexidx.*)
63         __exidx_end = .;
64     } > FLASH
66         /*
67          * Markers for the end of the 'text' section and the in-flash start of 
68          * non-constant data 
69          */
70     . = ALIGN(4);
71     _etext = .;
72     _sidata = .;
74         /*
75          * Board info structure, normally only generated by the bootloader but can
76          * be read by the application.
77          */
78         PROVIDE(pios_board_info_blob = ORIGIN(BD_INFO));
79     .boardinfo :
80     {
81                 . = ALIGN(4);
82                 KEEP(*(.boardinfo))
83                 . = ALIGN(ORIGIN(BD_INFO)+LENGTH(BD_INFO));
84         } > BD_INFO
86     /*
87          * Place the IRQ/bootstrap stack at the bottom of SRAM so that an overflow
88          * results in a hard fault.
89          */
90         .istack (NOLOAD) :
91         {
92                 . = ALIGN(4);
93         _irq_stack_end = . ;
94         *(.irqstack)
95         _irq_stack_top = . ;
96         } > CCSRAM
97         
99         /*
100          * Non-const initialised data.
101          */
102     .data : AT (_sidata)
103     {
104         . = ALIGN(4);
105         _sdata = .;
106         *(.data .data.*)
107         . = ALIGN(4);
108         _edata = . ;
109     } > SRAM
111     /*
112      * Uninitialised data (BSS + commons).
113      */
114     .bss (NOLOAD) :
115     {
116         _sbss = . ;
117         *(.bss .bss.*)
118         *(COMMON)
119         _ebss = . ;
120             PROVIDE ( _end = _ebss ) ;    
121     } > SRAM
123         /*
124          * The heap consumes the remainder of the SRAM.
125          */
126     .heap (NOLOAD) :
127     {
128         . = ALIGN(4);
129         _sheap = . ;
130         
131         /*
132          * This allows us to declare an object or objects up to the minimum acceptable
133          * heap size and receive a linker error if the space available for the heap is
134          * not sufficient.
135          */
136         *(.heap)
137         
138         /* extend the heap up to the top of SRAM */
139         . = ORIGIN(SRAM) + LENGTH(SRAM) - ABSOLUTE(_sheap);
140         _eheap = .;
141     } > SRAM
143         /*
144          * 'Fast' memory goes in the CCM SRAM
145          */
146         .fast (NOLOAD) :
147         {
148                 _sfast = . ;
149                 *(.fast)
150                 _efast = . ;
151         } > CCSRAM
152         
153         .fastheap (NOLOAD) :
154     {
155         . = ALIGN(4);
156         _sfastheap = . ;
157         
158         /*
159          * This allows us to declare an object or objects up to the minimum acceptable
160          * heap size and receive a linker error if the space available for the heap is
161          * not sufficient.
162          */
163         *(.fastheap)
164         
165         /* extend the fastheap up to the top of CCSRAM */
166         . = ORIGIN(CCSRAM) + LENGTH(CCSRAM) - ABSOLUTE(_sfastheap);
167         _efastheap = .;
168     } > CCSRAM
169     
170     /* Stabs debugging sections.  */
171     .stab          0 : { *(.stab) }
172     .stabstr       0 : { *(.stabstr) }
173     .stab.excl     0 : { *(.stab.excl) }
174     .stab.exclstr  0 : { *(.stab.exclstr) }
175     .stab.index    0 : { *(.stab.index) }
176     .stab.indexstr 0 : { *(.stab.indexstr) }
177     .comment       0 : { *(.comment) }
178     /* DWARF debug sections.
179        Symbols in the DWARF debugging sections are relative to the beginning
180        of the section so we begin them at 0.  */
181     /* DWARF 1 */
182     .debug          0 : { *(.debug) }
183     .line           0 : { *(.line) }
184     /* GNU DWARF 1 extensions */
185     .debug_srcinfo  0 : { *(.debug_srcinfo) }
186     .debug_sfnames  0 : { *(.debug_sfnames) }
187     /* DWARF 1.1 and DWARF 2 */
188     .debug_aranges  0 : { *(.debug_aranges) }
189     .debug_pubnames 0 : { *(.debug_pubnames) }
190     /* DWARF 2 */
191     .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
192     .debug_abbrev   0 : { *(.debug_abbrev) }
193     .debug_line     0 : { *(.debug_line) }
194     .debug_frame    0 : { *(.debug_frame) }
195     .debug_str      0 : { *(.debug_str) }
196     .debug_loc      0 : { *(.debug_loc) }
197     .debug_macinfo  0 : { *(.debug_macinfo) }
198     /* SGI/MIPS DWARF 2 extensions */
199     .debug_weaknames 0 : { *(.debug_weaknames) }
200     .debug_funcnames 0 : { *(.debug_funcnames) }
201     .debug_typenames 0 : { *(.debug_typenames) }
202     .debug_varnames  0 : { *(.debug_varnames) }