OSDN Git Service

* m68k/cf-crt1.C, m68k/cf.sc, m68k/fido.sc, m68k/fido-crt0.S:
[pf3gnuchains/pf3gnuchains3x.git] / libgloss / m68k / fido.sc
1 SRAM_ORIGIN=0x03000000
2 SRAM_LENGTH=0x00100000
3
4 # HEAPEND must be in the same memory region as DATA.  STACK should be
5 # above HEAPEND, also in the same region, for configurations which
6 # need __stack.
7
8 case $MODE in
9     rom)
10         CRT0=rom
11         TEXT=rom
12         DATA=sram
13         DATALOAD="rom"
14         STACK=0x030ffffc
15         HEAPEND=0x03080000
16         ;;
17     sram)
18         CRT0=ram
19         TEXT=sram
20         DATA=sdram
21         STACK=0x021ffffc
22         HEAPEND=0x02180000
23         # Leave the rest of SDRAM for manual use.
24         ;;
25     sdram)
26         CRT0=ram
27         TEXT=sdram
28         DATA=sdram
29         STACK=0x021ffffc
30         HEAPEND=0x02180000
31         # Leave the rest of SDRAM for manual use.
32         ;;
33     redboot)
34         CRT0=redboot
35         # We need to avoid the area used by RedBoot
36         SRAM_ORIGIN=0x3080000
37         SRAM_LENGTH=0x80000
38         # Put code for RedBoot apps in SRAM, since the fido1100 has
39         # trouble running code from SDRAM.
40         TEXT=sram
41         DATA=sdram
42         STACK=0
43         HEAPEND=0x027f0000
44         ;;
45     *)
46         ERROR
47         ;;
48 esac
49
50 cat <<EOF
51 /*
52  * Setup the memory map of the Innovasic SBC 
53  * stack grows down from high memory.
54  *
55  * The memory map for the ROM model looks like this:
56  *
57  * +--------------------+ <-address 0 in Flash
58  * | .vector_table      |
59  * +--------------------+ <- low memory
60  * | .text              |
61  * |        _etext      |
62  * |        ctor list   | the ctor and dtor lists are for
63  * |        dtor list   | C++ support
64  * +--------------------+
65  * | DCACHE_CODE        | code to be loaded into DCACHE
66  * |     _dcache_start  |
67  * |     _dcache_end    |
68  * +--------------------+
69  * | .data              | initialized data goes here
70  * +--------------------+
71  * .                    .
72  * .                    .
73  * .                    .
74  * +--------------------+ <- The beginning of the SRAM area
75  * | .data              | a wriable copy of data goes here.
76  * |        _edata      |
77  * +--------------------+
78  * | .bss               |
79  * |        __bss_start | start of bss, cleared by crt0
80  * |        _end        | start of heap, used by sbrk()
81  * |        _heapend    |    End   of heap, used by sbrk()
82  * +--------------------+
83  * .                    .
84  * .                    .
85  * .                    .
86  * |        __stack     | top of stack
87  * +--------------------+
88  *
89  *
90  * The memory map for the RAM model looks like this:
91  *
92  * +--------------------+ <- The beginning of the SRAM or SDRAM area.
93  * | .vector_table      |
94  * +--------------------+ <- low memory
95  * | .text              |
96  * |        _etext      |
97  * |        ctor list   | the ctor and dtor lists are for
98  * |        dtor list   | C++ support
99  * +--------------------+
100  * | DCACHE_CODE        | code to be loaded into DCACHE
101  * |     _dcache_start  |
102  * |     _dcache_end    |
103  * +--------------------+
104  * | .data              | initialized data goes here
105  * |        _edata      |
106  * +--------------------+
107  * | .bss               |
108  * |        __bss_start | start of bss, cleared by crt0
109  * |        _end        | start of heap, used by sbrk()
110  * |        _heapend    |    End   of heap, used by sbrk()
111  * +--------------------+
112  * .                    .
113  * .                    .
114  * .                    .
115  * |        __stack     | top of stack
116  * +--------------------+
117  */
118
119 STARTUP(fido-${CRT0}-crt0.o)
120 OUTPUT_ARCH(m68k)
121 ENTRY(_start);
122 GROUP(-l${IO} -lfido -lc -lgcc)
123
124 MEMORY {
125   /* Flash ROM.  */
126   rom (rx)      : ORIGIN = 0x0000000, LENGTH = 0x800000
127   /* Internal SRAM.  */
128   int_ram (rwx) : ORIGIN = 0x1000000, LENGTH = 0x6000
129   /* External SDRAM.  */
130   sdram (rwx)   : ORIGIN = 0x2000000, LENGTH = 0x800000
131   /* External SRAM.  */
132   sram (rwx)     : ORIGIN = ${SRAM_ORIGIN}, LENGTH = ${SRAM_LENGTH}
133 }
134
135 SECTIONS {
136   /* The interrupt vector is placed at the beginning of ${TEXT},
137      as required at reset.  */
138   .vector_table : {
139     *(.vector_table)
140   } > ${TEXT}
141
142   /* Text section.  */
143   .text :
144   {
145     *(.text .text.*)
146     *(.gnu.linkonce.t.*)
147
148     . = ALIGN(0x4);
149     /* These are for running static constructors and destructors under ELF.  */
150     KEEP (*crtbegin.o(.ctors))
151     KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
152     KEEP (*(SORT(.ctors.*)))
153     KEEP (*crtend.o(.ctors))
154     KEEP (*crtbegin.o(.dtors))
155     KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
156     KEEP (*(SORT(.dtors.*)))
157     KEEP (*crtend.o(.dtors))
158
159     . = ALIGN(0x4);
160     KEEP (*crtbegin.o(.jcr))
161     KEEP (*(EXCLUDE_FILE (*crtend.o) .jcr))
162     KEEP (*crtend.o(.jcr))
163
164     *(.rodata .rodata.*)
165     *(.gnu.linkonce.r.*)
166     *(.gcc_except_table) 
167     *(.eh_frame)
168
169     . = ALIGN(0x2);
170     _init = . ;
171     LONG (0x4e560000)   /* linkw %fp,#0 */
172     *(.init)
173     SHORT (0x4e5e)      /* unlk %fp */
174     SHORT (0x4e75)      /* rts */
175
176     _fini = . ;
177     LONG (0x4e560000)   /* linkw %fp,#0 */
178     *(.fini)
179     SHORT (0x4e5e)      /* unlk %fp */
180     SHORT (0x4e75)      /* rts */
181     . = ALIGN(0x800);   /* align to a 2K dcache boundary */
182     _dcache_start = .;
183     *(DCACHE_CODE)
184     _dcache_end = .;
185     _etext = .;
186     *(.lit)
187     . = ALIGN(0x4);
188     __start_romdata = .;
189   } > ${TEXT}
190
191   /* Initialized data section.  */
192   .data :
193   {
194     _data = .;
195     *(.got.plt) *(.got)
196     *(.shdata);
197     *(.data .data.*)
198     *(.gnu.linkonce.d.*)
199     _edata_cksum = .;
200     *(checksum);
201     _edata = .;
202   } > ${DATA} ${DATALOAD:+AT>} ${DATALOAD}
203
204   /* Zero-initialized data.  */ 
205   .bss :
206   {
207     . = ALIGN(0x4);
208     __bss_start = . ;
209     *(.shbss)
210     *(.bss .bss.*)
211     *(.gnu.linkonce.b.*)
212     *(COMMON)
213     _end =  ALIGN (0x8);
214     __end = _end;
215   } > ${DATA}
216
217   /* Specially designated data is placed in the internal RAM.  */
218   fast_memory :
219   {
220     . = ALIGN(0x4);
221     __fast_start = .;
222     *(FAST_RAM)
223     __fast_stop = .;
224   } > int_ram
225 }
226
227 PROVIDE (__stack = ${STACK});
228
229 PROVIDE (_heapend = ${HEAPEND});
230 EOF