1/*
2 * Copyright (C) 2017-2019 Alibaba Group Holding Limited
3 */
4
5/******************************************************************************
6 * @file     gcc_csky.ld
7 * @brief    csky linker file
8 * @version  V1.0
9 * @date     02. June 2017
10 ******************************************************************************/
11MEMORY
12{
13	I-SRAM : ORIGIN = 0x00000000 , LENGTH = 0x40000   /* I-SRAM  256KB */
14	D-SRAM : ORIGIN = 0x20000000 , LENGTH = 0x8000    /* D-SRAM  32KB */
15	O-SRAM : ORIGIN = 0x50000000 , LENGTH = 0x800000  /* off-chip SRAM 8MB */
16	SRAM   : ORIGIN = 0x60000000 , LENGTH = 0x20000   /* on-chip SRAM 128KB */
17}
18
19__min_heap_size = 0x200;
20__rt_rvstack_bss_size = 0x400;
21PROVIDE (__ram_end  = 0x20007FFF);
22PROVIDE (__heap_end = __ram_end);
23
24REGION_ALIAS("REGION_TEXT",    I-SRAM);
25REGION_ALIAS("REGION_RODATA",  I-SRAM);
26REGION_ALIAS("REGION_DATA",    D-SRAM);
27REGION_ALIAS("REGION_BSS",     D-SRAM);
28
29ENTRY(Reset_Handler)
30SECTIONS
31{
32 .text : {
33  . = ALIGN(0x4) ;
34  __stext = . ;
35  KEEP(*startup_es32vf2264.o(*.text*))
36  *(.text)
37  *(.text*)
38  *(.text.*)
39  *(.gnu.warning)
40  *(.stub)
41  *(.gnu.linkonce.t*)
42  *(.glue_7t)
43  *(.glue_7)
44  *(.jcr)
45  KEEP (*(.init))
46  KEEP (*(.fini))
47
48  . = ALIGN (4) ;
49  PROVIDE(__ctors_start__ = .);
50  KEEP (*(SORT(.init_array.*)))
51  KEEP (*(.init_array))
52  PROVIDE(__ctors_end__ = .);
53
54  . = ALIGN(0x40) ;
55  KEEP(*startup_es32vf2264.o(*.vectors*))
56
57  /* section information for finsh shell */
58  . = ALIGN(4);
59  __fsymtab_start = .;
60  KEEP(*(FSymTab))
61  __fsymtab_end = .;
62
63  . = ALIGN (4) ;
64  PROVIDE(__ctbp = .);
65  *(.call_table_data)
66  *(.call_table_text)
67  . = ALIGN(0x10) ;
68  __etext = . ;
69 } > REGION_TEXT
70
71
72 .eh_frame_hdr : {
73  *(.eh_frame_hdr)
74 } > REGION_TEXT
75
76
77 .eh_frame : ONLY_IF_RO {
78  KEEP (*(.eh_frame))
79 } > REGION_TEXT
80
81
82 .gcc_except_table : ONLY_IF_RO {
83  *(.gcc_except_table .gcc_except_table.*)
84 } > REGION_TEXT
85
86
87 .rodata : {
88  . = ALIGN(0x4) ;
89  __srodata = .;
90  *(.rdata)
91  *(.rdata*)
92  *(.rdata1)
93  *(.rdata.*)
94  KEEP (*(.rti_fn.0))
95  KEEP (*(.rti_fn.0.end))
96  KEEP (*(.rti_fn.1))
97  KEEP (*(.rti_fn.1.end))
98  KEEP (*(.rti_fn.2))
99  KEEP (*(.rti_fn.2.end))
100  KEEP (*(.rti_fn.3))
101  KEEP (*(.rti_fn.3.end))
102  KEEP (*(.rti_fn.4))
103  KEEP (*(.rti_fn.4.end))
104  KEEP (*(.rti_fn.5))
105  KEEP (*(.rti_fn.5.end))
106  KEEP (*(.rti_fn.6))
107  KEEP (*(.rti_fn.6.end))
108  *(.rodata)
109  *(.rodata1)
110  *(.rodata*)
111  *(.rodata.*)
112  *(.rodata.str1.4)
113  *(.srodata*)
114  . = ALIGN(0x4) ;
115  __erodata = .;
116  __rodata_end__ = .;
117 } > REGION_RODATA
118
119
120
121 .data : {
122  . = ALIGN(0x4) ;
123  __sdata = . ;
124  __data_start__ = . ;
125  data_start = . ;
126  *(.got.plt)
127  *(.got)
128  *(.gnu.linkonce.r*)
129  *(.data)
130  *(.data*)
131  *(.data1)
132  *(.data.*)
133  *(.gnu.linkonce.d*)
134  *(.data1)
135  *(.gcc_except_table)
136  *(.gcc_except_table*)
137  __start_init_call = .;
138  *(.initcall.init)
139  __stop_init_call = .;
140  __start_cmd = .;
141  *(.bootloaddata.cmd)
142  . = ALIGN(4) ;
143  PROVIDE(__dtors_start__ = .);
144  KEEP(*(SORT(.dtors.*)))
145  KEEP(*(.dtors))
146  PROVIDE(__dtors_end__ = .);
147  __stop_cmd = .;
148  __global_pointer$ = .;
149  *(.sdata)
150  *(.sdata.*)
151  *(.sdata2.*)
152  *(.gnu.linkonce.s.*)
153  *(__libc_atexit)
154  *(__libc_subinit)
155  *(__libc_subfreeres)
156  *(.note.ABI-tag)
157  __edata = .;
158  __data_end__ = .;
159  . = ALIGN(0x4) ;
160 } > REGION_DATA AT > REGION_RODATA
161
162
163
164 .eh_frame : ONLY_IF_RW {
165  KEEP (*(.eh_frame))
166 } > REGION_DATA AT > REGION_RODATA
167
168
169
170 .gcc_except_table : ONLY_IF_RW {
171  *(.gcc_except_table .gcc_except_table.*)
172  __edata = .;
173  __data_end__ = .;
174 } > REGION_DATA AT > REGION_RODATA
175
176
177
178 .bss : {
179  . = ALIGN(0x4) ;
180  __sbss = ALIGN(0x4) ;
181  __bss_start__ = . ;
182  *(.dynsbss)
183  *(.sbss)
184  *(.sbss.*)
185  *(.scommon)
186  *(.dynbss)
187  *(.bss)
188  *(.bss.*)
189  *(COMMON)
190  . = ALIGN(0x4) ;
191  __ebss = . ;
192  __bss_end__ = .;
193  __end = . ;
194  end = . ;
195 } > REGION_BSS AT > REGION_BSS
196
197
198
199 ._user_heap : {
200  . = ALIGN(0x4) ;
201  __heap_start = .;
202  . += __min_heap_size;
203  . = ALIGN(0x4) ;
204 } > REGION_BSS AT > REGION_BSS
205
206 ._rtt_v5_use_stack1 : {
207  . = ALIGN(0x4) ;
208  . += __rt_rvstack_bss_size;
209  __rt_rvstack = .;
210  . = ALIGN(0x4) ;
211 } > REGION_BSS AT > REGION_BSS
212
213
214
215}
216