FS#8961 - Anti-Aliased Fonts.
[kugel-rb.git] / firmware / target / arm / philips / app.lds
blob22468192eb5682abf0003c5e2981c7fe51be1ca1
1 #include "config.h"
3 ENTRY(start)
5 OUTPUT_FORMAT(elf32-littlearm)
6 OUTPUT_ARCH(arm)
7 STARTUP(target/arm/crt0-pp.o)
9 #define PLUGINSIZE PLUGIN_BUFFER_SIZE
10 #define CODECSIZE CODEC_SIZE
12 #ifdef DEBUG
13 #define STUBOFFSET 0x10000
14 #else
15 #define STUBOFFSET 0
16 #endif
18 #define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGINSIZE - STUBOFFSET - CODECSIZE
20 #define DRAMORIG 0x00000000 + STUBOFFSET
21 #define IRAMORIG 0x40000000
22 #define IRAMSIZE 0xc000
24 #ifdef CPU_PP502x
25 #define NOCACHE_BASE    0x10000000
26 #else
27 #define NOCACHE_BASE    0x28000000
28 #endif
30 #define CACHEALIGN_SIZE 16
32 /* End of the audio buffer, where the codec buffer starts */
33 #define ENDAUDIOADDR  (DRAMORIG + DRAMSIZE)
35 /* Where the codec buffer ends, and the plugin buffer starts */
36 #define ENDADDR (ENDAUDIOADDR + CODECSIZE)
38 MEMORY
40     DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE
41     IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE
44 SECTIONS
46     .text :
47     {
48         loadaddress = .;
49         _loadaddress = .;
50         . = ALIGN(0x200);
51         *(.init.text)
52         *(.text*)
53         *(.glue_7)
54         *(.glue_7t)
55         . = ALIGN(0x4);
56     } > DRAM
58     .rodata :
59     {
60         *(.rodata)  /* problems without this, dunno why */
61         *(.rodata*)
62         *(.rodata.str1.1)
63         *(.rodata.str1.4)
64         . = ALIGN(0x4);
66         /* Pseudo-allocate the copies of the data sections */
67         _datacopy = .;
68     } > DRAM
70     /* TRICK ALERT! For RAM execution, we put the .data section at the
71        same load address as the copy. Thus, we don't waste extra RAM
72        when we don't actually need the copy.  */
73     .data : AT ( _datacopy )
74     {
75         _datastart = .;
76         *(.data*)
77         . = ALIGN(0x4);
78         _dataend  = .;
79     } > DRAM
81 #if NOCACHE_BASE != 0
82     /* .ncdata section is placed at uncached physical alias address and is
83      * loaded at the proper cached virtual address - no copying is
84      * performed in the init code */
85     .ncdata . + NOCACHE_BASE :
86     {
87         . = ALIGN(CACHEALIGN_SIZE);
88         *(.ncdata*)
89         . = ALIGN(CACHEALIGN_SIZE);
90     } AT> DRAM
91 #endif
92     
93     /DISCARD/ :
94     {
95         *(.eh_frame)
96     }
98     .vectors 0x0 :
99     {
100         _vectorsstart = .;
101         *(.vectors);
102         _vectorsend = .;
103     } AT> DRAM
105     _vectorscopy = LOADADDR(.vectors);
106     _noloaddram  = LOADADDR(.vectors);
108     .ibss IRAMORIG (NOLOAD) :
109     {
110         _iedata = .;
111         *(.qharray)
112         *(.ibss)
113         . = ALIGN(0x4);
114         _iend = .;
115     } > IRAM
117     .iram _iend :
118     {
119         _iramstart = .;
120         *(.icode)
121         *(.irodata)
122         *(.idata)
123         . = ALIGN(0x4);
124         _iramend = .;
125     } > IRAM AT> DRAM
127     _iramcopy = LOADADDR(.iram);
129     .idle_stacks (NOLOAD) :
130     {
131        *(.idle_stacks)
132 #if NUM_CORES > 1
133        cpu_idlestackbegin = .;
134        . += IDLE_STACK_SIZE;
135        cpu_idlestackend = .;
136 #endif
137        cop_idlestackbegin = .;
138        . += IDLE_STACK_SIZE;
139        cop_idlestackend = .;
140     } > IRAM
142     .stack (NOLOAD) :
143     {
144        *(.stack)
145        stackbegin = .;
146        . += 0x2000;
147        stackend = .;
148     } > IRAM
150     /* .bss and .ncbss are treated as a single section to use one init loop to
151      * zero it - note "_edata" and "_end" */
152     .bss _noloaddram (NOLOAD) :
153     {
154        _edata = .;
155         *(.bss*)
156         *(COMMON)
157         . = ALIGN(0x4);
158     } > DRAM
160 #if NOCACHE_BASE != 0
161     .ncbss . + NOCACHE_BASE (NOLOAD):
162     {
163         . = ALIGN(CACHEALIGN_SIZE);
164         *(.ncbss*)
165         . = ALIGN(CACHEALIGN_SIZE);
166     } AT> DRAM
167 #endif
169     /* This will be aligned by preceding alignments */
170     .endaddr . - NOCACHE_BASE (NOLOAD) :
171     {
172         _end = .;
173     } > DRAM
175     .audiobuf (NOLOAD) :
176     {
177         _audiobuffer = .;
178         audiobuffer = .;
179     } > DRAM
180     
181     .audiobufend ENDAUDIOADDR (NOLOAD) :
182     {
183         audiobufend = .;
184         _audiobufend = .;
185     } > DRAM
187     .codec ENDAUDIOADDR (NOLOAD) :
188     {
189         codecbuf = .;
190         _codecbuf = .;
191     }
193     .plugin ENDADDR (NOLOAD) :
194     {
195         _pluginbuf = .;
196         pluginbuf = .;
197     }