Files
zing/src/kernel.zig
T

53 lines
1.3 KiB
Zig

// export const _ = @import("arch/riscv64/boot.zig").rv64BspLowerEntry;
pub const arch = @import("arch.zig").arch();
pub const mem = @import("mem.zig");
pub const debug = @import("debug.zig");
pub const arena = @import("arena.zig");
pub const thread = @import("thread.zig");
pub const log = debug.log;
pub const vmm = mem.vmm;
pub const TRACE_PHYSICAL_ALLOCATOR: bool = false;
const std = @import("std");
fn f0(arg: usize) callconv(.C) noreturn {
var c: usize = 0;
while (true) {
f1(arg, c);
c += 1;
}
}
noinline fn f1(arg: usize, c: usize) void {
log.write("\x1B[1;{}H{}", .{ arg + 1, (c + arg) % 10 });
}
pub export fn kernel_main() callconv(.C) noreturn {
var a = arena.Arena.setup(256 * 0x1000) orelse @panic("Could not setup kernel arena");
const pc = @intFromPtr(&f0);
// log.write("\x1B[2J", .{});
for (0..32) |i| {
const t = thread.Thread.create(&a, pc, i);
thread.addThread(t);
}
thread.enter();
arch.halt();
}
pub fn panic(msg: []const u8, error_return_trace: ?*std.builtin.StackTrace, return_address: ?usize) noreturn {
_ = error_return_trace;
const ra = return_address orelse @returnAddress();
log.err("!!! Kernel panic !!!", .{});
log.err(" Reason: {s}", .{msg});
log.err(" At: 0x{x}", .{ra});
arch.halt();
}