aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib/syscall.zig9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/lib/syscall.zig b/src/lib/syscall.zig
index 62176db..d15810b 100644
--- a/src/lib/syscall.zig
+++ b/src/lib/syscall.zig
@@ -61,9 +61,14 @@ fn errorName(trap_frame: *const trap.Frame) !usize {
// uprint(str_addr: usize, len: usize) void
fn uprint(trap_frame: *const trap.Frame) void {
- const procmem: *paging.Table = @ptrFromInt(instructions.satp.read().ppn << 12);
+ const vaddr = trap_frame.general_purpose_registers[10];
- const paddr = procmem.translate(trap_frame.general_purpose_registers[10]).?;
+ const procmem: *paging.Table = @ptrFromInt(instructions.satp.read().ppn << 12);
+ const paddr = procmem.translate(vaddr) orelse {
+ const faulter: *volatile u8 = @ptrFromInt(vaddr);
+ _ = faulter.*;
+ unreachable;
+ };
const str_ptr: [*]const u8 = @ptrFromInt(paddr);
const str = str_ptr[0..trap_frame.general_purpose_registers[11]];