diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/resources.zig | 15 | ||||
-rw-r--r-- | src/lib/syscall.zig | 33 |
2 files changed, 20 insertions, 28 deletions
diff --git a/src/lib/resources.zig b/src/lib/resources.zig index b345b84..2d2e871 100644 --- a/src/lib/resources.zig +++ b/src/lib/resources.zig @@ -53,10 +53,6 @@ const iofs = struct { const processfs = struct { const self = struct { - fn id(pid: u16, _: usize, _: usize) callconv(.C) Result(usize) { - return Result(usize).fromAnyTypeOrError(pid); - } - fn threadId(_: u16, thread_id: usize, _: usize) callconv(.C) Result(usize) { return Result(usize).fromAnyTypeOrError(thread_id); } @@ -266,17 +262,6 @@ fn provideProcess() !void { } fn provideProcessSelf() !void { - try vfs.provideResource("/process/self/id", .{ - .tag = .hook, - .data = .{ - .hook = .{ - .callback = processfs.self.id, - }, - }, - }, 0, .{ - .reclaimable = false, - }); - try vfs.provideResource("/process/self/thread_id", .{ .tag = .hook, .data = .{ 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; +} |