Setting up repository
[linux-libre-firmware.git] / ath9k_htc / sboot / magpie_1_1 / image / magpie_ram / target_gmac.ram.ld
1
2 /* Linker script for Magpie RAM-based applications */
3
4 /*
5 Currently, ROM code reserves the first 8KB of RAM for its data/bss.
6 The next 12KB or RAM is used for RAM software's literals and read-only data.
7 After that comes 64KB reserved for RAM software's data and bss.
8 Then 92KB of RAM is reserved for text (code).
9 The last 8KB of RAM is reserved for ROM patches, customer DataSets,
10 and RAM software expansion. (There is also some additional RAM between
11 segments that can be used, if needed.)
12   ROM reserved: 0x00500000..0x00501fff
13   Literals:     0x00502000..0x00504fff
14   Data:         0x00505000..0x00514fff
15   Text:         0x00915000..0x0092bfff
16 TBD: May want to use a 2-pass link approach in order to
17 eliminate fixed boundaries.  Support for physical addressing
18 in Tensilica tools would be helpful, but it's not coming
19 any time soon.
20 */
21
22 /* dram_seg: 0x504000, see target.rom.ld */
23
24 /* ***** */
25  /*lit_seg :            org = 0x00508000,   len = 0x9000 
26  iram_seg :           org = 0x00911000,   len = 0xb000
27  dram_seg :           org = 0x0051c000,   len = 0x6000 */
28 MEMORY
29 {
30  lit_seg :            org = 0x004E8000,   len = 0x1E600
31  iram_seg :           org = 0x00906600,   len = 0x9500
32  dram_seg :           org = 0x0050FB00,   len = 0x6000
33  
34 }
35
36 PHDRS
37 {
38   lit_phdr PT_LOAD;
39   dram_phdr PT_LOAD;
40   iram_phdr PT_LOAD;
41 }
42
43 /*  Default entry point:  */
44 ENTRY(app_start)
45
46 SECTIONS
47 {
48   /*
49    * This empty section is used to convince RAM linkage
50    * to share litbase with ROM code.
51    */
52   .lit4 (NOLOAD) :
53   {
54     _rom_literal_start = ABSOLUTE(.);
55     . += 0x1a600; /* Reserved virtual space for physical mem gap and ROM */
56     _lit4_start = ABSOLUTE(.);
57     _lit4_end = ABSOLUTE(.);
58     _rom_literal_end = ABSOLUTE(.);
59   } >lit_seg :NONE
60
61   .dport0.rodata :
62   {
63     _dport0_rodata_start = ABSOLUTE(.); /* 0x505000 */
64     *(.dport0.rodata)
65     *(.dport.rodata)
66     _dport0_rodata_end = ABSOLUTE(.);
67   } >lit_seg :lit_phdr
68
69   .dport0.literal :
70   {
71     _dport0_literal_start = ABSOLUTE(.);
72     *(.dport0.literal)
73     *(.dport.literal)
74     _dport0_literal_end = ABSOLUTE(.);
75   } >lit_seg :lit_phdr
76
77   .dram0.rodata :
78   {
79     _dram0_rodata_start = ABSOLUTE(.);
80     *(.dram0.rodata)
81     *(.dram.rodata)
82     _dram0_rodata_end = ABSOLUTE(.);
83   } >lit_seg :lit_phdr
84
85   .rodata :
86   {
87     _rodata_start = ABSOLUTE(.);
88     *(.rodata)
89     *(.rodata.*)
90     *(.gnu.linkonce.r.*)
91     *(.rodata1)
92     __XT_EXCEPTION_TABLE__ = ABSOLUTE(.);
93     *(.xt_except_table)
94     *(.gcc_except_table)
95     *(.gnu.linkonce.e.*)
96     *(.gnu.version_r)
97     . = ALIGN(4);               /* this table MUST be 4-byte aligned */
98     _bss_table_start = ABSOLUTE(.);
99     LONG(_dport0_bss_start)
100     LONG(_dport0_bss_end)
101     LONG(_bss_start)
102     LONG(_bss_end)
103     _bss_table_end = ABSOLUTE(.);
104     _rodata_end = ABSOLUTE(.);
105   } >lit_seg :lit_phdr
106
107   .literals :
108   {
109     _literals_start = ABSOLUTE(.);
110     *(*.lit4)
111     *(.gnu.linkonce.lit4.*)
112     _literals_end = ABSOLUTE(.);
113   } >lit_seg :lit_phdr
114
115   .dram0.literal :
116   {
117     _dram0_literal_start = ABSOLUTE(.);
118     *(.dram0.literal)
119     *(.dram.literal)
120     _dram0_literal_end = ABSOLUTE(.);
121   } >lit_seg :lit_phdr
122
123   .dport0.data :
124   {
125     _dport0_data_start = ABSOLUTE(.);
126     *(.dport0.data)
127     *(.dport.data)
128     _dport0_data_end = ABSOLUTE(.);
129   } >dram_seg :dram_phdr
130
131   .dport0.bss :
132   {
133     . = ALIGN (8);
134     _dport0_bss_start = ABSOLUTE(.);
135     *(.dport0.bss)
136     . = ALIGN (8);
137     _dport0_bss_end = ABSOLUTE(.);
138   } >dram_seg :dram_phdr
139
140   .dram0.data :
141   {
142     _dram0_data_start = ABSOLUTE(.);
143     *(.dram0.data)
144     *(.dram.data)
145     _dram0_data_end = ABSOLUTE(.);
146   } >dram_seg :dram_phdr
147
148   .data :
149   {
150     _data_start = ABSOLUTE(.);
151     *(.data)
152     *(.data.*)
153     *(.gnu.linkonce.d.*)
154     *(.data1)
155     *(.sdata)
156     *(.sdata.*)
157     *(.gnu.linkonce.s.*)
158     *(.sdata2)
159     *(.sdata2.*)
160     *(.gnu.linkonce.s2.*)
161     *(.jcr)
162     *(.eh_frame)
163     /*  C++ constructor and destructor tables, properly ordered:  */
164     KEEP (*crtbegin.o(.ctors))
165     KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
166     KEEP (*(SORT(.ctors.*)))
167     KEEP (*(.ctors))
168     KEEP (*crtbegin.o(.dtors))
169     KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
170     KEEP (*(SORT(.dtors.*)))
171     KEEP (*(.dtors))
172     /*  C++ exception handlers table:  */
173     __XT_EXCEPTION_DESCS__ = ABSOLUTE(.);
174     *(.xt_except_desc)
175     *(.gnu.linkonce.h.*)
176     __XT_EXCEPTION_DESCS_END__ = ABSOLUTE(.);
177     *(.xt_except_desc_end)
178     *(.dynamic)
179     *(.gnu.version_d)
180     _data_end = ABSOLUTE(.);
181   } >dram_seg :dram_phdr
182
183   .bss :
184   {
185     . = ALIGN (8);
186     _bss_start = ABSOLUTE(.);
187     *(.dynsbss)
188     *(.sbss)
189     *(.sbss.*)
190     *(.gnu.linkonce.sb.*)
191     *(.scommon)
192     *(.sbss2)
193     *(.sbss2.*)
194     *(.gnu.linkonce.sb2.*)
195     *(.dynbss)
196     *(.bss)
197     *(.bss.*)
198     *(.gnu.linkonce.b.*)
199     *(COMMON)
200     *(.dram0.bss)
201     . = ALIGN (8);
202     _bss_end = ABSOLUTE(.);
203     _end = ALIGN(0x8);
204     PROVIDE(end = ALIGN(0x8));
205         _fw_image_end = ABSOLUTE(.);
206     /*_stack_sentry = ALIGN(0x8);*/
207   } >dram_seg :dram_phdr
208
209   .text :
210   {
211     _stext = .;
212     _text_start = ABSOLUTE(.);
213     *(.entry.text)
214     *(.init.literal)
215     *(.init)
216     *(.literal .text .text.* .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
217     *(.fini.literal)
218     *(.fini)
219     *(.gnu.version)
220     _text_end = ABSOLUTE(.);
221     _etext = .;
222   } >iram_seg :iram_phdr
223
224   .iram0.text :
225   {
226     _iram0_text_start = ABSOLUTE(.);
227     *(.iram0.literal .iram.literal .iram.text.literal .iram0.text .iram.text)
228     _iram0_text_end = ABSOLUTE(.);
229   } >iram_seg :iram_phdr
230
231   .debug  0 :  { *(.debug) }
232   .line  0 :  { *(.line) }
233   .debug_srcinfo  0 :  { *(.debug_srcinfo) }
234   .debug_sfnames  0 :  { *(.debug_sfnames) }
235   .debug_aranges  0 :  { *(.debug_aranges) }
236   .debug_pubnames  0 :  { *(.debug_pubnames) }
237   .debug_info  0 :  { *(.debug_info) }
238   .debug_abbrev  0 :  { *(.debug_abbrev) }
239   .debug_line  0 :  { *(.debug_line) }
240   .debug_frame  0 :  { *(.debug_frame) }
241   .debug_str  0 :  { *(.debug_str) }
242   .debug_loc  0 :  { *(.debug_loc) }
243   .debug_macinfo  0 :  { *(.debug_macinfo) }
244   .debug_weaknames  0 :  { *(.debug_weaknames) }
245   .debug_funcnames  0 :  { *(.debug_funcnames) }
246   .debug_typenames  0 :  { *(.debug_typenames) }
247   .debug_varnames  0 :  { *(.debug_varnames) }
248
249   .xt.insn 0 :
250   {
251     KEEP (*(.xt.insn))
252     KEEP (*(.gnu.linkonce.x.*))
253   }
254   .xt.prop 0 :
255   {
256     KEEP (*(.xt.prop))
257     KEEP (*(.gnu.linkonce.prop.*))
258   }
259   .xt.lit 0 :
260   {
261     KEEP (*(.xt.lit))
262     KEEP (*(.gnu.linkonce.p.*))
263   }
264 }
265
266 INCLUDE "rom.addrs.ld"
267