]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/RISC-V_Renode_Emulator_SoftConsole/Microsemi_Code/riscv_hal/microsemi-riscv-ram.ld
Retarget Softconsole RISC-V demo from IGLOO2 to Renode as it can have more RAM and...
[freertos] / FreeRTOS / Demo / RISC-V_Renode_Emulator_SoftConsole / Microsemi_Code / riscv_hal / microsemi-riscv-ram.ld
1 /*******************************************************************************\r
2  * (c) Copyright 2016-2018 Microsemi SoC Products Group.  All rights reserved.\r
3  *\r
4  * file name : microsemi-riscv-ram.ld\r
5  * Mi-V soft processor linker script for creating a SoftConsole downloadable\r
6  * debug image executing in SRAM.\r
7  *\r
8  * This linker script assumes that the SRAM is connected at on the Mi-V soft\r
9  * processor memory space. The start address and size of the memory space must\r
10  * be correct as per the Libero design.\r
11  *\r
12  * SVN $Revision: 9661 $\r
13  * SVN $Date: 2018-01-15 16:13:33 +0530 (Mon, 15 Jan 2018) $\r
14  */\r
15 \r
16 OUTPUT_ARCH( "riscv" )\r
17 ENTRY(_start)\r
18 \r
19 \r
20 MEMORY\r
21 {\r
22     ram (rwx) : ORIGIN = 0x80000000, LENGTH = 512k\r
23 }\r
24 \r
25 RAM_START_ADDRESS   = 0x80000000;       /* Must be the same value MEMORY region ram ORIGIN above. */\r
26 RAM_SIZE            = 512k;              /* Must be the same value MEMORY region ram LENGTH above. */\r
27 STACK_SIZE          = 2k;               /* needs to be calculated for your application */\r
28 HEAP_SIZE           = 4;               /* needs to be calculated for your application */\r
29 \r
30 SECTIONS\r
31 {\r
32   .text : ALIGN(0x10)\r
33   {\r
34     KEEP (*(SORT_NONE(.text.entry)))\r
35     . = ALIGN(0x10);\r
36     *(.text .text.* .gnu.linkonce.t.*)\r
37     *(.plt)\r
38     . = ALIGN(0x10);\r
39 \r
40     KEEP (*crtbegin.o(.ctors))\r
41     KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))\r
42     KEEP (*(SORT(.ctors.*)))\r
43     KEEP (*crtend.o(.ctors))\r
44     KEEP (*crtbegin.o(.dtors))\r
45     KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))\r
46     KEEP (*(SORT(.dtors.*)))\r
47     KEEP (*crtend.o(.dtors))\r
48 \r
49     *(.rodata .rodata.* .gnu.linkonce.r.*)\r
50     *(.gcc_except_table)\r
51     *(.eh_frame_hdr)\r
52     *(.eh_frame)\r
53 \r
54     KEEP (*(.init))\r
55     KEEP (*(.fini))\r
56 \r
57     PROVIDE_HIDDEN (__preinit_array_start = .);\r
58     KEEP (*(.preinit_array))\r
59     PROVIDE_HIDDEN (__preinit_array_end = .);\r
60     PROVIDE_HIDDEN (__init_array_start = .);\r
61     KEEP (*(SORT(.init_array.*)))\r
62     KEEP (*(.init_array))\r
63     PROVIDE_HIDDEN (__init_array_end = .);\r
64     PROVIDE_HIDDEN (__fini_array_start = .);\r
65     KEEP (*(.fini_array))\r
66     KEEP (*(SORT(.fini_array.*)))\r
67     PROVIDE_HIDDEN (__fini_array_end = .);\r
68     . = ALIGN(0x10);\r
69 \r
70   } > ram\r
71 \r
72   /* short/global data section */\r
73   .sdata : ALIGN(0x10)\r
74   {\r
75     __sdata_load = LOADADDR(.sdata);\r
76     __sdata_start = .;\r
77     PROVIDE( __global_pointer$ = . + 0x800);\r
78     *(.srodata.cst16) *(.srodata.cst8) *(.srodata.cst4) *(.srodata.cst2)\r
79     *(.srodata*)\r
80     *(.sdata .sdata.* .gnu.linkonce.s.*)\r
81     . = ALIGN(0x10);\r
82     __sdata_end = .;\r
83   } > ram\r
84 \r
85   /* data section */\r
86   .data : ALIGN(0x10)\r
87   {\r
88     __data_load = LOADADDR(.data);\r
89     __data_start = .;\r
90     *(.got.plt) *(.got)\r
91     *(.shdata)\r
92     *(.data .data.* .gnu.linkonce.d.*)\r
93     . = ALIGN(0x10);\r
94     __data_end = .;\r
95   } > ram\r
96 \r
97   /* sbss section */\r
98   .sbss : ALIGN(0x10)\r
99   {\r
100     __sbss_start = .;\r
101     *(.sbss .sbss.* .gnu.linkonce.sb.*)\r
102     *(.scommon)\r
103     . = ALIGN(0x10);\r
104     __sbss_end = .;\r
105   } > ram\r
106 \r
107   /* sbss section */\r
108   .bss : ALIGN(0x10)\r
109   {\r
110     __bss_start = .;\r
111     *(.shbss)\r
112     *(.bss .bss.* .gnu.linkonce.b.*)\r
113     *(COMMON)\r
114     . = ALIGN(0x10);\r
115     __bss_end = .;\r
116   } > ram\r
117 \r
118   /* End of uninitialized data segment */\r
119   _end = .;\r
120 \r
121   .heap : ALIGN(0x10)\r
122   {\r
123     __heap_start = .;\r
124     . += HEAP_SIZE;\r
125     __heap_end = .;\r
126     . = ALIGN(0x10);\r
127     _heap_end = __heap_end;\r
128   } > ram\r
129 \r
130   .stack : ALIGN(0x10)\r
131   {\r
132     __stack_bottom = .;\r
133     . += STACK_SIZE;\r
134     __stack_top = .;\r
135     _sp = .;\r
136         __freertos_irq_stack_top = .;\r
137   } > ram\r
138 }\r
139 \r