authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2024-08-10 22:22:09+02:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2024-08-10 22:32:06+02:00
log5dffd8cb7b5bfa68c9c0cbc1c7dc3590a6e0a42f
treedd70c7a5bd3fda5403626ec7cc59affb4be248e8
parent62fad66d648f8eb9d734a8d8aa36ea56f398c0f2

Wasm: handle ref to an extern in getDeclVAddr


1 files changed, 14 insertions(+), 3 deletions(-)

src/link/Wasm/ZigObject.zig+14-3
......@@ -790,11 +790,22 @@ pub fn getDeclVAddr(
790790 reloc_info: link.File.RelocInfo,
791791) !u64 {
792792 const target = wasm_file.base.comp.root_mod.resolved_target.result;
793 const gpa = pt.zcu.gpa;
794 const decl = pt.zcu.declPtr(decl_index);
793 const zcu = pt.zcu;
794 const ip = &zcu.intern_pool;
795 const gpa = zcu.gpa;
796 const decl = zcu.declPtr(decl_index);
795797
796798 const target_atom_index = try zig_object.getOrCreateAtomForDecl(wasm_file, pt, decl_index);
797 const target_symbol_index = @intFromEnum(wasm_file.getAtom(target_atom_index).sym_index);
799 const target_atom = wasm_file.getAtom(target_atom_index);
800 const target_symbol_index = @intFromEnum(target_atom.sym_index);
801 if (decl.isExtern(zcu)) {
802 const name = decl.name.toSlice(ip);
803 const lib_name = if (decl.getOwnedExternFunc(zcu)) |ext_fn|
804 ext_fn.lib_name.toSlice(ip)
805 else
806 decl.getOwnedVariable(zcu).?.lib_name.toSlice(ip);
807 try zig_object.addOrUpdateImport(wasm_file, name, target_atom.sym_index, lib_name, null);
808 }
798809
799810 std.debug.assert(reloc_info.parent_atom_index != 0);
800811 const atom_index = wasm_file.symbol_atom.get(.{ .file = zig_object.index, .index = @enumFromInt(reloc_info.parent_atom_index) }).?;