diff options
Diffstat (limited to 'src/lib/syscall.zig')
-rw-r--r-- | src/lib/syscall.zig | 34 |
1 files changed, 14 insertions, 20 deletions
diff --git a/src/lib/syscall.zig b/src/lib/syscall.zig index 9eb5199..3c01879 100644 --- a/src/lib/syscall.zig +++ b/src/lib/syscall.zig @@ -15,12 +15,6 @@ pub const Error = error{ UnknownSyscall, }; -fn setUserMemoryAccess(enable: bool) void { - var sstatus = instructions.sstatus.read(); - sstatus.supervisor_user_memory_access = @bitCast(enable); - instructions.sstatus.write(sstatus); -} - pub fn handler(proc: *process.Info, trap_frame: *trap.Frame) !void { switch (trap_frame.general_purpose_registers[17]) { 100000 => uprint(trap_frame), @@ -54,8 +48,8 @@ fn uprint(trap_frame: *const trap.Frame) void { // open(path_c: [*:0]const u8, data: usize) Result(usize) // fixme: Kernel panic if null pointer fn open(proc: *process.Info, trap_frame: *trap.Frame) void { - setUserMemoryAccess(true); - defer setUserMemoryAccess(false); + paging.setUserMemoryAccess(true); + defer paging.setUserMemoryAccess(false); const path_c: [*:0]const u8 = @ptrFromInt(trap_frame.general_purpose_registers[10]); const data = trap_frame.general_purpose_registers[11]; @@ -80,8 +74,8 @@ fn close(proc: *process.Info, trap_frame: *const trap.Frame) void { // writeFn: ?vfs.Stream.WriteFn, // ) Result(void) fn provideStream(proc: *const process.Info, trap_frame: *trap.Frame) void { - setUserMemoryAccess(true); - defer setUserMemoryAccess(false); + paging.setUserMemoryAccess(true); + defer paging.setUserMemoryAccess(false); const path_c: [*:0]const u8 = @ptrFromInt(trap_frame.general_purpose_registers[10]); const readFn: ?vfs.Stream.ReadFn = @ptrFromInt(trap_frame.general_purpose_registers[11]); @@ -103,8 +97,8 @@ fn provideStream(proc: *const process.Info, trap_frame: *trap.Frame) void { // closeFn: ?vfs.File.CloseFn, // ) Result(void) fn provideFile(proc: *const process.Info, trap_frame: *trap.Frame) void { - setUserMemoryAccess(true); - defer setUserMemoryAccess(false); + paging.setUserMemoryAccess(true); + defer paging.setUserMemoryAccess(false); const path_c: [*:0]const u8 = @ptrFromInt(trap_frame.general_purpose_registers[10]); const openFn: vfs.File.OpenFn = @ptrFromInt(trap_frame.general_purpose_registers[11]); @@ -127,8 +121,8 @@ fn provideFile(proc: *const process.Info, trap_frame: *trap.Frame) void { // callback: vfs.Hook.Callback, // ) Result(void) fn provideHook(proc: *const process.Info, trap_frame: *trap.Frame) void { - setUserMemoryAccess(true); - defer setUserMemoryAccess(false); + paging.setUserMemoryAccess(true); + defer paging.setUserMemoryAccess(false); const path_c: [*:0]const u8 = @ptrFromInt(trap_frame.general_purpose_registers[10]); const callback: vfs.Hook.Callback = @ptrFromInt(trap_frame.general_purpose_registers[11]); @@ -157,8 +151,8 @@ fn mkdir(trap_frame: *trap.Frame) void { // removeFn: vfs.DirHook.RemoveFn, // ) Result(void) fn provideDirHook(proc: *const process.Info, trap_frame: *trap.Frame) void { - setUserMemoryAccess(true); - defer setUserMemoryAccess(false); + paging.setUserMemoryAccess(true); + defer paging.setUserMemoryAccess(false); const path_c: [*:0]const u8 = @ptrFromInt(trap_frame.general_purpose_registers[10]); const provideFn: vfs.DirHook.ProvideFn = @ptrFromInt(trap_frame.general_purpose_registers[11]); @@ -184,8 +178,8 @@ fn remove(trap_frame: *const trap.Frame) void { // read(handle: usize, buffer: [*]u8, len: usize) Result(usize) fn read(proc: *process.Info, trap_frame: *trap.Frame) void { - setUserMemoryAccess(true); - defer setUserMemoryAccess(false); + paging.setUserMemoryAccess(true); + defer paging.setUserMemoryAccess(false); const handle = trap_frame.general_purpose_registers[10]; const buffer: [*]u8 = @ptrFromInt(trap_frame.general_purpose_registers[11]); @@ -200,8 +194,8 @@ fn read(proc: *process.Info, trap_frame: *trap.Frame) void { // write(handle: usize, bytes: [*]const u8, len: usize) Result(usize) fn write(proc: *process.Info, trap_frame: *trap.Frame) void { - setUserMemoryAccess(true); - defer setUserMemoryAccess(false); + paging.setUserMemoryAccess(true); + defer paging.setUserMemoryAccess(false); const handle = trap_frame.general_purpose_registers[10]; const bytes: [*]const u8 = @ptrFromInt(trap_frame.general_purpose_registers[11]); |