authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2024-04-21 22:42:31+02:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2024-04-22 15:14:56+02:00
log6fd09f8d2d50525e3f58213e44f815ed577c2864
tree7b0f2935500b27e680e4f9d062b6fcffaa8bf0c4
parenta7e4d1722616ba9fabfae8b830902e3651c645e4

link/macho: make --verbose-link represent the actual linker line


2 files changed, 21 insertions(+), 24 deletions(-)

src/link/MachO.zig+21-21
...@@ -800,6 +800,14 @@ fn dumpArgv(self: *MachO, comp: *Compilation) !void {...@@ -800,6 +800,14 @@ fn dumpArgv(self: *MachO, comp: *Compilation) !void {
800 try argv.appendSlice(&.{ "-e", entry_name });800 try argv.appendSlice(&.{ "-e", entry_name });
801 }801 }
802802
803 try argv.append("-o");
804 try argv.append(full_out_path);
805
806 if (self.base.isDynLib() and self.base.allow_shlib_undefined) {
807 try argv.append("-undefined");
808 try argv.append("dynamic_lookup");
809 }
810
803 for (comp.objects) |obj| {811 for (comp.objects) |obj| {
804 // TODO: verify this812 // TODO: verify this
805 if (obj.must_link) {813 if (obj.must_link) {
...@@ -816,19 +824,11 @@ fn dumpArgv(self: *MachO, comp: *Compilation) !void {...@@ -816,19 +824,11 @@ fn dumpArgv(self: *MachO, comp: *Compilation) !void {
816 try argv.append(p);824 try argv.append(p);
817 }825 }
818826
819 if (comp.compiler_rt_lib) |lib| try argv.append(lib.full_object_path);827 for (self.lib_dirs) |lib_dir| {
820 if (comp.compiler_rt_obj) |obj| try argv.append(obj.full_object_path);828 const arg = try std.fmt.allocPrint(arena, "-L{s}", .{lib_dir});
821829 try argv.append(arg);
822 if (comp.config.link_libcpp) {
823 try argv.append(comp.libcxxabi_static_lib.?.full_object_path);
824 try argv.append(comp.libcxx_static_lib.?.full_object_path);
825 }830 }
826831
827 try argv.append("-o");
828 try argv.append(full_out_path);
829
830 try argv.append("-lSystem");
831
832 for (comp.system_libs.keys()) |l_name| {832 for (comp.system_libs.keys()) |l_name| {
833 const info = comp.system_libs.get(l_name).?;833 const info = comp.system_libs.get(l_name).?;
834 const arg = if (info.needed)834 const arg = if (info.needed)
...@@ -840,9 +840,9 @@ fn dumpArgv(self: *MachO, comp: *Compilation) !void {...@@ -840,9 +840,9 @@ fn dumpArgv(self: *MachO, comp: *Compilation) !void {
840 try argv.append(arg);840 try argv.append(arg);
841 }841 }
842842
843 for (self.lib_dirs) |lib_dir| {843 for (self.framework_dirs) |f_dir| {
844 const arg = try std.fmt.allocPrint(arena, "-L{s}", .{lib_dir});844 try argv.append("-F");
845 try argv.append(arg);845 try argv.append(f_dir);
846 }846 }
847847
848 for (self.frameworks) |framework| {848 for (self.frameworks) |framework| {
...@@ -856,15 +856,15 @@ fn dumpArgv(self: *MachO, comp: *Compilation) !void {...@@ -856,15 +856,15 @@ fn dumpArgv(self: *MachO, comp: *Compilation) !void {
856 try argv.append(arg);856 try argv.append(arg);
857 }857 }
858858
859 for (self.framework_dirs) |f_dir| {859 if (comp.config.link_libcpp) {
860 try argv.append("-F");860 try argv.append(comp.libcxxabi_static_lib.?.full_object_path);
861 try argv.append(f_dir);861 try argv.append(comp.libcxx_static_lib.?.full_object_path);
862 }862 }
863863
864 if (self.base.isDynLib() and self.base.allow_shlib_undefined) {864 try argv.append("-lSystem");
865 try argv.append("-undefined");865
866 try argv.append("dynamic_lookup");866 if (comp.compiler_rt_lib) |lib| try argv.append(lib.full_object_path);
867 }867 if (comp.compiler_rt_obj) |obj| try argv.append(obj.full_object_path);
868 }868 }
869869
870 Compilation.dump_argv(argv.items);870 Compilation.dump_argv(argv.items);
src/link/MachO/Object.zig-3
...@@ -1388,7 +1388,6 @@ pub fn calcSymtabSize(self: *Object, macho_file: *MachO) !void {...@@ -1388,7 +1388,6 @@ pub fn calcSymtabSize(self: *Object, macho_file: *MachO) !void {
13881388
1389pub fn calcStabsSize(self: *Object, macho_file: *MachO) error{Overflow}!void {1389pub fn calcStabsSize(self: *Object, macho_file: *MachO) error{Overflow}!void {
1390 if (self.dwarf_info) |dw| {1390 if (self.dwarf_info) |dw| {
1391 // TODO handle multiple CUs
1392 const cu = dw.compile_units.items[0];1391 const cu = dw.compile_units.items[0];
1393 const comp_dir = try cu.getCompileDir(dw) orelse return;1392 const comp_dir = try cu.getCompileDir(dw) orelse return;
1394 const tu_name = try cu.getSourceFile(dw) orelse return;1393 const tu_name = try cu.getSourceFile(dw) orelse return;
...@@ -1507,7 +1506,6 @@ pub fn writeStabs(self: *const Object, macho_file: *MachO, ctx: anytype) error{O...@@ -1507,7 +1506,6 @@ pub fn writeStabs(self: *const Object, macho_file: *MachO, ctx: anytype) error{O
1507 var index = self.output_symtab_ctx.istab;1506 var index = self.output_symtab_ctx.istab;
15081507
1509 if (self.dwarf_info) |dw| {1508 if (self.dwarf_info) |dw| {
1510 // TODO handle multiple CUs
1511 const cu = dw.compile_units.items[0];1509 const cu = dw.compile_units.items[0];
1512 const comp_dir = try cu.getCompileDir(dw) orelse return;1510 const comp_dir = try cu.getCompileDir(dw) orelse return;
1513 const tu_name = try cu.getSourceFile(dw) orelse return;1511 const tu_name = try cu.getSourceFile(dw) orelse return;
...@@ -1755,7 +1753,6 @@ pub fn hasEhFrameRecords(self: Object) bool {...@@ -1755,7 +1753,6 @@ pub fn hasEhFrameRecords(self: Object) bool {
1755 return self.cies.items.len > 0;1753 return self.cies.items.len > 0;
1756}1754}
17571755
1758/// TODO handle multiple CUs
1759pub fn hasDebugInfo(self: Object) bool {1756pub fn hasDebugInfo(self: Object) bool {
1760 if (self.dwarf_info) |dw| {1757 if (self.dwarf_info) |dw| {
1761 return dw.compile_units.items.len > 0;1758 return dw.compile_units.items.len > 0;