diff options
author | Himbeer <himbeer@disroot.org> | 2024-07-27 22:22:31 +0200 |
---|---|---|
committer | Himbeer <himbeer@disroot.org> | 2024-07-27 22:22:31 +0200 |
commit | 5e4f463c81e88202f623b0f07bf8de90b1462fdd (patch) | |
tree | 85bcfb34796911192693b80c5681ecde27a9782c /src/lib/syscall.zig | |
parent | b6e6b4d4251da9a39e2504868f96b681d45be4e2 (diff) |
trap: Make Frame the root struct
Diffstat (limited to 'src/lib/syscall.zig')
-rw-r--r-- | src/lib/syscall.zig | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/lib/syscall.zig b/src/lib/syscall.zig index 19e4f38..0edd367 100644 --- a/src/lib/syscall.zig +++ b/src/lib/syscall.zig @@ -5,11 +5,11 @@ const std = @import("std"); const Console = @import("Console.zig"); +const TrapFrame = @import("TrapFrame.zig"); const instructions = @import("instructions.zig"); const mem = @import("mem.zig"); const paging = @import("paging.zig"); const process = @import("process.zig"); -const trap = @import("trap.zig"); pub const Error = error{ Unimplemented, @@ -20,7 +20,7 @@ pub const HandleError = error{ UnknownSyscall, }; -pub fn handler(proc: *process.Info, trap_frame: *trap.Frame) !void { +pub fn handler(proc: *process.Info, trap_frame: *TrapFrame) !void { switch (trap_frame.general_purpose_registers[17]) { 100000 => trap_frame.setReturnValue(errorName(trap_frame)), 100001 => trap_frame.setReturnValue(consoleWrite(trap_frame)), @@ -36,7 +36,7 @@ pub fn handler(proc: *process.Info, trap_frame: *trap.Frame) !void { pub const ErrorNameError = error{ErrorOutOfRange}; // errorName(value: usize, buffer: [*]u8, len: usize) !usize -fn errorName(trap_frame: *const trap.Frame) !usize { +fn errorName(trap_frame: *const TrapFrame) !usize { const value_wide = trap_frame.general_purpose_registers[10]; const buffer_opt: ?[*]u8 = @ptrFromInt(trap_frame.general_purpose_registers[11]); const buffer_ptr = buffer_opt orelse return Error.ZeroAddressSupplied; @@ -61,7 +61,7 @@ fn errorName(trap_frame: *const trap.Frame) !usize { } // consoleWrite(bytes_addr: usize, len: usize) !usize -fn consoleWrite(trap_frame: *const trap.Frame) !usize { +fn consoleWrite(trap_frame: *const TrapFrame) !usize { const vaddr = trap_frame.general_purpose_registers[10]; const len = trap_frame.general_purpose_registers[11]; @@ -82,7 +82,7 @@ fn consoleWrite(trap_frame: *const trap.Frame) !usize { } // launch(bytes: [*]align(@alignOf(std.elf.Elf64_Ehdr)) const u8, len: usize) !usize -fn launch(trap_frame: *const trap.Frame) !usize { +fn launch(trap_frame: *const TrapFrame) !usize { const alignment = @alignOf(std.elf.Elf64_Ehdr); const bytes_addr = trap_frame.general_purpose_registers[10]; const bytes_opt: ?[*]align(alignment) const u8 = @ptrFromInt(bytes_addr); @@ -112,7 +112,7 @@ pub const TerminateError = error{ }; // terminate(pid: u16, tid: usize) !void -fn terminate(proc: *const process.Info, trap_frame: *const trap.Frame) !void { +fn terminate(proc: *const process.Info, trap_frame: *const TrapFrame) !void { const pid_wide = trap_frame.general_purpose_registers[10]; const pid = std.math.cast(u16, pid_wide) orelse { return TerminateError.PidOutOfRange; |