Files
gk-sdk/mcu/riscv/riscv/firmware.lds.S
T

131 lines
2.7 KiB
ArmAsm
Executable File

OUTPUT_FORMAT("elf32-littleriscv", "elf32-littleriscv", "elf32-littleriscv")
#include <config.h>
MEMORY
{
STAGE1_MEM : ORIGIN = CONFIG_TEXT_BASE, LENGTH = (CONFIG_STAGE2_START - CONFIG_TEXT_BASE)
STAGE2_MEM : ORIGIN = CONFIG_STAGE2_START, LENGTH = (CONFIG_MCU_SRAM_SIZE - (CONFIG_STAGE2_START - CONFIG_TEXT_BASE) - CONFIG_PARAM_MEM_SIZE)
PARAM_MEM : ORIGIN = CONFIG_PARAM_MEM_START, LENGTH = CONFIG_PARAM_MEM_SIZE
}
ENTRY(_start)
SECTIONS
{
. = ALIGN(4);
.text : {
. = ALIGN(4);
__text_start = .;
start.o (.text)
libstage1.a(.text)
libstage1.a(.text.*)
libstage1.a(.text.stage1)
libstage2.a(.text.stage1)
__text_end = .;
} >STAGE1_MEM
. = ALIGN(4);
.rodata : {
__rodata_start = .;
start.o(.rodata*)
libstage1.a(.rodata)
libstage1.a(.rodata.*)
libstage1.a(.rodata.stage1)
libstage2.a(.rodata.stage1)
__global_pointer$ = .;
libstage1.a(.srodata)
libstage1.a(.srodata.*)
libstage1.a(.srodata2.*)
__rodata_end = .;
} >STAGE1_MEM
. = ALIGN(4);
.data : {
__data_start = .;
KEEP(*start.o(*.vectors*))
libstage1.a(.data)
libstage1.a(.data.*)
libstage1.a(.data.stage1)
libstage2.a(.data.stage1)
libstage1.a(.sdata)
libstage1.a(.sdata.*)
libstage1.a(.sdata2.*)
__data_end = .;
ASSERT((__data_end <= CONFIG_STAGE2_START), "No more Stage1 Space!!");
} >STAGE1_MEM
. = ALIGN(4);
.text2 : {
. = ALIGN(4);
__text2_start = .;
KEEP(libstage2.a(.text))
KEEP(libstage2.a(.text.*))
KEEP(libstage2.a(.text.stage2))
libstage1.a(.text.stage2)
__text2_end = .;
} >STAGE2_MEM
. = ALIGN(4);
.rodata2 : {
__rodata2_start = .;
KEEP(libstage2.a(.rodata))
KEEP(libstage2.a(.rodata.*))
KEEP(libstage2.a(.rodata.stage2))
KEEP(libstage2.a(.srodata))
KEEP(libstage2.a(.srodata.*))
KEEP(libstage2.a(.srodata2.*))
libstage1.a(.rodata.stage2)
__rodata2_end = .;
} >STAGE2_MEM
. = ALIGN(4);
.data2 : {
__data2_start = .;
KEEP(libstage2.a(.data))
KEEP(libstage2.a(.data.*))
KEEP(libstage2.a(.data.stage2))
KEEP(libstage2.a(.sdata))
KEEP(libstage2.a(.sdata.*))
KEEP(libstage2.a(.sdata2.*))
libstage1.a(.data.stage2)
__data2_end = .;
} >STAGE2_MEM
.tail : {
tail.o(.tail)
} >STAGE2_MEM
. = ALIGN(4);
.bin_end : {
__bin_end_pad = .;
LONG(CONFIG_BIN_END_PAD)
__bin_end = .;
} >STAGE2_MEM
. = ALIGN(4);
.bss : {
__bss_start = .;
*(.sbss)
*(.sbss.*)
*(.bss)
*(.bss.*)
__bss_end = .;
KEEP(*vectors.o(.stack.trap))
KEEP(*start.o(.stack))
__stack_top = .;
} >STAGE2_MEM
. = ALIGN(2);
_end = .;
.assert : {
ASSERT(((_end - CONFIG_TEXT_BASE) <= (CONFIG_MCU_SRAM_SIZE - CONFIG_PARAM_MEM_SIZE)), "No more Stage2 Space!!");
}
. = ALIGN(4);
.param : {
__param_start = .;
__param_end = .;
} >PARAM_MEM
}