From f8b924655742aebc30e3b5d65981a9c3dc253a6c Mon Sep 17 00:00:00 2001 From: Vegard Storheil Eriksen Date: Tue, 2 Feb 2010 06:42:22 +0100 Subject: Add header for symbols defined in linker script. Add some symbols. --- kernel/entry.c | 18 ++---------------- kernel/kernel.h | 27 +++++++++++++++++++++++++++ kernel/kernel.ld | 5 +++++ kernel/multiboot.h | 2 -- 4 files changed, 34 insertions(+), 18 deletions(-) create mode 100644 kernel/kernel.h diff --git a/kernel/entry.c b/kernel/entry.c index 1596429..6058910 100644 --- a/kernel/entry.c +++ b/kernel/entry.c @@ -1,18 +1,4 @@ -#include "types.h" -#include "multiboot.h" - -extern void addr_phys; -extern void addr_virt; -extern void addr_virt_end; -extern void addr_load_virt; -extern void addr_load_virt_end; - -extern void entry_stack; -extern multiboot_info_t entry_multiboot; - -extern uint32_t entry_pagedir[]; -extern uint32_t entry_pagetable_low[]; -extern uint32_t entry_pagetable_high[]; +#include "kernel.h" extern void main(); @@ -92,7 +78,7 @@ void entry_main(uint32_t mb_magic, multiboot_info_t* mb_info) { // TODO: Check that segments are loaded and mapped right. // Call main() in virtual memory. - asm volatile("mov $0, %esp"); + asm volatile("mov $stack_top, %esp"); main(); stop: diff --git a/kernel/kernel.h b/kernel/kernel.h new file mode 100644 index 0000000..6793e7d --- /dev/null +++ b/kernel/kernel.h @@ -0,0 +1,27 @@ +#ifndef KERNEL_H +#define KERNEL_H + +// Symbols defined in kernel.ld. + +#include "types.h" +#include "multiboot.h" + +extern void addr_phys; +extern void addr_virt; +extern void addr_virt_end; +extern void addr_load_virt; +extern void addr_load_virt_end; + +extern void entry_stack; + +extern multiboot_info_t entry_multiboot; +extern multiboot_info_t multiboot_info; + +extern uint32_t entry_pagedir[]; +extern uint32_t entry_pagetable_low[]; +extern uint32_t entry_pagetable_high[]; + +extern volatile uint32_t map_p2[1024]; +extern volatile union {uint32_t l[1024]; uint32_t b[1024][1024];} map_p1; + +#endif diff --git a/kernel/kernel.ld b/kernel/kernel.ld index 28f63c7..e377fbd 100644 --- a/kernel/kernel.ld +++ b/kernel/kernel.ld @@ -59,4 +59,9 @@ SECTIONS { . = ALIGN(0x1000); multiboot_info = .; . += 0x1000; + . = 0x100000000; + stack_top = .; . -= 0x400000; + map_p2 = .; . -= 0x400000; + map_p1 = .; + } diff --git a/kernel/multiboot.h b/kernel/multiboot.h index ffc3d25..f355bfd 100644 --- a/kernel/multiboot.h +++ b/kernel/multiboot.h @@ -47,6 +47,4 @@ typedef struct { uint32_t vbe_interface_len; } multiboot_info_t; -extern multiboot_info_t multiboot_info; - #endif -- cgit v1.2.3