diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2021-08-24 20:16:34 +0200 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2021-08-24 20:16:34 +0200 |
| commit | aee6f14bcee7c96fcb65490cad96e06991caece7 (patch) | |
| tree | b13864304e5fc44fa26cdcc09468ba094389c7a4 /src | |
| parent | 32ce8238a8f722a17a408bf9d15db4a74662ae71 (diff) | |
| download | zig-aee6f14bcee7c96fcb65490cad96e06991caece7.tar.gz zig-aee6f14bcee7c96fcb65490cad96e06991caece7.zip | |
macho: use existing rebase mechanism to rebase lazy pointers
Diffstat (limited to 'src')
| -rw-r--r-- | src/link/MachO.zig | 31 |
1 files changed, 1 insertions, 30 deletions
diff --git a/src/link/MachO.zig b/src/link/MachO.zig index f3304c9e47..b6b70060a9 100644 --- a/src/link/MachO.zig +++ b/src/link/MachO.zig @@ -2223,6 +2223,7 @@ fn createLazyPointerAtom(self: *MachO, stub_sym_index: u32) !*TextBlock { }, }, }); + try atom.rebases.append(self.base.allocator, 0); self.lazy_binding_info_dirty = true; return atom; } @@ -3002,21 +3003,6 @@ fn writeRebaseInfoTableZld(self: *MachO) !void { } } - if (self.la_symbol_ptr_section_index) |idx| { - const seg = self.load_commands.items[self.data_segment_cmd_index.?].Segment; - const sect = seg.sections.items[idx]; - const base_offset = sect.addr - seg.inner.vmaddr; - const segment_id = @intCast(u16, self.data_segment_cmd_index.?); - - try pointers.ensureUnusedCapacity(self.stubs.items.len); - for (self.stubs.items) |_, i| { - pointers.appendAssumeCapacity(.{ - .offset = base_offset + i * @sizeOf(u64), - .segment_id = segment_id, - }); - } - } - std.sort.sort(bind.Pointer, pointers.items, {}, bind.pointerCmp); const size = try bind.rebaseInfoSize(pointers.items); @@ -5104,21 +5090,6 @@ fn writeRebaseInfoTable(self: *MachO) !void { } } - if (self.la_symbol_ptr_section_index) |idx| { - const seg = self.load_commands.items[self.data_segment_cmd_index.?].Segment; - const sect = seg.sections.items[idx]; - const base_offset = sect.addr - seg.inner.vmaddr; - const segment_id = @intCast(u16, self.data_segment_cmd_index.?); - - try pointers.ensureUnusedCapacity(self.stubs.items.len); - for (self.stubs.items) |_, i| { - pointers.appendAssumeCapacity(.{ - .offset = base_offset + i * @sizeOf(u64), - .segment_id = segment_id, - }); - } - } - std.sort.sort(bind.Pointer, pointers.items, {}, bind.pointerCmp); const size = try bind.rebaseInfoSize(pointers.items); |
