diff options
Diffstat (limited to 'src/lib/resources.zig')
-rw-r--r-- | src/lib/resources.zig | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/lib/resources.zig b/src/lib/resources.zig index ade6a51..c79c82e 100644 --- a/src/lib/resources.zig +++ b/src/lib/resources.zig @@ -5,6 +5,8 @@ const std = @import("std"); const Console = @import("Console.zig"); +const instructions = @import("instructions.zig"); +const paging = @import("paging.zig"); const process = @import("process.zig"); const syscall = @import("syscall.zig"); const sysexchange = @import("sysexchange.zig"); @@ -20,7 +22,15 @@ const File = tar.Iterator(io.FixedBufferStream([]const u8).Reader).File; const iofs = struct { const debug = struct { fn write(ptr: [*]const u8, len: usize) callconv(.C) Result(usize) { - const bytes = ptr[0..len]; + // Raise page fault if applicable. + if (len > 0) { + std.mem.doNotOptimizeAway(ptr[0]); + } + + const procmem: *paging.Table = @ptrFromInt(instructions.satp.read().ppn << 12); + const paddr = procmem.translate(@intFromPtr(ptr)).?; + const pptr: [*]const u8 = @ptrFromInt(paddr); + const bytes = pptr[0..len]; const console = Console.autoChoose() orelse { return Result(usize).fromAnyTypeOrError(Error.NoConsole); |