}
}
- // Allocate and map stack (already 0-initialised by the page allocator):
- for (std::size_t i = 0; i < stack_size / 0x1000 /* 64KiB */; i++) {
- os::paging::setup_page(*result.PML4T, stack + i * 0x1000, 1, 1);
- }
-
return result;
}
#include <cpuid.h>
#include "interrupts.hpp"
#include "paging.hpp"
+#include "ring3.hpp"
void os::lidt(idtr idtr) {
asm volatile("lidt %0" : : "m"(idtr));
if (
(0xFFFF'C000'0000'0000 <= vaddr && vaddr < 0xFFFF'C000'0801'0000) // process/port info
) { // Kernel memory
- os::print("Alloccing: {}\n", vaddr);
+ os::print("Allocating (Ring 0): {}\n", vaddr);
os::paging::setup_page(PML4T, (void*)vaddr, true, false);
return;
+ } else if (
+ (0x0000'7FFF'FFFF'0000 <= vaddr && vaddr < 0x0000'8000'0000'0000) // stack
+ ) { // Userspace memory
+ os::print("Allocating (Ring 3): {}\n", vaddr);
+ os::paging::setup_page(*os::get_process(os::current_pid).PML4T, (void*)vaddr, true, true);
+ return;
}
os::print("Interrupt: Page Fault.\n");
os::print("Err code: {}.\n", err_code);