]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/RISC-V_IGLOO2_Creative_SoftConsole/riscv_hal/microsemi-riscv-igloo2.ld
Backup check in of the Microsemi IGLOO2 Creative Board RISC-V demo - still a work...
[freertos] / FreeRTOS / Demo / RISC-V_IGLOO2_Creative_SoftConsole / riscv_hal / microsemi-riscv-igloo2.ld
1 /*******************************************************************************\r
2  * (c) Copyright 2016-2018 Microsemi SoC Products Group.  All rights reserved.\r
3  * \r
4  * file name : microsemi-riscv-igloo2.ld\r
5  * Mi-V soft processor linker script for creating a SoftConsole downloadable\r
6  * image executing in eNVM.\r
7  * \r
8  * This linker script assumes that the eNVM is connected at on the Mi-V soft\r
9  * processor memory space. \r
10  *\r
11  * SVN $Revision: 9661 $\r
12  * SVN $Date: 2018-01-15 16:13:33 +0530 (Mon, 15 Jan 2018) $\r
13  */\r
14  \r
15 OUTPUT_ARCH( "riscv" )\r
16 ENTRY(_start)\r
17 \r
18 \r
19 MEMORY\r
20 {\r
21     envm (rx) : ORIGIN = 0x60000000, LENGTH = 240k\r
22     ram (rwx) : ORIGIN = 0x80000000, LENGTH = 64k\r
23 }\r
24 \r
25 RAM_START_ADDRESS   = 0x80000000;       /* Must be the same value MEMORY region ram ORIGIN above. */\r
26 RAM_SIZE            = 64k;              /* 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           = 2k;               /* 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   } >envm\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 AT>envm\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 AT>envm\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   } > ram\r
137 }\r
138 \r