116 lines
2.3 KiB
Plaintext
116 lines
2.3 KiB
Plaintext
/*
|
|
* Copyright by Syntacore LLC © 2016, 2017. See LICENSE for details
|
|
* @file <link.ld>
|
|
* @brief bare metal tests' linker script
|
|
*/
|
|
|
|
OUTPUT_ARCH( "riscv" )
|
|
ENTRY(_start)
|
|
|
|
MEMORY {
|
|
RAM (rwx) : ORIGIN = 0x0, LENGTH = 64K
|
|
TCM (rwx) : ORIGIN = 0x00480000, LENGTH = 64K
|
|
}
|
|
|
|
STACK_SIZE = 1024;
|
|
|
|
CL_SIZE = 32;
|
|
|
|
SECTIONS {
|
|
|
|
/* code segment */
|
|
.text.init ORIGIN(RAM) : {
|
|
FILL(0);
|
|
. = 0x100 - 12;
|
|
SIM_EXIT = .;
|
|
LONG(0x13);
|
|
SIM_STOP = .;
|
|
LONG(0x6F);
|
|
LONG(-1);
|
|
. = 0x100;
|
|
*crt_tcm.o(.text .text.*)
|
|
*(.text.init)
|
|
. = ALIGN(CL_SIZE);
|
|
} >RAM
|
|
|
|
__reloc_start = .;
|
|
|
|
.text : {
|
|
PROVIDE(__TEXT_START__ = .);
|
|
*(.text .text.*)
|
|
*(sc_test_section)
|
|
. = ALIGN(CL_SIZE);
|
|
PROVIDE(__TEXT_END__ = .);
|
|
} >TCM AT>RAM
|
|
|
|
.rodata ALIGN(CL_SIZE) : {
|
|
__global_pointer$ = . + 0x800;
|
|
*(.rodata) *(.rodata.*) *(.gnu.linkonce.r.*)
|
|
. = ALIGN(CL_SIZE);
|
|
LONG(0x13);
|
|
. = ALIGN(CL_SIZE);
|
|
} >TCM AT>RAM
|
|
|
|
|
|
/* data segment */
|
|
.data ALIGN(CL_SIZE) : {
|
|
PROVIDE(__DATA_START__ = .);
|
|
*(.data .data.*)
|
|
. = ALIGN(CL_SIZE);
|
|
} >TCM AT>RAM
|
|
|
|
|
|
.sdata ALIGN(CL_SIZE) : {
|
|
*(.srodata.cst16) *(.srodata.cst8) *(.srodata.cst4) *(.srodata.cst2) *(.srodata*)
|
|
*(.sdata .sdata.* .gnu.linkonce.s.*)
|
|
. = ALIGN(CL_SIZE);
|
|
PROVIDE(__DATA_END__ = .);
|
|
} >TCM AT>RAM
|
|
|
|
/* thread-local data segment */
|
|
.tdata ALIGN(CL_SIZE) : {
|
|
PROVIDE(_tls_data = .);
|
|
PROVIDE(_tdata_begin = .);
|
|
*(.tdata .tdata.*)
|
|
PROVIDE(_tdata_end = .);
|
|
. = ALIGN(CL_SIZE);
|
|
} >TCM AT>RAM
|
|
|
|
.tbss ALIGN(CL_SIZE) : {
|
|
PROVIDE(_tbss_begin = .);
|
|
*(.tbss .tbss.*)
|
|
. = ALIGN(CL_SIZE);
|
|
PROVIDE(_tbss_end = .);
|
|
} >TCM AT>RAM
|
|
|
|
/* bss segment */
|
|
.sbss ALIGN(CL_SIZE) : {
|
|
PROVIDE(__BSS_START__ = .);
|
|
*(.sbss .sbss.* .gnu.linkonce.sb.*)
|
|
*(.scommon)
|
|
. = ALIGN(CL_SIZE);
|
|
} >TCM AT>RAM
|
|
|
|
.bss ALIGN(CL_SIZE) : {
|
|
*(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON)
|
|
. = ALIGN(CL_SIZE);
|
|
PROVIDE(__BSS_END__ = .);
|
|
} >TCM AT>RAM
|
|
|
|
_end = .;
|
|
PROVIDE(__end = .);
|
|
|
|
/* End of uninitalized data segement */
|
|
|
|
.stack ORIGIN(TCM) + LENGTH(TCM) - STACK_SIZE : {
|
|
PROVIDE(__STACK_START__ = .);
|
|
. += STACK_SIZE;
|
|
PROVIDE(__C_STACK_TOP__ = .);
|
|
PROVIDE(__STACK_END__ = .);
|
|
} >TCM
|
|
|
|
/DISCARD/ : {
|
|
*(.eh_frame .eh_frame.*)
|
|
}
|
|
}
|