Merged in f5soh/librepilot/update_credits (pull request #529)
[librepilot.git] / flight / pios / stm32f10x / link_STM32103CB_OPLINKMINI_sections.ld
blobbddc314718504595e8c42e26ebc67c3d0d3108d3
1 /* This is the size of the stack for all FreeRTOS IRQs */
2 _irq_stack_size = 0x1A0;
3 /* This is the size of the stack for early init: life span is until scheduler starts */
4 _init_stack_size = 0x100;
6 /* Stub out these functions since we don't use them anyway */
7 PROVIDE (   vPortSVCHandler = 0 ) ;
8 PROVIDE (   xPortPendSVHandler = 0 ) ;
9 PROVIDE (   xPortSysTickHandler = 0 ) ;
11 PROVIDE(pios_board_info_blob = ORIGIN(BD_INFO));
13 /* Section Definitions */
14 SECTIONS
16     .text :
17     {
18         PROVIDE (pios_isr_vector_table_base = .);
19         KEEP(*(.isr_vector .isr_vector.*))
20         *(.text .text.* .gnu.linkonce.t.*)
21         *(.glue_7t) *(.glue_7)
22         *(.rodata .rodata* .gnu.linkonce.r.*)
23     } > FLASH
25     /* module sections */
26     .initcallmodule.init :
27     {
28         . = ALIGN(4);
29         __module_initcall_start = .;
30         KEEP(*(.initcallmodule.init))
31         . = ALIGN(4);
32         __module_initcall_end   = .;
33     } >FLASH
35     /* settings init sections */
36     .initcallsettings.init :
37     {
38         . = ALIGN(4);
39         __settings_initcall_start = .;
40         KEEP(*(.initcallsettings.init))
41         . = ALIGN(4);
42         __settings_initcall_end   = .;
43     } >FLASH
45     .ARM.extab :
46     {
47         *(.ARM.extab* .gnu.linkonce.armextab.*)
48     } > FLASH
50     .ARM.exidx :
51     {
52         *(.ARM.exidx* .gnu.linkonce.armexidx.*)
53     } > FLASH
55     . = ALIGN(4);
56     _etext = .;
57     _sidata = .;
59     /*
60      * This stack is used both as the initial sp during early init as well as ultimately
61      * being used as the STM32's MSP (Main Stack Pointer) which is the same stack that
62      * is used for _all_ interrupt handlers.  The end of this stack should be placed
63      * against the lowest address in RAM so that a stack overrun results in a hard fault
64      * at the first access beyond the end of the stack.
65      */
66     .irq_stack :
67     {
68          . = ALIGN(4);
69          _irq_stack_end = . ;
70          . = . + _irq_stack_size ;
71          . = ALIGN(4);
72          _irq_stack_top = . - 4 ;
73          . = ALIGN(4);
74     } > SRAM
76     .data : AT (_etext)
77     {
78         _sdata = .;
79         *(.data .data.*)
80         . = ALIGN(4);
81         _edata = . ;
82     } > SRAM
86     /* .bss section which is used for uninitialized data */
87     .bss (NOLOAD) :
88     {
89         _sbss = . ;
90         *(.bss .bss.*)
91         *(COMMON)
92     } > SRAM
94     .heap (NOLOAD) :
95     {
96         . = ALIGN(4);
97         _sheap = . ;
98         _sheap_pre_rtos = . ;
99         *(.heap)
100         . = ALIGN(4);
101         _eheap = . ;
102         _eheap_pre_rtos = . ;
103         _init_stack_end = . ;
104         _sheap_post_rtos = . ;
105         . = . + _init_stack_size ;
106         . = ALIGN(4);
107         _eheap_post_rtos = . ;
108         _init_stack_top = . - 4 ;
109     } > SRAM
111     _eram = ORIGIN(SRAM) + LENGTH(SRAM) ;
112     _ebss = _eram ;
113     
114     /* keep the heap section at the end of the SRAM
115      * this will allow to claim the remaining bytes not used
116      * at run time! (done by the reset vector).
117      */
119     PROVIDE ( _end = _ebss ) ;
121     /* Stabs debugging sections.  */
122     .stab          0 : { *(.stab) }
123     .stabstr       0 : { *(.stabstr) }
124     .stab.excl     0 : { *(.stab.excl) }
125     .stab.exclstr  0 : { *(.stab.exclstr) }
126     .stab.index    0 : { *(.stab.index) }
127     .stab.indexstr 0 : { *(.stab.indexstr) }
128     .comment       0 : { *(.comment) }
129     /* DWARF debug sections.
130        Symbols in the DWARF debugging sections are relative to the beginning
131        of the section so we begin them at 0.  */
132     /* DWARF 1 */
133     .debug          0 : { *(.debug) }
134     .line           0 : { *(.line) }
135     /* GNU DWARF 1 extensions */
136     .debug_srcinfo  0 : { *(.debug_srcinfo) }
137     .debug_sfnames  0 : { *(.debug_sfnames) }
138     /* DWARF 1.1 and DWARF 2 */
139     .debug_aranges  0 : { *(.debug_aranges) }
140     .debug_pubnames 0 : { *(.debug_pubnames) }
141     /* DWARF 2 */
142     .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
143     .debug_abbrev   0 : { *(.debug_abbrev) }
144     .debug_line     0 : { *(.debug_line) }
145     .debug_frame    0 : { *(.debug_frame) }
146     .debug_str      0 : { *(.debug_str) }
147     .debug_loc      0 : { *(.debug_loc) }
148     .debug_macinfo  0 : { *(.debug_macinfo) }
149     /* SGI/MIPS DWARF 2 extensions */
150     .debug_weaknames 0 : { *(.debug_weaknames) }
151     .debug_funcnames 0 : { *(.debug_funcnames) }
152     .debug_typenames 0 : { *(.debug_typenames) }
153     .debug_varnames  0 : { *(.debug_varnames) }