/* ────────────────────────────────────────────────────────────── * kernel/linker.ld — opencoreRS kernel linker script * * Раскладка в виртуальной памяти: * 0xFFFFFFFF80000000 — начало kernel (higher-half) * * Limine грузит ядро туда, куда указывает ELF, * поэтому мы просто задаём адреса секций. * ─────────────────────────────────────────────────────────────*/ ENTRY(_start) /* Ядро живёт в верхней половине виртуального адресного пространства */ KERNEL_VIRT_BASE = 0xFFFFFFFF80000000; SECTIONS { /* Стартовый адрес */ . = KERNEL_VIRT_BASE; __kernel_start = .; /* ── Limine protocol requests (должны быть в первых 2 GiB) ──── */ .limine_requests_start ALIGN(8) : { KEEP(*(.limine_requests_start)) } .limine_requests ALIGN(8) : { KEEP(*(.limine_requests)) } .limine_requests_end ALIGN(8) : { KEEP(*(.limine_requests_end)) } /* ── Код ─────────────────────────────────────────────── */ .text ALIGN(4K) : { *(.text.boot) /* Точка входа — первой! */ *(.text .text.*) } /* ── Read-only данные ────────────────────────────────── */ .rodata ALIGN(4K) : { *(.rodata .rodata.*) } /* ── Данные ──────────────────────────────────────────── */ .data ALIGN(4K) : { *(.data .data.*) } /* ── BSS (обнуляемые данные) ─────────────────────────── */ .bss ALIGN(4K) : { __bss_start = .; *(.bss .bss.*) *(COMMON) __bss_end = .; } __kernel_end = .; /* Отбрасываем ненужные секции */ /DISCARD/ : { *(.comment) *(.eh_frame) *(.note .note.*) } }