diff options
| author | Jacob Young <jacobly0@users.noreply.github.com> | 2023-11-12 18:10:06 -0500 |
|---|---|---|
| committer | Jacob Young <jacobly0@users.noreply.github.com> | 2023-11-12 18:12:41 -0500 |
| commit | 80b73e3e8fd5ef8b46152e929153ad45fc6220fd (patch) | |
| tree | d0039cf8a3f515e471e747329977666fdd2b27f6 /src/codegen.zig | |
| parent | 3d3153c58e9ab808c8b1899d3a9de9d1a1030a67 (diff) | |
| download | zig-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.zig | 3 |
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) { |
