diff --git a/kernel/src/system_calls.cpp b/kernel/src/system_calls.cpp index b1c7612c..56a1a047 100644 --- a/kernel/src/system_calls.cpp +++ b/kernel/src/system_calls.cpp @@ -38,6 +38,18 @@ void sc_sleep_ms(interrupt::syscall_regs* regs){ scheduler::sleep_ms(scheduler::get_pid(), time); } +void sc_exec(interrupt::syscall_regs* regs){ + auto file = reinterpret_cast(regs->rbx); + + regs->rax = scheduler::exec(file); +} + +void sc_await_termination(interrupt::syscall_regs* regs){ + auto pid = regs->rbx; + + //TODO Implement +} + } //End of anonymous namespace void system_call_entry(interrupt::syscall_regs* regs){ @@ -64,6 +76,14 @@ void system_call_entry(interrupt::syscall_regs* regs){ sc_sleep_ms(regs); break; + case 5: + sc_exec(regs); + break; + + case 6: + sc_await_termination(regs); + break; + case 0x666: //TODO Do something with return code scheduler::kill_current_process();