LP-602 significant change to USB layer. force complete USB stack reset on replug...
[librepilot.git] / flight / pios / stm32f4xx / link_STM32F4xx_RQ_sections.ld
blobe6baf2d5035257f35e9eb7b054093629f82bc109
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) }