zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit b0327ff233faca0dd11e50c9ba7fc41f434a4d82 (tree)
parent 21e3bb38afad7a2cc4e84910d7630e4ee3435a85
Author: Jakub Konka <kubkon@jakubkonka.com>
Date:   Thu, 11 Jan 2024 19:09:41 +0100

macho: handle dead stripping of atoms

Diffstat:
Msrc/link/MachO.zig | 4++++
Msrc/link/MachO/dead_strip.zig | 6+++---
2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/link/MachO.zig b/src/link/MachO.zig @@ -501,6 +501,10 @@ pub fn flushModule(self: *MachO, arena: Allocator, prog_node: *std.Progress.Node try self.createObjcSections(); try self.claimUnresolved(); + if (self.base.gc_sections) { + try dead_strip.gcAtoms(self); + } + state_log.debug("{}", .{self.dumpState()}); @panic("TODO"); diff --git a/src/link/MachO/dead_strip.zig b/src/link/MachO/dead_strip.zig @@ -1,10 +1,10 @@ pub fn gcAtoms(macho_file: *MachO) !void { - const gpa = macho_file.base.allocator; + const gpa = macho_file.base.comp.gpa; var objects = try std.ArrayList(File.Index).initCapacity(gpa, macho_file.objects.items.len + 1); defer objects.deinit(); for (macho_file.objects.items) |index| objects.appendAssumeCapacity(index); - if (macho_file.internal_object_index) |index| objects.appendAssumeCapacity(index); + if (macho_file.internal_object) |index| objects.appendAssumeCapacity(index); var roots = std.ArrayList(*Atom).init(gpa); defer roots.deinit(); @@ -21,7 +21,7 @@ fn collectRoots(roots: *std.ArrayList(*Atom), objects: []const File.Index, macho const sym = macho_file.getSymbol(sym_index); const file = sym.getFile(macho_file) orelse continue; if (file.getIndex() != index) continue; - if (sym.flags.no_dead_strip or (macho_file.options.dylib and sym.visibility == .global)) + if (sym.flags.no_dead_strip or (macho_file.base.isDynLib() and sym.visibility == .global)) try markSymbol(sym, roots, macho_file); }