diff --git a/sys/vmm/paging.c b/sys/vmm/paging.c index 16ce64d..e804257 100644 --- a/sys/vmm/paging.c +++ b/sys/vmm/paging.c @@ -148,6 +148,15 @@ pageTable[256] = (uint32_t)( (uint32_t)( kernelPageDirectory ) | PAGE_DEFAULT ); */ + /* Allocate New Stack Space */ + if ((pageTable = (uint32_t *) vmm_findFreePage(sysID)) == 0x0) + K_PANIC("ERROR: vmm_findFreePage Failed"); + + kernelPageDirectory[1023] = (uint32_t) ((uint32_t) (pageTable) | KERNEL_PAGE_DEFAULT); + pageTable = (uint32_t *) (kernelPageDirectory[PD_INDEX(PD_BASE_ADDR)] & 0xFFFFF000); + pageTable[1023] = (vmm_findFreePage(sysID) | KERNEL_PAGE_DEFAULT | PAGE_STACK); + pageTable[1022] = (vmm_findFreePage(sysID) | KERNEL_PAGE_DEFAULT | PAGE_STACK); + /* Now Lets Turn On Paging With This Initial Page Table */ asm volatile( "movl %0,%%eax \n" diff --git a/sys/vmm/vmm_init.c b/sys/vmm/vmm_init.c index 85fab6b..80784aa 100644 --- a/sys/vmm/vmm_init.c +++ b/sys/vmm/vmm_init.c @@ -44,5 +44,13 @@ if (vmm_pagingInit() != 0x0) K_PANIC("Couldn't Initialize paging system"); + asm( + "mov $0xFFFFFFFF, %esp\n" + "push $0xDEAD\n" // STACK MARKER + "push $0xBEEF\n"// STACK MARKER + "mov $0x0, %eax\n" + "jmp $0x4(%ebp)\n" + ); + /* NEVER REACHED */ return (0x0); }