ibex/examples/sw/simple_system/common/link.ld
2020-03-02 15:45:47 +00:00

78 lines
1.7 KiB
Text

/* Copyright lowRISC contributors.
Licensed under the Apache License, Version 2.0, see LICENSE for details.
SPDX-License-Identifier: Apache-2.0 */
OUTPUT_ARCH(riscv)
MEMORY
{
/* 992 kB should be enough for anybody... */
ram : ORIGIN = 0x00100000, LENGTH = 0xF8000 /* 992 kB */
stack : ORIGIN = 0x001F8000, LENGTH = 0x8000 /* 32 kB */
}
/* Stack information variables */
_min_stack = 0x2000; /* 8K - minimum stack space to reserve */
_stack_len = LENGTH(stack);
_stack_start = ORIGIN(stack) + LENGTH(stack);
_entry_point = _vectors_start + 0x80;
ENTRY(_entry_point)
/* The tohost address is used by Spike for a magic "stop me now" message. This
is set to equal SIM_CTRL_CTRL (see simple_system_regs.h), which has that
effect in simple_system simulations. Note that it must be 8-byte aligned.
We don't read data back from Spike, so fromhost is set to some dummy value:
we place it just above the top of the stack.
*/
tohost = 0x20008;
fromhost = _stack_start + 0x10;
SECTIONS
{
.vectors :
{
. = ALIGN(4);
_vectors_start = .;
KEEP(*(.vectors))
_vectors_end = .;
} > ram
.text : {
. = ALIGN(4);
*(.text)
*(.text.*)
} > ram
.rodata : {
. = ALIGN(4);
*(.rodata);
*(.rodata.*)
} > ram
.data : {
. = ALIGN(4);
*(.data);
*(.data.*)
} > ram
.bss :
{
. = ALIGN(4);
_bss_start = .;
*(.bss)
*(.bss.*)
*(COMMON)
_bss_end = .;
} > ram
/* ensure there is enough room for stack */
.stack (NOLOAD): {
. = ALIGN(4);
. = . + _min_stack ;
. = ALIGN(4);
stack = . ;
_stack = . ;
} > stack
}