OUTPUT_FORMAT("elf32-littleriscv", "elf32-littleriscv", "elf32-littleriscv") OUTPUT_ARCH(riscv) ENTRY(crtStart) MEMORY { RAM (rw): ORIGIN = 0x00000000, LENGTH = 32k ROM (rx): ORIGIN = 0x00008000, LENGTH = 8k } _stack_size = DEFINED(_stack_size) ? _stack_size : 512; _heap_size = DEFINED(_heap_size) ? _heap_size : 0; SECTIONS { ._vector ORIGIN(ROM): { *crt.o(.start_jump); *crt.o(.text); } > ROM ._user_heap (NOLOAD): { . = ALIGN(8); PROVIDE ( end = . ); PROVIDE ( _end = . ); PROVIDE ( _heap_start = .); . = . + _heap_size; . = ALIGN(8); PROVIDE ( _heap_end = .); } > RAM ._stack (NOLOAD): { . = ALIGN(16); PROVIDE (_stack_end = .); . = . + _stack_size; . = ALIGN(16); PROVIDE (_stack_start = .); } > RAM .data : { *(.rdata) *(.rodata .rodata.*) *(.gnu.linkonce.r.*) *(.data .data.*) *(.gnu.linkonce.d.*) . = ALIGN(8); PROVIDE( __global_pointer$ = . + 0x800 ); *(.sdata .sdata.*) *(.gnu.linkonce.s.*) . = ALIGN(8); *(.srodata.cst16) *(.srodata.cst8) *(.srodata.cst4) *(.srodata.cst2) *(.srodata .srodata.*) } > RAM AT >ROM .bss (NOLOAD) : { . = ALIGN(4); /* This is used by the startup in order to initialize the .bss secion */ _bss_start = .; *(.sbss*) *(.gnu.linkonce.sb.*) *(.bss .bss.*) *(.gnu.linkonce.b.*) *(COMMON) . = ALIGN(4); _bss_end = .; } > RAM .rodata : { *(.rdata) *(.rodata .rodata.*) *(.gnu.linkonce.r.*) } > ROM .noinit (NOLOAD) : { . = ALIGN(4); *(.noinit .noinit.*) . = ALIGN(4); } > ROM .ctors : { . = ALIGN(4); _ctors_start = .; KEEP(*(.init_array*)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) . = ALIGN(4); _ctors_end = .; PROVIDE ( END_OF_SW_IMAGE = . ); } > ROM .memory : { *(.text); end = .; } > ROM }