authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-04-19 21:53:30+02:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-04-21 22:44:28+02:00
logd6e66cff12d9f446c592e90db31642d503e29ade
tree062207e4591cfec78ba79f1645bbd2e7d0ed1bfa
parentf9e9974c8f67a7452a08973e963f2c06f85424b3

macho: fix dirtying of GOT entries


1 files changed, 8 insertions(+), 5 deletions(-)

src/link/MachO.zig+8-5
......@@ -1335,17 +1335,20 @@ fn markRelocsDirtyByAddress(self: *MachO, addr: u64) void {
13351335 for (self.relocs.values()) |*relocs| {
13361336 for (relocs.items) |*reloc| {
13371337 const target_addr = reloc.getTargetBaseAddress(self) orelse continue;
1338 if (target_addr == 0) continue;
13391338 if (target_addr < addr) continue;
13401339 reloc.dirty = true;
13411340 }
13421341 }
13431342
1344 // Dirty synthetic table sections if necessary
1345 {
1346 const target_addr = self.getSegment(self.got_section_index.?).vmaddr;
1347 if (target_addr >= addr) self.got_table_contents_dirty = true;
1343 // TODO: dirty only really affected GOT cells
1344 for (self.got_table.entries.items) |entry| {
1345 const target_addr = self.getSymbol(entry).n_value;
1346 if (target_addr >= addr) {
1347 self.got_table_contents_dirty = true;
1348 break;
1349 }
13481350 }
1351
13491352 {
13501353 const stubs_addr = self.getSegment(self.stubs_section_index.?).vmaddr;
13511354 const stub_helper_addr = self.getSegment(self.stub_helper_section_index.?).vmaddr;