ENTRY(__start) high_base = 0xFFFF800000000000; MEMORY { MULTIBOOT_HEADER_PV : ORIGIN = 16k, LENGTH = 4k TRAMPOLINE_PV : ORIGIN = 0x0, LENGTH = 16k START_MEMORY_PV : ORIGIN = 20k, LENGTH = 44k KERNEL_MEMORY_P : ORIGIN = 64k, LENGTH = (1024M - ORIGIN(KERNEL_MEMORY_P)) HIGH_KERNEL_V : ORIGIN = high_base + ORIGIN(KERNEL_MEMORY_P), LENGTH = LENGTH(KERNEL_MEMORY_P) } SECTIONS { .boot : { __boot_start__ = .; KEEP(*(.multiboot_header)) __boot_end__ = .; } > MULTIBOOT_HEADER_PV .startup_text : { __startup_text_start__ = .; *(.startup_text) __startup_text_end__ = .; } > START_MEMORY_PV .startup_data : { __startup_data_start__ = .; KEEP(*(.startup_data)) __startup_data_end__ = .; } > START_MEMORY_PV .text : AT(ADDR(.text) - high_base) { __text_start__ = .; *(EXCLUDE_FILE(*trampoline*) .text) __text_end__ = .; } > HIGH_KERNEL_V .rodata : AT(ADDR(.rodata) - high_base) { __rodata_start__ = .; *(EXCLUDE_FILE(*trampoline*) .rodata) __reserved_ranges_start__ = .; KEEP(*(.reserved_ranges)) __reserved_ranges_end__ = .; __init_array_start__ = .; KEEP(*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP(*(.init_array .ctors)) __init_array_end__ = .; __rodata_end__ = .; } > HIGH_KERNEL_V .data : AT(ADDR(.data) - high_base) { __data_start__ = .; *(EXCLUDE_FILE(*trampoline*) .data) __data_end__ = .; } > HIGH_KERNEL_V .bss (NOLOAD) : AT(ADDR(.bss) - high_base) { __bss_start__ = .; *(EXCLUDE_FILE(*trampoline*) .bss) __bss_end__ = .; } > HIGH_KERNEL_V .trampoline_text : { __trampoline_text_start__ = .; *trampoline*(.text) __trampoline_text_end__ = .; } > TRAMPOLINE_PV .trampoline_data : { __trampoline_data_start__ = .; *trampoline*(.data) __trampoline_data_end__ = .; } > TRAMPOLINE_PV .trampoline_rodata : { __trampoline_rodata_start__ = .; *trampoline*(.rodata) __trampoline_rodata_end__ = .; } > TRAMPOLINE_PV .trampoline_bss (NOLOAD) : { __trampoline_bss_start__ = .; *trampoline*(.bss) __trampoline_bss_end__ = .; } > TRAMPOLINE_PV /DISCARD/ : { *(.comment) *(.eh_frame) *(.note) *(.note.gnu.build-id) } }