authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2021-08-24 20:16:34+02:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2021-08-24 20:16:34+02:00
logaee6f14bcee7c96fcb65490cad96e06991caece7
treeb13864304e5fc44fa26cdcc09468ba094389c7a4
parent32ce8238a8f722a17a408bf9d15db4a74662ae71

macho: use existing rebase mechanism to rebase lazy pointers


1 files changed, 1 insertions(+), 30 deletions(-)

src/link/MachO.zig+1-30
......@@ -2223,6 +2223,7 @@ fn createLazyPointerAtom(self: *MachO, stub_sym_index: u32) !*TextBlock {
22232223 },
22242224 },
22252225 });
2226 try atom.rebases.append(self.base.allocator, 0);
22262227 self.lazy_binding_info_dirty = true;
22272228 return atom;
22282229}
......@@ -3002,21 +3003,6 @@ fn writeRebaseInfoTableZld(self: *MachO) !void {
30023003 }
30033004 }
30043005
3005 if (self.la_symbol_ptr_section_index) |idx| {
3006 const seg = self.load_commands.items[self.data_segment_cmd_index.?].Segment;
3007 const sect = seg.sections.items[idx];
3008 const base_offset = sect.addr - seg.inner.vmaddr;
3009 const segment_id = @intCast(u16, self.data_segment_cmd_index.?);
3010
3011 try pointers.ensureUnusedCapacity(self.stubs.items.len);
3012 for (self.stubs.items) |_, i| {
3013 pointers.appendAssumeCapacity(.{
3014 .offset = base_offset + i * @sizeOf(u64),
3015 .segment_id = segment_id,
3016 });
3017 }
3018 }
3019
30203006 std.sort.sort(bind.Pointer, pointers.items, {}, bind.pointerCmp);
30213007
30223008 const size = try bind.rebaseInfoSize(pointers.items);
......@@ -5104,21 +5090,6 @@ fn writeRebaseInfoTable(self: *MachO) !void {
51045090 }
51055091 }
51065092
5107 if (self.la_symbol_ptr_section_index) |idx| {
5108 const seg = self.load_commands.items[self.data_segment_cmd_index.?].Segment;
5109 const sect = seg.sections.items[idx];
5110 const base_offset = sect.addr - seg.inner.vmaddr;
5111 const segment_id = @intCast(u16, self.data_segment_cmd_index.?);
5112
5113 try pointers.ensureUnusedCapacity(self.stubs.items.len);
5114 for (self.stubs.items) |_, i| {
5115 pointers.appendAssumeCapacity(.{
5116 .offset = base_offset + i * @sizeOf(u64),
5117 .segment_id = segment_id,
5118 });
5119 }
5120 }
5121
51225093 std.sort.sort(bind.Pointer, pointers.items, {}, bind.pointerCmp);
51235094
51245095 const size = try bind.rebaseInfoSize(pointers.items);