fix neug.ld.in
[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 __process4_stack_size__  = 0x0100;      /* intr: adc dma */
10
11 MEMORY
12 {
13     flash0 : org = @ORIGIN@, len = 4k
14     flash : org = @ORIGIN@+0x1000, len = @FLASH_SIZE@k - 4k
15     ram : org = 0x20000000, len = @MEMORY_SIZE@k
16 }
17
18 /* __flash_start__: flash ROM start address regardless of DFU_SUPPORT */
19 __flash_start__         = 0x08001000;
20 __flash_end__           = ORIGIN(flash) + LENGTH(flash);
21
22 __ram_start__           = ORIGIN(ram);
23 __ram_size__            = LENGTH(ram);
24 __ram_end__             = __ram_start__ + __ram_size__;
25
26 SECTIONS
27 {
28     . = 0;
29
30     .sys : ALIGN(4) SUBALIGN(4)
31     {
32         _sys = .;
33         KEEP(*(.vectors))
34         . = ALIGN(16);
35         *(.sys.version)
36         build/sys.o(.text)
37         build/sys.o(.text.*)
38         build/sys.o(.rodata)
39         build/sys.o(.rodata.*)
40         . = ALIGN(1024);
41         *(.sys.0)
42         *(.sys.1)
43         *(.sys.2)
44     } > flash0
45
46     _text = .;
47
48     .startup : ALIGN(128) SUBALIGN(128)
49     {
50         KEEP(*(.startup.vectors))
51         . = ALIGN (16);
52     } > flash =0xffffffff
53
54     .text : ALIGN(16) SUBALIGN(16)
55     {
56         *(.text.startup.*)
57         *(.text)
58         *(.text.*)
59         *(.rodata)
60         *(.rodata.*)
61         *(.glue_7t)
62         *(.glue_7)
63         *(.gcc*)
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         __process4_stack_base__ = .;
87         . += __process4_stack_size__;
88         . = ALIGN(8);
89         __process4_stack_end__ = .;
90         __process3_stack_base__ = .;
91         . += __process3_stack_size__;
92         . = ALIGN(8);
93         __process3_stack_end__ = .;
94         __process2_stack_base__ = .;
95         . += __process2_stack_size__;
96         . = ALIGN(8);
97         __process2_stack_end__ = .;
98         __process1_stack_base__ = .;
99         . += __process1_stack_size__;
100         . = ALIGN(8);
101         __process1_stack_end__ = .;
102         __process0_stack_base__ = .;
103         . += __process0_stack_size__;
104         . = ALIGN(8);
105         __process0_stack_end__ = .;
106         . = ALIGN(8);
107         __main_stack_base__ = .;
108         . += __main_stack_size__;
109         . = ALIGN(8);
110         __main_stack_end__ = .;
111     } > ram
112
113     .data :
114     {
115         . = ALIGN(4);
116         PROVIDE(_data = .);
117         *(.data)
118         . = ALIGN(4);
119         *(.data.*)
120         . = ALIGN(4);
121         *(.ramtext)
122         . = ALIGN(4);
123         PROVIDE(_edata = .);
124     } > ram AT > flash
125
126     .bss :
127     {
128         . = ALIGN(4);
129         PROVIDE(_bss_start = .);
130         *(.bss)
131         . = ALIGN(4);
132         *(.bss.*)
133         . = ALIGN(4);
134         *(COMMON)
135         . = ALIGN(4);
136         PROVIDE(_bss_end = .);
137     } > ram
138
139     PROVIDE(end = .);
140     _end            = .;
141     . = ALIGN(512);
142     /* reGNUal is now relocatable, it's OK not using fixed address. */
143     _regnual_start = .;
144
145     .fill_ffff :
146     {
147         . = ALIGN (@FLASH_PAGE_SIZE@);
148     } > flash =0xffffffff
149 }
150
151 __heap_base__   = _end;
152 __heap_end__    = __ram_end__;