Commit 89d862180f

mlugg <mlugg@mlugg.co.uk>
2025-09-02 13:31:40
yet more
1 parent fb88dab
Changed files (3)
lib
src
link
lib/std/Build/Step/CheckObject.zig
@@ -1097,7 +1097,7 @@ const MachODumper = struct {
 
             for (ctx.symtab.items) |sym| {
                 const sym_name = ctx.getString(sym.n_strx);
-                if (sym.stab()) {
+                if (sym.n_type.bits.is_stab != 0) {
                     const tt = switch (sym.n_type) {
                         macho.N_SO => "SO",
                         macho.N_OSO => "OSO",
@@ -1114,7 +1114,7 @@ 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.sect()) {
+                } else if (sym.n_type.type == .sect) {
                     const sect = ctx.sections.items[sym.n_sect - 1];
                     try writer.print("{x} ({s},{s})", .{
                         sym.n_value,
@@ -1122,8 +1122,8 @@ const MachODumper = struct {
                         sect.sectName(),
                     });
                     if (sym.n_desc & macho.REFERENCED_DYNAMICALLY != 0) try writer.writeAll(" [referenced dynamically]");
-                    if (sym.weakDef()) try writer.writeAll(" weak");
-                    if (sym.weakRef()) try writer.writeAll(" weakref");
+                    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");
                         try writer.writeAll(" external");
@@ -1134,7 +1134,7 @@ const MachODumper = struct {
                     try writer.print("  0x{x:0>16} (common) (alignment 2^{d})", .{ sym.n_value, alignment });
                     if (sym.ext()) try writer.writeAll(" external");
                     try writer.print(" {s}\n", .{sym_name});
-                } else if (sym.undf()) {
+                } else if (sym.n_type.type == .undf) {
                     const ordinal = @divFloor(@as(i16, @bitCast(sym.n_desc)), macho.N_SYMBOL_RESOLVER);
                     const import_name = blk: {
                         if (ordinal <= 0) {
@@ -1153,7 +1153,7 @@ const MachODumper = struct {
                         break :blk basename[0..ext];
                     };
                     try writer.writeAll("(undefined)");
-                    if (sym.weakRef()) try writer.writeAll(" weakref");
+                    if (sym.n_desc.weak_ref) try writer.writeAll(" weakref");
                     if (sym.ext()) try writer.writeAll(" external");
                     try writer.print(" {s} (from {s})\n", .{
                         sym_name,
lib/std/macho.zig
@@ -906,43 +906,6 @@ pub const nlist_64 = extern struct {
     },
     n_value: u64,
 
-    // MLUGG TODO DELETE
-    pub fn stab(sym: nlist_64) bool {
-        return sym.n_type.bits.is_stab != 0;
-    }
-    // MLUGG TODO DELETE
-    pub fn sect(sym: nlist_64) bool {
-        return sym.n_type.type == .sect;
-    }
-    // MLUGG TODO DELETE
-    pub fn undf(sym: nlist_64) bool {
-        return sym.n_type.type == .undf;
-    }
-    // MLUGG TODO DELETE
-    pub fn indr(sym: nlist_64) bool {
-        return sym.n_type.type == .indr;
-    }
-    // MLUGG TODO DELETE
-    pub fn abs(sym: nlist_64) bool {
-        return sym.n_type.type == .abs;
-    }
-    // MLUGG TODO DELETE
-    pub fn weakDef(sym: nlist_64) bool {
-        return sym.n_desc.weak_def_or_ref_to_weak;
-    }
-    // MLUGG TODO DELETE
-    pub fn weakRef(sym: nlist_64) bool {
-        return sym.n_desc.weak_ref;
-    }
-    // MLUGG TODO DELETE
-    pub fn discarded(sym: nlist_64) bool {
-        return sym.n_desc.discarded_or_no_dead_strip;
-    }
-    // MLUGG TODO DELETE
-    pub fn noDeadStrip(sym: nlist_64) bool {
-        return sym.n_desc.discarded_or_no_dead_strip;
-    }
-
     pub fn tentative(sym: nlist_64) bool {
         return sym.n_type.type == .undf and sym.n_value != 0;
     }
src/link/MachO/Object.zig
@@ -185,7 +185,7 @@ pub fn parse(self: *Object, macho_file: *MachO) !void {
                 if (name[0] == 'l' or name[0] == 'L') return 4;
                 return 3;
             }
-            return if (nl.weakDef()) 2 else 1;
+            return if (nl.n_desc.weak_def_or_ref_to_weak) 2 else 1;
         }
 
         fn lessThan(ctx: *const Object, lhs: @This(), rhs: @This()) bool {
@@ -202,7 +202,7 @@ pub fn parse(self: *Object, macho_file: *MachO) !void {
     var nlists = try std.array_list.Managed(NlistIdx).initCapacity(gpa, self.symtab.items(.nlist).len);
     defer nlists.deinit();
     for (self.symtab.items(.nlist), 0..) |nlist, i| {
-        if (nlist.stab() or !nlist.sect()) continue;
+        if (nlist.n_type.bits.is_stab != 0 or nlist.n_type.type != .sect) continue;
         nlists.appendAssumeCapacity(.{ .nlist = nlist, .idx = i });
     }
     mem.sort(NlistIdx, nlists.items, self, NlistIdx.lessThan);
@@ -805,7 +805,7 @@ fn linkNlistToAtom(self: *Object, macho_file: *MachO) !void {
     const tracy = trace(@src());
     defer tracy.end();
     for (self.symtab.items(.nlist), self.symtab.items(.atom)) |nlist, *atom| {
-        if (!nlist.stab() and nlist.sect()) {
+        if (!nlist.n_type.bits.is_stab != 0 and nlist.n_type.type == .sect) {
             const sect = self.sections.items(.header)[nlist.n_sect - 1];
             const subs = self.sections.items(.subsections)[nlist.n_sect - 1].items;
             if (nlist.n_value == sect.addr) {
@@ -852,30 +852,30 @@ fn initSymbols(self: *Object, allocator: Allocator, macho_file: *MachO) !void {
         symbol.extra = self.addSymbolExtraAssumeCapacity(.{});
 
         if (self.getAtom(atom_index)) |atom| {
-            assert(!nlist.abs());
+            assert(nlist.n_type.type != .abs);
             symbol.value -= atom.getInputAddress(macho_file);
             symbol.atom_ref = .{ .index = atom_index, .file = self.index };
         }
 
-        symbol.flags.weak = nlist.weakDef();
-        symbol.flags.abs = nlist.abs();
+        symbol.flags.weak = nlist.n_desc.weak_def_or_ref_to_weak;
+        symbol.flags.abs = nlist.n_type.type == .abs;
         symbol.flags.tentative = nlist.tentative();
-        symbol.flags.no_dead_strip = symbol.flags.no_dead_strip or nlist.noDeadStrip();
+        symbol.flags.no_dead_strip = symbol.flags.no_dead_strip or nlist.n_desc.discarded_or_no_dead_strip;
         symbol.flags.dyn_ref = nlist.n_desc & macho.REFERENCED_DYNAMICALLY != 0;
         symbol.flags.interposable = false;
         // TODO
-        // symbol.flags.interposable = nlist.ext() and (nlist.sect() or nlist.abs()) and macho_file.base.isDynLib() and macho_file.options.namespace == .flat and !nlist.pext();
+        // symbol.flags.interposable = nlist.ext() and (nlist.n_type.type == .sect or nlist.n_type.type == .abs) and macho_file.base.isDynLib() and macho_file.options.namespace == .flat and !nlist.pext();
 
-        if (nlist.sect() and
+        if (nlist.n_type.type == .sect and
             self.sections.items(.header)[nlist.n_sect - 1].type() == macho.S_THREAD_LOCAL_VARIABLES)
         {
             symbol.flags.tlv = true;
         }
 
         if (nlist.ext()) {
-            if (nlist.undf()) {
-                symbol.flags.weak_ref = nlist.weakRef();
-            } else if (nlist.pext() or (nlist.weakDef() and nlist.weakRef()) or self.hidden) {
+            if (nlist.n_type.type == .undf) {
+                symbol.flags.weak_ref = nlist.n_desc.weak_ref;
+            } else if (nlist.pext() or (nlist.n_desc.weak_def_or_ref_to_weak and nlist.n_desc.weak_ref) or self.hidden) {
                 symbol.visibility = .hidden;
             } else {
                 symbol.visibility = .global;
@@ -902,10 +902,10 @@ fn initSymbolStabs(self: *Object, allocator: Allocator, nlists: anytype, macho_f
     };
 
     const start: u32 = for (self.symtab.items(.nlist), 0..) |nlist, i| {
-        if (nlist.stab()) break @intCast(i);
+        if (nlist.n_type.bits.is_stab != 0) break @intCast(i);
     } else @intCast(self.symtab.items(.nlist).len);
     const end: u32 = for (self.symtab.items(.nlist)[start..], start..) |nlist, i| {
-        if (!nlist.stab()) break @intCast(i);
+        if (nlist.n_type.bits.is_stab == 0) break @intCast(i);
     } else @intCast(self.symtab.items(.nlist).len);
 
     if (start == end) return;
@@ -919,7 +919,7 @@ fn initSymbolStabs(self: *Object, allocator: Allocator, nlists: anytype, macho_f
     var addr_lookup = std.StringHashMap(u64).init(allocator);
     defer addr_lookup.deinit();
     for (syms) |sym| {
-        if (sym.sect() and (sym.ext() or sym.pext())) {
+        if (sym.n_type.type == .sect and (sym.ext() or sym.pext())) {
             try addr_lookup.putNoClobber(self.getNStrx(sym.n_strx), sym.n_value);
         }
     }
@@ -1241,8 +1241,8 @@ fn parseUnwindRecords(self: *Object, allocator: Allocator, cpu_arch: std.Target.
 
     const slice = self.symtab.slice();
     for (slice.items(.nlist), slice.items(.atom), slice.items(.size)) |nlist, atom, size| {
-        if (nlist.stab()) continue;
-        if (!nlist.sect()) continue;
+        if (nlist.n_type.bits.is_stab != 0) continue;
+        if (nlist.n_type.type != .sect) continue;
         const sect = self.sections.items(.header)[nlist.n_sect - 1];
         if (sect.isCode() and sect.size > 0) {
             try superposition.ensureUnusedCapacity(1);
@@ -1459,7 +1459,7 @@ pub fn resolveSymbols(self: *Object, macho_file: *MachO) !void {
 
     for (self.symtab.items(.nlist), self.symtab.items(.atom), self.globals.items, 0..) |nlist, atom_index, *global, i| {
         if (!nlist.ext()) continue;
-        if (nlist.sect()) {
+        if (nlist.n_type.type == .sect) {
             const atom = self.getAtom(atom_index).?;
             if (!atom.isAlive()) continue;
         }
@@ -1473,7 +1473,7 @@ pub fn resolveSymbols(self: *Object, macho_file: *MachO) !void {
         }
         global.* = gop.index;
 
-        if (nlist.undf() and !nlist.tentative()) continue;
+        if (nlist.n_type.type == .undf and !nlist.tentative()) continue;
         if (gop.ref.getFile(macho_file) == null) {
             gop.ref.* = .{ .index = @intCast(i), .file = self.index };
             continue;
@@ -1481,7 +1481,7 @@ pub fn resolveSymbols(self: *Object, macho_file: *MachO) !void {
 
         if (self.asFile().getSymbolRank(.{
             .archive = !self.alive,
-            .weak = nlist.weakDef(),
+            .weak = nlist.n_desc.weak_def_or_ref_to_weak,
             .tentative = nlist.tentative(),
         }) < gop.ref.getSymbol(macho_file).?.getSymbolRank(macho_file)) {
             gop.ref.* = .{ .index = @intCast(i), .file = self.index };
@@ -1500,7 +1500,7 @@ pub fn markLive(self: *Object, macho_file: *MachO) void {
         const ref = self.getSymbolRef(@intCast(i), macho_file);
         const file = ref.getFile(macho_file) orelse continue;
         const sym = ref.getSymbol(macho_file).?;
-        const should_keep = nlist.undf() or (nlist.tentative() and !sym.flags.tentative);
+        const should_keep = nlist.n_type.type == .undf or (nlist.tentative() and !sym.flags.tentative);
         if (should_keep and file == .object and !file.object.alive) {
             file.object.alive = true;
             file.object.markLive(macho_file);
@@ -1685,7 +1685,7 @@ pub fn parseAr(self: *Object, macho_file: *MachO) !void {
 pub fn updateArSymtab(self: Object, ar_symtab: *Archive.ArSymtab, macho_file: *MachO) error{OutOfMemory}!void {
     const gpa = macho_file.base.comp.gpa;
     for (self.symtab.items(.nlist)) |nlist| {
-        if (!nlist.ext() or (nlist.undf() and !nlist.tentative())) continue;
+        if (!nlist.ext() or (nlist.n_type.type == .undf and !nlist.tentative())) continue;
         const off = try ar_symtab.strtab.insert(gpa, self.getNStrx(nlist.n_strx));
         try ar_symtab.entries.append(gpa, .{ .off = off, .file = self.index });
     }