aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/link/MachO.zig10
-rw-r--r--src/link/MachO/Dylib.zig2
2 files changed, 12 insertions, 0 deletions
diff --git a/src/link/MachO.zig b/src/link/MachO.zig
index 36d5bc6a87..5d9b0e6fe1 100644
--- a/src/link/MachO.zig
+++ b/src/link/MachO.zig
@@ -1013,7 +1013,12 @@ fn parseInputFiles(self: *MachO, files: []const []const u8, syslibroot: ?[]const
.syslibroot = syslibroot,
})) |dylibs| {
defer self.base.allocator.free(dylibs);
+ const dylib_id = @intCast(u16, self.dylibs.items.len);
try self.dylibs.appendSlice(self.base.allocator, dylibs);
+ // We always have to add the dylib that was on the linker line.
+ if (!self.referenced_dylibs.contains(dylib_id)) {
+ try self.referenced_dylibs.putNoClobber(self.base.allocator, dylib_id, {});
+ }
continue;
}
@@ -1028,7 +1033,12 @@ fn parseLibs(self: *MachO, libs: []const []const u8, syslibroot: ?[]const u8) !v
.syslibroot = syslibroot,
})) |dylibs| {
defer self.base.allocator.free(dylibs);
+ const dylib_id = @intCast(u16, self.dylibs.items.len);
try self.dylibs.appendSlice(self.base.allocator, dylibs);
+ // We always have to add the dylib that was on the linker line.
+ if (!self.referenced_dylibs.contains(dylib_id)) {
+ try self.referenced_dylibs.putNoClobber(self.base.allocator, dylib_id, {});
+ }
continue;
}
diff --git a/src/link/MachO/Dylib.zig b/src/link/MachO/Dylib.zig
index 4763203c3b..71301ccbbf 100644
--- a/src/link/MachO/Dylib.zig
+++ b/src/link/MachO/Dylib.zig
@@ -193,6 +193,8 @@ pub fn createAndParseFromPath(
defer dylibs.deinit();
try dylibs.append(dylib);
+ // TODO this should not be performed if the user specifies `-flat_namespace` flag.
+ // See ld64 manpages.
try dylib.parseDependentLibs(allocator, arch, &dylibs, opts.syslibroot);
return dylibs.toOwnedSlice();