diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2021-12-06 00:00:50 +0100 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2021-12-06 00:00:50 +0100 |
| commit | 3ac973c7068f540fa46c0939d3c4bb712b407d37 (patch) | |
| tree | 54e025fa2bc67ec0e51d31dd51bc48ec9d504fa2 /src | |
| parent | 124e94271479876da74bbfe358d12c9ea0215be0 (diff) | |
| download | zig-3ac973c7068f540fa46c0939d3c4bb712b407d37.tar.gz zig-3ac973c7068f540fa46c0939d3c4bb712b407d37.zip | |
macho: fix incremental codepath for linking objects
Diffstat (limited to 'src')
| -rw-r--r-- | src/link/MachO.zig | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/src/link/MachO.zig b/src/link/MachO.zig index 74a1d44f07..1f967a9e19 100644 --- a/src/link/MachO.zig +++ b/src/link/MachO.zig @@ -2551,8 +2551,6 @@ fn createDsoHandleAtom(self: *MachO) !void { const vaddr = try self.allocateAtom(atom, 0, 1, match); sym.n_value = vaddr; } else try self.addAtomAndBumpSectionSize(atom, match); - - atom.dirty = false; // We don't really want to write it to file. } } @@ -2898,7 +2896,6 @@ fn createMhExecuteHeaderAtom(self: *MachO) !void { sym.n_value = vaddr; } else try self.addAtomAndBumpSectionSize(atom, match); - atom.dirty = false; self.mh_execute_header_index = local_sym_index; } @@ -2963,6 +2960,8 @@ fn resolveDyldStubBinder(self: *MachO) !void { } fn parseObjectsIntoAtoms(self: *MachO) !void { + // TODO I need to see if I can simplify this logic, or perhaps split it into two functions: + // one for non-prealloc traditional path, and one for incremental prealloc path. const tracy = trace(@src()); defer tracy.end(); @@ -3078,6 +3077,11 @@ fn parseObjectsIntoAtoms(self: *MachO) !void { }; if (!section_metadata.contains(match)) continue; + var base_vaddr = if (self.atoms.get(match)) |last| blk: { + const last_atom_sym = self.locals.items[last.local_sym_index]; + break :blk last_atom_sym.n_value + last.size; + } else sect.addr; + if (self.atoms.getPtr(match)) |last| { const first_atom = first_atoms.get(match).?; last.*.next = first_atom; @@ -3088,10 +3092,6 @@ fn parseObjectsIntoAtoms(self: *MachO) !void { if (!self.needs_prealloc) continue; - var base_vaddr = if (self.atoms.get(match)) |last| blk: { - const last_atom_sym = self.locals.items[last.local_sym_index]; - break :blk last_atom_sym.n_value + last.size; - } else sect.addr; const n_sect = @intCast(u8, self.section_ordinals.getIndex(match).? + 1); var atom = first_atoms.get(match).?; |
