diff options
author | Marvin Borner | 2020-05-02 15:44:11 +0200 |
---|---|---|
committer | Marvin Borner | 2020-05-02 15:44:11 +0200 |
commit | aa8a8811818331cf511681327e3ba95e456f0d33 (patch) | |
tree | 852c314dae76e756863f94639ff45eff72834d5d /src/kernel/syscall/actions/sys_fork.c | |
parent | 2a0e810a473dea57fd1cd53ea424b61269c029ba (diff) |
Added many syscalls to get better POSIX compliance
Diffstat (limited to 'src/kernel/syscall/actions/sys_fork.c')
-rw-r--r-- | src/kernel/syscall/actions/sys_fork.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/kernel/syscall/actions/sys_fork.c b/src/kernel/syscall/actions/sys_fork.c new file mode 100644 index 0000000..af64ff9 --- /dev/null +++ b/src/kernel/syscall/actions/sys_fork.c @@ -0,0 +1,19 @@ +#include <stdint.h> +#include <kernel/interrupts/interrupts.h> +#include <kernel/memory/paging.h> +#include <kernel/tasks/process.h> +#include <kernel/lib/lib.h> + +uint32_t sys_fork(struct regs *r) +{ + struct page_directory *dir = paging_copy_user_directory(current_proc->cr3); + struct process *proc = process_make_new(); + proc->cr3 = dir; + memcpy(&proc->registers, r, sizeof(struct regs)); + proc->registers.eax = proc->pid; + proc->pid = current_proc->pid; + + process_spawn(proc); + + return 0; +}
\ No newline at end of file |