audit: handle process.Child.Term exhaustively and give useful exit information

This commit is contained in:
murtaza
2026-01-27 16:36:08 +01:00
parent a38c6bbcc4
commit 07b49c61ff
11 changed files with 111 additions and 42 deletions
+6 -1
View File
@@ -1141,7 +1141,12 @@ fn run(
dumpArgs(args);
return error.ChildCrashed;
},
else => {
.stopped => |sig| {
std.debug.print("{s}\nThe following command stopped with signal {d}:\n", .{ result.stderr, sig });
dumpArgs(args);
return error.ChildCrashed;
},
.unknown => {
std.debug.print("{s}\nThe following command crashed:\n", .{result.stderr});
dumpArgs(args);
return error.ChildCrashed;
+16 -14
View File
@@ -568,7 +568,10 @@ const Eval = struct {
.signal => |sig| {
eval.fatal("generated executable '{s}' terminated with signal {t}", .{ binary_path, sig });
},
.stopped, .unknown => {
.stopped => |sig| {
eval.fatal("generated executable '{s}' stopped with signal {d}", .{ binary_path, sig });
},
.unknown => {
eval.fatal("generated executable '{s}' terminated unexpectedly", .{binary_path});
},
}
@@ -627,19 +630,17 @@ const Eval = struct {
}) catch |err| {
eval.fatal("failed to spawn zig cc for '{s}': {t}", .{ c_path, err });
};
if (result.term == .exited and result.term.exited == 0) return;
if (result.stderr.len != 0) {
std.log.err("zig cc stderr:\n{s}", .{result.stderr});
}
switch (result.term) {
.exited => |code| if (code != 0) {
if (result.stderr.len != 0) {
std.log.err("zig cc stderr:\n{s}", .{result.stderr});
}
eval.fatal("zig cc for '{s}' failed with code {d}", .{ c_path, code });
},
.signal, .stopped, .unknown => {
if (result.stderr.len != 0) {
std.log.err("zig cc stderr:\n{s}", .{result.stderr});
}
eval.fatal("zig cc for '{s}' terminated unexpectedly", .{c_path});
},
.exited => |code| eval.fatal("zig cc for '{s}' failed with code {d}", .{ c_path, code }),
.signal => |sig| eval.fatal("zig cc for '{s}' terminated unexpectedly with signal {t}", .{ c_path, sig }),
.stopped => |sig| eval.fatal("zig cc for '{s}' stopped unexpectedly with signal {d}", .{ c_path, sig }),
.unknown => eval.fatal("zig cc for '{s}' terminated unexpectedly", .{c_path}),
}
}
@@ -918,7 +919,8 @@ fn waitChild(child: *std.process.Child, eval: *Eval) void {
switch (term) {
.exited => |code| if (code != 0) eval.fatal("compiler failed with code {d}", .{code}),
.signal => |sig| eval.fatal("compiler terminated with signal {t}", .{sig}),
.stopped, .unknown => eval.fatal("compiler terminated unexpectedly", .{}),
.stopped => |sig| eval.fatal("compiler stopped unexpectedly with signal {d}", .{sig}),
.unknown => eval.fatal("compiler terminated unexpectedly", .{}),
}
}
+10 -1
View File
@@ -688,7 +688,16 @@ pub fn main(init: std.process.Init) !void {
const json_text = switch (child_result.term) {
.exited => |code| if (code == 0) child_result.stdout else {
fatal("llvm-tblgen exited with code {d}", .{code});
fatal("llvm-tblgen exited with code {d}\n", .{code});
},
.signal => |sig| {
fatal("llvm-tblgen terminated with signal {t}\n", .{sig});
},
.stopped => |sig| {
fatal("llvm-tblgen stopped with signal {d}\n", .{sig});
},
.unknown => {
fatal("llvm-tblgen crashed\n", .{});
},
else => fatal("llvm-tblgen crashed", .{}),
};
+9 -1
View File
@@ -2012,7 +2012,15 @@ fn processOneTarget(io: Io, job: Job) void {
std.debug.print("llvm-tblgen exited with code {d}\n", .{code});
std.process.exit(1);
},
else => {
.signal => |sig| {
std.debug.print("llvm-tblgen terminated with signal {t}\n", .{sig});
std.process.exit(1);
},
.stopped => |sig| {
std.debug.print("llvm-tblgen stopped with signal {d}\n", .{sig});
std.process.exit(1);
},
.unknown => {
std.debug.print("llvm-tblgen crashed\n", .{});
std.process.exit(1);
},