From d9ecdb689da856db572c5d99d16f5bb057cc7b55 Mon Sep 17 00:00:00 2001 From: Pascal Zittlau Date: Mon, 23 Feb 2026 09:42:24 +0100 Subject: [PATCH] wip --- src/main.zig | 3 +++ src/syscalls.zig | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main.zig b/src/main.zig index b86726e..19fa67b 100644 --- a/src/main.zig +++ b/src/main.zig @@ -221,6 +221,8 @@ fn loadStaticElf(ehdr: elf.Header, file_reader: *std.fs.File.Reader) !usize { .{ phdr_idx, start, start + size, phdr.p_vaddr, base_for_dyn }, ); const ptr: []align(page_size) u8 = @as([*]align(page_size) u8, @ptrFromInt(start))[0..size]; + // TODO: we should likely just use mmap instead because then not touched memory isn't loaded + // unnecessarily try file_reader.seekTo(phdr.p_offset); if (try file_reader.read(ptr[offset..][0..phdr.p_filesz]) != phdr.p_filesz) return UnfinishedReadError.UnfinishedRead; @@ -254,6 +256,7 @@ fn patchLoadedElf(base: usize) !void { const vaddr = if (ehdr.e_type == elf.ET.DYN) base + phdr.p_vaddr else phdr.p_vaddr; const memsz = phdr.p_memsz; + // TODO: does this really need to be aligned const page_start = mem.alignBackward(usize, vaddr, page_size); const page_end = mem.alignForward(usize, vaddr + memsz, page_size); const size = page_end - page_start; diff --git a/src/syscalls.zig b/src/syscalls.zig index 0e780bf..7e05951 100644 --- a/src/syscalls.zig +++ b/src/syscalls.zig @@ -40,7 +40,7 @@ pub const SavedContext = extern struct { export fn syscall_handler(ctx: *SavedContext) callconv(.c) void { // TODO: Handle signals (masking) to prevent re-entrancy issues if we touch global state. - const sys: linux.SYS = @enumFromInt(ctx.rax); + const sys: linux.syscalls.X64 = @enumFromInt(ctx.rax); switch (sys) { .readlink => {