diff options
Diffstat (limited to 'src/lib/interrupts.zig')
-rw-r--r-- | src/lib/interrupts.zig | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/lib/interrupts.zig b/src/lib/interrupts.zig index 3b1884d..3a012c3 100644 --- a/src/lib/interrupts.zig +++ b/src/lib/interrupts.zig @@ -140,6 +140,9 @@ export fn handleTrap(epc: usize, tval: usize, cause_bits: usize, frame: *trap.Fr }, } } else { + const proc = &process.list.last.?.data; + proc.state = .waiting; + switch (@as(SyncCause, @enumFromInt(cause.num))) { .illegal_instruction => { std.debug.panic("Hart {d}: Illegal instruction, EPC = 0x{x:0>16}", .{ frame.hart_id, epc }); @@ -154,7 +157,6 @@ export fn handleTrap(epc: usize, tval: usize, cause_bits: usize, frame: *trap.Fr std.debug.panic("Hart {d}: Store/AMO access fault: EPC = 0x{x:0>16}, TVAL = 0x{x:0>16}", .{ frame.hart_id, epc, tval }); }, .ecall => { - const proc = &process.list.last.?.data; syscall.handler(proc, frame) catch |err| switch (err) { syscall.Error.UnknownSyscall => { const a7 = frame.general_purpose_registers[17]; |