tinygo/targets/riscv.ld
Ayke van Laethem b9cdfd9e9a riscv: add bare-bones interrupt support
This commit adds support for timer interrupts, replacing the busy loop
that was used before. It is perhaps the most simple interrupt to
implement and should serve as the basis for further interrupt support in
RISC-V.
2020-01-10 08:04:13 +01:00

64 строки
1,6 КиБ
Text

SECTIONS
{
.text :
{
. = ALIGN(4);
KEEP(*(.init))
. = ALIGN(4);
*(.text.handleInterruptASM)
*(.text)
*(.text.*)
*(.rodata)
*(.rodata.*)
. = ALIGN(4);
} >FLASH_TEXT
/* Put the stack at the bottom of RAM, so that the application will
* crash on stack overflow instead of silently corrupting memory.
* See: http://blog.japaric.io/stack-overflow-protection/ */
.stack (NOLOAD) :
{
. = ALIGN(4);
. += _stack_size;
_stack_top = .;
} >RAM
/* Start address (in flash) of .data, used by startup code. */
_sidata = LOADADDR(.data);
/* Globals with initial value */
.data :
{
. = ALIGN(4);
/* see https://gnu-mcu-eclipse.github.io/arch/riscv/programmer/#the-gp-global-pointer-register */
PROVIDE( __global_pointer$ = . + (4K / 2) );
_sdata = .; /* used by startup code */
*(.sdata)
*(.data .data.*)
. = ALIGN(4);
_edata = .; /* used by startup code */
} >RAM AT>FLASH_TEXT
/* Zero-initialized globals */
.bss :
{
. = ALIGN(4);
_sbss = .; /* used by startup code */
*(.sbss)
*(.bss .bss.*)
*(COMMON)
. = ALIGN(4);
_ebss = .; /* used by startup code */
} >RAM
/DISCARD/ :
{
*(.eh_frame) /* causes 'no memory region specified' error in lld */
}
}
/* For the memory allocator. */
_heap_start = _ebss;
_heap_end = ORIGIN(RAM) + LENGTH(RAM);
_globals_start = _sdata;
_globals_end = _ebss;