diff options
Diffstat (limited to 'src/core/paging.cc')
| -rw-r--r-- | src/core/paging.cc | 12 |
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; |
