Also add custom load addresses for x86_64 target. This allows qemu to load the kernel with -kernel argument. Without these addresses qemu would refuse to load as it only supports 32 bit ELFs, but as our kernel starts in 32 bit mode anyway, we can just load it!
54 lines
990 B
Plaintext
54 lines
990 B
Plaintext
ENTRY (_start)
|
|
|
|
KERNEL_OFFSET = 0xFFFFFFFF80000000;
|
|
|
|
SECTIONS
|
|
{
|
|
. = 0x00100000 + KERNEL_OFFSET;
|
|
|
|
g_kernel_start = .;
|
|
.text ALIGN(4K) : AT(ADDR(.text) - KERNEL_OFFSET)
|
|
{
|
|
g_kernel_execute_start = .;
|
|
*(.multiboot)
|
|
*(.multiboot2)
|
|
*(.bananboot)
|
|
*(.text.*)
|
|
}
|
|
.userspace ALIGN(4K) : AT(ADDR(.userspace) - KERNEL_OFFSET)
|
|
{
|
|
g_userspace_start = .;
|
|
*(.userspace)
|
|
g_userspace_end = .;
|
|
g_kernel_execute_end = .;
|
|
}
|
|
.ap_init ALIGN(4K) : AT(ADDR(.ap_init) - KERNEL_OFFSET)
|
|
{
|
|
g_ap_init_addr = .;
|
|
*(.ap_init)
|
|
}
|
|
.rodata ALIGN(4K) : AT(ADDR(.rodata) - KERNEL_OFFSET)
|
|
{
|
|
*(.rodata.*)
|
|
}
|
|
.init_array ALIGN(4K) : AT(ADDR(.init_array) - KERNEL_OFFSET)
|
|
{
|
|
g_init_array_start = .;
|
|
*(.init_array)
|
|
g_init_array_end = .;
|
|
}
|
|
.data ALIGN(4K) : AT(ADDR(.data) - KERNEL_OFFSET)
|
|
{
|
|
g_kernel_writable_start = .;
|
|
*(.data)
|
|
}
|
|
.bss ALIGN(4K) : AT(ADDR(.bss) - KERNEL_OFFSET)
|
|
{
|
|
g_kernel_bss_start = .;
|
|
*(COMMON)
|
|
*(.bss)
|
|
g_kernel_writable_end = .;
|
|
}
|
|
g_kernel_end = .;
|
|
}
|