aboutsummaryrefslogtreecommitdiff
path: root/src/codegen.zig
diff options
context:
space:
mode:
authorJacob Young <jacobly0@users.noreply.github.com>2023-11-12 18:10:06 -0500
committerJacob Young <jacobly0@users.noreply.github.com>2023-11-12 18:12:41 -0500
commit80b73e3e8fd5ef8b46152e929153ad45fc6220fd (patch)
treed0039cf8a3f515e471e747329977666fdd2b27f6 /src/codegen.zig
parent3d3153c58e9ab808c8b1899d3a9de9d1a1030a67 (diff)
downloadzig-80b73e3e8fd5ef8b46152e929153ad45fc6220fd.tar.gz
zig-80b73e3e8fd5ef8b46152e929153ad45fc6220fd.zip
x86_64: resolve tlv references on first use and spill to the stack
This avoids any arbitrary memory operand possibly clobbering rax and sometime rdi with no warning.
Diffstat (limited to 'src/codegen.zig')
-rw-r--r--src/codegen.zig3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/codegen.zig b/src/codegen.zig
index 9420e8ca14..94f1f6ea0e 100644
--- a/src/codegen.zig
+++ b/src/codegen.zig
@@ -912,6 +912,9 @@ fn genDeclRef(
}
const sym_index = try elf_file.zigObjectPtr().?.getOrCreateMetadataForDecl(elf_file, decl_index);
const sym = elf_file.symbol(sym_index);
+ if (is_threadlocal) {
+ return GenResult.mcv(.{ .load_tlv = sym.esym_index });
+ }
return GenResult.mcv(.{ .load_symbol = sym.esym_index });
} else if (bin_file.cast(link.File.MachO)) |macho_file| {
if (is_extern) {