diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2023-10-27 00:08:31 +0200 |
|---|---|---|
| committer | Jacob Young <jacobly0@users.noreply.github.com> | 2023-10-28 03:48:18 -0400 |
| commit | 0d00b7c585f0e3a20ace71105f562bd7bdd14489 (patch) | |
| tree | 1ae58fba48d94a4078c81c981b17d5c933459d8f /src | |
| parent | 9a1fbb27059ec59b2e6f61c713b9c3120125a3da (diff) | |
| download | zig-0d00b7c585f0e3a20ace71105f562bd7bdd14489.tar.gz zig-0d00b7c585f0e3a20ace71105f562bd7bdd14489.zip | |
elf: set needs_got on generated extern vars
Diffstat (limited to 'src')
| -rw-r--r-- | src/arch/x86_64/Emit.zig | 2 | ||||
| -rw-r--r-- | src/codegen.zig | 1 | ||||
| -rw-r--r-- | src/link/Elf.zig | 3 |
3 files changed, 4 insertions, 2 deletions
diff --git a/src/arch/x86_64/Emit.zig b/src/arch/x86_64/Emit.zig index c6671b82d5..4b49c51977 100644 --- a/src/arch/x86_64/Emit.zig +++ b/src/arch/x86_64/Emit.zig @@ -84,7 +84,7 @@ pub fn emitMir(emit: *Emit) Error!void { if (emit.bin_file.options.pic) { const r_type: u32 = if (sym.flags.has_zig_got) link.File.Elf.R_X86_64_ZIG_GOTPCREL - else if (sym.flags.has_got) + else if (sym.flags.needs_got) std.elf.R_X86_64_GOTPCREL else std.elf.R_X86_64_PC32; diff --git a/src/codegen.zig b/src/codegen.zig index e6ac1ee2e1..3f2863ed7d 100644 --- a/src/codegen.zig +++ b/src/codegen.zig @@ -904,6 +904,7 @@ fn genDeclRef( else null; const sym_index = try elf_file.getGlobalSymbol(name, lib_name); + elf_file.symbol(elf_file.zigModulePtr().symbol(sym_index)).flags.needs_got = true; return GenResult.mcv(.{ .lea_symbol = sym_index }); } const sym_index = try elf_file.getOrCreateMetadataForDecl(decl_index); diff --git a/src/link/Elf.zig b/src/link/Elf.zig index b03bdfbc7e..f5d6a78298 100644 --- a/src/link/Elf.zig +++ b/src/link/Elf.zig @@ -3333,7 +3333,8 @@ pub fn updateDecl( const variable = decl.getOwnedVariable(mod).?; const name = mod.intern_pool.stringToSlice(decl.name); const lib_name = mod.intern_pool.stringToSliceUnwrap(variable.lib_name); - _ = try self.getGlobalSymbol(name, lib_name); + const esym_index = try self.getGlobalSymbol(name, lib_name); + self.symbol(self.zigModulePtr().symbol(esym_index)).flags.needs_got = true; return; } |
