Commit aee6f14bce

Jakub Konka <kubkon@jakubkonka.com>
2021-08-24 20:16:34
macho: use existing rebase mechanism to rebase lazy pointers
1 parent 32ce823
Changed files (1)
src
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);