2 /* Linker script for Magpie RAM-based applications */
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
22 /* dram_seg: 0x504000, see target.rom.ld */
25 /*lit_seg : org = 0x00508000, len = 0x9000
26 iram_seg : org = 0x00911000, len = 0xb000
27 dram_seg : org = 0x0051c000, len = 0x6000 */
30 lit_seg : org = 0x004E8000, len = 0x1E600
31 iram_seg : org = 0x00906600, len = 0x9500
32 dram_seg : org = 0x0050FB00, len = 0x6000
43 /* Default entry point: */
49 * This empty section is used to convince RAM linkage
50 * to share litbase with ROM code.
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(.);
63 _dport0_rodata_start = ABSOLUTE(.); /* 0x505000 */
66 _dport0_rodata_end = ABSOLUTE(.);
71 _dport0_literal_start = ABSOLUTE(.);
74 _dport0_literal_end = ABSOLUTE(.);
79 _dram0_rodata_start = ABSOLUTE(.);
82 _dram0_rodata_end = ABSOLUTE(.);
87 _rodata_start = ABSOLUTE(.);
92 __XT_EXCEPTION_TABLE__ = ABSOLUTE(.);
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)
103 _bss_table_end = ABSOLUTE(.);
104 _rodata_end = ABSOLUTE(.);
109 _literals_start = ABSOLUTE(.);
111 *(.gnu.linkonce.lit4.*)
112 _literals_end = ABSOLUTE(.);
117 _dram0_literal_start = ABSOLUTE(.);
120 _dram0_literal_end = ABSOLUTE(.);
125 _dport0_data_start = ABSOLUTE(.);
128 _dport0_data_end = ABSOLUTE(.);
129 } >dram_seg :dram_phdr
134 _dport0_bss_start = ABSOLUTE(.);
137 _dport0_bss_end = ABSOLUTE(.);
138 } >dram_seg :dram_phdr
142 _dram0_data_start = ABSOLUTE(.);
145 _dram0_data_end = ABSOLUTE(.);
146 } >dram_seg :dram_phdr
150 _data_start = ABSOLUTE(.);
160 *(.gnu.linkonce.s2.*)
163 /* C++ constructor and destructor tables, properly ordered: */
164 KEEP (*crtbegin.o(.ctors))
165 KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
166 KEEP (*(SORT(.ctors.*)))
168 KEEP (*crtbegin.o(.dtors))
169 KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
170 KEEP (*(SORT(.dtors.*)))
172 /* C++ exception handlers table: */
173 __XT_EXCEPTION_DESCS__ = ABSOLUTE(.);
176 __XT_EXCEPTION_DESCS_END__ = ABSOLUTE(.);
177 *(.xt_except_desc_end)
180 _data_end = ABSOLUTE(.);
181 } >dram_seg :dram_phdr
186 _bss_start = ABSOLUTE(.);
190 *(.gnu.linkonce.sb.*)
194 *(.gnu.linkonce.sb2.*)
202 _bss_end = ABSOLUTE(.);
204 PROVIDE(end = ALIGN(0x8));
205 _fw_image_end = ABSOLUTE(.);
206 /*_stack_sentry = ALIGN(0x8);*/
207 } >dram_seg :dram_phdr
212 _text_start = ABSOLUTE(.);
216 *(.literal .text .text.* .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
220 _text_end = ABSOLUTE(.);
222 } >iram_seg :iram_phdr
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
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) }
252 KEEP (*(.gnu.linkonce.x.*))
257 KEEP (*(.gnu.linkonce.prop.*))
262 KEEP (*(.gnu.linkonce.p.*))
266 INCLUDE "rom.addrs.ld"