140 lines
3.5 KiB
Plaintext
140 lines
3.5 KiB
Plaintext
|
/*******************************************************************************
|
||
|
* (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
|
||
|
}
|
||
|
|