summaryrefslogtreecommitdiff
path: root/firmware/target/arm/samsung/app.lds
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/samsung/app.lds')
-rw-r--r--firmware/target/arm/samsung/app.lds198
1 files changed, 198 insertions, 0 deletions
diff --git a/firmware/target/arm/samsung/app.lds b/firmware/target/arm/samsung/app.lds
new file mode 100644
index 0000000000..22468192eb
--- /dev/null
+++ b/firmware/target/arm/samsung/app.lds
@@ -0,0 +1,198 @@
1#include "config.h"
2
3ENTRY(start)
4
5OUTPUT_FORMAT(elf32-littlearm)
6OUTPUT_ARCH(arm)
7STARTUP(target/arm/crt0-pp.o)
8
9#define PLUGINSIZE PLUGIN_BUFFER_SIZE
10#define CODECSIZE CODEC_SIZE
11
12#ifdef DEBUG
13#define STUBOFFSET 0x10000
14#else
15#define STUBOFFSET 0
16#endif
17
18#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGINSIZE - STUBOFFSET - CODECSIZE
19
20#define DRAMORIG 0x00000000 + STUBOFFSET
21#define IRAMORIG 0x40000000
22#define IRAMSIZE 0xc000
23
24#ifdef CPU_PP502x
25#define NOCACHE_BASE 0x10000000
26#else
27#define NOCACHE_BASE 0x28000000
28#endif
29
30#define CACHEALIGN_SIZE 16
31
32/* End of the audio buffer, where the codec buffer starts */
33#define ENDAUDIOADDR (DRAMORIG + DRAMSIZE)
34
35/* Where the codec buffer ends, and the plugin buffer starts */
36#define ENDADDR (ENDAUDIOADDR + CODECSIZE)
37
38MEMORY
39{
40 DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE
41 IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE
42}
43
44SECTIONS
45{
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
57
58 .rodata :
59 {
60 *(.rodata) /* problems without this, dunno why */
61 *(.rodata*)
62 *(.rodata.str1.1)
63 *(.rodata.str1.4)
64 . = ALIGN(0x4);
65
66 /* Pseudo-allocate the copies of the data sections */
67 _datacopy = .;
68 } > DRAM
69
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
80
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 }
97
98 .vectors 0x0 :
99 {
100 _vectorsstart = .;
101 *(.vectors);
102 _vectorsend = .;
103 } AT> DRAM
104
105 _vectorscopy = LOADADDR(.vectors);
106 _noloaddram = LOADADDR(.vectors);
107
108 .ibss IRAMORIG (NOLOAD) :
109 {
110 _iedata = .;
111 *(.qharray)
112 *(.ibss)
113 . = ALIGN(0x4);
114 _iend = .;
115 } > IRAM
116
117 .iram _iend :
118 {
119 _iramstart = .;
120 *(.icode)
121 *(.irodata)
122 *(.idata)
123 . = ALIGN(0x4);
124 _iramend = .;
125 } > IRAM AT> DRAM
126
127 _iramcopy = LOADADDR(.iram);
128
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
141
142 .stack (NOLOAD) :
143 {
144 *(.stack)
145 stackbegin = .;
146 . += 0x2000;
147 stackend = .;
148 } > IRAM
149
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
159
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
168
169 /* This will be aligned by preceding alignments */
170 .endaddr . - NOCACHE_BASE (NOLOAD) :
171 {
172 _end = .;
173 } > DRAM
174
175 .audiobuf (NOLOAD) :
176 {
177 _audiobuffer = .;
178 audiobuffer = .;
179 } > DRAM
180
181 .audiobufend ENDAUDIOADDR (NOLOAD) :
182 {
183 audiobufend = .;
184 _audiobufend = .;
185 } > DRAM
186
187 .codec ENDAUDIOADDR (NOLOAD) :
188 {
189 codecbuf = .;
190 _codecbuf = .;
191 }
192
193 .plugin ENDADDR (NOLOAD) :
194 {
195 _pluginbuf = .;
196 pluginbuf = .;
197 }
198}