ARM: use BX when branch to an address in register
[kugel-rb.git] / firmware / target / arm / s3c2440 / app.lds
bloba436d6577094345bd2367c60875135523431d999
1 #include "config.h"
3 ENTRY(start)
5 OUTPUT_FORMAT(elf32-littlearm)
6 OUTPUT_ARCH(arm)
7 STARTUP(target/arm/s3c2440/crt0.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 #include "cpu.h"
19 #define DRAMSIZE (MEMORYSIZE * 0x100000) - STUBOFFSET - PLUGINSIZE - CODECSIZE - LCD_BUFFER_SIZE - TTB_SIZE
21 #define DRAMORIG 0x00000000 + STUBOFFSET
23 /* End of the audio buffer, where the codec buffer starts */
24 #define ENDAUDIOADDR  (DRAMORIG + DRAMSIZE)
26 /* Where the codec buffer ends, and the plugin buffer starts */
27 #define ENDADDR (ENDAUDIOADDR + CODECSIZE)
29 MEMORY
31     DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE
34 SECTIONS
36     /* This nice little hack is to trick ROLO into loading in a certain place
37      * CRT0.s takes care of making sure the code is where it needs to be
38      */
39     loadaddress = 0x31000000; 
41     .vectors DRAMORIG :
42     {
43         _vectorstart = .;
44         *(.vectors*);
45         *(.init.text)
46         . = ALIGN(0x4);
47     } > DRAM
49     .text :
50     {
51         _textstart = .;
52         *(.text)
53         *(.text*)
54         *(.icode)
55         *(.glue_7)
56         *(.glue_7t)
57         . = ALIGN(0x4);
58     } > DRAM
60     _textcopy = LOADADDR(.text);
62     .rodata :
63     {
64         *(.rodata)  /* problems without this, dunno why */
65         *(.rodata*)
66         *(.rodata.str1.1)
67         *(.rodata.str1.4)
68         *(.irodata*)
69         . = ALIGN(0x4);
70     } > DRAM
72     .data :
73     {
74         *(.data*)
75         *(.idata*)
76         . = ALIGN(0x4);
77     } > DRAM
79     /DISCARD/ :
80     {
81         *(.eh_frame)
82     } 
84     _initdata_end =.;
86     .stack (NOLOAD) : 
87     {
88        *(.stack)
89        stackbegin = .;
90        . += 0x2000;
91        stackend = .;
92     } > DRAM
94     .bss (NOLOAD) :
95     {
96        _edata = .;
97         *(.bss*)
98         *(.ibss*)
99         *(COMMON)
100         . = ALIGN(0x4);
101        _end = .;
102     } > DRAM
104     .audiobuf (NOLOAD) :
105     {
106         . = ALIGN(4);
107         _audiobuffer = .;
108         audiobuffer = .;
109     } > DRAM
111     .audiobufend ENDAUDIOADDR (NOLOAD) :
112     {
113         audiobufend = .;
114         _audiobufend = .;
115     } > DRAM
117     .codec ENDAUDIOADDR  (NOLOAD) :
118     {
119         codecbuf = .;
120         _codecbuf = .;
121     }
123     .plugin ENDADDR (NOLOAD) :
124     {
125         _pluginbuf = .;
126         pluginbuf = .;
127     }