OUTPUT_ARCH(riscv) ENTRY(_start) MEMORY { ROM (rx) : ORIGIN = 0x80000000, LENGTH = 1M RAM (rwx) : ORIGIN = 0x80100000, LENGTH = 1M LOGRAM (rw) : ORIGIN = 0x80200000, LENGTH = 1M } SECTIONS { .header : { KEEP(*(.header)) *(.header) } > ROM .text : { KEEP(*(.text._start)) KEEP(*(.text.start)) *(.text) *(.text.*) } > ROM .rodata : { *(.rodata) *(.rodata.*) } > ROM .init_array : { __init_array_start = .; KEEP(*(.init_array)) KEEP(*(.init_array.*)) __init_array_end = .; } > ROM .data : { __data_start = .; *(.data) *(.data.*) __data_end = .; } > RAM AT> ROM __data_load = LOADADDR(.data); .bss : { __bss_start = .; *(.bss) *(.bss.*) *(COMMON) __bss_end = .; } > RAM .stack (NOLOAD) : { . = ALIGN(16); __stack_bottom = .; . += 8K; __stack_top = .; } > RAM .ringbuf (NOLOAD) : ALIGN(64) { __ringbuf_start = .; KEEP(*(.ringbuf)) . = ALIGN(64); __ringbuf_end = .; } > LOGRAM .image_end (NOLOAD) : { . = ALIGN(4); __image_end = .; } > ROM /DISCARD/ : { *(.eh_frame) *(.eh_frame.*) *(.eh_frame_hdr) *(.comment) *(.note.*) *(.debug_*) *(.stab*) *(.llvm_*) *(.rela.*) } __image_start = ORIGIN(ROM); __image_size = __image_end - __image_start; }