| ... | ... | @@ -397,8 +397,11 @@ fn emit(lower: *Lower, prefix: Prefix, mnemonic: Mnemonic, ops: []const Operand) |
| 397 | 397 | } |
| 398 | 398 | |
| 399 | 399 | _ = lower.reloc(.{ .linker_reloc = sym }); |
| 400 | | break :op if (lower.pic) switch (mnemonic) { |
| 401 | | .lea => break :op .{ .mem = Memory.rip(mem_op.sib.ptr_size, 0) }, |
| 400 | if (lower.pic) switch (mnemonic) { |
| 401 | .lea => { |
| 402 | if (elf_sym.flags.is_extern_ptr) emit_mnemonic = .mov; |
| 403 | break :op .{ .mem = Memory.rip(mem_op.sib.ptr_size, 0) }; |
| 404 | }, |
| 402 | 405 | .mov => break :op .{ .mem = Memory.rip(mem_op.sib.ptr_size, 0) }, |
| 403 | 406 | else => unreachable, |
| 404 | 407 | } else switch (mnemonic) { |
| ... | ... | @@ -413,7 +416,7 @@ fn emit(lower: *Lower, prefix: Prefix, mnemonic: Mnemonic, ops: []const Operand) |
| 413 | 416 | .base = .{ .reg = .ds }, |
| 414 | 417 | }) }, |
| 415 | 418 | else => unreachable, |
| 416 | | }; |
| 419 | } |
| 417 | 420 | } else if (lower.bin_file.cast(.macho)) |macho_file| { |
| 418 | 421 | const zo = macho_file.getZigObject().?; |
| 419 | 422 | const macho_sym = zo.symbols.items[sym.sym_index]; |