aboutsummaryrefslogtreecommitdiff
path: root/src/lib/syscall.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/syscall.zig')
-rw-r--r--src/lib/syscall.zig33
1 files changed, 20 insertions, 13 deletions
diff --git a/src/lib/syscall.zig b/src/lib/syscall.zig
index 3ce70a5..9f88aea 100644
--- a/src/lib/syscall.zig
+++ b/src/lib/syscall.zig
@@ -20,20 +20,22 @@ pub const HandleError = error{
};
pub fn handler(proc: *process.Info, trap_frame: *trap.Frame) !void {
+ const ret = sysexchange.frameReturn;
switch (trap_frame.general_purpose_registers[17]) {
- 100000 => uprint(trap_frame),
- 100001 => open(proc, trap_frame),
- 100002 => close(proc, trap_frame),
- 100003 => provideStream(proc, trap_frame),
- 100004 => provideFile(proc, trap_frame),
- 100005 => provideHook(proc, trap_frame),
- 100006 => mkdir(proc, trap_frame),
- 100007 => provideDirHook(proc, trap_frame),
- 100008 => remove(trap_frame),
- 100009 => read(proc, trap_frame),
- 100010 => write(proc, trap_frame),
- 100011 => list(proc, trap_frame),
- 100012 => terminate(proc),
+ 100000 => ret(null, trap_frame, uprint(trap_frame)),
+ 100001 => ret(null, trap_frame, open(proc, trap_frame)),
+ 100002 => ret(null, trap_frame, close(proc, trap_frame)),
+ 100003 => ret(null, trap_frame, provideStream(proc, trap_frame)),
+ 100004 => ret(null, trap_frame, provideFile(proc, trap_frame)),
+ 100005 => ret(null, trap_frame, provideHook(proc, trap_frame)),
+ 100006 => ret(null, trap_frame, mkdir(proc, trap_frame)),
+ 100007 => ret(null, trap_frame, provideDirHook(proc, trap_frame)),
+ 100008 => ret(null, trap_frame, remove(trap_frame)),
+ 100009 => ret(null, trap_frame, read(proc, trap_frame)),
+ 100010 => ret(null, trap_frame, write(proc, trap_frame)),
+ 100011 => ret(null, trap_frame, list(proc, trap_frame)),
+ 100012 => ret(null, trap_frame, terminate(proc)),
+ 100013 => ret(null, trap_frame, processId(proc)),
else => return HandleError.UnknownSyscall,
}
}
@@ -308,3 +310,8 @@ fn terminate(proc: *process.Info) void {
std.debug.panic("Unable to schedule because all processes are terminated: {}", .{err});
};
}
+
+// processId() usize
+fn processId(proc: *process.Info) usize {
+ return proc.id;
+}