basic fork foo, function itself is empty

This commit is contained in:
user
2026-02-25 00:33:16 +01:00
parent 1ca72b695e
commit 252a36ae4e
4 changed files with 13 additions and 5 deletions

View File

@@ -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); return Skeleton::receive(Guard::enter().vault(), (void*)(p1), p2);
case Syscall::ID::REPLY: case Syscall::ID::REPLY:
return Skeleton::reply(Guard::enter().vault(), (void*)(p1), p2); return Skeleton::reply(Guard::enter().vault(), (void*)(p1), p2);
// case Syscall::ID::FORK: case Syscall::ID::FORK:
// return Skeleton::fork(v, user); return Skeleton::fork(Guard::enter().vault(), user);
break; break;

View File

@@ -392,7 +392,9 @@ bool reply(Vault& v, const void* buffer, size_t size) {
return true; return true;
} }
int fork(Vault &vault, InterruptContext *user_context) {
return 0;
}
} // namespace Skeleton } // namespace Skeleton

View File

@@ -1,4 +1,5 @@
#pragma once #pragma once
#include "arch/idt.h"
#include "types.h" #include "types.h"
#include "../memory/pagetable.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); 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); int receive(Vault &vault, void* buffer, size_t size);
bool reply(Vault &vaul, const 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 } // namespace Skeleton

View File

@@ -22,7 +22,7 @@ namespace Syscall {
SEND = 13, SEND = 13,
RECEIVE = 14, RECEIVE = 14,
REPLY = 15, REPLY = 15,
// FORK = 16 FORK = 16
}; };
} // namespace Syscall } // 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) { [[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); 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);
}