authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2021-04-09 11:08:08+02:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2021-04-13 10:56:03+02:00
logb0a4e1fa46267e913ab9de77cf4b61907d418810
tree057c93dcdd1ea54d7fb5030279262ec684ecdefd
parent6e3f82ef28aa17c9fb7933af07b9823c1331f884

zld: fix rebase vs bind for GOT entries


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

src/link/MachO/Zld.zig+7-7
......@@ -2149,13 +2149,12 @@ fn writeRebaseInfoTable(self: *Zld) !void {
21492149 const sect = seg.sections.items[idx];
21502150 const base_offset = sect.addr - seg.inner.vmaddr;
21512151 const segment_id = @intCast(u16, self.data_const_segment_cmd_index.?);
2152 const index_offset = @intCast(u32, self.got_entries.items().len);
21532152
2154 try pointers.ensureCapacity(pointers.items.len + self.got_entries.items().len);
21552153 for (self.got_entries.items()) |entry| {
2156 const index = index_offset + entry.value.index;
2157 pointers.appendAssumeCapacity(.{
2158 .offset = base_offset + index * @sizeOf(u64),
2154 if (entry.value.tag == .import) continue;
2155
2156 try pointers.append(.{
2157 .offset = base_offset + entry.value.index * @sizeOf(u64),
21592158 .segment_id = segment_id,
21602159 });
21612160 }
......@@ -2242,15 +2241,16 @@ fn writeBindInfoTable(self: *Zld) !void {
22422241 const base_offset = sect.addr - seg.inner.vmaddr;
22432242 const segment_id = @intCast(u16, self.data_const_segment_cmd_index.?);
22442243
2245 try pointers.ensureCapacity(pointers.items.len + self.got_entries.items().len);
22462244 for (self.got_entries.items()) |entry| {
2245 if (entry.value.tag == .local) continue;
2246
22472247 const dylib_ordinal = dylib_ordinal: {
22482248 const sym = self.symtab.get(entry.key) orelse continue; // local indirection
22492249 if (sym.tag != .Import) continue; // local indirection
22502250 break :dylib_ordinal sym.file.? + 1;
22512251 };
22522252
2253 pointers.appendAssumeCapacity(.{
2253 try pointers.append(.{
22542254 .offset = base_offset + entry.value.index * @sizeOf(u64),
22552255 .segment_id = segment_id,
22562256 .dylib_ordinal = dylib_ordinal,