macho: use existing rebase mechanism to rebase lazy pointers

This commit is contained in:
Jakub Konka 2021-08-24 20:16:34 +02:00
parent 32ce8238a8
commit aee6f14bce

View File

@ -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);