Commit 41d7787b69

Jakub Konka <kubkon@jakubkonka.com>
2021-08-02 19:48:23
macho: remove obsolete pack/unpack dylib ordinal fns
Remove some unused debugging machinery such as full printing of the symtab after symbol resolution. It was there only for the time of rewriting the linker.
1 parent bf25650
Changed files (1)
src
src/link/MachO.zig
@@ -970,7 +970,6 @@ fn linkWithZld(self: *MachO, comp: *Compilation) !void {
         try self.allocateDataSegment();
         self.allocateLinkeditSegment();
         try self.allocateTextBlocks();
-        self.printSymtabAndTextBlock();
         try self.flushZld();
     }
 
@@ -2345,7 +2344,7 @@ fn resolveSymbols(self: *MachO) !void {
                 .n_strx = undef.n_strx,
                 .n_type = macho.N_UNDF | macho.N_EXT,
                 .n_sect = 0,
-                .n_desc = packDylibOrdinal(@intCast(u16, ordinal + 1)),
+                .n_desc = @intCast(u16, ordinal + 1) * macho.N_SYMBOL_RESOLVER,
                 .n_value = 0,
             });
             resolv.* = .{
@@ -3021,7 +3020,7 @@ fn writeBindInfoTableZld(self: *MachO) !void {
             try pointers.append(.{
                 .offset = base_offset + i * @sizeOf(u64),
                 .segment_id = segment_id,
-                .dylib_ordinal = unpackDylibOrdinal(sym.n_desc),
+                .dylib_ordinal = @divExact(sym.n_desc, macho.N_SYMBOL_RESOLVER),
                 .name = self.getString(sym.n_strx),
             });
         }
@@ -3046,7 +3045,7 @@ fn writeBindInfoTableZld(self: *MachO) !void {
                     try pointers.append(.{
                         .offset = binding.offset + base_offset,
                         .segment_id = match.seg,
-                        .dylib_ordinal = unpackDylibOrdinal(bind_sym.n_desc),
+                        .dylib_ordinal = @divExact(bind_sym.n_desc, macho.N_SYMBOL_RESOLVER),
                         .name = self.getString(bind_sym.n_strx),
                     });
                 }
@@ -3093,7 +3092,7 @@ fn writeLazyBindInfoTableZld(self: *MachO) !void {
             pointers.appendAssumeCapacity(.{
                 .offset = base_offset + i * @sizeOf(u64),
                 .segment_id = segment_id,
-                .dylib_ordinal = unpackDylibOrdinal(sym.n_desc),
+                .dylib_ordinal = @divExact(sym.n_desc, macho.N_SYMBOL_RESOLVER),
                 .name = self.getString(sym.n_strx),
             });
         }
@@ -4395,7 +4394,7 @@ pub fn populateMissingMetadata(self: *MachO) !void {
             .n_strx = n_strx,
             .n_type = macho.N_UNDF | macho.N_EXT,
             .n_sect = 0,
-            .n_desc = packDylibOrdinal(1),
+            .n_desc = @intCast(u8, 1) * macho.N_SYMBOL_RESOLVER,
             .n_value = 0,
         });
         try self.symbol_resolver.putNoClobber(self.base.allocator, n_strx, .{
@@ -4541,7 +4540,7 @@ pub fn addExternFn(self: *MachO, name: []const u8) !u32 {
         .n_strx = n_strx,
         .n_type = macho.N_UNDF | macho.N_EXT,
         .n_sect = 0,
-        .n_desc = packDylibOrdinal(1),
+        .n_desc = @intCast(u8, 1) * macho.N_SYMBOL_RESOLVER,
         .n_value = 0,
     });
     try self.symbol_resolver.putNoClobber(self.base.allocator, n_strx, .{
@@ -5423,7 +5422,7 @@ fn writeBindInfoTable(self: *MachO) !void {
             try pointers.append(.{
                 .offset = base_offset + i * @sizeOf(u64),
                 .segment_id = segment_id,
-                .dylib_ordinal = unpackDylibOrdinal(sym.n_desc),
+                .dylib_ordinal = @divExact(sym.n_desc, macho.N_SYMBOL_RESOLVER),
                 .name = self.getString(sym.n_strx),
             });
         }
@@ -5448,7 +5447,7 @@ fn writeBindInfoTable(self: *MachO) !void {
                     try pointers.append(.{
                         .offset = binding.offset + base_offset,
                         .segment_id = match.seg,
-                        .dylib_ordinal = unpackDylibOrdinal(bind_sym.n_desc),
+                        .dylib_ordinal = @divExact(bind_sym.n_desc, macho.N_SYMBOL_RESOLVER),
                         .name = self.getString(bind_sym.n_strx),
                     });
                 }
@@ -5507,7 +5506,7 @@ fn writeLazyBindInfoTable(self: *MachO) !void {
             pointers.appendAssumeCapacity(.{
                 .offset = base_offset + i * @sizeOf(u64),
                 .segment_id = segment_id,
-                .dylib_ordinal = unpackDylibOrdinal(sym.n_desc),
+                .dylib_ordinal = @divExact(sym.n_desc, macho.N_SYMBOL_RESOLVER),
                 .name = self.getString(sym.n_strx),
             });
         }
@@ -5849,14 +5848,6 @@ pub fn symbolIsTemp(sym: macho.nlist_64, sym_name: []const u8) bool {
     return mem.startsWith(u8, sym_name, "l") or mem.startsWith(u8, sym_name, "L");
 }
 
-fn packDylibOrdinal(ordinal: u16) u16 {
-    return ordinal * macho.N_SYMBOL_RESOLVER;
-}
-
-fn unpackDylibOrdinal(pack: u16) u16 {
-    return @divExact(pack, macho.N_SYMBOL_RESOLVER);
-}
-
 pub fn findFirst(comptime T: type, haystack: []T, start: usize, predicate: anytype) usize {
     if (!@hasDecl(@TypeOf(predicate), "predicate"))
         @compileError("Predicate is required to define fn predicate(@This(), T) bool");
@@ -5869,70 +5860,3 @@ pub fn findFirst(comptime T: type, haystack: []T, start: usize, predicate: anyty
     }
     return i;
 }
-
-fn printSymtabAndTextBlock(self: *MachO) void {
-    log.debug("locals", .{});
-    for (self.locals.items) |sym, id| {
-        log.debug("  {d}: {s}, {}", .{ id, self.getString(sym.n_strx), sym });
-    }
-
-    log.debug("globals", .{});
-    for (self.globals.items) |sym, id| {
-        log.debug("  {d}: {s}, {}", .{ id, self.getString(sym.n_strx), sym });
-    }
-
-    log.debug("tentatives", .{});
-    for (self.tentatives.items) |sym, id| {
-        log.debug("  {d}: {s}, {}", .{ id, self.getString(sym.n_strx), sym });
-    }
-
-    log.debug("undefines", .{});
-    for (self.undefs.items) |sym, id| {
-        log.debug("  {d}: {s}, {}", .{ id, self.getString(sym.n_strx), sym });
-    }
-
-    log.debug("imports", .{});
-    for (self.imports.items) |sym, id| {
-        log.debug("  {d}: {s}, {}", .{ id, self.getString(sym.n_strx), sym });
-    }
-
-    {
-        log.debug("symbol resolver", .{});
-        var it = self.symbol_resolver.keyIterator();
-        while (it.next()) |key_ptr| {
-            const sym_name = self.getString(key_ptr.*);
-            log.debug("  {s} => {}", .{ sym_name, self.symbol_resolver.get(key_ptr.*).? });
-        }
-    }
-
-    log.debug("mappings", .{});
-    for (self.objects.items) |object| {
-        log.debug("  in object {s}", .{object.name});
-        for (object.symtab.items) |sym, sym_id| {
-            if (object.symbol_mapping.get(@intCast(u32, sym_id))) |local_id| {
-                log.debug("    | {d} => {d}", .{ sym_id, local_id });
-            } else {
-                log.debug("    | {d} no local mapping for {s}", .{ sym_id, object.getString(sym.n_strx) });
-            }
-        }
-    }
-
-    {
-        var it = self.blocks.iterator();
-        while (it.next()) |entry| {
-            const seg = self.load_commands.items[entry.key_ptr.seg].Segment;
-            const sect = seg.sections.items[entry.key_ptr.sect];
-
-            var block: *TextBlock = entry.value_ptr.*;
-
-            log.debug("\n\n{s},{s} contents:", .{ commands.segmentName(sect), commands.sectionName(sect) });
-            log.debug("{}", .{sect});
-            log.debug("{}", .{block});
-
-            while (block.prev) |prev| {
-                block = prev;
-                log.debug("{}", .{block});
-            }
-        }
-    }
-}