DFU support for reGNUal upgrade
[gnuk/gnuk.git] / src / gnuk.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 __process_stack_size__  = 0x0200;
32 __stacks_total_size__   = __main_stack_size__ + __process_stack_size__;
33
34 MEMORY
35 {
36     flash0 : org = @ORIGIN@, len = 4k
37     flash  : org = @ORIGIN@+0x1000, len = @FLASH_SIZE@k - 4k
38     ram : org = 0x20000000, len = 20k
39 }
40
41 /* __flash_start__: flash ROM start address regardless of DFU_SUPPORT */
42 __flash_start__         = 0x08001000;
43 __flash_end__           = ORIGIN(flash) + LENGTH(flash);
44
45 __ram_start__           = ORIGIN(ram);
46 __ram_size__            = LENGTH(ram);
47 __ram_end__             = __ram_start__ + __ram_size__;
48
49 SECTIONS
50 {
51     . = 0;
52
53     .sys : ALIGN(16) SUBALIGN(16)
54     {
55         _sys = .;
56         KEEP(*(.vectors))
57         sys.o(.text)
58         sys.o(.text.*)
59         sys.o(.rodata)
60         sys.o(.rodata.*)
61         . = ALIGN(1024);
62         *(.sys.0)
63         *(.sys.1)
64         *(.sys.2)
65     } > flash0
66
67     .text : ALIGN(16) SUBALIGN(16)
68     {
69         _text = .;
70         KEEP(*(vectors))
71         *(.text)
72         *(.text.*)
73         *(.rodata)
74         *(.rodata.*)
75         *(.glue_7t)
76         *(.glue_7)
77         *(.gcc*)
78     } > flash
79
80     .ctors :
81     {
82         PROVIDE(_ctors_start_ = .);
83         KEEP(*(SORT(.ctors.*)))
84         KEEP(*(.ctors))
85         PROVIDE(_ctors_end_ = .);
86     } > flash
87
88     .dtors :
89     {
90         PROVIDE(_dtors_start_ = .);
91         KEEP(*(SORT(.dtors.*)))
92         KEEP(*(.dtors))
93         PROVIDE(_dtors_end_ = .);
94     } > flash
95
96     .ARM.extab : {*(.ARM.extab* .gnu.linkonce.armextab.*)}
97
98     __exidx_start = .;
99     .ARM.exidx : {*(.ARM.exidx* .gnu.linkonce.armexidx.*)} > flash
100     __exidx_end = .;
101
102     .eh_frame_hdr : {*(.eh_frame_hdr)}
103
104     .eh_frame : ONLY_IF_RO {*(.eh_frame)}
105
106     . = ALIGN(4);
107     _etext = .;
108     _textdata = _etext;
109
110     .data :
111     {
112         _data = .;
113         *(.data)
114         . = ALIGN(4);
115         *(.data.*)
116         . = ALIGN(4);
117         *(.ramtext)
118         . = ALIGN(4);
119         _edata = .;
120     } > ram AT > flash
121
122     .bss :
123     {
124         _bss_start = .;
125         *(.bss)
126         . = ALIGN(4);
127         *(.bss.*)
128         . = ALIGN(4);
129         *(COMMON)
130         . = ALIGN(4);
131         _bss_end = .;
132     } > ram
133
134     PROVIDE(end = .);
135     _end            = .;
136     . = ALIGN(512);
137     _regnual_start = .;
138
139 @CERTDO_SUPPORT_START@
140     .gnuk_ch_certificate :
141     {
142         . = ALIGN (@FLASH_PAGE_SIZE@);
143         ch_certificate_start = .;
144         LONG(0xffffffff);
145         . += 1920;
146         . = ALIGN (@FLASH_PAGE_SIZE@);
147     } > flash =0xffffffff
148 @CERTDO_SUPPORT_END@
149
150     .gnuk_flash :
151     {
152         . = ALIGN (@FLASH_PAGE_SIZE@);
153         _data_pool = .;
154         KEEP(*(.gnuk_data))
155         . = ALIGN(@FLASH_PAGE_SIZE@);
156         . += @FLASH_PAGE_SIZE@;
157         _keystore_pool = .;
158         . += 512*3;
159         . = ALIGN(@FLASH_PAGE_SIZE@);
160     } > flash =0xffffffff
161 }
162
163 __heap_base__   = _end;
164 __heap_end__    = __ram_end__ - __stacks_total_size__;