Archived
76 lines
2.5 KiB
Plaintext
76 lines
2.5 KiB
Plaintext
/* ──────────────────────────────────────────────────────────────
|
|
* 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.*)
|
|
}
|
|
}
|