X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?p=pintos-anon;a=blobdiff_plain;f=src%2Fthreads%2Fkernel.lds.S;h=4840202174311572aa5112d6e6c9d5fcf2429ac4;hp=b5426e034b8c9c9662fe53c67908b95728a5e9e5;hb=21848a29ff6f6d52751bd91463be03b790f6e3e5;hpb=4199abedf1dbf20ebd5abe9cebca55d40e9103f0 diff --git a/src/threads/kernel.lds.S b/src/threads/kernel.lds.S index b5426e0..4840202 100644 --- a/src/threads/kernel.lds.S +++ b/src/threads/kernel.lds.S @@ -1,21 +1,33 @@ -#include "loader.h" +#include "threads/loader.h" OUTPUT_FORMAT("elf32-i386") OUTPUT_ARCH("i386") -ENTRY(start) +ENTRY(start) /* Kernel starts at "start" symbol. */ SECTIONS { - . = LOADER_PHYS_BASE + LOADER_KERN_BASE; + /* Specify the kernel base address. */ + _start = LOADER_PHYS_BASE + LOADER_KERN_BASE; - _start = .; + /* Make room for the ELF headers. */ + . = _start + SIZEOF_HEADERS; - .text : { *(.text) } = 0x9090 - .rodata : { *(.rodata) *(.rodata.*) } - .data : { *(.data) } + /* Kernel starts with code, followed by read-only data and writable data. */ + .text : { *(.start) *(.text) } = 0x90 + .rodata : { *(.rodata) *(.rodata.*) + . = ALIGN(0x1000); + _end_kernel_text = .; } + .eh_frame : { *(.eh_frame) } + .data : { *(.data) + _signature = .; LONG(0xaa55aa55) } + .plt : { *(.plt*) } + + /* BSS (zero-initialized data) is after everything else. */ _start_bss = .; .bss : { *(.bss) } _end_bss = .; _end = .; + + ASSERT (_end - _start <= 512K, "Kernel image is too big.") }