mirror of
https://github.com/SerenityOS/serenity
synced 2024-10-05 07:29:49 +00:00
d170186163
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
.
101 lines
2.1 KiB
Plaintext
101 lines
2.1 KiB
Plaintext
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;
|