diff options
Diffstat (limited to 'src/lib/syscall.zig')
-rw-r--r-- | src/lib/syscall.zig | 9 |
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; +} |