aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2023-11-12 11:08:27 +0100
committerJacob Young <jacobly0@users.noreply.github.com>2023-11-12 18:12:41 -0500
commit412519dd49ec2a42d0feb9842545dadaf1c6b68d (patch)
treea5ede12126d54f34be56861c51de60bb0def2317
parent0dab319e86f0918331be2e49dde22e9eaf93a46b (diff)
downloadzig-412519dd49ec2a42d0feb9842545dadaf1c6b68d.tar.gz
zig-412519dd49ec2a42d0feb9842545dadaf1c6b68d.zip
x86_64: seems like we will need to keep track of rax and reserve rax+rdi for TLS
-rw-r--r--src/arch/x86_64/Lower.zig10
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),
}) };
}
}