From 65724efac38fd9a292fe837f55db3b8f0e145516 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6nke=20Holz?= Date: Tue, 5 Mar 2024 17:04:44 +0100 Subject: [PATCH] Kernel/riscv64: Implement fork --- Kernel/Syscalls/fork.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Kernel/Syscalls/fork.cpp b/Kernel/Syscalls/fork.cpp index 5801c7b1445..9470442cc74 100644 --- a/Kernel/Syscalls/fork.cpp +++ b/Kernel/Syscalls/fork.cpp @@ -150,9 +150,13 @@ ErrorOr Process::sys$fork(RegisterState& regs) child_regs.elr_el1 = regs.elr_el1; child_regs.sp_el0 = regs.sp_el0; #elif ARCH(RISCV64) - (void)child_regs; - (void)regs; - TODO_RISCV64(); + for (size_t i = 0; i < array_size(child_regs.x); ++i) + child_regs.x[i] = regs.x[i]; + child_regs.x[9] = 0; // fork() returns 0 in the child :^) + child_regs.sstatus = regs.sstatus; + child_regs.pc = regs.sepc; + dbgln_if(FORK_DEBUG, "fork: child will begin executing at {:p} with stack {:p}, kstack {:p}", + child_regs.pc, child_regs.sp(), child_regs.kernel_sp); #else # error Unknown architecture #endif