Version 1.1.9
[gnuk/gnuk.git] / src / gnuk.ld.in
1 /*
2  * ST32F103 memory setup.
3  */
4 __main_stack_size__      = 0x0080;      /* Exception handlers     */
5 __process0_stack_size__  = 0x0100;      /* main */
6 __process1_stack_size__  = 0x0120;      /* ccid */
7 __process2_stack_size__  = 0x01a0;      /* rng */
8 __process3_stack_size__  = 0x1640;      /* gpg */
9 __process4_stack_size__  = 0x0120;      /* intr: usb */
10 __process5_stack_size__  = @MSC_SIZE@;  /* msc */
11 __process6_stack_size__  = @TIM_SIZE@;  /* intr: timer */
12 __process7_stack_size__  = @EXT_SIZE@;  /* intr: ext */
13
14 MEMORY
15 {
16     flash0 : org = @ORIGIN@, len = 4k
17     flash  : org = @ORIGIN@+0x1000, len = @FLASH_SIZE@k - 4k
18     ram : org = 0x20000000, len = @MEMORY_SIZE@k
19 }
20
21 __ram_start__           = ORIGIN(ram);
22 __ram_size__            = LENGTH(ram);
23 __ram_end__             = __ram_start__ + __ram_size__;
24
25 SECTIONS
26 {
27     . = 0;
28
29     .sys : ALIGN(4) SUBALIGN(4)
30     {
31         _sys = .;
32         KEEP(*(.vectors))
33         . = ALIGN(16);
34         KEEP(*(.sys.version))
35         KEEP(*(.sys.board_id))
36         KEEP(*(.sys.board_name))
37         build/sys.o(.text)
38         build/sys.o(.text.*)
39         build/sys.o(.rodata)
40         build/sys.o(.rodata.*)
41         . = ALIGN(1024);
42         *(.sys.0)
43         *(.sys.1)
44         *(.sys.2)
45     } > flash0
46
47     _text = .;
48
49     .startup : ALIGN(128) SUBALIGN(128)
50     {
51         KEEP(*(.startup.vectors))
52         . = ALIGN (16);
53     } > flash =0xffffffff
54
55     .text : ALIGN(16) SUBALIGN(16)
56     {
57         *(.text.startup.*)
58         *(.text)
59         *(.text.*)
60         *(.rodata)
61         *(.rodata.*)
62         *(.glue_7t)
63         *(.glue_7)
64         *(.gcc*)
65         . = ALIGN(8);
66     } > flash
67
68     .ARM.extab : {*(.ARM.extab* .gnu.linkonce.armextab.*)} > flash
69
70     .ARM.exidx : {
71         PROVIDE(__exidx_start = .);
72         *(.ARM.exidx* .gnu.linkonce.armexidx.*)
73         PROVIDE(__exidx_end = .);
74      } > flash
75
76     .eh_frame_hdr : {*(.eh_frame_hdr)} > flash
77
78     .eh_frame : ONLY_IF_RO {*(.eh_frame)} > flash
79
80     .textalign : ONLY_IF_RO { . = ALIGN(8); } > flash
81
82     _etext = .;
83     _textdata = _etext;
84
85     .stacks :
86     {
87         . = ALIGN(8);
88         __main_stack_base__ = .;
89         . += __main_stack_size__;
90         . = ALIGN(8);
91         __main_stack_end__ = .;
92         __process0_stack_base__ = .;
93         . += __process0_stack_size__;
94         . = ALIGN(8);
95         __process0_stack_end__ = .;
96         __process1_stack_base__ = .;
97         . += __process1_stack_size__;
98         . = ALIGN(8);
99         __process1_stack_end__ = .;
100         __process2_stack_base__ = .;
101         . += __process2_stack_size__;
102         . = ALIGN(8);
103         __process2_stack_end__ = .;
104         __process3_stack_base__ = .;
105         . += __process3_stack_size__;
106         . = ALIGN(8);
107         __process3_stack_end__ = .;
108         __process4_stack_base__ = .;
109         . += __process4_stack_size__;
110         . = ALIGN(8);
111         __process4_stack_end__ = .;
112         __process5_stack_base__ = .;
113         . += __process5_stack_size__;
114         . = ALIGN(8);
115         __process5_stack_end__ = .;
116         __process6_stack_base__ = .;
117         . += __process6_stack_size__;
118         . = ALIGN(8);
119         __process6_stack_end__ = .;
120         __process7_stack_base__ = .;
121         . += __process7_stack_size__;
122         . = ALIGN(8);
123         __process7_stack_end__ = .;
124         . = ALIGN(8);
125     } > ram
126
127     .data :
128     {
129         . = ALIGN(4);
130         PROVIDE(_data = .);
131         *(.data)
132         . = ALIGN(4);
133         *(.data.*)
134         . = ALIGN(4);
135         *(.ramtext)
136         . = ALIGN(4);
137         PROVIDE(_edata = .);
138     } > ram AT > flash
139
140     .bss :
141     {
142         . = ALIGN(4);
143         PROVIDE(_bss_start = .);
144         *(.bss)
145         . = ALIGN(4);
146         *(.bss.*)
147         . = ALIGN(4);
148         *(COMMON)
149         . = ALIGN(4);
150         PROVIDE(_bss_end = .);
151     } > ram
152
153     . = ALIGN(16);
154     PROVIDE(end = .);
155     _end            = .;
156     . = ALIGN(512);
157
158     _regnual_start = .;
159
160 @CERTDO_SUPPORT_START@
161     .gnuk_ch_certificate :
162     {
163         . = ALIGN (@FLASH_PAGE_SIZE@);
164         ch_certificate_start = .;
165         LONG(0xffffffff);
166         . += 1920;
167         . = ALIGN (@FLASH_PAGE_SIZE@);
168     } > flash =0xffffffff
169 @CERTDO_SUPPORT_END@
170
171     .gnuk_flash :
172     {
173         . = ALIGN (@FLASH_PAGE_SIZE@);
174         _data_pool = .;
175         KEEP(*(.gnuk_data))
176         . = ALIGN(@FLASH_PAGE_SIZE@);
177         . += @FLASH_PAGE_SIZE@;
178         _keystore_pool = .;
179         . += 512;
180         . = ALIGN(@FLASH_PAGE_SIZE@);
181         . += 512;
182         . = ALIGN(@FLASH_PAGE_SIZE@);
183         . += 512;
184         . = ALIGN(@FLASH_PAGE_SIZE@);
185         _updatekey_store = .;
186         . += 1024;
187         . = ALIGN(@FLASH_PAGE_SIZE@);
188     } > flash =0xffffffff
189 }
190
191 __heap_base__   = _end;
192 __heap_end__    = __ram_end__;