diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2023-11-12 11:08:27 +0100 |
|---|---|---|
| committer | Jacob Young <jacobly0@users.noreply.github.com> | 2023-11-12 18:12:41 -0500 |
| commit | 412519dd49ec2a42d0feb9842545dadaf1c6b68d (patch) | |
| tree | a5ede12126d54f34be56861c51de60bb0def2317 /src/arch | |
| parent | 0dab319e86f0918331be2e49dde22e9eaf93a46b (diff) | |
| download | zig-412519dd49ec2a42d0feb9842545dadaf1c6b68d.tar.gz zig-412519dd49ec2a42d0feb9842545dadaf1c6b68d.zip | |
x86_64: seems like we will need to keep track of rax and reserve rax+rdi for TLS
Diffstat (limited to 'src/arch')
| -rw-r--r-- | src/arch/x86_64/Lower.zig | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/arch/x86_64/Lower.zig b/src/arch/x86_64/Lower.zig index fb3b60c5fd..c63d1bf264 100644 --- a/src/arch/x86_64/Lower.zig +++ b/src/arch/x86_64/Lower.zig @@ -364,14 +364,14 @@ fn emit(lower: *Lower, prefix: Prefix, mnemonic: Mnemonic, ops: []const Operand) _ = lower.reloc(.{ .linker_tlsld = sym }); lower.result_insts[lower.result_insts_len] = try Instruction.new(.none, .lea, &[_]Operand{ - .{ .reg = ops[0].reg.to64() }, + .{ .reg = .rdi }, .{ .mem = Memory.rip(mem_op.sib.ptr_size, 0) }, }); lower.result_insts_len += 1; if (lower.bin_file.cast(link.File.Elf)) |elf_file| { _ = lower.reloc(.{ .linker_extern_fn = .{ .atom_index = sym.atom_index, - .sym_index = try elf_file.getGlobalSymbol("__tls_get_address", null), + .sym_index = try elf_file.getGlobalSymbol("__tls_get_addr", null), } }); } lower.result_insts[lower.result_insts_len] = @@ -386,8 +386,8 @@ fn emit(lower: *Lower, prefix: Prefix, mnemonic: Mnemonic, ops: []const Operand) } emit_mnemonic = .lea; break :op .{ .mem = Memory.sib(mem_op.sib.ptr_size, .{ - .base = .{ .reg = ops[0].reg.to64() }, - .disp = undefined, + .base = .{ .reg = .rax }, + .disp = std.math.minInt(i32), }) }; } else { // Since we are linking statically, we emit LE model directly. @@ -405,7 +405,7 @@ fn emit(lower: *Lower, prefix: Prefix, mnemonic: Mnemonic, ops: []const Operand) emit_mnemonic = .lea; break :op .{ .mem = Memory.sib(mem_op.sib.ptr_size, .{ .base = .{ .reg = ops[0].reg.to64() }, - .disp = undefined, + .disp = std.math.minInt(i32), }) }; } } |
