aboutsummaryrefslogtreecommitdiff
path: root/src/link
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2023-10-15 09:10:46 +0200
committerJakub Konka <kubkon@jakubkonka.com>2023-10-16 19:33:06 +0200
commit45197ea7adfa34806b549263c06b988b5e35d48c (patch)
tree03ee67cf2eabb83e41864958509823a05f83da54 /src/link
parentc71a79f618abcc547f327edcdb45f01768200dca (diff)
downloadzig-45197ea7adfa34806b549263c06b988b5e35d48c.tar.gz
zig-45197ea7adfa34806b549263c06b988b5e35d48c.zip
codegen+elf: lower imported data refs
Diffstat (limited to 'src/link')
-rw-r--r--src/link/Dwarf.zig1
-rw-r--r--src/link/Elf.zig14
2 files changed, 10 insertions, 5 deletions
diff --git a/src/link/Dwarf.zig b/src/link/Dwarf.zig
index e271a7d399..ffe078f831 100644
--- a/src/link/Dwarf.zig
+++ b/src/link/Dwarf.zig
@@ -1389,6 +1389,7 @@ pub fn commitDeclState(
.prev_vaddr = 0,
});
},
+ .elf => {}, // TODO
else => unreachable,
}
}
diff --git a/src/link/Elf.zig b/src/link/Elf.zig
index 9fe2f6b7ed..d27e3c7f3b 100644
--- a/src/link/Elf.zig
+++ b/src/link/Elf.zig
@@ -3196,12 +3196,16 @@ pub fn updateDecl(
const decl = mod.declPtr(decl_index);
if (decl.val.getExternFunc(mod)) |_| {
- return; // TODO Should we do more when front-end analyzed extern decl?
+ return;
}
- if (decl.val.getVariable(mod)) |variable| {
- if (variable.is_extern) {
- return; // TODO Should we do more when front-end analyzed extern decl?
- }
+
+ if (decl.isExtern(mod)) {
+ // Extern variable gets a .got entry only.
+ 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);
+ return;
}
const sym_index = try self.getOrCreateMetadataForDecl(decl_index);