authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-01-24 18:30:17+01:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-01-24 18:30:55+01:00
log9d63dfaa81716a87b9c8c6dc5bdf1d07a8278b55
tree770cf0cfce1f51704479150784f2de2e087c7451
parentcf48041b55fbc2df0a2e12ae2a9490fc39e11486
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

link.Lld: give better exit status information for the lld child process

It's not nice to just throw away useful information.

1 files changed, 10 insertions(+), 2 deletions(-)

src/link/Lld.zig+10-2
...@@ -1707,9 +1707,17 @@ fn spawnLld(comp: *Compilation, arena: Allocator, argv: []const []const u8) !voi...@@ -1707,9 +1707,17 @@ fn spawnLld(comp: *Compilation, arena: Allocator, argv: []const []const u8) !voi
1707 diags.lockAndParseLldStderr(argv[1], stderr);1707 diags.lockAndParseLldStderr(argv[1], stderr);
1708 return error.LinkFailure;1708 return error.LinkFailure;
1709 },1709 },
1710 else => {1710 .signal => |sig| {
1711 if (comp.clang_passthrough_mode) std.process.abort();1711 if (comp.clang_passthrough_mode) std.process.abort();
1712 return diags.fail("{s} terminated with stderr:\n{s}", .{ argv[0], stderr });1712 return diags.fail("{s} terminated with signal {t} and stderr:\n{s}", .{ argv[0], sig, stderr });
1713 },
1714 .stopped => |sig| {
1715 if (comp.clang_passthrough_mode) std.process.abort();
1716 return diags.fail("{s} stopped with signal {d} and stderr:\n{s}", .{ argv[0], sig, stderr });
1717 },
1718 .unknown => |code| {
1719 if (comp.clang_passthrough_mode) std.process.abort();
1720 return diags.fail("{s} terminated for unknown reason with code {d} and stderr:\n{s}", .{ argv[0], code, stderr });
1713 },1721 },
1714 }1722 }
17151723