From 93cc5496e1cca17ac8bc766bbb6aaec96ebb3588 Mon Sep 17 00:00:00 2001 From: Jakub Konka Date: Thu, 20 Oct 2022 20:00:25 +0200 Subject: [PATCH] macho: rewrite movq to leaq when TLV is not external pointer --- src/link/MachO/ZldAtom.zig | 6 ++++-- 1 file 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); },