diff --git a/targets/maixbit.ld b/targets/maixbit.ld index 1f8ed4dd..c2cffae9 100644 --- a/targets/maixbit.ld +++ b/targets/maixbit.ld @@ -8,8 +8,62 @@ MEMORY RAM (xrw) : ORIGIN = 0xffffffff80000000, LENGTH = 6M } -REGION_ALIAS("FLASH_TEXT", RAM); - _stack_size = 2K; -INCLUDE "targets/riscv.ld" +SECTIONS +{ + .text : + { + . = ALIGN(16); + KEEP(*(.init)) + . = ALIGN(16); + *(.text.handleInterruptASM) + *(.text) + *(.text.*) + *(.rodata) + *(.rodata.*) + . = ALIGN(16); + } >RAM + + + /* Start address (in flash) of .data, used by startup code. */ + _sidata = LOADADDR(.data); + + /* Globals with initial value */ + .data : + { + . = ALIGN(16); + /* 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(16); + _edata = .; /* used by startup code */ + } >RAM + + /* Zero-initialized globals */ + .bss : + { + . = ALIGN(16); + _sbss = .; /* used by startup code */ + *(.sbss) + *(.bss .bss.*) + *(COMMON) + . = ALIGN(16); + _ebss = .; /* used by startup code */ + } >RAM + + /DISCARD/ : + { + *(.eh_frame) /* causes 'no memory region specified' error in lld */ + } +} + +PROVIDE(_stack_top = ORIGIN(RAM) + LENGTH(RAM)); + +/* For the memory allocator. */ +_heap_start = _ebss; +_heap_end = ORIGIN(RAM) + LENGTH(RAM) - _stack_size; +_globals_start = _sdata; +_globals_end = _ebss;