zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit e44bafe5fff4a80bb4d69fa88f0242ffecf2a252 (tree)
parent e18a397c85797caf6ff3ac58a57b236a45277f17
Author: Andrew Kelley <andrew@ziglang.org>
Date:   Fri, 10 Jan 2025 19:10:25 -0800

wasm linker: mark symbol deps on intrinsics

Diffstat:
Msrc/link/Wasm/Flush.zig | 14++++++++++++++
1 file changed, 14 insertions(+), 0 deletions(-)

diff --git a/src/link/Wasm/Flush.zig b/src/link/Wasm/Flush.zig @@ -104,6 +104,20 @@ pub fn finish(f: *Flush, wasm: *Wasm) !void { const entry_name = if (wasm.entry_resolution.isNavOrUnresolved(wasm)) wasm.entry_name else .none; + // Detect any intrinsics that were called; they need to have dependencies on the symbols marked. + for (wasm.mir_instructions.items(.tag), wasm.mir_instructions.items(.data)) |tag, *data| switch (tag) { + .call_intrinsic => { + const symbol_name = try wasm.internString(@tagName(data.intrinsic)); + const i: Wasm.FunctionImport.Index = @enumFromInt(wasm.object_function_imports.getIndex(symbol_name) orelse { + return diags.fail("missing compiler runtime intrinsic '{s}' (undefined linker symbol)", .{ + @tagName(data.intrinsic), + }); + }); + try wasm.markFunctionImport(symbol_name, i.value(wasm), i); + }, + else => continue, + }; + if (comp.zcu) |zcu| { const ip: *const InternPool = &zcu.intern_pool; // No mutations allowed!