aboutsummaryrefslogtreecommitdiff
path: root/src/codegen.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/codegen.zig')
-rw-r--r--src/codegen.zig11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/codegen.zig b/src/codegen.zig
index 4d1993434a..3d86e4b6bc 100644
--- a/src/codegen.zig
+++ b/src/codegen.zig
@@ -858,10 +858,11 @@ fn genDeclRef(
const is_threadlocal = tv.val.isPtrToThreadLocal(mod) and !bin_file.options.single_threaded;
if (bin_file.cast(link.File.Elf)) |elf_file| {
- const atom_index = try elf_file.getOrCreateAtomForDecl(decl_index);
- const atom = elf_file.getAtom(atom_index);
- _ = try atom.getOrCreateOffsetTableEntry(elf_file);
- return GenResult.mcv(.{ .memory = atom.getOffsetTableAddress(elf_file) });
+ const sym_index = try elf_file.getOrCreateMetadataForDecl(decl_index);
+ const sym = elf_file.symbol(sym_index);
+ sym.flags.needs_got = true;
+ _ = try sym.getOrCreateGotEntry(elf_file);
+ return GenResult.mcv(.{ .memory = sym.gotAddress(elf_file) });
} else if (bin_file.cast(link.File.MachO)) |macho_file| {
const atom_index = try macho_file.getOrCreateAtomForDecl(decl_index);
const sym_index = macho_file.getAtom(atom_index).getSymbolIndex().?;
@@ -896,7 +897,7 @@ fn genUnnamedConst(
return GenResult.fail(bin_file.allocator, src_loc, "lowering unnamed constant failed: {s}", .{@errorName(err)});
};
if (bin_file.cast(link.File.Elf)) |elf_file| {
- return GenResult.mcv(.{ .memory = elf_file.getSymbol(local_sym_index).st_value });
+ return GenResult.mcv(.{ .memory = elf_file.symbol(local_sym_index).value });
} else if (bin_file.cast(link.File.MachO)) |_| {
return GenResult.mcv(.{ .load_direct = local_sym_index });
} else if (bin_file.cast(link.File.Coff)) |_| {