From 9e50f960875601dbaaf7245cedb7d9e429678aeb Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Tue, 1 Aug 2023 21:09:12 -0700 Subject: [PATCH] MachO: put system_libs into libs not positionals Putting them in both causes collisions because the same lib ends up being linked in twice. Putting them in positionals instead of libs makes their properties about needed and weak being ignored. --- src/link/MachO/zld.zig | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/link/MachO/zld.zig b/src/link/MachO/zld.zig index c2a814b319db3cd53dcf71d73d5a556ab5225d37..40cf9b217a91f8ecab99f91807ea6d077b57343a 100644 --- a/src/link/MachO/zld.zig +++ b/src/link/MachO/zld.zig @@ -3549,17 +3549,12 @@ pub fn linkWithZld(macho_file: *MachO, comp: *Compilation, prog_node: *std.Progr try positionals.append(comp.libcxx_static_lib.?.full_object_path); } - { - // Add all system library paths to positionals. - const vals = options.system_libs.values(); - try positionals.ensureUnusedCapacity(vals.len); - for (vals) |info| positionals.appendAssumeCapacity(info.path); - } - var libs = std.StringArrayHashMap(link.SystemLib).init(arena); - for (options.system_libs.values()) |v| { - try libs.put(v.path, v); + { + const vals = options.system_libs.values(); + try libs.ensureUnusedCapacity(vals.len); + for (vals) |v| libs.putAssumeCapacity(v.path, v); } try MachO.resolveLibSystem(arena, comp, options.sysroot, target, options.lib_dirs, &libs); -- 2.54.0