std: fixes

This commit is contained in:
mlugg 2025-09-08 12:52:00 +01:00
parent f1215adeda
commit 202aeacc05
No known key found for this signature in database
GPG key ID: 3F5B7DCCBF4AF02E
6 changed files with 19 additions and 37 deletions

View file

@ -275,18 +275,6 @@ pub fn dependOn(step: *Step, other: *Step) void {
step.dependencies.append(other) catch @panic("OOM");
}
pub fn getStackTrace(s: *Step) ?std.builtin.StackTrace {
var len: usize = 0;
while (len < s.debug_stack_trace.len and s.debug_stack_trace[len] != 0) {
len += 1;
}
return if (len == 0) null else .{
.instruction_addresses = s.debug_stack_trace,
.index = len,
};
}
fn makeNoOp(step: *Step, options: MakeOptions) anyerror!void {
_ = options;
@ -308,9 +296,9 @@ pub fn cast(step: *Step, comptime T: type) ?*T {
/// For debugging purposes, prints identifying information about this Step.
pub fn dump(step: *Step, w: *std.Io.Writer, tty_config: std.Io.tty.Config) void {
if (step.getStackTrace()) |stack_trace| {
if (step.debug_stack_trace.instruction_addresses.len > 0) {
w.print("name: '{s}'. creation stack trace:\n", .{step.name}) catch {};
std.debug.writeStackTrace(stack_trace, w, tty_config) catch {};
std.debug.writeStackTrace(&step.debug_stack_trace, w, tty_config) catch {};
} else {
const field = "debug_stack_frames_count";
comptime assert(@hasField(Build, field));

View file

@ -1098,15 +1098,9 @@ const MachODumper = struct {
for (ctx.symtab.items) |sym| {
const sym_name = ctx.getString(sym.n_strx);
if (sym.n_type.bits.is_stab != 0) {
const tt = switch (sym.n_type) {
macho.N_SO => "SO",
macho.N_OSO => "OSO",
macho.N_BNSYM => "BNSYM",
macho.N_ENSYM => "ENSYM",
macho.N_FUN => "FUN",
macho.N_GSYM => "GSYM",
macho.N_STSYM => "STSYM",
else => "UNKNOWN STAB",
const tt = switch (sym.n_type.stab) {
_ => "UNKNOWN STAB",
else => @tagName(sym.n_type.stab),
};
try writer.print("{x}", .{sym.n_value});
if (sym.n_sect > 0) {
@ -1114,27 +1108,27 @@ const MachODumper = struct {
try writer.print(" ({s},{s})", .{ sect.segName(), sect.sectName() });
}
try writer.print(" {s} (stab) {s}\n", .{ tt, sym_name });
} else if (sym.n_type.type == .sect) {
} else if (sym.n_type.bits.type == .sect) {
const sect = ctx.sections.items[sym.n_sect - 1];
try writer.print("{x} ({s},{s})", .{
sym.n_value,
sect.segName(),
sect.sectName(),
});
if (sym.n_desc & macho.REFERENCED_DYNAMICALLY != 0) try writer.writeAll(" [referenced dynamically]");
if (sym.n_desc.referenced_dynamically) try writer.writeAll(" [referenced dynamically]");
if (sym.n_desc.weak_def_or_ref_to_weak) try writer.writeAll(" weak");
if (sym.n_desc.weak_ref) try writer.writeAll(" weakref");
if (sym.ext()) {
if (sym.pext()) try writer.writeAll(" private");
if (sym.n_type.bits.ext) {
if (sym.n_type.bits.pext) try writer.writeAll(" private");
try writer.writeAll(" external");
} else if (sym.pext()) try writer.writeAll(" (was private external)");
} else if (sym.n_type.bits.pext) try writer.writeAll(" (was private external)");
try writer.print(" {s}\n", .{sym_name});
} else if (sym.tentative()) {
const alignment = (sym.n_desc >> 8) & 0x0F;
const alignment = (@as(u16, @bitCast(sym.n_desc)) >> 8) & 0x0F;
try writer.print(" 0x{x:0>16} (common) (alignment 2^{d})", .{ sym.n_value, alignment });
if (sym.ext()) try writer.writeAll(" external");
if (sym.n_type.bits.ext) try writer.writeAll(" external");
try writer.print(" {s}\n", .{sym_name});
} else if (sym.n_type.type == .undf) {
} else if (sym.n_type.bits.type == .undf) {
const ordinal = @divFloor(@as(i16, @bitCast(sym.n_desc)), macho.N_SYMBOL_RESOLVER);
const import_name = blk: {
if (ordinal <= 0) {
@ -1154,7 +1148,7 @@ const MachODumper = struct {
};
try writer.writeAll("(undefined)");
if (sym.n_desc.weak_ref) try writer.writeAll(" weakref");
if (sym.ext()) try writer.writeAll(" external");
if (sym.n_type.bits.ext) try writer.writeAll(" external");
try writer.print(" {s} (from {s})\n", .{
sym_name,
import_name,

View file

@ -530,7 +530,7 @@ fn callFn(comptime f: anytype, args: anytype) switch (Impl) {
@call(.auto, f, args) catch |err| {
std.debug.print("error: {s}\n", .{@errorName(err)});
if (@errorReturnTrace()) |trace| {
std.debug.dumpStackTrace(trace.*);
std.debug.dumpStackTrace(trace);
}
};

View file

@ -1443,7 +1443,7 @@ pub fn ConfigurableTrace(comptime size: usize, comptime stack_frame_count: usize
.index = frames.len,
.instruction_addresses = frames,
};
writeStackTrace(stack_trace, stderr, tty_config) catch return;
writeStackTrace(&stack_trace, stderr, tty_config) catch return;
}
if (t.index > end) {
stderr.print("{d} more traces not shown; consider increasing trace size\n", .{

View file

@ -892,7 +892,7 @@ pub const nlist_64 = extern struct {
n_desc: packed struct(u16) {
_pad0: u3 = 0,
arm_thumb_def: bool,
_pad1: u1 = 0,
referenced_dynamically: bool,
/// The meaning of this bit is contextual.
/// See `N_DESC_DISCARDED` and `N_NO_DEAD_STRIP`.
discarded_or_no_dead_strip: bool,
@ -907,7 +907,7 @@ pub const nlist_64 = extern struct {
n_value: u64,
pub fn tentative(sym: nlist_64) bool {
return sym.n_type.type == .undf and sym.n_value != 0;
return sym.n_type.bits.type == .undf and sym.n_value != 0;
}
};

View file

@ -636,7 +636,7 @@ pub inline fn callMain() u8 {
}
std.log.err("{s}", .{@errorName(err)});
if (@errorReturnTrace()) |trace| {
std.debug.dumpStackTrace(trace.*);
std.debug.dumpStackTrace(trace);
}
return 1;
};