diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2021-08-02 19:48:23 +0200 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2021-08-02 19:49:32 +0200 |
| commit | 41d7787b69a437e21351d103353fc2eefafb5d17 (patch) | |
| tree | 4998363492bd09a1b25a83685c5cc3a6c0e115f9 /src/link | |
| parent | bf25650974933cdb8c1314a85e0838257f6f4471 (diff) | |
| download | zig-41d7787b69a437e21351d103353fc2eefafb5d17.tar.gz zig-41d7787b69a437e21351d103353fc2eefafb5d17.zip | |
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.
Diffstat (limited to 'src/link')
| -rw-r--r-- | src/link/MachO.zig | 94 |
1 files changed, 9 insertions, 85 deletions
diff --git a/src/link/MachO.zig b/src/link/MachO.zig index d3412cec3d..36d5bc6a87 100644 --- a/src/link/MachO.zig +++ b/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}); - } - } - } -} |
