Commit 202aeacc05

mlugg <mlugg@mlugg.co.uk>
2025-09-08 13:52:00
std: fixes
1 parent f1215ad
lib/std/Build/Step/CheckObject.zig
@@ -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,
lib/std/Build/Step.zig
@@ -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));
lib/std/debug.zig
@@ -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", .{
lib/std/macho.zig
@@ -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;
     }
 };
 
lib/std/start.zig
@@ -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;
             };
lib/std/Thread.zig
@@ -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);
                         }
                     };