OUTPUT_ARCH("i386") OUTPUT_FORMAT("elf32-i386") ENTRY(entry) addr_phys = 0x00100000; addr_virt = 0xc0000000; addr_virt_end = ADDR(.bss) + SIZEOF(.bss); addr_load_virt_end = LOADADDR(.bss) + SIZEOF(.bss); SECTIONS { .text_low addr_phys : { LONG(0x1badb002); LONG(0x00000003); LONG(-0x1badb002 -0x00000003); kernel/entry.o(.text) kernel/entry.o(.rodata*) } . = ALIGN(0x1000); .data_low : { kernel/entry.o(.data) } . = ALIGN(0x1000); .bss_low : { entry_pagedir = .; . += 0x1000; entry_pagetable_low = .; . += 0x1000; entry_pagetable_high = .; . += 0x1000; entry_stack = .; . += 0x1000; entry_stack_top = .; entry_multiboot = .; . += 0x1000; kernel/entry.o(.bss) } addr_load_virt = ALIGN(0x1000); .text addr_virt : AT(addr_load_virt) { magic_text = .; LONG(0x0f00ba02); *(.text) *(.rodata*) } . = ALIGN(0x1000); .data : { magic_data = .; LONG(0x0f00ba03); *(.data) *(.ctors) } . = ALIGN(0x1000); .bss : { *(.bss) *(COMMON) } . = ALIGN(0x1000); multiboot_info = .; . += 0x1000; . = 0x100000000; stack_top = .; . -= 0x400000; map_p2 = .; . -= 0x400000; map_p1 = .; }