| /******************************************************************************* | |
| * (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 | |
| } | |