X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?p=pintos-anon;a=blobdiff_plain;f=src%2Fthreads%2Fkernel.lds.S;h=19082d5d3896111dae63de572d7ef5649e8220d3;hp=437ced3eb4a0e00553452c9857e330d1fde3bc7d;hb=a03618133f7df0954802a470a4bee7674f7aed45;hpb=e1289bf52f9dbc8da311fe2064af85076edf82b1 diff --git a/src/threads/kernel.lds.S b/src/threads/kernel.lds.S index 437ced3..19082d5 100644 --- a/src/threads/kernel.lds.S +++ b/src/threads/kernel.lds.S @@ -5,16 +5,19 @@ OUTPUT_ARCH("i386") ENTRY(start) /* Kernel starts at "start" symbol. */ SECTIONS { - /* Specifies the virtual address for the kernel base. */ - . = 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; /* Kernel starts with code, followed by read-only data and writable data. */ .text : { *(.start) *(.text) } = 0x90 - .rodata : { *(.rodata) *(.rodata.*) . = ALIGN(0x1000); } - _end_kernel_text = .; - .data : { *(.data) } + .rodata : { *(.rodata) *(.rodata.*) + . = ALIGN(0x1000); + _end_kernel_text = .; } + .data : { *(.data) + _signature = .; LONG(0xaa55aa55) } /* BSS (zero-initialized data) is after everything else. */ _start_bss = .; @@ -22,4 +25,6 @@ SECTIONS _end_bss = .; _end = .; + + ASSERT (_end - _start <= 512K, "Kernel image is too big.") }