From 790633a2a09164db5985d1c8302a60d3809e5002 Mon Sep 17 00:00:00 2001 From: Jakub Konka Date: Tue, 17 Aug 2021 22:10:07 +0200 Subject: [PATCH] macho: use common codepath for resolving dyld_stub_binder --- src/link/MachO.zig | 31 +++++++------------------------ 1 file changed, 7 insertions(+), 24 deletions(-) diff --git a/src/link/MachO.zig b/src/link/MachO.zig index ece930bb5c..4fd36d39e4 100644 --- a/src/link/MachO.zig +++ b/src/link/MachO.zig @@ -376,30 +376,6 @@ pub fn openPath(allocator: *Allocator, sub_path: []const u8, options: link.Optio try self.populateMissingMetadata(); try self.writeLocalSymbol(0); - if (self.dyld_stub_binder_index == null) { - self.dyld_stub_binder_index = @intCast(u32, self.undefs.items.len); - const n_strx = try self.makeString("dyld_stub_binder"); - try self.undefs.append(self.base.allocator, .{ - .n_strx = n_strx, - .n_type = macho.N_UNDF | macho.N_EXT, - .n_sect = 0, - .n_desc = @intCast(u8, 1) * macho.N_SYMBOL_RESOLVER, - .n_value = 0, - }); - try self.symbol_resolver.putNoClobber(self.base.allocator, n_strx, .{ - .where = .undef, - .where_index = self.dyld_stub_binder_index.?, - }); - const got_key = GotIndirectionKey{ - .where = .undef, - .where_index = self.dyld_stub_binder_index.?, - }; - const got_index = @intCast(u32, self.got_entries.items.len); - try self.got_entries.append(self.base.allocator, got_key); - try self.got_entries_map.putNoClobber(self.base.allocator, got_key, got_index); - try self.writeGotEntry(got_index); - self.binding_info_dirty = true; - } if (self.stub_helper_stubs_start_off == null) { try self.writeStubHelperPreamble(); } @@ -1089,6 +1065,7 @@ fn parseInputFiles(self: *MachO, files: []const []const u8, syslibroot: ?[]const break :full_path try self.base.allocator.dupe(u8, path); }; defer self.base.allocator.free(full_path); + log.debug("parsing input file path '{s}'", .{full_path}); if (try self.parseObject(full_path)) continue; if (try self.parseArchive(full_path)) continue; @@ -1102,6 +1079,7 @@ fn parseInputFiles(self: *MachO, files: []const []const u8, syslibroot: ?[]const fn parseLibs(self: *MachO, libs: []const []const u8, syslibroot: ?[]const u8) !void { for (libs) |lib| { + log.debug("parsing lib path '{s}'", .{lib}); if (try self.parseDylib(lib, .{ .syslibroot = syslibroot, })) continue; @@ -2510,6 +2488,11 @@ fn resolveDyldStubBinder(self: *MachO) !void { self.binding_info_dirty = true; self.got_entries_count_dirty = true; + + if (!(build_options.is_stage1 and self.base.options.use_stage1)) { + // TODO remove once we can incrementally update in stage1 too. + try self.writeGotEntry(got_index); + } } fn parseTextBlocks(self: *MachO) !void {