aboutsummaryrefslogtreecommitdiff
path: root/src/link/MachO
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2022-10-20 20:00:25 +0200
committerJakub Konka <kubkon@jakubkonka.com>2022-10-22 07:59:24 +0200
commit93cc5496e1cca17ac8bc766bbb6aaec96ebb3588 (patch)
treed7ac2a8531c3f8b677fdfcf408a8189f72d88144 /src/link/MachO
parent5823f19c5e86e42b82240756ee9ffad536359c4b (diff)
downloadzig-93cc5496e1cca17ac8bc766bbb6aaec96ebb3588.tar.gz
zig-93cc5496e1cca17ac8bc766bbb6aaec96ebb3588.zip
macho: rewrite movq to leaq when TLV is not external pointer
Diffstat (limited to 'src/link/MachO')
-rw-r--r--src/link/MachO/ZldAtom.zig6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/link/MachO/ZldAtom.zig b/src/link/MachO/ZldAtom.zig
index 44cc609b9a..ea173b73ad 100644
--- a/src/link/MachO/ZldAtom.zig
+++ b/src/link/MachO/ZldAtom.zig
@@ -843,8 +843,10 @@ fn resolveRelocsX86(
log.debug(" | target_addr = 0x{x}", .{adjusted_target_addr});
const disp = try calcPcRelativeDisplacementX86(source_addr, adjusted_target_addr, 0);
- // We need to rewrite the opcode from movq to leaq.
- atom_code[rel_offset - 2] = 0x8d;
+ if (zld.tlv_ptr_table.get(target) == null) {
+ // We need to rewrite the opcode from movq to leaq.
+ atom_code[rel_offset - 2] = 0x8d;
+ }
mem.writeIntLittle(i32, atom_code[rel_offset..][0..4], disp);
},