Update the french translation with one minor fix for one string.
[Rockbox.git] / firmware / boot.lds
blob108660f2af4092f7ee7a457f9d04b7c307854d28
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 #elif CONFIG_CPU==DM320
13 INPUT(target/arm/tms320dm320/crt0.o)
14 #elif CONFIG_CPU==S3C2440
15 INPUT(target/arm/s3c2440/crt0.o)
16 #elif defined(CPU_TCC77X)
17 INPUT(target/arm/tcc77x/crt0.o)
18 #else
19 INPUT(target/arm/crt0.o)
20 #endif
21 #else
22 OUTPUT_FORMAT(elf32-sh)
23 INPUT(target/sh/crt0.o)
24 #endif
26 #define DRAMSIZE (MEMORYSIZE * 0x100000)
28 #ifdef IRIVER_H100_SERIES
29 #define DRAMORIG 0x31000000
30 #define IRAMORIG 0x10000000
31 #define IRAMSIZE 0x18000
32 #define FLASHORIG 0x001f0000
33 #define FLASHSIZE 2M
34 #elif defined(IRIVER_H300_SERIES)
35 #define DRAMORIG 0x31000000
36 #define IRAMORIG 0x10000000
37 #define IRAMSIZE 0x18000
38 #define FLASHORIG 0x003f0000
39 #define FLASHSIZE 4M
40 #elif defined(IAUDIO_X5) || defined(IAUDIO_M5)
41 #define DRAMORIG 0x31000000
42 #define IRAMORIG 0x10000000
43 #define IRAMSIZE 0x20000
44 #define FLASHORIG 0x00010000
45 #define FLASHSIZE 4M
46 #elif CONFIG_CPU == PP5020
47 #define DRAMORIG 0x10000000
48 #define IRAMORIG 0x40000000
49 #define IRAMSIZE 0x18000
50 #define FLASHORIG 0x001f0000
51 #define FLASHSIZE 2M
52 #elif (CONFIG_CPU == PP5022) || (CONFIG_CPU == PP5024)
53 #define DRAMORIG 0x10000000
54 #ifndef IRAMORIG
55 #define IRAMORIG 0x40000000
56 #endif
57 #define IRAMSIZE 0x20000
58 #define FLASHORIG 0x001f0000
59 #define FLASHSIZE 2M
60 #elif CONFIG_CPU == S3C2440
61 #define DRAMORIG 0x30000000
62 #define IRAMORIG 0x40000000
63 #define IRAMSIZE 4K
64 #define FLASHORIG 0x0000000
65 #define FLASHSIZE 1M
66 #elif CONFIG_CPU == DM320
67 #define DRAMORIG 0x00900000
68 #define IRAMORIG 0x00000000
69 #define IRAMSIZE 16K
70 #define FLASHORIG 0x00100000
71 #define FLASHSIZE 8M
72 #elif CONFIG_CPU == PP5002
73 #define DRAMORIG 0x28000000
74 #define IRAMORIG 0x40000000
75 #define IRAMSIZE 0x18000
76 #define FLASHORIG 0x001f0000
77 #define FLASHSIZE 2M
78 #elif CONFIG_CPU == IMX31L
79 #define DRAMORIG 0x80000000
80 #define IRAMORIG 0x1FFFC000
81 #define IRAMSIZE 16K
82 #define FLASHORIG 0x0000000
83 #define FLASHSIZE 1M
84 #elif defined(CPU_TCC77X)
85 #define DRAMORIG 0x20000000
86 #define IRAMORIG 0x00000000
87 #define IRAMSIZE 64K
88 #define FLASHORIG 0x0000000
89 #define FLASHSIZE 1M
90 #else
91 #define DRAMORIG 0x09000000
92 #define IRAMORIG 0x0f000000
93 #define IRAMSIZE 0x1000
94 #define FLASHORIG 0x02000000 + ROM_START
95 #define FLASHSIZE 256K - ROM_START
96 #endif
98 #if defined(CPU_TCC77X)
99 MEMORY
101 #ifdef TCCBOOT
102    DRAM : ORIGIN = DRAMORIG + DRAMSIZE - 0x100000, LENGTH = 0x100000
103 #else
104    DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE
105 #endif
106    IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE
108 #elif !defined(CPU_PP) && (CONFIG_CPU!=S3C2440) && (CONFIG_CPU!=IMX31L)
109 MEMORY
111    DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE
112    IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE
113    FLASH : ORIGIN = FLASHORIG, LENGTH = FLASHSIZE
115 #endif
117 SECTIONS
118 #ifdef CPU_PP
120   . = IRAMORIG;
122   .text : {
123     *(.init.text)
124     *(.text*)
125   }
127   .data : {
128     *(.icode)
129     *(.irodata)
130     *(.idata)
131     *(.data*)
132     _dataend = . ;
133    }
135   .stack :
136   {
137      *(.stack)
138      _stackbegin = .;
139      stackbegin = .;
140      . += 0x2000;
141      _stackend = .;
142      stackend = .;
143   }
145   /* The bss section is too large for IRAM - we just move it 16MB into the
146      DRAM */
148   . = (DRAMORIG+16*1024*1024);
149   .bss : {
150      _edata = .;
151      *(.bss*);
152      *(.ibss);
153      _end = .;
154    }
156 #elif (CONFIG_CPU==S3C2440)
158     . = DRAMORIG + 0x1000000;
160     .text : {
161         *(.init.text)
162         *(.text*)
163     }
165     .data : {
166         *(.icode)
167         *(.irodata)
168         *(.idata)
169         *(.data*)
170         . = ALIGN(0x4);
171         _dataend = . ;
172      }
174     .stack :
175     {
176          *(.stack)
177          _stackbegin = .;
178          stackbegin = .;
179          . += 0x2000;
180          _stackend = .;
181          stackend = .;
182     }
183     .bss : {
184          _edata = .;
185          *(.bss*);
186          *(.ibss);
187          *(COMMON)
188          _end = .;
189      }
191 #elif defined(CPU_TCC77X)
193     .text : {
194         *(.init.text)
195         *(.text)
196         *(.text*)
197         *(.glue_7)
198         *(.glue_7t)
199    } > DRAM
201     .data : {
202         *(.icode)
203         *(.irodata)
204         *(.idata)
205         *(.data*)
206         *(.rodata.*)
207         . = ALIGN(0x4);
208         _dataend = . ;
209     } > DRAM
211     .stack :
212     {
213          *(.stack)
214          _stackbegin = .;
215          stackbegin = .;
216          . += 0x2000;
217          _stackend = .;
218          stackend = .;
219     } > DRAM
220     .bss : {
221          _edata = .;
222          *(.bss*);
223          *(.ibss);
224          *(COMMON)
225          _end = .;
226      } > DRAM
228 #elif (CONFIG_CPU==DM320)
230     . = DRAMORIG + 0x1000000;
232     .text : {
233         loadaddress = .;
234         _loadaddress = .;
235         *(.init.text)
236         *(.text*)
237         *(.glue_7)
238         *(.glue_7t)
239         . = ALIGN(0x4);
240     } > DRAM
242     .rodata :
243     {
244         *(.rodata)  /* problems without this, dunno why */
245         *(.rodata*)
246         *(.rodata.str1.1)
247         *(.rodata.str1.4)
248         . = ALIGN(0x4);
250         /* Pseudo-allocate the copies of the data sections */
251         _datacopy = .;
252     } > DRAM
254     .data : {
255         *(.icode)
256         *(.irodata)
257         *(.idata)
258         *(.data*)
259         . = ALIGN(0x4);
260         _dataend = . ;
261     } > DRAM
263     .stack :
264     {
265          *(.stack)
266          _stackbegin = .;
267          stackbegin = .;
268          . += 0x2000;
269          _stackend = .;
270          stackend = .;
271     } > DRAM
273     .bss :
274     {
275          _edata = .;
276          *(.bss*);
277          *(.ibss);
278          *(COMMON)
279          _end = .;
280     } > DRAM
282     .vectors IRAMORIG :
283     {
284         _vectorsstart = .;
285         KEEP(*(.resetvectors));
286         *(.resetvectors);
287         KEEP(*(.vectors));
288         *(.vectors);
289         _vectorsend = .;
290     } AT > DRAM
291     _vectorscopy = LOADADDR(.vectors);
293 #elif (CONFIG_CPU==IMX31L)
295   . = 0x8a000000;
296   .vectors : 
297   {  
298     KEEP(*(.vectors*));
299     *(.vectors*);
300   }  
301   .text : {
302     *(.init.text)
303     *(.text*)
304   }
305   .data : {
306     *(.icode)
307     *(.irodata)
308     *(.idata)
309     *(.data*)
310     _dataend = . ;
311    }
312   .stack :
313   {
314      *(.stack)
315      _stackbegin = .;
316      stackbegin = .;
317      . += 0x2000;
318      _stackend = .;
319      stackend = .;
320   }
321   .bss : {
322      _edata = .;
323      *(.bss*);
324      *(.ibss);
325      _end = .;
326    }
328 #else
330     .vectors :
331     {
332 #if defined(IAUDIO_X5) || defined(IAUDIO_M5)
333         *(.init.text)
334 #endif
335         _datacopy = .;
336     } > FLASH
338     .data : AT ( _datacopy )
339     {
340         _datastart = .;
341         KEEP(*(.resetvectors));
342         *(.resetvectors);
343         KEEP(*(.vectors));
344         *(.vectors);
345         . = ALIGN(0x200);
346         *(.icode)
347         *(.irodata)
348         *(.idata)
349         *(.data*)
350         . = ALIGN(0x4);
351         _dataend = .;
352         . = ALIGN(0x10);  /* Maintain proper alignment for .text section */
353     } > IRAM
355     /* TRICK ALERT! Newer versions of the linker don't allow output sections
356        to overlap even if one of them is empty, so advance the location pointer
357        "by hand" */
358     .text LOADADDR(.data) + SIZEOF(.data) :
359     {
360         *(.init.text)
361         *(.text*)
362         . = ALIGN(0x4);
363     } > FLASH
365     .rodata :
366     {
367         *(.rodata*)
368         . = ALIGN(0x4);
369         _iramcopy = .;
370     } > FLASH
372     .stack :
373     {
374        *(.stack)
375        _stackbegin = .;
376        stackbegin = .;
377        . += 0x2000;
378        _stackend = .;
379        stackend = .;
380     } > IRAM
382 #if defined(IRIVER_H100_SERIES) || defined(IRIVER_H300_SERIES) \
383  || defined(IAUDIO_X5) || defined(IAUDIO_M5)
384     .bss DRAMORIG+0x800000:
385 #else
386     .bss :
387 #endif
388     {
389        _edata = .;
390         *(.ibss)
391         *(.bss*)
392         *(COMMON)
393        _end = .;
394 #if defined(IRIVER_H100_SERIES) || defined(IRIVER_H300_SERIES) \
395  || defined(IAUDIO_X5) || defined(IAUDIO_M5)
396     } > DRAM
397 #else
398     } > IRAM
399 #endif
402 #endif