diff --git a/std/os/wasi/core.zig b/std/os/wasi/core.zig index 329d8f8fc2..18c32837e9 100644 --- a/std/os/wasi/core.zig +++ b/std/os/wasi/core.zig @@ -1,12 +1,17 @@ pub const __wasi_errno_t = u16; pub const __wasi_exitcode_t = u32; pub const __wasi_fd_t = u32; +pub const __wasi_signal_t = u8; pub const __wasi_ciovec_t = extern struct { buf: [*]const u8, buf_len: usize, }; +pub const __WASI_SIGABRT: __wasi_signal_t = 6; + +pub extern fn __wasi_proc_raise(sig: __wasi_signal_t) __wasi_errno_t; + pub extern fn __wasi_proc_exit(rval: __wasi_exitcode_t) noreturn; pub extern fn __wasi_fd_write(fd: __wasi_fd_t, iovs: *const __wasi_ciovec_t, iovs_len: usize, nwritten: *usize) __wasi_errno_t; diff --git a/std/special/panic.zig b/std/special/panic.zig index 1d459665c4..64d9bf39fb 100644 --- a/std/special/panic.zig +++ b/std/special/panic.zig @@ -10,10 +10,14 @@ pub fn panic(msg: []const u8, error_return_trace: ?*builtin.StackTrace) noreturn @setCold(true); switch (builtin.os) { // TODO: fix panic in zen - // TODO: fix panic in wasi - builtin.Os.freestanding, builtin.Os.zen, builtin.Os.wasi => { + builtin.Os.freestanding, builtin.Os.zen => { while (true) {} }, + builtin.Os.wasi => { + std.debug.warn("{}", msg); + _ = std.os.wasi.__wasi_proc_raise(std.os.wasi.__WASI_SIGABRT); + unreachable; + }, builtin.Os.uefi => { // TODO look into using the debug info and logging helpful messages std.os.abort();