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