authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-10-25 05:30:33-04:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-10-25 08:20:11-04:00
log868d5925809a4b97472dbfb9e32d73391f4d1ffa
tree1abf66ac400253d6f2e736750fcf80fafb09a02c
parentb55377a5ab34ba17336d25a9336a3bc18f535c43

builtin: implement `default_panic` for `plan9`

Also disable default panic handler when not using elf.

1 files changed, 8 insertions(+), 0 deletions(-)

lib/std/builtin.zig+8
......@@ -739,6 +739,7 @@ pub fn default_panic(msg: []const u8, error_return_trace: ?*StackTrace, ret_addr
739739 builtin.zig_backend == .stage2_arm or
740740 builtin.zig_backend == .stage2_aarch64 or
741741 builtin.zig_backend == .stage2_x86 or
742 (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf) or
742743 builtin.zig_backend == .stage2_riscv64 or
743744 builtin.zig_backend == .stage2_sparc64 or
744745 builtin.zig_backend == .stage2_spirv64)
......@@ -807,6 +808,13 @@ pub fn default_panic(msg: []const u8, error_return_trace: ?*StackTrace, ret_addr
807808 std.os.abort();
808809 },
809810 .cuda, .amdhsa => std.os.abort(),
811 .plan9 => {
812 var status: [std.os.plan9.ERRMAX]u8 = undefined;
813 const len = @min(msg.len, status.len - 1);
814 @memcpy(status[0..len], msg[0..len]);
815 status[len] = 0;
816 std.os.plan9.exits(status[0..len :0]);
817 },
810818 else => {
811819 const first_trace_addr = ret_addr orelse @returnAddress();
812820 std.debug.panicImpl(error_return_trace, first_trace_addr, msg);