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