aboutsummaryrefslogtreecommitdiff
path: root/src/lib/resources.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/resources.zig')
-rw-r--r--src/lib/resources.zig12
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);