OSDN Git Service

Merge branch 'suikan_experimental2' into develop
[trx-305dsp/dsp.git] / hirado / kernel / config / blackfin / _common_bf533 / bf533elf.ld
1
2 OUTPUT_FORMAT("elf32-bfin","elf32-bfin","elf32-bfin")
3 OUTPUT_ARCH(bfin)
4
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);
10 PROVIDE (__init = 0);
11 PROVIDE (__fini = 0);
12
13
14 ENTRY (start);
15
16 MEMORY
17   {
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
23
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
28     
29     MEM_L2              : ORIGIN = 0xffe00000, LENGTH = 0   /* DUMMY */
30     
31     MEM_SYSMMR (W!X)  : ORIGIN = 0xffc00000, LENGTH = 2M
32     MEM_COREMMR (W!X) : ORIGIN = 0xffe00000, LENGTH = 2M
33   }
34
35 SECTIONS
36 {
37
38 /* Read-only sections, merged into text segment: */
39   .interp         : { *(.interp) }
40   .hash           : { *(.hash) }
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) }
80   .l2             :
81   {
82     *(.l2 .l2.*)
83   } >MEM_SDRAM
84  
85   .start           :
86   {
87     KEEP (*(.start))
88   } >MEM_L1_CODE =0
89  
90   .text           :
91   {
92     *(.text .stub .text.* .gnu.linkonce.t.*)
93     KEEP (*(.text.*personality*))
94     /* .gnu.warning sections are handled specially by elf32.em.  */
95     *(.gnu.warning)
96   } >MEM_L1_CODE =0
97   
98   .init           :
99   {
100     KEEP (*(.init))
101   } >MEM_L1_CODE =0
102  
103   .plt            : { *(.plt) } >MEM_L1_CODE
104  
105   .fini           :
106   {
107     KEEP (*(.fini))
108   } >MEM_L1_CODE =0
109   
110   PROVIDE (__etext = .);
111   PROVIDE (_etext = .);
112   PROVIDE (etext = .);
113   
114   .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) } >MEM_L1_DATA_A
115   .rodata1        : { *(.rodata1) } >MEM_L1_DATA_A
116   
117   .sdata2         :
118   {
119     *(.sdata2 .sdata2.* .gnu.linkonce.s2.*)
120   } >MEM_L1_DATA_A
121   
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
126   
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
136   .preinit_array     :
137   {
138     PROVIDE_HIDDEN (___preinit_array_start = .);
139     KEEP (*(.preinit_array))
140     PROVIDE_HIDDEN (___preinit_array_end = .);
141   } >MEM_L1_DATA_A
142   .init_array     :
143   {
144      PROVIDE_HIDDEN (___init_array_start = .);
145      KEEP (*(SORT(.init_array.*)))
146      KEEP (*(.init_array))
147      PROVIDE_HIDDEN (___init_array_end = .);
148   } >MEM_L1_DATA_A
149   .fini_array     :
150   {
151     PROVIDE_HIDDEN (___fini_array_start = .);
152     KEEP (*(.fini_array))
153     KEEP (*(SORT(.fini_array.*)))
154     PROVIDE_HIDDEN (___fini_array_end = .);
155   } >MEM_L1_DATA_A
156
157   .ctors          :
158   {
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
167        is in.  */
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))
176   } >MEM_L1_DATA_A
177   .dtors          :
178   {
179     KEEP (*crtbegin*.o(.dtors))
180     KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors))
181     KEEP (*(SORT(.dtors.*)))
182     KEEP (*crtend*.o(.dtors))
183   } >MEM_L1_DATA_A
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
187   .data           :
188   {
189     *(.data .data.* .gnu.linkonce.d.*)
190     KEEP (*(.gnu.linkonce.d.*personality*))
191     SORT(CONSTRUCTORS)
192   } >MEM_L1_DATA_A
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.  */
198   .sdata          :
199   {
200     *(.sdata .sdata.* .gnu.linkonce.s.*)
201   } >MEM_L1_DATA_A
202   __edata = .; PROVIDE (_edata = .);
203   .sbss           :
204   {
205     __bss_start = .;
206     *(.dynsbss)
207     *(.sbss .sbss.* .gnu.linkonce.sb.*)
208     *(.scommon)
209   } >MEM_L1_DATA_A
210   .bss            :
211   {
212     *(.dynbss)
213     *(.bss .bss.* .gnu.linkonce.b.*)
214     *(COMMON)
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);
221     __bss_end = .;
222   } >MEM_L1_DATA_A
223   . = ALIGN(32 / 8);
224   . = ALIGN(32 / 8);
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.  */
237   /* DWARF 1 */
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) }
246   /* DWARF 2 */
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) }
259
260   __stack_end = ORIGIN(MEM_L1_SCRATCH) + LENGTH(MEM_L1_SCRATCH);
261
262   __heap_start = ORIGIN(MEM_L1_DATA_B);
263   __heap_end = ORIGIN(MEM_L1_DATA_B) + LENGTH(MEM_L1_DATA_B);
264
265
266     PROVIDE (end = .) ;
267     
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
284 */
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
311 */
312     
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) }
320 }