From d1ff7bcc91886626dc9060ec5fb67ee102ab7c1d Mon Sep 17 00:00:00 2001 From: Jon Santmyer Date: Mon, 11 Mar 2024 21:30:31 -0400 Subject: usermode capable kernel with logging syscall --- usr/umode.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 usr/umode.c (limited to 'usr/umode.c') diff --git a/usr/umode.c b/usr/umode.c new file mode 100644 index 0000000..4ef5306 --- /dev/null +++ b/usr/umode.c @@ -0,0 +1,31 @@ +#include "umode.h" +#include "elf.h" +#include "boot/cmdline.h" +#include "lib/jove.h" +#include "ird/initrd.h" +#include "mem/memory.h" + +void +umode_setup(void) +{ + extern void syscall_setup_syscall(void); + syscall_setup_syscall(); + + const char *init_path = cmdline_get("init"); + if(init_path == NULL) + kpanic("Missing path to init ELF file / binary\n"); + + struct InitrdFile *init_file = ird_getfile(init_path); + if(init_file == NULL) + kpanic("Missing init file %s in initrd\n", init_path); + + void (*entry_point)(void) = elf_load(init_file->data, init_file->size); + if(entry_point == NULL) + kpanic("Init file %s is incorrectly formatted (want ELF64)\n", init_path); + + void *user_stack = (void*)(0x00007FFFFFFFFFFF); + mem_ensure_range((uintptr_t)user_stack & ~0xFFF, (uintptr_t)user_stack, true, true); + + klogf("User entry point %#016X\n", entry_point); + umode_enter(entry_point, user_stack); +} -- cgit v1.2.1