summaryrefslogtreecommitdiff
path: root/bsp/AE210P/board/ae210p.ld
blob: fd79ebb12fcc3216b426521927a75b46894e4f64 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
/* This file is generated by nds_ldsag (version (2017-01-11) ). */
ENTRY(_start)
SECTIONS
{
	PROVIDE (__executable_start = 0x0);
	NDS_SAG_LMA_FLASH1 = 0x0 ;
	. = 0x0;
	ROM_BEGIN = .;
	.nds32_init 	: { KEEP(*(.nds32_init )) }
	.interp 	: { *(.interp ) }
	.hash 	: { *(.hash ) }
	.dynsym 	: { *(.dynsym ) }
	.dynstr 	: { *(.dynstr ) }
	.gnu.version 	: { *(.gnu.version ) }
	.gnu.version_d 	: { *(.gnu.version_d ) }
	.gnu.version_r 	: { *(.gnu.version_r ) }
	.rel.init 	: { *(.rel.init ) }
	.rela.init 	: { *(.rela.init ) }
	.rel.text 	: { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.* ) }
	.rela.text 	: { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.* ) }
	.rel.fini 	: { *(.rel.fini ) }
	.rela.fini 	: { *(.rela.fini ) }
	.rel.rodata 	: { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.* ) }
	.rela.rodata 	: { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.* ) }
	.rel.data.rel.ro 	: { *(.rel.data.rel.ro* ) }
	.rela.data.rel.ro 	: { *(.rel.data.rel.ro* ) }
	.rel.data 	: { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.* ) }
	.rela.data 	: { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.* ) }
	.rel.tdata 	: { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.* ) }
	.rela.tdata 	: { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.* ) }
	.rel.tbss 	: { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.* ) }
	.rela.tbss 	: { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.* ) }
	.rel.ctors 	: { *(.rel.ctors ) }
	.rela.ctors 	: { *(.rela.ctors ) }
	.rel.dtors 	: { *(.rel.dtors ) }
	.rela.dtors 	: { *(.rela.dtors ) }
	.rela.dyn 	: { *(rela.dyn ) *(.rela__libc_subfreeres ) *(.rela__libc_atexit ) *(.rela__libc_thread_subfreeres ) *(.rela.init_array ) *(.rela.fini_array ) }
	.rel.got 	: { *(.rel.got ) }
	.rela.got 	: { *(.rela.got ) }
	.rel.sdata 	: { *(.rel.sdata .rel.sdata.* .rel.gnu.linkonce.s.* ) }
	.rela.sdata 	: { *(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.* ) }
	.rel.sbss 	: { *(.rel.sbss .rel.sbss.* .rel.gnu.linkonce.sb.* ) }
	.rela.sbss 	: { *(.rela.sbss .rela.sbss.* .rela.gnu.linkonce.sb.* ) }
	.rel.sdata2 	: { *(.rel.sdata2 .rel.sdata2.* .rel.gnu.linkonce.s2.* ) }
	.rela.sdata2 	: { *(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.* ) }
	.rel.sbss2 	: { *(.rel.sbss2 .rel.sbss2.* .rel.gnu.linkonce.sb2.* ) }
	.rela.sbss2 	: { *(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.* ) }
	.rel.bss 	: { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.* ) }
	.rela.bss 	: { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.* ) }
	.rel.plt 	: { *(.rel.plt ) }
	.rela.plt 	: { *(.rela.plt ) }
	.init 	: { KEEP(*(.init )) }
	.plt 	: { *(.plt ) }
	.text 	: { *(.text .stub .text.* .gnu.linkonce.t.* ) KEEP(*(.text.*personality* )) *(.gnu.warning ) . = ALIGN(4); }
	.fini 	: { KEEP(*(.fini )) }
	.ex9.itable 	: { *(.ex9.itable ) }
	PROVIDE (__etext = .);
	PROVIDE (_etext = .);
	PROVIDE (etext = .);
	.rodata 	: { *(.rodata .rodata.* .gnu.linkonce.r.* ) }
	.rodata1 	: { *(.rodata1 ) }
	.sdata2 	: { *(.sdata2 .sdata2.* .gnu.linkonce.s2.* ) }
	.sbss2 	: { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.* ) }
	.eh_frame_hdr 	: { *(.eh_frame_hdr ) }
	. = ALIGN(4);
	__fsymtab_start = .;
	FSymTab 	: { KEEP(*(FSymTab )) }
	. = ALIGN(4);
	__fsymtab_end = .;
	. = ALIGN(4);
	__vsymtab_start = .;
	VSymTab 	: { KEEP(*(VSymTab )) }
	. = ALIGN(4);
	__vsymtab_end = .;
	. = ALIGN(4);
	__rt_init_start = .;
	.rti_fn.0 	: { KEEP(*(.rti_fn.0 )) }
	.rti_fn.0.end 	: { KEEP(*(.rti_fn.0.end )) }
	.rti_fn.1 	: { KEEP(*(.rti_fn.1 )) }
	.rti_fn.1.end 	: { KEEP(*(.rti_fn.1.end )) }
	.rti_fn.2 	: { KEEP(*(.rti_fn.2 )) }
	.rti_fn.2.end 	: { KEEP(*(.rti_fn.2.end )) }
	.rti_fn.3 	: { KEEP(*(.rti_fn.3 )) }
	.rti_fn.3.end 	: { KEEP(*(.rti_fn.3.end )) }
	.rti_fn.4 	: { KEEP(*(.rti_fn.4 )) }
	.rti_fn.4.end 	: { KEEP(*(.rti_fn.4.end )) }
	.rti_fn.5 	: { KEEP(*(.rti_fn.5 )) }
	.rti_fn.5.end 	: { KEEP(*(.rti_fn.5.end )) }
	.rti_fn.6 	: { KEEP(*(.rti_fn.6 )) }
	.rti_fn.6.end 	: { KEEP(*(.rti_fn.6.end )) }
	.rti_fn.7 	: { KEEP(*(.rti_fn.7 )) }
	.rti_fn.7.end 	: { KEEP(*(.rti_fn.7.end )) }
	. = ALIGN(4);
	__rt_init_end = .;
	ROM_SIZE = . - ROM_BEGIN;
	. = 0x200000;
	RAM_BEGIN = .;
	. = ALIGN(0x20);
	__rw_lma_start =  LOADADDR (.eh_frame);
	__rw_vma_start = ADDR(.eh_frame);
	.eh_frame 	: AT(ALIGN(LOADADDR (.rti_fn.7.end) + SIZEOF (.rti_fn.7.end), 32))
		{ KEEP(*(.eh_frame )) }
	.gcc_except_table 	: AT(ALIGN(LOADADDR (.eh_frame) + SIZEOF (.eh_frame), ALIGNOF(.gcc_except_table)))
		{ KEEP(*(.gcc_except_table )) *(.gcc_except_table.* ) }
	.tdata 	: AT(ALIGN(LOADADDR (.gcc_except_table) + SIZEOF (.gcc_except_table), ALIGNOF(.tdata)))
		{ *(.tdata .tdata.* .gnu.linkonce.td.* ) }
	. = ALIGN(4);
	PROVIDE (__preinit_array_start = .);
	.preinit_array 	: AT(ALIGN(ALIGN(LOADADDR (.tdata) + SIZEOF (.tdata), ALIGNOF(.preinit_array)), 4))
		{ KEEP(*(.preinit_array )) }
	PROVIDE (__preinit_array_end = .);
	PROVIDE (__init_array_start = .);
	.init_array 	: AT(ALIGN(LOADADDR (.preinit_array) + SIZEOF (.preinit_array), ALIGNOF(.init_array)))
		{ KEEP(*(.init_array )) }
	PROVIDE (__init_array_end = .);
	PROVIDE (__fini_array_start = .);
	.fini_array 	: AT(ALIGN(LOADADDR (.init_array) + SIZEOF (.init_array), ALIGNOF(.fini_array)))
		{ KEEP(*(.fini_array )) }
	PROVIDE (__fini_array_end = .);
	.ctors 	: AT(ALIGN(LOADADDR (.fini_array) + SIZEOF (.fini_array), ALIGNOF(.ctors)))
		{ KEEP(*crtbegin*.o(.ctors)) KEEP(*(EXCLUDE_FILE (*crtend*.o) .ctors)) KEEP(*(SORT(.ctors.* ))) KEEP(*(.ctors )) }
	.dtors 	: AT(ALIGN(LOADADDR (.ctors) + SIZEOF (.ctors), ALIGNOF(.dtors)))
		{ KEEP(*crtbegin*.o(.dtors)) KEEP(*(EXCLUDE_FILE (*crtend*.o) .dtors)) KEEP(*(SORT(.dtors.* ))) KEEP(*(.dtors )) }
	.jcr 	: AT(ALIGN(LOADADDR (.dtors) + SIZEOF (.dtors), ALIGNOF(.jcr)))
		{ KEEP(*(.jcr )) }
	.data.rel.ro 	: AT(ALIGN(LOADADDR (.jcr) + SIZEOF (.jcr), ALIGNOF(.data.rel.ro)))
		{ *(.data.rel.ro.local ) *(.data.rel.ro* ) }
	.dynamic 	: AT(ALIGN(LOADADDR (.data.rel.ro) + SIZEOF (.data.rel.ro), ALIGNOF(.dynamic)))
		{ *(.dynamic ) }
	.data 	: AT(ALIGN(LOADADDR (.dynamic) + SIZEOF (.dynamic), ALIGNOF(.data)))
		{ *(.data .data.* .gnu.linkonce.d.* ) KEEP(*(.gnu.linkonce.d.*personality* )) SORT(CONSTRUCTORS) . = ALIGN(8); }
	.data1 	: AT(ALIGN(LOADADDR (.data) + SIZEOF (.data), ALIGNOF(.data1)))
		{ *(.data1 ) . = ALIGN(8); }
	. = ALIGN(4);
	.got 	: AT(ALIGN(ALIGN(LOADADDR (.data1) + SIZEOF (.data1), ALIGNOF(.got)), 4))
		{ *(.got.plt ) *(.got ) }
	.sdata_d 	: AT(ALIGN(LOADADDR (.got) + SIZEOF (.got), ALIGNOF(.sdata_d)))
		{ *(.sdata_d .sdata_d.* ) }
	.sdata_w 	: AT(ALIGN(LOADADDR (.sdata_d) + SIZEOF (.sdata_d), ALIGNOF(.sdata_w)))
		{ *(.sdata_w .sdata_w.* ) }
	.sdata_h 	: AT(ALIGN(LOADADDR (.sdata_w) + SIZEOF (.sdata_w), ALIGNOF(.sdata_h)))
		{ *(.sdata_h .sdata_h.* ) }
	.sdata_b 	: AT(ALIGN(LOADADDR (.sdata_h) + SIZEOF (.sdata_h), ALIGNOF(.sdata_b)))
		{ *(.sdata_b .sdata_b.* ) }
	.sdata_f 	: AT(ALIGN(LOADADDR (.sdata_b) + SIZEOF (.sdata_b), ALIGNOF(.sdata_f)))
		{ *(.sdata_f .sdata_f.* ) }
	. = ALIGN(4);
	_edata = .;
	PROVIDE (edata = .);
	__bss_start = .;
	PROVIDE (__sbss_start = .);
	PROVIDE (___sbss_start = .);
	__rw_lma_end =  LOADADDR (.tbss);
	.tbss 	: AT(ALIGN(ALIGN(LOADADDR (.sdata_f) + SIZEOF (.sdata_f), ALIGNOF(.tbss)), 4))
		{ *(.tbss .tbss.* .gnu.linkonce.tb.* ) *(.tcommon ) }
	.sbss_f 	: AT(ALIGN(LOADADDR (.tbss) + SIZEOF (.tbss), ALIGNOF(.sbss_f)))
		{ *(.sbss_f .sbss_f.* ) *(.scommon_f .scommon_f.* ) }
	.sbss_b 	: AT(ALIGN(LOADADDR (.sbss_f) + SIZEOF (.sbss_f), ALIGNOF(.sbss_b)))
		{ *(.sbss_b .sbss_b.* ) *(.scommon_b .scommon_b.* ) . = ALIGN(2); }
	.sbss_h 	: AT(ALIGN(LOADADDR (.sbss_b) + SIZEOF (.sbss_b), ALIGNOF(.sbss_h)))
		{ *(.sbss_h .sbss_h.* ) *(.scommon_h .scommon_h.* ) . = ALIGN(4); }
	.sbss_w 	: AT(ALIGN(LOADADDR (.sbss_h) + SIZEOF (.sbss_h), ALIGNOF(.sbss_w)))
		{ *(.sbss_w .sbss_w.* ) *(.scommon_w .scommon_w.* ) *(.dynsbss ) *(.scommon ) . = ALIGN(8); }
	.sbss_d 	: AT(ALIGN(LOADADDR (.sbss_w) + SIZEOF (.sbss_w), ALIGNOF(.sbss_d)))
		{ *(.sbss_d .sbss_d.* ) *(.scommon_d .scommon_d.* ) }
	.bss 	: AT(ALIGN(LOADADDR (.sbss_d) + SIZEOF (.sbss_d), ALIGNOF(.bss)))
		{ *(.dynbss ) *(.bss .bss.* .gnu.linkonce.b.* ) *(COMMON ) . = ALIGN(4); }
	PROVIDE (__sbss_end = .);
	PROVIDE (___sbss_end = .);
	. = ALIGN(4);
	_end = .;
	PROVIDE (end = .);
	PROVIDE (_stack = 0x24fff8);
	RAM_SIZE = . - RAM_BEGIN;
	.stab	0 : { *(.stab) }
	.stabstr	0 : { *(.stabstr) }
	.stab.excl	0 : { *(.stab.excl) }
	.stab.exclstr	0 : { *(.stab.exclstr) }
	.stab.index	0 : { *(.stab.index) }
	.stab.indexstr	0 : { *(.stab.indexstr) }
	.note.nds32	0 : { *(.note.nds32) *(.note.nds32.*) }
	.comment	0 : { *(.comment) }
	.debug	0 : { *(.debug) }
	.line	0 : { *(.line) }
	.debug_srcinfo	0 : { *(.debug_srcinfo) }
	.debug_sfnames	0 : { *(.debug_sfnames) }
	.debug_aranges	0 : { *(.debug_aranges) }
	.debug_pubnames	0 : { *(.debug_pubnames) }
	.debug_info	0 : { *(.debug_info .gnu.linkonce.wi.*) }
	.debug_abbrev	0 : { *(.debug_abbrev) }
	.debug_line	0 : { *(.debug_line) }
	.debug_frame	0 : { *(.debug_frame) }
	.debug_str	0 : { *(.debug_str) }
	.debug_loc	0 : { *(.debug_loc) }
	.debug_macinfo	0 : { *(.debug_macinfo) }
	.debug_weaknames	0 : { *(.debug_weaknames) }
	.debug_funcnames	0 : { *(.debug_funcnames) }
	.debug_typenames	0 : { *(.debug_typenames) }
	.debug_varnames	0 : { *(.debug_varnames) }
}
ASSERT((DEFINED (_RELAX_END_) ? ROM_SIZE : 0x0)<= 0x80000, "ROM OVERFLOW");
ASSERT((DEFINED (_RELAX_END_) ? RAM_SIZE : 0x0)<= 0x50000, "RAM OVERFLOW");