From f3626eb81662fb7519d09e14bed6e4d958c73e43 Mon Sep 17 00:00:00 2001 From: Luuk de Gram Date: Mon, 6 Nov 2023 17:09:42 +0100 Subject: [PATCH] wasm-link: ensure TLS global when resolved When a linked object contains references to the __tls_base symbol, we lazily create this symbol. However, we wouldn't create the corresponding Wasm global. This meant its address wasn't set correctly as well as fail to output it into the `Names` section. --- src/link/Wasm.zig | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/link/Wasm.zig b/src/link/Wasm.zig index 82f9f9f20d6616e58a7c8949d66e763176e43696..ceed13620a0d21f5c08cd7bca429d44f3d5538ed 100644 --- a/src/link/Wasm.zig +++ b/src/link/Wasm.zig @@ -1242,6 +1242,14 @@ fn resolveLazySymbols(wasm: *Wasm) !void { if (wasm.undefs.fetchSwapRemove(name_offset)) |kv| { const loc = try wasm.createSyntheticSymbolOffset(name_offset, .global); try wasm.discarded.putNoClobber(wasm.base.allocator, kv.value, loc); + _ = wasm.resolved_symbols.swapRemove(kv.value); + const symbol = loc.getSymbol(wasm); + symbol.setFlag(.WASM_SYM_VISIBILITY_HIDDEN); + symbol.index = @intCast(wasm.imported_globals_count + wasm.wasm_globals.items.len); + try wasm.wasm_globals.append(wasm.base.allocator, .{ + .global_type = .{ .valtype = .i32, .mutable = true }, + .init = .{ .i32_const = undefined }, + }); } } } -- 2.54.0