mirror of
https://github.com/usatiuk/ficus.git
synced 2025-10-29 00:27:52 +01:00
Seemingly working fork
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user