OUTPUT_FORMAT("elf32-i386") ENTRY(entry) addr_phys = 0x00100000; addr_virt = 0xc0000000; addr_virt_end = ADDR(.bss) + SIZEOF(.bss); addr_load_virt = LOADADDR(.text); 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 : { kernel/entry.o(.bss) . = ALIGN(0x1000); entry_pagedir = .; . += 0x1000; entry_pagetable_low = .; . += 0x1000; entry_pagetable_high = .; . += 0x1000; entry_stack = .; . += 0x1000; entry_stack_top = .; } .text addr_virt : AT(LOADADDR(.bss_low) + SIZEOF(.bss_low)) { magic_text = .; LONG(0x0f00ba02); *(.text) *(.rodata*) . = ALIGN(0x1000); } .data : AT(LOADADDR(.text) + SIZEOF(.text)) { magic_data = .; LONG(0x0f00ba03); *(.data) *(.ctors) . = ALIGN(0x1000); } .bss : AT(LOADADDR(.data) + SIZEOF(.data)) { *(.bss) *(COMMON) . = ALIGN(0x1000); } }