Don't map kernel user-accessible

This commit is contained in:
2024-03-30 09:54:03 +01:00
parent dd36ecf01e
commit 89c398e8c7
3 changed files with 17 additions and 10 deletions

View File

@@ -27,9 +27,9 @@ extern void kmain();
extern "C" __attribute__((noreturn))
__attribute__((used)) void
real_start() {
init_kern_heap();
parse_limine_memmap(limine_mm_entries, limine_mm_count, LIMINE_MEMMAP_BOOTLOADER_RECLAIMABLE);
limine_fb_remap(KERN_AddressSpace);
init_kern_heap();
kmain();
}
@@ -49,8 +49,7 @@ extern "C" __attribute__((unused)) void _start(void) {
barrier();
map_hhdm(get_cr3());
barrier();
new (BOOT_AddressSpace_storage) AddressSpace((uint64_t *) HHDM_P2V(get_cr3()));
BOOT_AddressSpace = reinterpret_cast<AddressSpace *>(BOOT_AddressSpace_storage);
BOOT_AddressSpace = new (BOOT_AddressSpace_storage) AddressSpace((uint64_t *) HHDM_P2V(get_cr3()));
limine_fb_save_response(BOOT_AddressSpace);
limine_mm_save_response();
@@ -62,13 +61,12 @@ extern "C" __attribute__((unused)) void _start(void) {
KERN_AddressSpace_PML4[i] = 0x02;
map_hhdm((uint64_t *) HHDM_V2P(KERN_AddressSpace_PML4));
new (KERN_AddressSpace_storage) AddressSpace(KERN_AddressSpace_PML4);
KERN_AddressSpace = reinterpret_cast<AddressSpace *>(KERN_AddressSpace_storage);
KERN_AddressSpace = new (KERN_AddressSpace_storage) AddressSpace(KERN_AddressSpace_PML4);
// TODO: Accurate kernel length
for (int i = 0; i < 100000; i++) {
// FIXME:
KERN_AddressSpace->map((void *) (kernel_virt_base + i * PAGE_SIZE), (void *) (kernel_phys_base + i * PAGE_SIZE), PAGE_RW | PAGE_USER);
KERN_AddressSpace->map((void *) (kernel_virt_base + i * PAGE_SIZE), (void *) (kernel_phys_base + i * PAGE_SIZE), PAGE_RW);
}
uint64_t real_new_cr3 = (uint64_t) HHDM_V2P(KERN_AddressSpace_PML4);

View File

@@ -10,6 +10,12 @@
#define KERN_STACK_SIZE (1024 * 1024)
extern uint64_t KERN_stack[KERN_STACK_SIZE] __attribute__((aligned(16)));
class AddressSpace;
extern AddressSpace *BOOT_AddressSpace;
extern AddressSpace *KERN_AddressSpace;
#define TASK_POINTER 0x10000
#endif //OS1_GLOBALS_H

View File

@@ -90,11 +90,14 @@ static void trampoline(void *rdi, void (*rsi_entrypoint)()) {
}
Task::Task(Task::TaskMode mode, void (*entrypoint)(), const char *name) {
_name = name;
_frame.ip = reinterpret_cast<uint64_t>(&trampoline);
_frame.rsi = (uint64_t) entrypoint;
_name = name;
if (mode == TaskMode::TASKMODE_KERN) {
_frame.ip = reinterpret_cast<uint64_t>(&trampoline);
_frame.rsi = (uint64_t) entrypoint;
} else {
_frame.ip = reinterpret_cast<uint64_t>(entrypoint);
}
if (mode == TaskMode::TASKMODE_KERN) {
_frame.cs = Arch::GDT::gdt_code.selector();
_frame.ss = Arch::GDT::gdt_data.selector();