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