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.zig9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/lib/syscall.zig b/src/lib/syscall.zig
index 03abade..8d42e7a 100644
--- a/src/lib/syscall.zig
+++ b/src/lib/syscall.zig
@@ -9,6 +9,7 @@ const mem = @import("mem.zig");
const paging = @import("paging.zig");
const process = @import("process.zig");
const riscv = @import("riscv.zig");
+const userinit = @import("userinit.zig");
pub const Error = error{
ZeroAddressSupplied,
@@ -27,6 +28,7 @@ pub fn handler(proc: *process.Info, trap_frame: *TrapFrame) !void {
100004 => trap_frame.setReturnValue(terminate(proc, trap_frame)),
100005 => trap_frame.setReturnValue(processId(proc)),
100006 => trap_frame.setReturnValue(threadId(proc)),
+ 100007 => trap_frame.setReturnValue(rawUserinit(trap_frame)),
else => return HandleError.UnknownSyscall,
}
}
@@ -138,3 +140,10 @@ fn processId(proc: *const process.Info) usize {
fn threadId(proc: *const process.Info) usize {
return proc.thread_id;
}
+
+// rawUserinit(ptr: *[*]const u8) usize
+fn rawUserinit(trap_frame: *const TrapFrame) usize {
+ const ptr: *[*]const u8 = @ptrFromInt(trap_frame.general_purpose_registers[10]);
+ ptr.* = userinit.tarball;
+ return userinit.tarball.len;
+}