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)
		*(.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)
	{
		*(COMMON)
		*(.bss)
		g_kernel_writable_end = .;
	}
	g_kernel_end = .;
}