193d945213f8276a62bcc5380d14c0a04271a733
[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 /* __flash_start__: flash ROM start address regardless of DFU_SUPPORT */
18 __flash_start__         = 0x08001000;
19 __flash_end__           = ORIGIN(flash) + LENGTH(flash);
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         *(.sys.version)
35         build/sys.o(.text)
36         build/sys.o(.text.*)
37         build/sys.o(.rodata)
38         build/sys.o(.rodata.*)
39         . = ALIGN(1024);
40         *(.sys.0)
41         *(.sys.1)
42         *(.sys.2)
43     } > flash0
44
45     _text = .;
46
47     .startup : ALIGN(128) SUBALIGN(128)
48     {
49         KEEP(*(.startup.vectors))
50         . = ALIGN (16);
51     } > flash =0xffffffff
52
53     .text : ALIGN(16) SUBALIGN(16)
54     {
55         *(.text.startup.*)
56         *(.text)
57         *(.text.*)
58         *(.rodata)
59         *(.rodata.*)
60         *(.glue_7t)
61         *(.glue_7)
62         *(.gcc*)
63     } > flash
64
65     .ARM.extab : {*(.ARM.extab* .gnu.linkonce.armextab.*)} > flash
66
67     .ARM.exidx : {
68         PROVIDE(__exidx_start = .);
69         *(.ARM.exidx* .gnu.linkonce.armexidx.*)
70         PROVIDE(__exidx_end = .);
71      } > flash
72
73     .eh_frame_hdr : {*(.eh_frame_hdr)} > flash
74
75     .eh_frame : ONLY_IF_RO {*(.eh_frame)} > flash
76
77     .textalign : ONLY_IF_RO { . = ALIGN(8); } > flash
78
79     _etext = .;
80     _textdata = _etext;
81
82     .stacks :
83     {
84         . = ALIGN(8);
85         __main_stack_base__ = .;
86         . += __main_stack_size__;
87         . = ALIGN(8);
88         __main_stack_end__ = .;
89         __process0_stack_base__ = .;
90         . += __process0_stack_size__;
91         . = ALIGN(8);
92         __process0_stack_end__ = .;
93         __process1_stack_base__ = .;
94         . += __process1_stack_size__;
95         . = ALIGN(8);
96         __process1_stack_end__ = .;
97         __process2_stack_base__ = .;
98         . += __process2_stack_size__;
99         . = ALIGN(8);
100         __process2_stack_end__ = .;
101         __process3_stack_base__ = .;
102         . += __process3_stack_size__;
103         . = ALIGN(8);
104         __process3_stack_end__ = .;
105     } > ram
106
107     .data :
108     {
109         . = ALIGN(4);
110         PROVIDE(_data = .);
111         *(.data)
112         . = ALIGN(4);
113         *(.data.*)
114         . = ALIGN(4);
115         *(.ramtext)
116         . = ALIGN(4);
117         PROVIDE(_edata = .);
118     } > ram AT > flash
119
120     .bss :
121     {
122         . = ALIGN(4);
123         PROVIDE(_bss_start = .);
124         *(.bss)
125         . = ALIGN(4);
126         *(.bss.*)
127         . = ALIGN(4);
128         *(COMMON)
129         . = ALIGN(4);
130         PROVIDE(_bss_end = .);
131     } > ram
132
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     } > flash =0xffffffff
143 }
144
145 __heap_base__   = _end;
146 __heap_end__    = __ram_end__;