initial 32x tests
[megadrive.git] / testpico / mars.ld
1 OUTPUT_ARCH(sh)
2 EXTERN (_start)
3 ENTRY (_start)
4 __DYNAMIC  =  0;
5
6 /*
7  * The memory map look like this:
8  * +--------------------+ <- 0x06000000
9  * | .text              |
10  * |                    |
11  * |         __text_end |
12  * +--------------------+
13  * .                    .
14  * .                    .
15  * .                    .
16  * +--------------------+
17  * | .data              | initialized data goes here
18  * |                    |
19  * |         __data_end |
20  * +--------------------+
21  * | .bss               |
22  * |        __bss_start | start of bss, cleared by crt0
23  * |                    |
24  * |         __bss__end | start of heap, used by sbrk()
25  * +--------------------+
26  * .                    .
27  * .                    .
28  * .                    .
29  * |            __stack | top of stack (for Master SH2)
30  * +--------------------+ <- 0x0603FC00
31  */
32
33 MEMORY
34 {
35     rom (rx) : ORIGIN = 0x02000000, LENGTH = 0x00400000
36     ram (wx) : ORIGIN = 0x06000000, LENGTH = 0x0003FC00
37 }
38
39 /*
40  * Allocate the stack to be at the top of memory, since the stack
41  * grows down
42  */
43
44 PROVIDE (__stack = 0x0603FC00);
45
46 SECTIONS
47 {
48 /*  .text 0x02000000 : */
49   .text 0x06000000 :
50   AT ( 0x00000000 )
51   {
52     __text_start = .;
53     *(.text)
54     *(.text.*)
55     *(.gnu.linkonce.t.*)
56
57     . = ALIGN(16);
58     __INIT_SECTION__ = .;
59     KEEP (*(.init))
60     SHORT (0x000B)      /* rts */
61     SHORT (0x0009)      /* nop */
62     . = ALIGN(16);
63     __FINI_SECTION__ = .;
64     KEEP (*(.fini))
65     SHORT (0x000B)      /* rts */
66     SHORT (0x0009)      /* nop */
67
68     *(.eh_frame_hdr)
69     KEEP (*(.eh_frame))
70     *(.gcc_except_table)
71     KEEP (*(.jcr))
72
73     . = ALIGN(16);
74      __CTOR_LIST__ = .;
75     ___CTOR_LIST__ = .;
76     LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)
77     KEEP (*(SORT(.ctors.*)))
78     KEEP (*(.ctors))
79     LONG(0)
80     __CTOR_END__ = .;
81
82     . = ALIGN(16);
83     __DTOR_LIST__ = .;
84     ___DTOR_LIST__ = .;
85     LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)
86     KEEP (*(SORT(.dtors.*)))
87     KEEP (*(.dtors))
88      LONG(0)
89     __DTOR_END__ = .;
90
91     *(.rdata)
92     *(.rodata)
93     *(.rodata.*)
94     *(.gnu.linkonce.r.*)
95     . = ALIGN(16);
96     __text_end = .;
97 /*
98   } > rom
99   __text_size = __text_end - __text_start;
100
101   .data 0x06000000 :
102   AT ( LOADADDR (.text) + SIZEOF (.text) )
103   {
104 */
105     __data_start = .;
106     *(.data)
107     *(.data.*)
108     *(.gnu.linkonce.d.*)
109     CONSTRUCTORS
110
111     *(.lit8)
112     *(.lit4)
113     *(.sdata)
114     *(.sdata.*)
115     *(.gnu.linkonce.s.*)
116     . = ALIGN(16);
117     __data_end = .;
118   } > ram
119   __data_size = __data_end - __data_start;
120
121   .bss :
122   {
123     __bss_start = .;
124     *(.bss)
125     *(.bss.*)
126     *(.gnu.linkonce.b.*)
127     *(.sbss)
128     *(.sbss.*)
129     *(.gnu.linkonce.sb.*)
130     *(.scommon)
131     *(COMMON)
132     . = ALIGN(16);
133     end = .;
134     _end = end;
135     __end = _end;
136     __bss_end = .;
137   } > ram
138   __bss_size = __bss_end - __bss_start;
139
140 }