1
0
Fork 0

fix/kernel: Map kernel stack and bootloader req earlier

This commit is contained in:
Kevin Alavik 2025-05-14 20:34:47 +02:00
parent 7b76ddda34
commit a32db51e45
Signed by: cmpsb
GPG key ID: 10D1CC0526FDC6D7

View file

@ -192,6 +192,23 @@ void paging_init(void)
} }
memset(kernel_pagemap, 0, PAGE_SIZE); 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 */ /* Map kernel sections */
uint64_t text_start = ALIGN_DOWN((uint64_t)__text_start, PAGE_SIZE); uint64_t text_start = ALIGN_DOWN((uint64_t)__text_start, PAGE_SIZE);
uint64_t text_end = ALIGN_UP((uint64_t)__text_end, 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); 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 */ /* Map physical memory */
for (uint64_t i = 0; i < memmap->entry_count; i++) for (uint64_t i = 0; i < memmap->entry_count; i++)
{ {