update fraucheky
[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         . = ALIGN(8);
64     } > flash
65
66     .ARM.extab : {*(.ARM.extab* .gnu.linkonce.armextab.*)} > flash
67
68     .ARM.exidx : {
69         PROVIDE(__exidx_start = .);
70         *(.ARM.exidx* .gnu.linkonce.armexidx.*)
71         PROVIDE(__exidx_end = .);
72      } > flash
73
74     .eh_frame_hdr : {*(.eh_frame_hdr)} > flash
75
76     .eh_frame : ONLY_IF_RO {*(.eh_frame)} > flash
77
78     .textalign : ONLY_IF_RO { . = ALIGN(8); } > flash
79
80     _etext = .;
81     _textdata = _etext;
82
83     .stacks :
84     {
85         . = ALIGN(8);
86         __main_stack_base__ = .;
87         . += __main_stack_size__;
88         . = ALIGN(8);
89         __main_stack_end__ = .;
90         __process0_stack_base__ = .;
91         . += __process0_stack_size__;
92         . = ALIGN(8);
93         __process0_stack_end__ = .;
94         __process1_stack_base__ = .;
95         . += __process1_stack_size__;
96         . = ALIGN(8);
97         __process1_stack_end__ = .;
98         __process2_stack_base__ = .;
99         . += __process2_stack_size__;
100         . = ALIGN(8);
101         __process2_stack_end__ = .;
102         __process3_stack_base__ = .;
103         . += __process3_stack_size__;
104         . = ALIGN(8);
105         __process3_stack_end__ = .;
106     } > ram
107
108     .data :
109     {
110         . = ALIGN(4);
111         PROVIDE(_data = .);
112         *(.data)
113         . = ALIGN(4);
114         *(.data.*)
115         . = ALIGN(4);
116         *(.ramtext)
117         . = ALIGN(4);
118         PROVIDE(_edata = .);
119     } > ram AT > flash
120
121     .bss :
122     {
123         . = ALIGN(4);
124         PROVIDE(_bss_start = .);
125         *(.bss)
126         . = ALIGN(4);
127         *(.bss.*)
128         . = ALIGN(4);
129         *(COMMON)
130         . = ALIGN(4);
131         PROVIDE(_bss_end = .);
132     } > ram
133
134     PROVIDE(end = .);
135     _end            = .;
136     . = ALIGN(512);
137     /* reGNUal is now relocatable, it's OK not using fixed address. */
138     _regnual_start = .;
139
140     .fill_ffff :
141     {
142         . = ALIGN (@FLASH_PAGE_SIZE@);
143     } > flash =0xffffffff
144 }
145
146 __heap_base__   = _end;
147 __heap_end__    = __ram_end__;