Remove redundant remove call, which caused problems in the simulator.
[kugel-rb.git] / firmware / boot.lds
blob7f7bb9b12f17f9196ad9e0dd4efec6f8c7c66b72
1 #include "config.h"
3 ENTRY(start)
4 #ifdef CPU_COLDFIRE
5 OUTPUT_FORMAT(elf32-m68k)
6 INPUT(target/coldfire/crt0.o)
7 #elif defined (CPU_ARM)
8 OUTPUT_FORMAT(elf32-littlearm)
9 OUTPUT_ARCH(arm)
10 #ifdef CPU_PP
11 INPUT(target/arm/crt0-pp-bl.o)
12 #else
13 INPUT(target/arm/crt0.o)
14 #endif
15 #else
16 OUTPUT_FORMAT(elf32-sh)
17 INPUT(target/sh/crt0.o)
18 #endif
20 #define DRAMSIZE (MEMORYSIZE * 0x100000)
22 #ifdef IRIVER_H100_SERIES
23 #define DRAMORIG 0x31000000
24 #define IRAMORIG 0x10000000
25 #define IRAMSIZE 0x18000
26 #define FLASHORIG 0x001f0000
27 #define FLASHSIZE 2M
28 #elif defined(IRIVER_H300_SERIES)
29 #define DRAMORIG 0x31000000
30 #define IRAMORIG 0x10000000
31 #define IRAMSIZE 0x18000
32 #define FLASHORIG 0x003f0000
33 #define FLASHSIZE 4M
34 #elif defined(IAUDIO_X5) || defined(IAUDIO_M5)
35 #define DRAMORIG 0x31000000
36 #define IRAMORIG 0x10000000
37 #define IRAMSIZE 0x20000
38 #define FLASHORIG 0x00010000
39 #define FLASHSIZE 4M
40 #elif CONFIG_CPU == PP5020
41 #define DRAMORIG 0x10000000
42 #define IRAMORIG 0x40000000
43 #define IRAMSIZE 0x18000
44 #define FLASHORIG 0x001f0000
45 #define FLASHSIZE 2M
46 #elif (CONFIG_CPU == PP5022) || (CONFIG_CPU == PP5024)
47 #define DRAMORIG 0x10000000
48 #ifndef IRAMORIG
49 #define IRAMORIG 0x40000000
50 #endif
51 #define IRAMSIZE 0x20000
52 #define FLASHORIG 0x001f0000
53 #define FLASHSIZE 2M
54 #elif CONFIG_CPU == S3C2440
55 #define DRAMORIG 0x30000000
56 #define IRAMORIG 0x40000000
57 #define IRAMSIZE 4K
58 #define FLASHORIG 0x0000000
59 #define FLASHSIZE 1M
60 #elif CONFIG_CPU == PP5002
61 #define DRAMORIG 0x28000000
62 #define IRAMORIG 0x40000000
63 #define IRAMSIZE 0x18000
64 #define FLASHORIG 0x001f0000
65 #define FLASHSIZE 2M
66 #else
67 #define DRAMORIG 0x09000000
68 #define IRAMORIG 0x0f000000
69 #define IRAMSIZE 0x1000
70 #define FLASHORIG 0x02000000 + ROM_START
71 #define FLASHSIZE 256K - ROM_START
72 #endif
74 #if !defined(CPU_PP) && (CONFIG_CPU!=S3C2440)
75 MEMORY
77    DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE
78    IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE
79    FLASH : ORIGIN = FLASHORIG, LENGTH = FLASHSIZE
81 #endif
83 SECTIONS
84 #ifdef CPU_PP
86   . = IRAMORIG;
88   .text : { 
89     *(.init.text)
90     *(.text*)
91   }
93   .data : { 
94     *(.icode)
95     *(.irodata)
96     *(.idata)
97     *(.data*)
98     _dataend = . ;
99    }
101   .stack :
102   {
103      *(.stack)
104      _stackbegin = .;
105      stackbegin = .;
106      . += 0x2000;
107      _stackend = .;
108      stackend = .;
109   }
111   /* The bss section is too large for IRAM - we just move it 16MB into the
112      DRAM */
114   . = (DRAMORIG+16*1024*1024);
115   .bss : {
116      _edata = .;
117      *(.bss*);
118      *(.ibss);
119      _end = .;
120    }
122 #elif (CONFIG_CPU==S3C2440)
124   . = DRAMORIG + 0x1000000;
125   .text : {
126     *(.init.text)
127     *(.text*)
128   }
129   .data : {
130     *(.icode)
131     *(.irodata)
132     *(.idata)
133     *(.data*)
134     _dataend = . ;
135    }
136   .stack :
137   {
138      *(.stack)
139      _stackbegin = .;
140      stackbegin = .;
141      . += 0x2000;
142      _stackend = .;
143      stackend = .;
144   }
145   .bss : {
146      _edata = .;
147      *(.bss*);
148      *(.ibss);
149      _end = .;
150    }
152 #else
154     .vectors :
155     {
156 #if defined(IAUDIO_X5) || defined(IAUDIO_M5)
157         *(.init.text)
158 #endif
159         _datacopy = .;
160     } > FLASH
162     .data : AT ( _datacopy )
163     {
164         _datastart = .;
165         KEEP(*(.resetvectors));
166         *(.resetvectors);
167         KEEP(*(.vectors));
168         *(.vectors);
169         . = ALIGN(0x200);
170         *(.icode)
171         *(.irodata)
172         *(.idata)
173         *(.data*)
174         . = ALIGN(0x4);
175         _dataend = .;         
176         . = ALIGN(0x10);  /* Maintain proper alignment for .text section */
177     } > IRAM
178     
179     /* TRICK ALERT! Newer versions of the linker don't allow output sections
180        to overlap even if one of them is empty, so advance the location pointer
181        "by hand" */
182     .text LOADADDR(.data) + SIZEOF(.data) :
183     {
184         *(.init.text)
185         *(.text*)
186         . = ALIGN(0x4);
187     } > FLASH
189     .rodata :
190     {
191         *(.rodata*)
192         . = ALIGN(0x4);
193         _iramcopy = .;
194     } > FLASH
196     .stack :
197     {
198        *(.stack)
199        _stackbegin = .;
200        stackbegin = .;
201        . += 0x2000;
202        _stackend = .;
203        stackend = .;
204     } > IRAM
206 #if defined(IRIVER_H100_SERIES) || defined(IRIVER_H300_SERIES) \
207  || defined(IAUDIO_X5) || defined(IAUDIO_M5)
208     .bss DRAMORIG+0x800000:
209 #else
210     .bss :
211 #endif
212     {
213        _edata = .;
214         *(.ibss)
215         *(.bss*)
216         *(COMMON)
217        _end = .;
218 #if defined(IRIVER_H100_SERIES) || defined(IRIVER_H300_SERIES) \
219  || defined(IAUDIO_X5) || defined(IAUDIO_M5)
220     } > DRAM
221 #else
222     } > IRAM
223 #endif
226 #endif