Implement initial fork syscall

This commit is contained in:
Justin C. Miller
2019-03-09 12:18:21 -08:00
parent 241e1dacb0
commit 97ac3c09fa
12 changed files with 143 additions and 25 deletions

View File

@@ -68,8 +68,8 @@ syscall_dispatch(uintptr_t return_rsp, cpu_state &regs)
auto *p = s.current();
p->wait_on_signal(-1ull);
cons->printf("\nProcess %u: Received PAUSE syscall\n", p->pid);
return_rsp = s.schedule(return_rsp);
cons->set_color();
return_rsp = s.schedule(return_rsp);
}
break;
@@ -118,6 +118,19 @@ syscall_dispatch(uintptr_t return_rsp, cpu_state &regs)
}
break;
case syscall::fork:
{
cons->set_color(11);
cons->printf("\nProcess %u: Received FORK syscall\n", p->pid);
cons->set_color();
pid_t pid = p->fork(return_rsp);
if (pid == scheduler::get().current()->pid)
pid = 0;
regs.rax = pid;
}
break;
default:
cons->set_color(9);
cons->printf("\nReceived unknown syscall: %02x\n", call);