From 2ae4e31b74efa29cc92554647d5c9dce077971c4 Mon Sep 17 00:00:00 2001 From: dzwdz Date: Mon, 26 Jul 2021 18:17:01 +0200 Subject: fork() pt 1: cloning process memory --- src/kernel/syscalls.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src/kernel/syscalls.c') diff --git a/src/kernel/syscalls.c b/src/kernel/syscalls.c index a6a2b17..eff670e 100644 --- a/src/kernel/syscalls.c +++ b/src/kernel/syscalls.c @@ -9,6 +9,12 @@ _Noreturn void sc_exit(const char *msg, size_t len) { panic(); } +int sc_fork() { + struct process *orig = process_current; + process_current = process_clone(orig); + process_switch(process_current); +} + int sc_debuglog(const char *msg, size_t len) { struct pagedir *pages = process_current->pages; void *phys = pagedir_virt2phys(pages, msg, true, false); @@ -27,6 +33,8 @@ int syscall_handler(int num, int a, int b, int c) { switch (num) { case SC_EXIT: sc_exit((void*)a, b); + case SC_FORK: + return sc_fork(); case SC_DEBUGLOG: return sc_debuglog((void*)a, b); default: -- cgit v1.2.3