From 252a36ae4ea7e638340e2fa6d984fdf48d961bd5 Mon Sep 17 00:00:00 2001 From: user Date: Wed, 25 Feb 2026 00:33:16 +0100 Subject: [PATCH] basic fork foo, function itself is empty --- kernel/syscall/handler.cc | 4 ++-- kernel/syscall/skeleton.cc | 4 +++- kernel/syscall/skeleton.h | 3 ++- kernel/syscall/stub.h | 7 ++++++- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/kernel/syscall/handler.cc b/kernel/syscall/handler.cc index 6c0b8bc..89903f0 100644 --- a/kernel/syscall/handler.cc +++ b/kernel/syscall/handler.cc @@ -80,8 +80,8 @@ extern "C" size_t syscall_handler(size_t sysnum, size_t p1, size_t p2, return Skeleton::receive(Guard::enter().vault(), (void*)(p1), p2); case Syscall::ID::REPLY: return Skeleton::reply(Guard::enter().vault(), (void*)(p1), p2); - // case Syscall::ID::FORK: - // return Skeleton::fork(v, user); + case Syscall::ID::FORK: + return Skeleton::fork(Guard::enter().vault(), user); break; diff --git a/kernel/syscall/skeleton.cc b/kernel/syscall/skeleton.cc index c045c06..e1803ce 100644 --- a/kernel/syscall/skeleton.cc +++ b/kernel/syscall/skeleton.cc @@ -392,7 +392,9 @@ bool reply(Vault& v, const void* buffer, size_t size) { return true; } - +int fork(Vault &vault, InterruptContext *user_context) { + return 0; +} } // namespace Skeleton diff --git a/kernel/syscall/skeleton.h b/kernel/syscall/skeleton.h index 6b0e0fb..9c37c88 100644 --- a/kernel/syscall/skeleton.h +++ b/kernel/syscall/skeleton.h @@ -1,4 +1,5 @@ #pragma once +#include "arch/idt.h" #include "types.h" #include "../memory/pagetable.h" @@ -29,7 +30,7 @@ void invlpg(uintptr_t virt_addr); bool send(Vault &vault, int pid, const void* sbuffer, size_t ssize, void* rbuffer, size_t rsize); int receive(Vault &vault, void* buffer, size_t size); bool reply(Vault &vaul, const void* buffer, size_t size); -//int fork(Vault &vault, InterruptContext *user); +int fork(Vault &vault, InterruptContext *user); } // namespace Skeleton diff --git a/kernel/syscall/stub.h b/kernel/syscall/stub.h index ca90aaf..537a090 100644 --- a/kernel/syscall/stub.h +++ b/kernel/syscall/stub.h @@ -22,7 +22,7 @@ namespace Syscall { SEND = 13, RECEIVE = 14, REPLY = 15, - // FORK = 16 + FORK = 16 }; } // namespace Syscall @@ -97,3 +97,8 @@ extern "C" ssize_t sys_safe_call(Syscall::ID id, size_t p1, size_t p2, [[gnu::always_inline]] static inline bool reply(const void* buffer, size_t size) { return sys_call(Syscall::ID::REPLY, (size_t)buffer, size,0,0,0); } + + +[[gnu::always_inline]] static inline int fork() { + return sys_call(Syscall::ID::FORK,0,0,0,0,0); +}