diff --git a/kernel/src/arch/paging.c b/kernel/src/arch/paging.c index 0cd1056..192354c 100644 --- a/kernel/src/arch/paging.c +++ b/kernel/src/arch/paging.c @@ -192,6 +192,23 @@ void paging_init(void) } memset(kernel_pagemap, 0, PAGE_SIZE); + /* Map kernel stack */ + uint64_t stack_top = ALIGN_UP(kstack_top, PAGE_SIZE); + for (uint64_t addr = stack_top - (16 * 1024); addr < stack_top; addr += PAGE_SIZE) + { + uint64_t phys = (uint64_t)PHYSICAL(addr); + vmap(kernel_pagemap, addr, phys, VMM_PRESENT | VMM_WRITE | VMM_NX); + } + + /* Map bootloader requests */ + uint64_t breq_start = ALIGN_DOWN(__limine_requests_start, PAGE_SIZE); + uint64_t breq_end = ALIGN_UP(__limine_requests_end, PAGE_SIZE); + PRINT_SECTION("limine", breq_start, breq_end); + for (uint64_t reqs = breq_start; reqs < breq_end; reqs += PAGE_SIZE) + { + vmap(kernel_pagemap, reqs, reqs - kvirt + kphys, VMM_PRESENT | VMM_WRITE); + } + /* Map kernel sections */ uint64_t text_start = ALIGN_DOWN((uint64_t)__text_start, PAGE_SIZE); uint64_t text_end = ALIGN_UP((uint64_t)__text_end, PAGE_SIZE); @@ -220,14 +237,6 @@ void paging_init(void) vmap(kernel_pagemap, addr, phys, VMM_PRESENT | VMM_WRITE | VMM_NX); } - /* Map kernel stack */ - uint64_t stack_top = ALIGN_UP(kstack_top, PAGE_SIZE); - for (uint64_t addr = stack_top - (16 * 1024); addr < stack_top; addr += PAGE_SIZE) - { - uint64_t phys = (uint64_t)PHYSICAL(addr); - vmap(kernel_pagemap, addr, phys, VMM_PRESENT | VMM_WRITE | VMM_NX); - } - /* Map physical memory */ for (uint64_t i = 0; i < memmap->entry_count; i++) {