ENTRY(_start) OUTPUT_FORMAT(elf32-i386) MULTIBOOT_SIZE = 0x2000; VADDR_BASE = 0xc0000000; SECTIONS { /* First put the multiboot header, as it is required to be put very early in the image or the bootloader won't * * recognize the file format. * * Once the MMU is set up, this section is no longer needed and should be unmapped. */ . = 0; .bootstrap : { . = ALIGN(8); __multiboot_begin = .; KEEP(*(.multiboot.header)) KEEP(*(.multiboot.text)) KEEP(*(.multiboot.pages)) __multiboot_end = .; } . = VADDR_BASE; .text ALIGN(4K) : AT(ADDR(.text) - VADDR_BASE + MULTIBOOT_SIZE) { __text_begin = .; *(.text*) __text_end = .; } /* Read-only data. */ .rodata ALIGN(4K) : AT(ADDR(.rodata) - VADDR_BASE + MULTIBOOT_SIZE) { __rodata_begin = .; *(.constinit) *(.rodata*) __rodata_end = .; } /* Read-write data (uninitialized) and stack */ .bss ALIGN(4K) : AT(ADDR(.bss) - VADDR_BASE + MULTIBOOT_SIZE) { __bss_begin = .; *(.stack) *(.pages) *(.bss*) __bss_end = .; } /* Read-write data (initialized) */ .data ALIGN(4K) : AT(ADDR(.data) - VADDR_BASE + MULTIBOOT_SIZE) { __data_begin = .; *(.init) *(.data) __data_end = .; } }