aboutsummaryrefslogtreecommitdiff
path: root/src/core/paging.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/paging.cc')
-rw-r--r--src/core/paging.cc12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/core/paging.cc b/src/core/paging.cc
index 7231352..ebd4f9d 100644
--- a/src/core/paging.cc
+++ b/src/core/paging.cc
@@ -52,7 +52,7 @@ void paging_enable() {
// 4096 bytes stack
PAGE_MAP(kvar_kernel_vma-4096, kvar_stack_pma,PAGING_OPT_DEFAULTS);
-
+
// Load new pml4
kpml4=(u64*)((u64)kpages[0]-kvar_kernel_vma);
lpml4(kpml4);
@@ -190,9 +190,15 @@ void paging_allocate_addr(u64* pml4_table, u64 virt, u64 phy, u16 options, char
u64* paging_create_task(int npages){
u64 *pml4=paging_allocate_utable();
- for(int i=0;i<npages;i++){
- paging_allocate_addr(pml4, i*4096, (u64)PAGE_ALLOCATE(), PAGING_OPT_P|PAGING_OPT_RW|PAGING_OPT_US, 0);
+ int i;
+ for(i=0;i<npages;i++){
+ paging_allocate_addr(pml4, i*4096, (u64)PAGE_ALLOCATE(), PAGING_OPT_DEFAULTS|PAGING_OPT_US, 0);
}
+ // Allocate a page for the user stack
+ paging_allocate_addr(pml4, i*4096, (u64)PAGE_ALLOCATE(), PAGING_OPT_DEFAULTS|PAGING_OPT_US, 0);
+ // Allocate a page for the kernel stack
+ paging_allocate_addr(pml4, (i+1)*4096, (u64)PAGE_ALLOCATE(), PAGING_OPT_DEFAULTS, 0);
+
// Enable kernel access
u16 pml4_entry=kvar_kernel_vma>>39&0x1FF;