aboutsummaryrefslogtreecommitdiff
path: root/src/lib/syscall.zig
diff options
context:
space:
mode:
authorHimbeer <himbeer@disroot.org>2024-07-27 19:28:38 +0200
committerHimbeer <himbeer@disroot.org>2024-07-27 19:28:38 +0200
commit4149f06f9c1cb1e2086217986c72f15a9d89e2db (patch)
tree4474743a19aef3a82060fc85dde3e5459acdc0d9 /src/lib/syscall.zig
parenta5c85dc3b3160df29def93ef44c0b5bedde3a407 (diff)
syscall: Turn uprint() into proper console write
Diffstat (limited to 'src/lib/syscall.zig')
-rw-r--r--src/lib/syscall.zig14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/lib/syscall.zig b/src/lib/syscall.zig
index d15810b..dcf246a 100644
--- a/src/lib/syscall.zig
+++ b/src/lib/syscall.zig
@@ -4,6 +4,7 @@
const std = @import("std");
+const Console = @import("Console.zig");
const instructions = @import("instructions.zig");
const mem = @import("mem.zig");
const paging = @import("paging.zig");
@@ -59,9 +60,10 @@ fn errorName(trap_frame: *const trap.Frame) !usize {
return n;
}
-// uprint(str_addr: usize, len: usize) void
-fn uprint(trap_frame: *const trap.Frame) void {
+// uprint(bytes_addr: usize, len: usize) !usize
+fn uprint(trap_frame: *const trap.Frame) !usize {
const vaddr = trap_frame.general_purpose_registers[10];
+ const len = trap_frame.general_purpose_registers[11];
const procmem: *paging.Table = @ptrFromInt(instructions.satp.read().ppn << 12);
const paddr = procmem.translate(vaddr) orelse {
@@ -70,11 +72,11 @@ fn uprint(trap_frame: *const trap.Frame) void {
unreachable;
};
- const str_ptr: [*]const u8 = @ptrFromInt(paddr);
- const str = str_ptr[0..trap_frame.general_purpose_registers[11]];
+ const bytes_ptr: [*]const u8 = @ptrFromInt(paddr);
+ const bytes = bytes_ptr[0..len];
- const w = @import("Console.zig").autoChoose().?.writer();
- w.print("User message: {s}\r\n", .{str}) catch unreachable;
+ const w = Console.autoChoose().?.writer();
+ return w.write(bytes);
}
// launch(bytes: [*]align(@alignOf(std.elf.Elf64_Ehdr)) const u8, len: usize) !usize