diff --git a/sys/i386/i386_exec.c b/sys/i386/i386_exec.c index 28b6bb0..319b780 100644 --- a/sys/i386/i386_exec.c +++ b/sys/i386/i386_exec.c @@ -376,12 +376,14 @@ /* Kernel Stack 0x2000 bytes long */ - vmm_remapPage(vmm_findFreePage(newProcess->id), 0x5BC000, KERNEL_PAGE_DEFAULT | PAGE_STACK, newProcess->id); - vmm_remapPage(vmm_findFreePage(newProcess->id), 0x5BB000, KERNEL_PAGE_DEFAULT | PAGE_STACK, newProcess->id); + //vmm_remapPage(vmm_findFreePage(newProcess->id), 0x5BC000, KERNEL_PAGE_DEFAULT | PAGE_STACK, newProcess->id); + //vmm_remapPage(vmm_findFreePage(newProcess->id), 0x5BB000, KERNEL_PAGE_DEFAULT | PAGE_STACK, newProcess->id); + for (x = 0; x < 2; x++) + vmm_remapPage(vmm_findFreePage(newProcess->id), 0xFFFFF000 - (PAGE_SIZE * x), KERNEL_PAGE_DEFAULT | PAGE_STACK, newProcess->id); /* Set All The Proper Information For The Task */ newProcess->tss.back_link = 0x0; - newProcess->tss.esp0 = 0x5BC000; + newProcess->tss.esp0 = 0xFFFFFFFF; //0x5BC000; newProcess->tss.ss0 = 0x10; newProcess->tss.esp1 = 0x0; newProcess->tss.ss1 = 0x0; diff --git a/sys/include/vmm/vmm.h b/sys/include/vmm/vmm.h index 756e19f..ec5084c 100644 --- a/sys/include/vmm/vmm.h +++ b/sys/include/vmm/vmm.h @@ -51,7 +51,10 @@ #define VMM_MMAP_ADDR_RMODE 0x101000 #define VMM_KERN_START 0xC0800000 -#define VMM_KERN_END 0xFFFFFFFF +#define VMM_KERN_END 0xFDFFFFFF + +#define VMM_KERN_STACK_START 0xFE000000 +#define VMM_KERN_STACK_END 0xFFFFFFFF #define VMM_USER_START 0x00800000 #define VMM_USER_END 0xBFFFFFFF diff --git a/sys/vmm/copyvirtualspace.c b/sys/vmm/copyvirtualspace.c index 4d3fd9e..54f166c 100644 --- a/sys/vmm/copyvirtualspace.c +++ b/sys/vmm/copyvirtualspace.c @@ -76,9 +76,13 @@ newPageDirectory[1] = parentPageDirectory[1]; /* Map The Kernel Memory Region Entry 770 Address 0xC0800000 */ - for (x = PD_INDEX(VMM_KERN_START); x < PD_ENTRIES; x++) + for (x = PD_INDEX(VMM_KERN_START); x <= PD_INDEX(VMM_KERN_END); x++) newPageDirectory[x] = parentPageDirectory[x]; + /* Map The Kernel Stack Region */ + for (x = PD_INDEX(VMM_KERN_STACK_START); x <= PD_INDEX(VMM_KERN_STACK_END); x++) + newPageDirectory[x] = parentPageDirectory[x] | PAGE_COW; + /* * Now For The Fun Stuff For Page Tables 2-767 We Must Map These And Set * The Permissions On Every Mapped Pages To COW This Will Conserve Memory @@ -115,7 +119,7 @@ kpanic("Error: newStackPage == NULL, File: %s, Line: %i\n", __FILE__, __LINE__); /* Set Pointer To Parents Stack Page */ - parentStackPage = (uint32_t *) (((PD_ENTRIES * PAGE_SIZE) * x) + (PAGE_SIZE * i)); + parentStackPage = (uint32_t *) ((PAGE_SIZE * PD_ENTRIES) * x) + (PAGE_SIZE * i); /* Copy The Stack Byte For Byte (I Should Find A Faster Way) */ memcpy(newStackPage, parentStackPage, PAGE_SIZE); @@ -139,7 +143,7 @@ else { /* Add Two If This Is The First Time Setting To COW */ adjustCowCounter(((uint32_t) parentPageTable[i] & 0xFFFFF000), 2); - parentPageTable[i] = newPageTable[i]; + parentPageTable[i] |= PAGE_COW; // newPageTable[i]; } } }