LP-602 significant change to USB layer. force complete USB stack reset on replug...
[librepilot.git] / flight / pios / stm32f4xx / link_STM32F4xx_RN_sections.ld
blob2462187f7fde268e9ce7566591c1fb01e1e6994a
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         } > SRAM
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 = . ;
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)
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
153     /* Stabs debugging sections.  */
154     .stab          0 : { *(.stab) }
155     .stabstr       0 : { *(.stabstr) }
156     .stab.excl     0 : { *(.stab.excl) }
157     .stab.exclstr  0 : { *(.stab.exclstr) }
158     .stab.index    0 : { *(.stab.index) }
159     .stab.indexstr 0 : { *(.stab.indexstr) }
160     .comment       0 : { *(.comment) }
161     /* DWARF debug sections.
162        Symbols in the DWARF debugging sections are relative to the beginning
163        of the section so we begin them at 0.  */
164     /* DWARF 1 */
165     .debug          0 : { *(.debug) }
166     .line           0 : { *(.line) }
167     /* GNU DWARF 1 extensions */
168     .debug_srcinfo  0 : { *(.debug_srcinfo) }
169     .debug_sfnames  0 : { *(.debug_sfnames) }
170     /* DWARF 1.1 and DWARF 2 */
171     .debug_aranges  0 : { *(.debug_aranges) }
172     .debug_pubnames 0 : { *(.debug_pubnames) }
173     /* DWARF 2 */
174     .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
175     .debug_abbrev   0 : { *(.debug_abbrev) }
176     .debug_line     0 : { *(.debug_line) }
177     .debug_frame    0 : { *(.debug_frame) }
178     .debug_str      0 : { *(.debug_str) }
179     .debug_loc      0 : { *(.debug_loc) }
180     .debug_macinfo  0 : { *(.debug_macinfo) }
181     /* SGI/MIPS DWARF 2 extensions */
182     .debug_weaknames 0 : { *(.debug_weaknames) }
183     .debug_funcnames 0 : { *(.debug_funcnames) }
184     .debug_typenames 0 : { *(.debug_typenames) }
185     .debug_varnames  0 : { *(.debug_varnames) }