OUTPUT_ARCH("riscv") OUTPUT_FORMAT("elf32-littleriscv") ENTRY(_entry) PHDRS { boot PT_LOAD FLAGS(5); text PT_LOAD FLAGS(5); } SECTIONS { .text.boot 0x80200000 : { KEEP(*(.text.boot)); . = ALIGN(CONSTANT(MAXPAGESIZE)); ASSERT(. - ADDR(.text.boot) == 0x1000, "error: stub larger than one page"); } :boot _kernel_offset = 0x3fdff000; .text 0xc0000000 : AT(ADDR(.text) - _kernel_offset) { PROVIDE(__executable_start = . - _kernel_offset); *(.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.*); } .bss (NOLOAD) : { PROVIDE(__bss_start = . - _kernel_offset); *(.bss .bss.* .sbss .sbss.*); } . = ALIGN(CONSTANT(MAXPAGESIZE)); PROVIDE(end = . - _kernel_offset); /DISCARD/ : { *(.eh_frame) } }