diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2022-10-20 20:00:25 +0200 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2022-10-22 07:59:24 +0200 |
| commit | 93cc5496e1cca17ac8bc766bbb6aaec96ebb3588 (patch) | |
| tree | d7ac2a8531c3f8b677fdfcf408a8189f72d88144 /src/link | |
| parent | 5823f19c5e86e42b82240756ee9ffad536359c4b (diff) | |
| download | zig-93cc5496e1cca17ac8bc766bbb6aaec96ebb3588.tar.gz zig-93cc5496e1cca17ac8bc766bbb6aaec96ebb3588.zip | |
macho: rewrite movq to leaq when TLV is not external pointer
Diffstat (limited to 'src/link')
| -rw-r--r-- | src/link/MachO/ZldAtom.zig | 6 |
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); }, |
