A few minor fixes (typos, accuracy in the Ondio manual).
[kugel-rb.git] / firmware / rom.lds
blob29e72d70c04003dc453902038fb9e55e8b6cff9b
1 #include "config.h"
3 ENTRY(start)
4 #ifdef CPU_COLDFIRE
5 OUTPUT_FORMAT(elf32-m68k)
6 #else
7 OUTPUT_FORMAT(elf32-sh)
8 #endif
9 #ifdef CPU_COLDFIRE
10 INPUT(target/coldfire/crt0.o)
11 #elif defined(CPU_PP)
12 INPUT(target/arm/crt0-pp.o)
13 #elif defined(CPU_ARM)
14 INPUT(target/arm/crt0.o)
15 #elif CONFIG_CPU == SH7034
16 INPUT(target/sh/crt0.o)
17 #else
18 INPUT(crt0.o)
19 #endif
22 #if MEMORYSIZE >= 32
23 #define PLUGINSIZE 0xC0000
24 #else
25 #define PLUGINSIZE 0x8000
26 #endif
28 #define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGINSIZE
30 #ifdef IRIVER_H100
31 #define DRAMORIG 0x31000000
32 #define IRAMORIG 0x10000000
33 #define IRAMSIZE 0x18000
34 #define FLASHORIG 0x001f0000
35 #define FLASHSIZE 2M
36 #else
37 #define DRAMORIG 0x09000000
38 #define IRAMORIG 0x0f000000
39 #define IRAMSIZE 0x1000
40 #define FLASHORIG 0x02000000 + ROM_START
41 #define FLASHSIZE 256K - ROM_START
42 #endif
44 #define ENDADDR  (DRAMORIG + DRAMSIZE)
46 MEMORY
48    DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE
49    IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE
50    FLASH : ORIGIN = FLASHORIG, LENGTH = FLASHSIZE
52 SECTIONS
54     .flashheader : 
55     {
56         /* place flash link address first, so the plugin can check */   
57         LONG(FLASHORIG);
58         /* followed by the start address, the first vector takes care of this. */
59         /* If we ever place the table elsewhere, put a constant here. */
60     } > FLASH
62     .vectors :
63     {
64         _datacopy = .;
65     } > FLASH
67     .data : AT ( _datacopy )
68     {
69         loadaddress = .;
70         _loadaddress = .;
71         _datastart = .;
72         *(.resetvectors);
73         *(.vectors);
74         . = ALIGN(0x200);
75         *(.data)
76         . = ALIGN(0x4);
77         _dataend = .;         
78         . = ALIGN(0x10);  /* Maintain proper alignment for .text section */
79     } > DRAM
80     
81     /* TRICK ALERT! Newer versions of the linker don't allow output sections
82        to overlap even if one of them is empty, so advance the location pointer
83        "by hand" */
84     .text LOADADDR(.data) + SIZEOF(.data) :
85     {
86         *(.init.text)
87         *(.text)
88         . = ALIGN(0x4);
89     } > FLASH
91     .rodata :
92     {
93         *(.rodata)
94         *(.rodata.str1.1)
95         *(.rodata.str1.4)
96         . = ALIGN(0x4);
97         _iramcopy = .;
98     } > FLASH
100     .iram IRAMORIG : AT ( _iramcopy )
101     {
102         _iramstart = .;
103         *(.icode)
104         *(.irodata)
105         *(.idata)
106         _iramend = .;
107     } > IRAM
108   
109     .ibss (NOLOAD) :
110     {
111         _iedata = .;
112         *(.ibss)
113         . = ALIGN(0x4);
114         _iend = .;
115     } > IRAM
117     .stack :
118     {
119        *(.stack)
120        _stackbegin = .;
121        stackbegin = .;
122        . += 0x2000;
123        _stackend = .;
124        stackend = .;
125     } > DRAM
127     .bss :
128     {
129        _edata = .;
130         *(.bss)
131         *(COMMON)
132        _end = .;
133     } > DRAM
135     .audiobuf :
136     {
137         . = ALIGN(0x4);
138         _audiobuffer = .;
139     } > DRAM
141     .audiobufend ENDADDR:
142     {
143         _audiobufend = .;
144     } > DRAM
146     .plugin ENDADDR:
147     {
148         _pluginbuf = .;
149     }