]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_A53_64-bit_UltraScale_MPSoC/RTOSDemo_A53/src/lscript.ld
Add in the CORTEX_A53_64-bit_UltraScale_MPSoC demo application (a demo has been inclu...
[freertos] / FreeRTOS / Demo / CORTEX_A53_64-bit_UltraScale_MPSoC / RTOSDemo_A53 / src / lscript.ld
1 /*******************************************************************/\r
2 /*                                                                 */\r
3 /* This file is automatically generated by linker script generator.*/\r
4 /*                                                                 */\r
5 /* Version:                                 */\r
6 /*                                                                 */\r
7 /* Copyright (c) 2010 Xilinx, Inc.  All rights reserved.           */\r
8 /*                                                                 */\r
9 /* Description : Cortex-A53 Linker Script                          */\r
10 /*                                                                 */\r
11 /*******************************************************************/\r
12 \r
13 _STACK_SIZE = DEFINED(_STACK_SIZE) ? _STACK_SIZE : 0x2000;\r
14 _HEAP_SIZE = DEFINED(_HEAP_SIZE) ? _HEAP_SIZE : 0x2000;\r
15 \r
16 _EL0_STACK_SIZE = DEFINED(_EL0_STACK_SIZE) ? _EL0_STACK_SIZE : 1024;\r
17 _EL1_STACK_SIZE = DEFINED(_EL1_STACK_SIZE) ? _EL1_STACK_SIZE : 2048;\r
18 _EL2_STACK_SIZE = DEFINED(_EL2_STACK_SIZE) ? _EL2_STACK_SIZE : 1024;\r
19 \r
20 /* Define Memories in the system */\r
21 \r
22 MEMORY\r
23 {\r
24    psu_bbram_0_S_AXI_BASEADDR : ORIGIN = 0xFFCD0000, LENGTH = 0x10000\r
25    psu_ddr_0_S_AXI_BASEADDR : ORIGIN = 0x0, LENGTH = 0x10000000\r
26    psu_ocm_ram_0_S_AXI_BASEADDR : ORIGIN = 0xFFFC0000, LENGTH = 0x30000\r
27    psu_ocm_ram_1_S_AXI_BASEADDR : ORIGIN = 0xFFFF0000, LENGTH = 0x10000\r
28    psu_ocm_xmpu_cfg_S_AXI_BASEADDR : ORIGIN = 0xFFA70000, LENGTH = 0x10000\r
29    psu_pmu_ram_S_AXI_BASEADDR : ORIGIN = 0xFFDC0000, LENGTH = 0x20000\r
30    psu_qspi_linear_0_S_AXI_BASEADDR : ORIGIN = 0xC0000000, LENGTH = 0x20000000\r
31    psu_r5_0_atcm_S_AXI_BASEADDR : ORIGIN = 0xFFE00000, LENGTH = 0x10000\r
32    psu_r5_0_atcm_lockstep_S_AXI_BASEADDR : ORIGIN = 0xFFE10000, LENGTH = 0x10000\r
33    psu_r5_0_btcm_S_AXI_BASEADDR : ORIGIN = 0xFFE20000, LENGTH = 0x10000\r
34    psu_r5_0_btcm_lockstep_S_AXI_BASEADDR : ORIGIN = 0xFFE30000, LENGTH = 0x10000\r
35    psu_r5_1_atcm_S_AXI_BASEADDR : ORIGIN = 0xFFE90000, LENGTH = 0x10000\r
36    psu_r5_1_btcm_S_AXI_BASEADDR : ORIGIN = 0xFFEB0000, LENGTH = 0x10000\r
37    psu_r5_ddr_0_S_AXI_BASEADDR : ORIGIN = 0x100000, LENGTH = 0x7FF00000\r
38 }\r
39 \r
40 /* Specify the default entry point to the program */\r
41 \r
42 ENTRY(_vector_table)\r
43 \r
44 /* Define the sections, and where they are mapped in memory */\r
45 \r
46 SECTIONS\r
47 {\r
48 .text : {\r
49    KEEP (*(.vectors))\r
50    *(.boot)\r
51    *(.text)\r
52    *(.text.*)\r
53    *(.gnu.linkonce.t.*)\r
54    *(.plt)\r
55    *(.gnu_warning)\r
56    *(.gcc_execpt_table)\r
57    *(.glue_7)\r
58    *(.glue_7t)\r
59    *(.ARM.extab)\r
60    *(.gnu.linkonce.armextab.*)\r
61 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
62 \r
63 .init (ALIGN(64)) : {\r
64    KEEP (*(.init))\r
65 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
66 \r
67 .fini (ALIGN(64)) : {\r
68    KEEP (*(.fini))\r
69 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
70 \r
71 .interp : {\r
72    KEEP (*(.interp))\r
73 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
74 \r
75 .note-ABI-tag : {\r
76    KEEP (*(.note-ABI-tag))\r
77 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
78 \r
79 .rodata : {\r
80    . = ALIGN(64);\r
81    __rodata_start = .;\r
82    *(.rodata)\r
83    *(.rodata.*)\r
84    *(.gnu.linkonce.r.*)\r
85    __rodata_end = .;\r
86 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
87 \r
88 .rodata1 : {\r
89    . = ALIGN(64);\r
90    __rodata1_start = .;\r
91    *(.rodata1)\r
92    *(.rodata1.*)\r
93    __rodata1_end = .;\r
94 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
95 \r
96 .sdata2 : {\r
97    . = ALIGN(64);\r
98    __sdata2_start = .;\r
99    *(.sdata2)\r
100    *(.sdata2.*)\r
101    *(.gnu.linkonce.s2.*)\r
102    __sdata2_end = .;\r
103 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
104 \r
105 .sbss2 : {\r
106    . = ALIGN(64);\r
107    __sbss2_start = .;\r
108    *(.sbss2)\r
109    *(.sbss2.*)\r
110    *(.gnu.linkonce.sb2.*)\r
111    __sbss2_end = .;\r
112 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
113 \r
114 .data : {\r
115    . = ALIGN(64);\r
116    __data_start = .;\r
117    *(.data)\r
118    *(.data.*)\r
119    *(.gnu.linkonce.d.*)\r
120    *(.jcr)\r
121    *(.got)\r
122    *(.got.plt)\r
123    __data_end = .;\r
124 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
125 \r
126 .data1 : {\r
127    . = ALIGN(64);\r
128    __data1_start = .;\r
129    *(.data1)\r
130    *(.data1.*)\r
131    __data1_end = .;\r
132 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
133 \r
134 .got : {\r
135    *(.got)\r
136 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
137 \r
138 .got1 : {\r
139    *(.got1)\r
140 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
141 \r
142 .got2 : {\r
143    *(.got2)\r
144 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
145 \r
146 .ctors : {\r
147    . = ALIGN(64);\r
148    __CTOR_LIST__ = .;\r
149    ___CTORS_LIST___ = .;\r
150    KEEP (*crtbegin.o(.ctors))\r
151    KEEP (*(EXCLUDE_FILE(*crtend.o) .ctors))\r
152    KEEP (*(SORT(.ctors.*)))\r
153    KEEP (*(.ctors))\r
154    __CTOR_END__ = .;\r
155    ___CTORS_END___ = .;\r
156 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
157 \r
158 .dtors : {\r
159    . = ALIGN(64);\r
160    __DTOR_LIST__ = .;\r
161    ___DTORS_LIST___ = .;\r
162    KEEP (*crtbegin.o(.dtors))\r
163    KEEP (*(EXCLUDE_FILE(*crtend.o) .dtors))\r
164    KEEP (*(SORT(.dtors.*)))\r
165    KEEP (*(.dtors))\r
166    __DTOR_END__ = .;\r
167    ___DTORS_END___ = .;\r
168 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
169 \r
170 .fixup : {\r
171    __fixup_start = .;\r
172    *(.fixup)\r
173    __fixup_end = .;\r
174 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
175 \r
176 .eh_frame : {\r
177    *(.eh_frame)\r
178 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
179 \r
180 .eh_framehdr : {\r
181    __eh_framehdr_start = .;\r
182    *(.eh_framehdr)\r
183    __eh_framehdr_end = .;\r
184 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
185 \r
186 .gcc_except_table : {\r
187    *(.gcc_except_table)\r
188 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
189 \r
190 .mmu_tbl0 (ALIGN(4096)) : {\r
191    __mmu_tbl0_start = .;\r
192    *(.mmu_tbl0)\r
193    __mmu_tbl0_end = .;\r
194 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
195 \r
196 .mmu_tbl1 (ALIGN(4096)) : {\r
197    __mmu_tbl1_start = .;\r
198    *(.mmu_tbl1)\r
199    __mmu_tbl1_end = .;\r
200 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
201 \r
202 .mmu_tbl2 (ALIGN(4096)) : {\r
203    __mmu_tbl2_start = .;\r
204    *(.mmu_tbl2)\r
205    __mmu_tbl2_end = .;\r
206 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
207 \r
208 .ARM.exidx : {\r
209    __exidx_start = .;\r
210    *(.ARM.exidx*)\r
211    *(.gnu.linkonce.armexidix.*.*)\r
212    __exidx_end = .;\r
213 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
214 \r
215 .preinit_array : {\r
216    . = ALIGN(64);\r
217    __preinit_array_start = .;\r
218    KEEP (*(SORT(.preinit_array.*)))\r
219    KEEP (*(.preinit_array))\r
220    __preinit_array_end = .;\r
221 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
222 \r
223 .init_array : {\r
224    . = ALIGN(64);\r
225    __init_array_start = .;\r
226    KEEP (*(SORT(.init_array.*)))\r
227    KEEP (*(.init_array))\r
228    __init_array_end = .;\r
229 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
230 \r
231 .fini_array : {\r
232    . = ALIGN(64);\r
233    __fini_array_start = .;\r
234    KEEP (*(SORT(.fini_array.*)))\r
235    KEEP (*(.fini_array))\r
236    __fini_array_end = .;\r
237 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
238 \r
239 .ARM.attributes : {\r
240    __ARM.attributes_start = .;\r
241    *(.ARM.attributes)\r
242    __ARM.attributes_end = .;\r
243 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
244 \r
245 .sdata : {\r
246    . = ALIGN(64);\r
247    __sdata_start = .;\r
248    *(.sdata)\r
249    *(.sdata.*)\r
250    *(.gnu.linkonce.s.*)\r
251    __sdata_end = .;\r
252 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
253 \r
254 .sbss (NOLOAD) : {\r
255    . = ALIGN(64);\r
256    __sbss_start = .;\r
257    *(.sbss)\r
258    *(.sbss.*)\r
259    *(.gnu.linkonce.sb.*)\r
260    . = ALIGN(64);\r
261    __sbss_end = .;\r
262 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
263 \r
264 .tdata : {\r
265    . = ALIGN(64);\r
266    __tdata_start = .;\r
267    *(.tdata)\r
268    *(.tdata.*)\r
269    *(.gnu.linkonce.td.*)\r
270    __tdata_end = .;\r
271 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
272 \r
273 .tbss : {\r
274    . = ALIGN(64);\r
275    __tbss_start = .;\r
276    *(.tbss)\r
277    *(.tbss.*)\r
278    *(.gnu.linkonce.tb.*)\r
279    __tbss_end = .;\r
280 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
281 \r
282 .bss (NOLOAD) : {\r
283    . = ALIGN(64);\r
284    __bss_start__ = .;\r
285    *(.bss)\r
286    *(.bss.*)\r
287    *(.gnu.linkonce.b.*)\r
288    *(COMMON)\r
289    . = ALIGN(64);\r
290    __bss_end__ = .;\r
291 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
292 \r
293 _SDA_BASE_ = __sdata_start + ((__sbss_end - __sdata_start) / 2 );\r
294 \r
295 _SDA2_BASE_ = __sdata2_start + ((__sbss2_end - __sdata2_start) / 2 );\r
296 \r
297 /* Generate Stack and Heap definitions */\r
298 \r
299 .heap (NOLOAD) : {\r
300    . = ALIGN(64);\r
301    _heap = .;\r
302    HeapBase = .;\r
303    _heap_start = .;\r
304    . += _HEAP_SIZE;\r
305    _heap_end = .;\r
306    HeapLimit = .;\r
307 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
308 \r
309 .stack (NOLOAD) : {\r
310    . = ALIGN(64);\r
311    _el3_stack_end = .;\r
312    . += _STACK_SIZE;\r
313    __el3_stack = .;\r
314    _el2_stack_end = .;\r
315    . += _EL2_STACK_SIZE;\r
316    . = ALIGN(64);\r
317    __el2_stack = .;\r
318    _el1_stack_end = .;\r
319    . += _EL1_STACK_SIZE;\r
320    . = ALIGN(64);\r
321    __el1_stack = .;\r
322    _el0_stack_end = .;\r
323    . += _EL0_STACK_SIZE;\r
324    . = ALIGN(64);\r
325    __el0_stack = .;\r
326 } > psu_r5_ddr_0_S_AXI_BASEADDR\r
327 \r
328 _end = .;\r
329 }\r
330 \r