works now
[gnuk/neug.git] / src / neug.ld.in
1 /*
2     ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio.
3
4     This file is part of ChibiOS/RT.
5
6     ChibiOS/RT is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation; either version 3 of the License, or
9     (at your option) any later version.
10
11     ChibiOS/RT is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14     GNU General Public License for more details.
15
16     You should have received a copy of the GNU General Public License
17     along with this program. If not, see <http://www.gnu.org/licenses/>.
18
19                                       ---
20
21     A special exception to the GPL can be applied should you wish to distribute
22     a combined work that includes ChibiOS/RT, without being obliged to provide
23     the source code for any proprietary components. See the file exception.txt
24     for full details of how and when the exception can be applied.
25 */
26
27 /*
28  * ST32F103 memory setup.
29  */
30 __main_stack_size__     = 0x0400;
31 __stacks_total_size__   = __main_stack_size__;
32
33 MEMORY
34 {
35     flash : org = @ORIGIN@, len = @FLASH_SIZE@k
36     ram : org = 0x20000000, len = 20k
37 }
38
39 __ram_start__           = ORIGIN(ram);
40 __ram_size__            = LENGTH(ram);
41 __ram_end__             = __ram_start__ + __ram_size__;
42
43 SECTIONS
44 {
45     . = 0;
46     _text = .;
47
48     startup : ALIGN(16) SUBALIGN(16)
49     {
50         KEEP(*(vectors))
51         . = ALIGN (16);
52     } > flash =0xffffffff
53
54     constructors : ALIGN(4) SUBALIGN(4)
55     {
56         PROVIDE(__init_array_start = .);
57         KEEP(*(SORT(.init_array.*)))
58         KEEP(*(.init_array))
59         PROVIDE(__init_array_end = .);
60     } > flash
61
62     destructors : ALIGN(4) SUBALIGN(4)
63     {
64         PROVIDE(__fini_array_start = .);
65         KEEP(*(.fini_array))
66         KEEP(*(SORT(.fini_array.*)))
67         PROVIDE(__fini_array_end = .);
68     } > flash
69
70     .text : ALIGN(16) SUBALIGN(16)
71     {
72         *(.text.startup.*)
73         *(.text)
74         *(.text.*)
75         *(.rodata)
76         *(.rodata.*)
77         *(.glue_7t)
78         *(.glue_7)
79         *(.gcc*)
80     } > flash
81
82     .ARM.extab : {*(.ARM.extab* .gnu.linkonce.armextab.*)} > flash
83
84     .ARM.exidx : {
85         PROVIDE(__exidx_start = .);
86         *(.ARM.exidx* .gnu.linkonce.armexidx.*)
87         PROVIDE(__exidx_end = .);
88      } > flash
89
90     .eh_frame_hdr : {*(.eh_frame_hdr)} > flash
91
92     .eh_frame : ONLY_IF_RO {*(.eh_frame)} > flash
93
94     . = ALIGN(4);
95     _etext = .;
96     _textdata = _etext;
97
98     .data :
99     {
100         PROVIDE(_data = .);
101         *(.data)
102         . = ALIGN(4);
103         *(.data.*)
104         . = ALIGN(4);
105         *(.ramtext)
106         . = ALIGN(4);
107         PROVIDE(_edata = .);
108     } > ram AT > flash
109
110     .bss :
111     {
112         PROVIDE(_bss_start = .);
113         *(.bss)
114         . = ALIGN(4);
115         *(.bss.*)
116         . = ALIGN(4);
117         *(COMMON)
118         . = ALIGN(4);
119         PROVIDE(_bss_end = .);
120     } > ram
121
122     .fill_ffff :
123     {
124         . = ALIGN (@FLASH_PAGE_SIZE@);
125     } > flash =0xffffffff
126 }
127
128 PROVIDE(end = .);
129 _end            = .;
130
131 __heap_base__   = _end;
132 __heap_end__    = __ram_end__ - __stacks_total_size__;