1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-10 06:57:35 +00:00
serenity/Kernel/Arch/aarch64/linker.ld
Timon Kruiper d170186163 Kernel/aarch64: Subtract KERNEL_MAPPING_BASE from driver_init section
This subtraction is necessary to ensure that the section has the correct
address. Also, without this change, the Kernel ELF binary would explode
in size. This was forgotten in a0dd6ec6b1.
2023-09-30 16:58:15 +02:00

100 lines
2.1 KiB
Text

ENTRY(start)
KERNEL_MAPPING_BASE = 0x2000000000;
/* TODO: Add FLAGS to the program headers */
PHDRS
{
text PT_LOAD ;
data PT_LOAD ;
ksyms PT_LOAD ;
bss PT_LOAD ;
}
SECTIONS
{
. = KERNEL_MAPPING_BASE + 0x80000;
start_of_kernel_image = .;
.text ALIGN(4K) : AT (ADDR(.text) - KERNEL_MAPPING_BASE)
{
*(.text.first)
start_of_safemem_text = .;
KEEP(*(.text.safemem))
end_of_safemem_text = .;
start_of_safemem_atomic_text = .;
KEEP(*(.text.safemem.atomic))
end_of_safemem_atomic_text = .;
*(.text*)
} :text
.driver_init ALIGN(4K) : AT (ADDR(.driver_init) - KERNEL_MAPPING_BASE)
{
driver_init_table_start = .;
*(.driver_init)
driver_init_table_end = .;
} :text
.rodata ALIGN(4K) : AT (ADDR(.rodata) - KERNEL_MAPPING_BASE)
{
start_heap_ctors = .;
*libkernel_heap.a:*(.init_array)
end_heap_ctors = .;
start_ctors = .;
*(.init_array)
end_ctors = .;
*(.rodata*)
} :data
.data ALIGN(4K) : AT (ADDR(.data) - KERNEL_MAPPING_BASE)
{
*(.data*)
} :data
.ksyms ALIGN(4K) : AT (ADDR(.ksyms) - KERNEL_MAPPING_BASE)
{
start_of_kernel_ksyms = .;
*(.kernel_symbols)
end_of_kernel_ksyms = .;
} :ksyms
.bss ALIGN(4K) (NOLOAD) : AT (ADDR(.bss) - KERNEL_MAPPING_BASE)
{
start_of_bss = .;
*(.bss)
end_of_bss = .;
. = ALIGN(4K);
*(.heap)
} :bss
/*
FIXME: 8MB is enough space for all of the tables required to identity map
physical memory. 8M is wasteful, so this should be properly calculated.
*/
/* FIXME: Placeholder to satisfy linker */
start_of_kernel_text = .;
end_of_kernel_text = .;
start_of_unmap_after_init = .;
end_of_unmap_after_init = .;
start_of_ro_after_init = .;
end_of_ro_after_init = .;
start_of_kernel_data = .;
end_of_kernel_data = .;
. = ALIGN(4K);
page_tables_phys_start = .;
. += 8M;
page_tables_phys_end = .;
end_of_kernel_image = .;
}
size_of_bss_divided_by_8 = (end_of_bss - start_of_bss + 7) / 8;