2 OUTPUT_FORMAT("elf32-bfin","elf32-bfin","elf32-bfin")
5 PROVIDE (ldf_stack_end = 0xffb00FFC ) ;
6 PROVIDE (hardware_init_hook = 0) ;
7 PROVIDE (software_init_hook = 0) ;
8 PROVIDE (software_term_hook = 0) ;
9 PROVIDE (__kernel_boot_for_gdb = 0);
18 MEM_SDRAM (XW) : ORIGIN = 0x00000000, LENGTH = 128M
19 MEM_ASYNC_0 (XW) : ORIGIN = 0x20000000, LENGTH = 1M
20 MEM_ASYNC_1 (XW) : ORIGIN = 0x20100000, LENGTH = 1M
21 MEM_ASYNC_2 (XW) : ORIGIN = 0x20200000, LENGTH = 1M
22 MEM_ASYNC_3 (XW) : ORIGIN = 0x20300000, LENGTH = 1M
24 MEM_L1_DATA_A (W!X) : ORIGIN = 0xff800000, LENGTH = 32K
25 MEM_L1_DATA_B (W!X) : ORIGIN = 0xff900000, LENGTH = 16K
26 MEM_L1_CODE (XR) : ORIGIN = 0xffa00000, LENGTH = 64K
27 MEM_L1_SCRATCH (W!X) : ORIGIN = 0xffb00000, LENGTH = 4K
29 MEM_L2 : ORIGIN = 0xffe00000, LENGTH = 0 /* DUMMY */
31 MEM_SYSMMR (W!X) : ORIGIN = 0xffc00000, LENGTH = 2M
32 MEM_COREMMR (W!X) : ORIGIN = 0xffe00000, LENGTH = 2M
38 /* Read-only sections, merged into text segment: */
39 .interp : { *(.interp) }
41 .dynsym : { *(.dynsym) }
42 .dynstr : { *(.dynstr) }
43 .gnu.version : { *(.gnu.version) }
44 .gnu.version_d : { *(.gnu.version_d) }
45 .gnu.version_r : { *(.gnu.version_r) }
46 .rel.init : { *(.rel.init) }
47 .rela.init : { *(.rela.init) }
48 .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
49 .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
50 .rel.fini : { *(.rel.fini) }
51 .rela.fini : { *(.rela.fini) }
52 .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
53 .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
54 .rel.data.rel.ro : { *(.rel.data.rel.ro* .rel.gnu.linkonce.d.rel.ro.*) }
55 .rela.data.rel.ro : { *(.rela.data.rel.ro* .rela.gnu.linkonce.d.rel.ro.*) }
56 .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
57 .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
58 .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
59 .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
60 .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
61 .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
62 .rel.ctors : { *(.rel.ctors) }
63 .rela.ctors : { *(.rela.ctors) }
64 .rel.dtors : { *(.rel.dtors) }
65 .rela.dtors : { *(.rela.dtors) }
66 .rel.got : { *(.rel.got) }
67 .rela.got : { *(.rela.got) }
68 .rel.sdata : { *(.rel.sdata .rel.sdata.* .rel.gnu.linkonce.s.*) }
69 .rela.sdata : { *(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.*) }
70 .rel.sbss : { *(.rel.sbss .rel.sbss.* .rel.gnu.linkonce.sb.*) }
71 .rela.sbss : { *(.rela.sbss .rela.sbss.* .rela.gnu.linkonce.sb.*) }
72 .rel.sdata2 : { *(.rel.sdata2 .rel.sdata2.* .rel.gnu.linkonce.s2.*) }
73 .rela.sdata2 : { *(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.*) }
74 .rel.sbss2 : { *(.rel.sbss2 .rel.sbss2.* .rel.gnu.linkonce.sb2.*) }
75 .rela.sbss2 : { *(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.*) }
76 .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
77 .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
78 .rel.plt : { *(.rel.plt) }
79 .rela.plt : { *(.rela.plt) }
92 *(.text .stub .text.* .gnu.linkonce.t.*)
93 KEEP (*(.text.*personality*))
94 /* .gnu.warning sections are handled specially by elf32.em. */
103 .plt : { *(.plt) } >MEM_L1_CODE
110 PROVIDE (__etext = .);
111 PROVIDE (_etext = .);
114 .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } >MEM_L1_DATA_A
115 .rodata1 : { *(.rodata1) } >MEM_L1_DATA_A
119 *(.sdata2 .sdata2.* .gnu.linkonce.s2.*)
122 .sbss2 : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) } >MEM_L1_DATA_A
123 .eh_frame_hdr : { *(.eh_frame_hdr) } >MEM_L1_DATA_A
124 .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) } >MEM_L1_DATA_A
125 .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } >MEM_L1_DATA_A
127 /* Adjust the address for the data segment. We want to adjust up to
128 the same address within the page on the next page up. */
129 . = ALIGN(0x1000) + (. & (0x1000 - 1));
130 /* Exception handling */
131 .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) } >MEM_L1_DATA_A
132 .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } >MEM_L1_DATA_A
133 /* Thread Local Storage sections */
134 .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } >MEM_L1_DATA_A
135 .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } >MEM_L1_DATA_A
138 PROVIDE_HIDDEN (___preinit_array_start = .);
139 KEEP (*(.preinit_array))
140 PROVIDE_HIDDEN (___preinit_array_end = .);
144 PROVIDE_HIDDEN (___init_array_start = .);
145 KEEP (*(SORT(.init_array.*)))
146 KEEP (*(.init_array))
147 PROVIDE_HIDDEN (___init_array_end = .);
151 PROVIDE_HIDDEN (___fini_array_start = .);
152 KEEP (*(.fini_array))
153 KEEP (*(SORT(.fini_array.*)))
154 PROVIDE_HIDDEN (___fini_array_end = .);
159 /* gcc uses crtbegin.o to find the start of
160 the constructors, so we make sure it is
161 first. Because this is a wildcard, it
162 doesn't matter if the user does not
163 actually link against crtbegin.o; the
164 linker won't look for a file to match a
165 wildcard. The wildcard also means that it
166 doesn't matter which directory crtbegin.o
168 KEEP (*crtbegin*.o(.ctors))
169 /* We don't want to include the .ctor section from
170 the crtend.o file until after the sorted ctors.
171 The .ctor section from the crtend file contains the
172 end of ctors marker and it must be last */
173 KEEP (*(EXCLUDE_FILE (*crtend*.o ) .ctors))
174 KEEP (*(SORT(.ctors.*)))
175 KEEP (*crtend*.o(.ctors))
179 KEEP (*crtbegin*.o(.dtors))
180 KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors))
181 KEEP (*(SORT(.dtors.*)))
182 KEEP (*crtend*.o(.dtors))
184 .jcr : { KEEP (*(.jcr)) } >MEM_L1_DATA_A
185 .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) } >MEM_L1_DATA_A
186 .dynamic : { *(.dynamic) } >MEM_L1_DATA_A
189 *(.data .data.* .gnu.linkonce.d.*)
190 KEEP (*(.gnu.linkonce.d.*personality*))
193 .data1 : { *(.data1) } >MEM_L1_DATA_A
194 .got : { *(.got.plt) *(.got) } >MEM_L1_DATA_A
195 /* We want the small data sections together, so single-instruction offsets
196 can access them all, and initialized data all before uninitialized, so
197 we can shorten the on-disk segment size. */
200 *(.sdata .sdata.* .gnu.linkonce.s.*)
202 __edata = .; PROVIDE (_edata = .);
207 *(.sbss .sbss.* .gnu.linkonce.sb.*)
213 *(.bss .bss.* .gnu.linkonce.b.*)
215 /* Align here to ensure that the .bss section occupies space up to
216 _end. Align after .bss to ensure correct alignment even if the
217 .bss section disappears because there are no input sections.
218 FIXME: Why do we need it? When there is no .bss section, we don't
219 pad the .data section. */
220 . = ALIGN(. != 0 ? 32 / 8 : 1);
225 __end = .; PROVIDE (_end = .);
226 /* Stabs debugging sections. */
227 .stab 0 : { *(.stab) }
228 .stabstr 0 : { *(.stabstr) }
229 .stab.excl 0 : { *(.stab.excl) }
230 .stab.exclstr 0 : { *(.stab.exclstr) }
231 .stab.index 0 : { *(.stab.index) }
232 .stab.indexstr 0 : { *(.stab.indexstr) }
233 .comment 0 : { *(.comment) }
234 /* DWARF debug sections.
235 Symbols in the DWARF debugging sections are relative to the beginning
236 of the section so we begin them at 0. */
238 .debug 0 : { *(.debug) }
239 .line 0 : { *(.line) }
240 /* GNU DWARF 1 extensions */
241 .debug_srcinfo 0 : { *(.debug_srcinfo) }
242 .debug_sfnames 0 : { *(.debug_sfnames) }
243 /* DWARF 1.1 and DWARF 2 */
244 .debug_aranges 0 : { *(.debug_aranges) }
245 .debug_pubnames 0 : { *(.debug_pubnames) }
247 .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
248 .debug_abbrev 0 : { *(.debug_abbrev) }
249 .debug_line 0 : { *(.debug_line) }
250 .debug_frame 0 : { *(.debug_frame) }
251 .debug_str 0 : { *(.debug_str) }
252 .debug_loc 0 : { *(.debug_loc) }
253 .debug_macinfo 0 : { *(.debug_macinfo) }
254 /* SGI/MIPS DWARF 2 extensions */
255 .debug_weaknames 0 : { *(.debug_weaknames) }
256 .debug_funcnames 0 : { *(.debug_funcnames) }
257 .debug_typenames 0 : { *(.debug_typenames) }
258 .debug_varnames 0 : { *(.debug_varnames) }
260 __stack_end = ORIGIN(MEM_L1_SCRATCH) + LENGTH(MEM_L1_SCRATCH);
262 __heap_start = ORIGIN(MEM_L1_DATA_B);
263 __heap_end = ORIGIN(MEM_L1_DATA_B) + LENGTH(MEM_L1_DATA_B);
268 /* ADSP-BF533依存のSYSTEM MMR
269 .bss.sysmmr (NOLOAD) : { chip_mmr.o(PWRMGMT)}> MEM_SYSMMR
270 .bss.sysmmr (NOLOAD) : { . = ALIGN(0x0100); chip_mmr.o(SYSRST)} > MEM_SYSMMR
271 .bss.sysmmr (NOLOAD) : { . = ALIGN(0x0100); chip_mmr.o(WDOG)} > MEM_SYSMMR
272 .bss.sysmmr (NOLOAD) : { . = ALIGN(0x0100); chip_mmr.o(RTC)} > MEM_SYSMMR
273 .bss.sysmmr (NOLOAD) : { . = ALIGN(0x0100); chip_mmr.o(UART)} > MEM_SYSMMR
274 .bss.sysmmr (NOLOAD) : { . = ALIGN(0x0100); chip_mmr.o(SPI)} > MEM_SYSMMR
275 .bss.sysmmr (NOLOAD) : { . = ALIGN(0x0100); chip_mmr.o(TIMER)} > MEM_SYSMMR
276 .bss.sysmmr (NOLOAD) : { . = ALIGN(0x0040); chip_mmr.o(TMRCTL)} > MEM_SYSMMR
277 .bss.sysmmr (NOLOAD) : { . = ALIGN(0x0100); chip_mmr.o(FLAG)} > MEM_SYSMMR
278 .bss.sysmmr (NOLOAD) : { . = ALIGN(0x0100); chip_mmr.o(SPORT0)} > MEM_SYSMMR
279 .bss.sysmmr (NOLOAD) : { . = ALIGN(0x0100); chip_mmr.o(SPORT1)} > MEM_SYSMMR
280 .bss.sysmmr (NOLOAD) : { . = ALIGN(0x0100); chip_mmr.o(EBIU)} > MEM_SYSMMR
281 .bss.sysmmr (NOLOAD) : { . = ALIGN(0x0100); chip_mmr.o(DMATC)} > MEM_SYSMMR
282 .bss.sysmmr (NOLOAD) : { . = ALIGN(0x0100); chip_mmr.o(DMA)} > MEM_SYSMMR
283 .bss.sysmmr (NOLOAD) : { . = ALIGN(0x1000); chip_mmr.o(PPI)} > MEM_SYSMMR
285 /* Blackfin 共有のCORE MMR
286 .bss.coremmr (NOLOAD) : { cpu_mmr.o(DMEMCTL)}> MEM_COREMMR
287 .bss.coremmr (NOLOAD) : { . = ALIGN(0x0100); cpu_mmr.o(DCPLBA)}> MEM_COREMMR
288 .bss.coremmr (NOLOAD) : { . = ALIGN(0x0100); cpu_mmr.o(DCPLBD)}> MEM_COREMMR
289 .bss.coremmr (NOLOAD) : { . = ALIGN(0x0100); cpu_mmr.o(DTESTC)}> MEM_COREMMR
290 .bss.coremmr (NOLOAD) : { . = ALIGN(0x0100); cpu_mmr.o(DTESTD)}> MEM_COREMMR
291 .bss.coremmr (NOLOAD) : { . = ALIGN(0x1000); cpu_mmr.o(IMEMCTL)}> MEM_COREMMR
292 .bss.coremmr (NOLOAD) : { . = ALIGN(0x0100); cpu_mmr.o(ICPLBA)}> MEM_COREMMR
293 .bss.coremmr (NOLOAD) : { . = ALIGN(0x0100); cpu_mmr.o(ICPLBD)}> MEM_COREMMR
294 .bss.coremmr (NOLOAD) : { . = ALIGN(0x0100); cpu_mmr.o(ITESTC)}> MEM_COREMMR
295 .bss.coremmr (NOLOAD) : { . = ALIGN(0x0100); cpu_mmr.o(ITESTD)}> MEM_COREMMR
296 .bss.coremmr (NOLOAD) : { . = ALIGN(0x1000); cpu_mmr.o(EVT)}> MEM_COREMMR
297 .bss.coremmr (NOLOAD) : { . = ALIGN(0x0100); cpu_mmr.o(CEC)}> MEM_COREMMR
298 .bss.coremmr (NOLOAD) : { . = ALIGN(0x1000); cpu_mmr.o(CTMR)}> MEM_COREMMR
299 .bss.coremmr (NOLOAD) : { . = ALIGN(0x1000)+0x1000; cpu_mmr.o(DBG)}> MEM_COREMMR */ /* 1000飛ばす */ /*
300 .bss.coremmr (NOLOAD) : { . = ALIGN(0x1000); cpu_mmr.o(TBCTL)}> MEM_COREMMR
301 .bss.coremmr (NOLOAD) : { . = ALIGN(0x0100); cpu_mmr.o(TBUF)}> MEM_COREMMR
302 .bss.coremmr (NOLOAD) : { . = ALIGN(0x1000); cpu_mmr.o(WPICTL)}> MEM_COREMMR
303 .bss.coremmr (NOLOAD) : { . = ALIGN(0x0040); cpu_mmr.o(WPIADDR)}> MEM_COREMMR
304 .bss.coremmr (NOLOAD) : { . = ALIGN(0x0040); cpu_mmr.o(WPICNT)}> MEM_COREMMR
305 .bss.coremmr (NOLOAD) : { . = ALIGN(0x0100); cpu_mmr.o(WPDCTL)}> MEM_COREMMR
306 .bss.coremmr (NOLOAD) : { . = ALIGN(0x0040); cpu_mmr.o(WPDADDR)}> MEM_COREMMR
307 .bss.coremmr (NOLOAD) : { . = ALIGN(0x0040); cpu_mmr.o(WPDCNT)}> MEM_COREMMR
308 .bss.coremmr (NOLOAD) : { . = ALIGN(0x0100); cpu_mmr.o(WPSTAT)}> MEM_COREMMR
309 .bss.coremmr (NOLOAD) : { . = ALIGN(0x1000); cpu_mmr.o(PFCTL)}> MEM_COREMMR
310 .bss.coremmr (NOLOAD) : { . = ALIGN(0x0100); cpu_mmr.o(PFCNT)}> MEM_COREMMR
313 .comment 0 : { *(.comment) }
314 .debug 0 : { *(.debug) }
315 .line 0 : { *(.line) }
316 .debug_srcinfo 0 : { *(.debug_srcinfo) }
317 .debug_sfnames 0 : { *(.debug_sfnames) }
318 .debug_aranges 0 : { *(.debug_aranges) }
319 .debug_pubnames 0 : { *(.debug_pubnames) }