Commit 0d00b7c585

Jakub Konka <kubkon@jakubkonka.com>
2023-10-27 00:08:31
elf: set needs_got on generated extern vars
1 parent 9a1fbb2
Changed files (3)
src
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;
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;
     }
 
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);