Merged in f5soh/librepilot/update_credits (pull request #529)
[librepilot.git] / flight / pios / stm32f4xx / link_STM32F4xx_RM_sections_compat.ld
blobc6701fb190bcb40ccd74aee05003c7f27db5ba49
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         /*
43          * C++ exception handling.
44          */
45     .ARM.extab :
46     {
47         *(.ARM.extab* .gnu.linkonce.armextab.*)
48     } > FLASH
49     .ARM.exidx :
50     {
51         __exidx_start = .;
52         *(.ARM.exidx* .gnu.linkonce.armexidx.*)
53         __exidx_end = .;
54     } > FLASH
56         /*
57          * Markers for the end of the 'text' section and the in-flash start of 
58          * non-constant data 
59          */
60     . = ALIGN(4);
61     _etext = .;
62     _sidata = .;
64         /*
65          * Board info structure, normally only generated by the bootloader but can
66          * be read by the application.
67          */
68         PROVIDE(pios_board_info_blob = ORIGIN(BD_INFO));
69     .boardinfo :
70     {
71                 . = ALIGN(4);
72                 KEEP(*(.boardinfo))
73                 . = ALIGN(ORIGIN(BD_INFO)+LENGTH(BD_INFO));
74         } > BD_INFO
76     /*
77          * Place the IRQ/bootstrap stack at the bottom of SRAM so that an overflow
78          * results in a hard fault.
79          */
80         .istack (NOLOAD) :
81         {
82                 . = ALIGN(4);
83         _irq_stack_end = . ;
84         *(.irqstack)
85         _irq_stack_top = . ;
86         } > SRAM
87         
89         /*
90          * Non-const initialised data.
91          */
92     .data : AT (_sidata)
93     {
94         . = ALIGN(4);
95         _sdata = .;
96         *(.data .data.*)
97         . = ALIGN(4);
98         _edata = . ;
99     } > SRAM
101     /*
102      * Uninitialised data (BSS + commons).
103      */
104     .bss (NOLOAD) :
105     {
106         _sbss = . ;
107         *(.bss .bss.*)
108         *(COMMON)
109         _ebss = . ;
110             PROVIDE ( _end = _ebss ) ;    
111     } > SRAM
113         /*
114          * The heap consumes the remainder of the SRAM.
115          */
116     .heap (NOLOAD) :
117     {
118         . = ALIGN(4);
119         _sheap = . ;
120         
121         /*
122          * This allows us to declare an object or objects up to the minimum acceptable
123          * heap size and receive a linker error if the space available for the heap is
124          * not sufficient.
125          */
126         *(.heap)
127         
128         /* extend the heap up to the top of SRAM */
129         . = ORIGIN(SRAM) + LENGTH(SRAM) - ABSOLUTE(_sheap);
130         _eheap = .;
131     } > SRAM
133         /*
134          * 'Fast' memory goes in the CCM SRAM
135          */
136         .fast (NOLOAD) :
137         {
138                 _sfast = . ;
139                 *(.fast)
140                 _efast = . ;
141         } > CCSRAM
143     /* Stabs debugging sections.  */
144     .stab          0 : { *(.stab) }
145     .stabstr       0 : { *(.stabstr) }
146     .stab.excl     0 : { *(.stab.excl) }
147     .stab.exclstr  0 : { *(.stab.exclstr) }
148     .stab.index    0 : { *(.stab.index) }
149     .stab.indexstr 0 : { *(.stab.indexstr) }
150     .comment       0 : { *(.comment) }
151     /* DWARF debug sections.
152        Symbols in the DWARF debugging sections are relative to the beginning
153        of the section so we begin them at 0.  */
154     /* DWARF 1 */
155     .debug          0 : { *(.debug) }
156     .line           0 : { *(.line) }
157     /* GNU DWARF 1 extensions */
158     .debug_srcinfo  0 : { *(.debug_srcinfo) }
159     .debug_sfnames  0 : { *(.debug_sfnames) }
160     /* DWARF 1.1 and DWARF 2 */
161     .debug_aranges  0 : { *(.debug_aranges) }
162     .debug_pubnames 0 : { *(.debug_pubnames) }
163     /* DWARF 2 */
164     .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
165     .debug_abbrev   0 : { *(.debug_abbrev) }
166     .debug_line     0 : { *(.debug_line) }
167     .debug_frame    0 : { *(.debug_frame) }
168     .debug_str      0 : { *(.debug_str) }
169     .debug_loc      0 : { *(.debug_loc) }
170     .debug_macinfo  0 : { *(.debug_macinfo) }
171     /* SGI/MIPS DWARF 2 extensions */
172     .debug_weaknames 0 : { *(.debug_weaknames) }
173     .debug_funcnames 0 : { *(.debug_funcnames) }
174     .debug_typenames 0 : { *(.debug_typenames) }
175     .debug_varnames  0 : { *(.debug_varnames) }