/******************************************************************************* | |
* (c) Copyright 2016-2018 Microsemi SoC Products Group. All rights reserved. | |
* | |
* file name : microsemi-riscv-ram.ld | |
* Mi-V soft processor linker script for creating a SoftConsole downloadable | |
* debug image executing in SRAM. | |
* | |
* This linker script assumes that the SRAM is connected at on the Mi-V soft | |
* processor memory space. The start address and size of the memory space must | |
* be correct as per the Libero design. | |
* | |
* SVN $Revision: 9661 $ | |
* SVN $Date: 2018-01-15 16:13:33 +0530 (Mon, 15 Jan 2018) $ | |
*/ | |
OUTPUT_ARCH( "riscv" ) | |
ENTRY(_start) | |
MEMORY | |
{ | |
ram (rwx) : ORIGIN = 0x80000000, LENGTH = 512k | |
} | |
RAM_START_ADDRESS = 0x80000000; /* Must be the same value MEMORY region ram ORIGIN above. */ | |
RAM_SIZE = 512k; /* Must be the same value MEMORY region ram LENGTH above. */ | |
STACK_SIZE = 2k; /* needs to be calculated for your application */ | |
HEAP_SIZE = 4; /* needs to be calculated for your application */ | |
SECTIONS | |
{ | |
.text : ALIGN(0x10) | |
{ | |
KEEP (*(SORT_NONE(.text.entry))) | |
. = ALIGN(0x10); | |
*(.text .text.* .gnu.linkonce.t.*) | |
*(.plt) | |
. = ALIGN(0x10); | |
KEEP (*crtbegin.o(.ctors)) | |
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors)) | |
KEEP (*(SORT(.ctors.*))) | |
KEEP (*crtend.o(.ctors)) | |
KEEP (*crtbegin.o(.dtors)) | |
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors)) | |
KEEP (*(SORT(.dtors.*))) | |
KEEP (*crtend.o(.dtors)) | |
*(.rodata .rodata.* .gnu.linkonce.r.*) | |
*(.gcc_except_table) | |
*(.eh_frame_hdr) | |
*(.eh_frame) | |
KEEP (*(.init)) | |
KEEP (*(.fini)) | |
PROVIDE_HIDDEN (__preinit_array_start = .); | |
KEEP (*(.preinit_array)) | |
PROVIDE_HIDDEN (__preinit_array_end = .); | |
PROVIDE_HIDDEN (__init_array_start = .); | |
KEEP (*(SORT(.init_array.*))) | |
KEEP (*(.init_array)) | |
PROVIDE_HIDDEN (__init_array_end = .); | |
PROVIDE_HIDDEN (__fini_array_start = .); | |
KEEP (*(.fini_array)) | |
KEEP (*(SORT(.fini_array.*))) | |
PROVIDE_HIDDEN (__fini_array_end = .); | |
. = ALIGN(0x10); | |
} > ram | |
/* short/global data section */ | |
.sdata : ALIGN(0x10) | |
{ | |
__sdata_load = LOADADDR(.sdata); | |
__sdata_start = .; | |
PROVIDE( __global_pointer$ = . + 0x800); | |
*(.srodata.cst16) *(.srodata.cst8) *(.srodata.cst4) *(.srodata.cst2) | |
*(.srodata*) | |
*(.sdata .sdata.* .gnu.linkonce.s.*) | |
. = ALIGN(0x10); | |
__sdata_end = .; | |
} > ram | |
/* data section */ | |
.data : ALIGN(0x10) | |
{ | |
__data_load = LOADADDR(.data); | |
__data_start = .; | |
*(.got.plt) *(.got) | |
*(.shdata) | |
*(.data .data.* .gnu.linkonce.d.*) | |
. = ALIGN(0x10); | |
__data_end = .; | |
} > ram | |
/* sbss section */ | |
.sbss : ALIGN(0x10) | |
{ | |
__sbss_start = .; | |
*(.sbss .sbss.* .gnu.linkonce.sb.*) | |
*(.scommon) | |
. = ALIGN(0x10); | |
__sbss_end = .; | |
} > ram | |
/* sbss section */ | |
.bss : ALIGN(0x10) | |
{ | |
__bss_start = .; | |
*(.shbss) | |
*(.bss .bss.* .gnu.linkonce.b.*) | |
*(COMMON) | |
. = ALIGN(0x10); | |
__bss_end = .; | |
} > ram | |
/* End of uninitialized data segment */ | |
_end = .; | |
.heap : ALIGN(0x10) | |
{ | |
__heap_start = .; | |
. += HEAP_SIZE; | |
__heap_end = .; | |
. = ALIGN(0x10); | |
_heap_end = __heap_end; | |
} > ram | |
.stack : ALIGN(0x10) | |
{ | |
__stack_bottom = .; | |
. += STACK_SIZE; | |
__stack_top = .; | |
_sp = .; | |
__freertos_irq_stack_top = .; | |
} > ram | |
} | |