OUTPUT_ARCH("riscv") OUTPUT_FORMAT("elf32-littleriscv") ENTRY(_start) PHDRS { text PT_LOAD FLAGS(5); data PT_LOAD FLAGS(6); } SECTIONS { _kernel_base = 0x80400000; _kernel_virtual = 0xc0000000; _kernel_offset = _kernel_virtual - _kernel_base; .text _kernel_virtual : AT(ADDR(.text) - _kernel_offset) { KEEP(*(.text.boot)); ASSERT(. - ADDR(.text) <= 0x1000, "error: stub larger than one page"); *(.text .text.*); } :text . = ALIGN(CONSTANT(MAXPAGESIZE)); PROVIDE(etext = . - _kernel_offset); .rodata : AT(ADDR(.rodata) - _kernel_offset) ALIGN(16) { *(.rodata .rodata.*); } . = ALIGN(CONSTANT(MAXPAGESIZE)); PROVIDE(_data = . - _kernel_offset); .data : AT(ADDR(.data) - _kernel_offset) ALIGN(16) { *(.data .data.*); } :data .bss (NOLOAD) : { PROVIDE(__bss_start = .); *(.bss .bss.* .sbss .sbss.*); } . = ALIGN(CONSTANT(MAXPAGESIZE)); PROVIDE(end = . - _kernel_offset); /DISCARD/ : { *(.eh_frame) } }