Use stack-def.h.
[gnuk/neug.git] / src / neug.ld.in
1 /*
2  * ST32F103 memory setup.
3  */
4 MEMORY
5 {
6     flash0 : org = @ORIGIN@, len = 4k
7     flash : org = @ORIGIN@+0x1000, len = @FLASH_SIZE@k - 4k
8     ram : org = 0x20000000, len = @MEMORY_SIZE@k
9 }
10
11 __ram_start__           = ORIGIN(ram);
12 __ram_size__            = LENGTH(ram);
13 __ram_end__             = __ram_start__ + __ram_size__;
14
15 SECTIONS
16 {
17     . = 0;
18
19     .sys : ALIGN(4) SUBALIGN(4)
20     {
21         _sys = .;
22         KEEP(*(.vectors))
23         . = ALIGN(16);
24         KEEP(*(.sys.version))
25         KEEP(*(.sys.board_id))
26         KEEP(*(.sys.board_name))
27         build/sys-*.o(.text)
28         build/sys-*.o(.text.*)
29         build/sys-*.o(.rodata)
30         build/sys-*.o(.rodata.*)
31         . = ALIGN(1024);
32         *(.sys.0)
33         *(.sys.1)
34         *(.sys.2)
35     } > flash0
36
37     _text = .;
38
39     .startup : ALIGN(128) SUBALIGN(128)
40     {
41         KEEP(*(.startup.vectors))
42         . = ALIGN (16);
43     } > flash =0xffffffff
44
45     .text : ALIGN(16) SUBALIGN(16)
46     {
47         *(.text.startup.*)
48         *(.text)
49         *(.text.*)
50         *(.rodata)
51         *(.rodata.*)
52         *(.glue_7t)
53         *(.glue_7)
54         *(.gcc*)
55         . = ALIGN(8);
56     } > flash
57
58     .ARM.extab : {*(.ARM.extab* .gnu.linkonce.armextab.*)} > flash
59
60     .ARM.exidx : {
61         PROVIDE(__exidx_start = .);
62         *(.ARM.exidx* .gnu.linkonce.armexidx.*)
63         PROVIDE(__exidx_end = .);
64      } > flash
65
66     .eh_frame_hdr : {*(.eh_frame_hdr)} > flash
67
68     .eh_frame : ONLY_IF_RO {*(.eh_frame)} > flash
69
70     .textalign : ONLY_IF_RO { . = ALIGN(8); } > flash
71
72     _etext = .;
73     _textdata = _etext;
74
75     .stacks :
76     {
77         . = ALIGN(8);
78         *(.main_stack)
79         *(.process_stack.0)
80         *(.process_stack.1)
81         *(.process_stack.2)
82         *(.process_stack.3)
83         . = ALIGN(8);
84     } > ram
85
86     .data :
87     {
88         . = ALIGN(4);
89         PROVIDE(_data = .);
90         *(.data)
91         . = ALIGN(4);
92         *(.data.*)
93         . = ALIGN(4);
94         *(.ramtext)
95         . = ALIGN(4);
96         PROVIDE(_edata = .);
97     } > ram AT > flash
98
99     .bss :
100     {
101         . = ALIGN(4);
102         PROVIDE(_bss_start = .);
103         *(.bss)
104         . = ALIGN(4);
105         *(.bss.*)
106         . = ALIGN(4);
107         *(COMMON)
108         . = ALIGN(4);
109         PROVIDE(_bss_end = .);
110     } > ram
111
112     . = ALIGN(16);
113     PROVIDE(end = .);
114     _end            = .;
115     . = ALIGN(512);
116     /* reGNUal is now relocatable, it's OK not using fixed address. */
117     _regnual_start = .;
118
119     .fill_ffff :
120     {
121         . = ALIGN (@FLASH_PAGE_SIZE@);
122         *(.passwd)
123         . = ALIGN(4);
124     } > flash =0xffffffff
125 }
126
127 __heap_base__   = _end;
128 __heap_end__    = __ram_end__;