regnual: relocatable
[gnuk/gnuk.git] / regnual / regnual.ld
1 /*
2  * ST32F103 memory setup.
3  */
4 __main_stack_size__     = 0x0400;
5 __process_stack_size__  = 0x0200;
6 __stacks_total_size__   = __main_stack_size__ + __process_stack_size__;
7
8 MEMORY
9 {
10     ram0 : org = 0x20000000, len = 0x1400
11     ram1 : org = 0x20001400, len = 20k - 0x1400
12 }
13
14 vector = 0x08000000;
15 _flash_start = 0x08001000;
16 _flash_end   = 0x08020000;
17
18 __ram_start__           = ORIGIN(ram0);
19 __ram_size__            = 20k;
20 __ram_end__             = __ram_start__ + __ram_size__;
21
22 SECTIONS
23 {
24     . = 0;
25
26     .bss :
27     {
28         _bss_start = .;
29         *(.bss)
30         . = ALIGN(4);
31         *(.bss.*)
32         . = ALIGN(4);
33         *(COMMON)
34         . = ALIGN(4);
35         _bss_end = .;
36     } > ram0
37
38     .text : ALIGN(16) SUBALIGN(16)
39     {
40         _text = .;
41         KEEP(*(.vectors))
42         *(.text.entry)
43         *(.text)
44         *(.text.*)
45         *(.rodata)
46         *(.rodata.*)
47         *(.glue_7t)
48         *(.glue_7)
49         *(.gcc*)
50     } > ram1
51
52     .got :
53     {
54         *(.got)
55         *(.got.*)
56     } > ram1
57
58     .ctors :
59     {
60         PROVIDE(_ctors_start_ = .);
61         KEEP(*(SORT(.ctors.*)))
62         KEEP(*(.ctors))
63         PROVIDE(_ctors_end_ = .);
64     } > ram1
65
66     .dtors :
67     {
68         PROVIDE(_dtors_start_ = .);
69         KEEP(*(SORT(.dtors.*)))
70         KEEP(*(.dtors))
71         PROVIDE(_dtors_end_ = .);
72     } > ram1
73
74     .ARM.extab : {*(.ARM.extab* .gnu.linkonce.armextab.*)}
75
76     __exidx_start = .;
77     .ARM.exidx : {*(.ARM.exidx* .gnu.linkonce.armexidx.*)} > ram1
78     __exidx_end = .;
79
80     .eh_frame_hdr : {*(.eh_frame_hdr)}
81
82     .eh_frame : ONLY_IF_RO {*(.eh_frame)}
83
84     . = ALIGN(4);
85     _etext = .;
86     _textdata = _etext;
87
88     .data :
89     {
90         _data = .;
91         *(.data)
92         . = ALIGN(4);
93         *(.data.*)
94         . = ALIGN(4);
95         *(.ramtext)
96         . = ALIGN(4);
97         _edata = .;
98     } > ram1
99
100     PROVIDE(end = .);
101     _end            = .;
102 }
103
104 __heap_base__   = _end;
105 __heap_end__    = __ram_end__ - __stacks_total_size__;