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