From 05a790d784e4f1258d550e31178cf1e163750b6b Mon Sep 17 00:00:00 2001 From: Jakub Konka Date: Thu, 11 Jul 2024 06:40:53 +0200 Subject: [PATCH] macho: link hello world in zig compiled with llvm --- src/link/MachO.zig | 7 +++++-- src/link/MachO/synthetic.zig | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/link/MachO.zig b/src/link/MachO.zig index ee0eb9533c..ebe280ca76 100644 --- a/src/link/MachO.zig +++ b/src/link/MachO.zig @@ -1542,6 +1542,9 @@ fn scanRelocs(self: *MachO) !void { for (self.objects.items) |index| { try self.getFile(index).?.createSymbolIndirection(self); } + for (self.dylibs.items) |index| { + try self.getFile(index).?.createSymbolIndirection(self); + } if (self.getInternalObject()) |obj| { try obj.asFile().createSymbolIndirection(self); } @@ -2358,9 +2361,9 @@ fn allocateLinkeditSegment(self: *MachO) !void { fn resizeSections(self: *MachO) !void { const slice = self.sections.slice(); - for (slice.items(.header), slice.items(.atoms), slice.items(.out)) |header, atoms, *out| { - if (atoms.items.len == 0) continue; + for (slice.items(.header), slice.items(.out), 0..) |header, *out, n_sect| { if (header.isZerofill()) continue; + if (self.isZigSection(@intCast(n_sect))) continue; // TODO this is horrible const cpu_arch = self.getTarget().cpu.arch; try out.resize(self.base.comp.gpa, header.size); const padding_byte: u8 = if (header.isCode() and cpu_arch == .x86_64) 0xcc else 0; diff --git a/src/link/MachO/synthetic.zig b/src/link/MachO/synthetic.zig index 14bc97c229..8b5a87c26e 100644 --- a/src/link/MachO/synthetic.zig +++ b/src/link/MachO/synthetic.zig @@ -91,9 +91,9 @@ pub const ZigGotSection = struct { _ = unused_fmt_string; const zig_got = ctx.zig_got; const macho_file = ctx.macho_file; - const zo = macho_file.getZigObject().?; try writer.writeAll("__zig_got\n"); for (zig_got.entries.items, 0..) |entry, index| { + const zo = macho_file.getZigObject().?; const symbol = zo.symbols.items[entry]; try writer.print(" {d}@0x{x} => {d}@0x{x} ({s})\n", .{ index,