_entry_point = _vectors_start + 0x80; ENTRY(_entry_point) _estack = 0x42040000; _minimum_stack_size = 0x2000; _minimum_heap_size = 0x2000; MEMORY { RO_CODE (rx) : ORIGIN = 0x42000000, LENGTH = 192K RW_DATA (xrw) : ORIGIN = 0x42030000, LENGTH = 64K } SECTIONS { .isr_vectors : { . = ALIGN(4); _vectors_start = .; KEEP(*(.isr_vectors)) _vectors_end = .; . = ALIGN(4); } >RO_CODE .text : { . = ALIGN(4); *(.text) *(.text*) KEEP (*(.init)) KEEP (*(.fini)) . = ALIGN(4); } >RO_CODE .data : { . = ALIGN(4); _sdata = .; __global_pointer$ = . + 0x800; *(.data) *(.data*) *(.sdata) *(.sdata*) . = ALIGN(4); _edata = .; } >RW_DATA AT> RO_CODE _sidata = LOADADDR(.data); .rodata : { . = ALIGN(4); *(.rodata) *(.rodata*) . = ALIGN(4); } >RO_CODE .bss : { . = ALIGN(4); _sbss = .; _bss_start = _sbss; *(.bss) *(.bss*) *(.sbss) *(.sbss*) *(COMMON) . = ALIGN(4); _ebss = .; _bss_end = _ebss; } >RW_DATA ._heap_stack_space : { . = ALIGN(8); _heap_start = .; . = . + _minimum_heap_size; _heap_end = .; . = ALIGN(8); . = . + _minimum_stack_size; . = ALIGN(8); } >RW_DATA .riscv.attributes 0 : { *(.riscv.attributes) } }