Seemingly working fork

This commit is contained in:
2024-04-13 23:02:51 +02:00
parent 03777624fb
commit a6c551e443
10 changed files with 129 additions and 25 deletions

View File

@@ -4,18 +4,32 @@
#include <sys/errno.h>
#include <sys/fcntl.h>
#include <sys/stat.h>
#include <sys/syscalls.h>
#include <sys/time.h>
#include <sys/times.h>
#include <sys/types.h>
#include <sys/syscalls.h>
uint64_t _do_syscall(uint64_t id_rdi, uint64_t a1_rsi, uint64_t a2_rdx, uint64_t a3_rcx) {
uint64_t res;
asm volatile("syscall; mov (0x10016), %%rsp" // TASK_POINTER->ret_sp_val
: "=r"(res)
: "D"(id_rdi), "S"(a1_rsi), "d"(a2_rdx), "a"(a3_rcx)
: "cc", "rcx", "r8",
"r9", "r10", "r11", "r15", "memory");
register uint64_t res asm("rax");
if (id_rdi != SYSCALL_FORK_ID)
asm volatile("syscall; mov (0x10016), %%rsp;" // TASK_POINTER->ret_sp_val
: "=ra"(res)
: "D"(id_rdi), "S"(a1_rsi), "d"(a2_rdx), "a"(a3_rcx)
: "cc", "rcx", "r8",
"r9", "r10", "r11", "r15", "memory");
else
asm volatile("syscall; mov (0x10016), %%rsp;" // TASK_POINTER->ret_sp_val
"pop %%r15;"
"pop %%r14;"
"pop %%r13;"
"pop %%r12;"
"pop %%rbp;"
"pop %%rbx;"
: "=ra"(res)
: "D"(id_rdi), "S"(a1_rsi), "d"(a2_rdx), "a"(a3_rcx)
: "cc", "rcx", "r8",
"r9", "r10", "r11", "r15", "memory");
return res;
}
@@ -106,4 +120,3 @@ void print_mem() {
void print_tasks() {
_do_syscall(SYSCALL_PRINT_TASKS, 0, 0, 0);
}