hydra/linker.ld
2026-04-16 15:24:36 +02:00

86 lines
1.7 KiB
Text

OUTPUT_ARCH(riscv)
ENTRY(_start)
KERNEL_PHYS_BASE = 0x80200000;
KERNEL_VIRT_OFFSET = 0xffffffc000000000;
BOOT_STACK_SIZE = 0x10000;
KERNEL_STACK_SIZE = 0x10000;
SECTIONS
{
. = KERNEL_PHYS_BASE;
__boot_phys_start = .;
.boot.text : ALIGN(0x1000) {
*(.boot.text)
*(.boot.text.*)
}
.boot.rodata : ALIGN(0x1000) {
*(.boot.rodata)
*(.boot.rodata.*)
}
.boot.data : ALIGN(0x1000) {
*(.boot.data)
*(.boot.data.*)
}
.boot.bss (NOLOAD) : ALIGN(0x1000) {
*(.boot.bss)
*(.boot.bss.*)
}
. = ALIGN(16);
. += BOOT_STACK_SIZE;
__boot_stack_top = .;
. = ALIGN(0x1000);
__boot_phys_end = .;
__kernel_phys_start = .;
. = KERNEL_VIRT_OFFSET + __kernel_phys_start;
__kernel_start = .;
__kernel_virt_start = .;
.text : AT(ADDR(.text) - KERNEL_VIRT_OFFSET) ALIGN(0x1000) {
*(.text)
*(.text.*)
}
.rodata : AT(ADDR(.rodata) - KERNEL_VIRT_OFFSET) ALIGN(0x1000) {
*(.rodata)
*(.rodata.*)
}
.data : AT(ADDR(.data) - KERNEL_VIRT_OFFSET) ALIGN(0x1000) {
PROVIDE(__global_pointer$ = . + 0x800);
*(.data)
*(.data.*)
*(.sdata)
*(.sdata.*)
}
.bss : AT(ADDR(.bss) - KERNEL_VIRT_OFFSET) ALIGN(0x1000) {
__bss_start = .;
*(.bss)
*(.bss.*)
*(.sbss)
*(.sbss.*)
*(COMMON)
. = ALIGN(16);
. += KERNEL_STACK_SIZE;
__stack_top = .;
__bss_end = .;
}
__kernel_end = ALIGN(., 0x1000);
__kernel_virt_end = __kernel_end;
__kernel_phys_end = __kernel_end - KERNEL_VIRT_OFFSET;
__memory_start = __kernel_phys_end;
/DISCARD/ : {
*(.eh_frame)
*(.eh_frame_hdr)
}
}