authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-10-27 00:08:31+02:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-10-28 03:48:18-04:00
log0d00b7c585f0e3a20ace71105f562bd7bdd14489
tree1ae58fba48d94a4078c81c981b17d5c933459d8f
parent9a1fbb27059ec59b2e6f61c713b9c3120125a3da

elf: set needs_got on generated extern vars


3 files changed, 4 insertions(+), 2 deletions(-)

src/arch/x86_64/Emit.zig+1-1
...@@ -84,7 +84,7 @@ pub fn emitMir(emit: *Emit) Error!void {...@@ -84,7 +84,7 @@ pub fn emitMir(emit: *Emit) Error!void {
84 if (emit.bin_file.options.pic) {84 if (emit.bin_file.options.pic) {
85 const r_type: u32 = if (sym.flags.has_zig_got)85 const r_type: u32 = if (sym.flags.has_zig_got)
86 link.File.Elf.R_X86_64_ZIG_GOTPCREL86 link.File.Elf.R_X86_64_ZIG_GOTPCREL
87 else if (sym.flags.has_got)87 else if (sym.flags.needs_got)
88 std.elf.R_X86_64_GOTPCREL88 std.elf.R_X86_64_GOTPCREL
89 else89 else
90 std.elf.R_X86_64_PC32;90 std.elf.R_X86_64_PC32;
src/codegen.zig+1
...@@ -904,6 +904,7 @@ fn genDeclRef(...@@ -904,6 +904,7 @@ fn genDeclRef(
904 else904 else
905 null;905 null;
906 const sym_index = try elf_file.getGlobalSymbol(name, lib_name);906 const sym_index = try elf_file.getGlobalSymbol(name, lib_name);
907 elf_file.symbol(elf_file.zigModulePtr().symbol(sym_index)).flags.needs_got = true;
907 return GenResult.mcv(.{ .lea_symbol = sym_index });908 return GenResult.mcv(.{ .lea_symbol = sym_index });
908 }909 }
909 const sym_index = try elf_file.getOrCreateMetadataForDecl(decl_index);910 const sym_index = try elf_file.getOrCreateMetadataForDecl(decl_index);
src/link/Elf.zig+2-1
...@@ -3333,7 +3333,8 @@ pub fn updateDecl(...@@ -3333,7 +3333,8 @@ pub fn updateDecl(
3333 const variable = decl.getOwnedVariable(mod).?;3333 const variable = decl.getOwnedVariable(mod).?;
3334 const name = mod.intern_pool.stringToSlice(decl.name);3334 const name = mod.intern_pool.stringToSlice(decl.name);
3335 const lib_name = mod.intern_pool.stringToSliceUnwrap(variable.lib_name);3335 const lib_name = mod.intern_pool.stringToSliceUnwrap(variable.lib_name);
3336 _ = try self.getGlobalSymbol(name, lib_name);3336 const esym_index = try self.getGlobalSymbol(name, lib_name);
3337 self.symbol(self.zigModulePtr().symbol(esym_index)).flags.needs_got = true;
3337 return;3338 return;
3338 }3339 }
33393340