diff --git a/src/Compilation.zig b/src/Compilation.zig index ab91e3cbb3..5b80e5c7a7 100644 --- a/src/Compilation.zig +++ b/src/Compilation.zig @@ -181,10 +181,6 @@ emit_docs: ?EmitLoc, work_queue_wait_group: WaitGroup = .{}, astgen_wait_group: WaitGroup = .{}, -/// Exported symbol names. This is only for when the target is wasm. -/// TODO: Remove this when Stage2 becomes the default compiler as it will already have this information. -export_symbol_names: std.ArrayListUnmanaged([]const u8) = .{}, - pub const default_stack_protector_buffer_size = 4; pub const SemaError = Module.SemaError; @@ -2168,11 +2164,6 @@ pub fn destroy(self: *Compilation) void { self.cache_parent.manifest_dir.close(); if (self.owned_link_dir) |*dir| dir.close(); - for (self.export_symbol_names.items) |symbol_name| { - gpa.free(symbol_name); - } - self.export_symbol_names.deinit(gpa); - // This destroys `self`. self.arena_state.promote(gpa).deinit(); } diff --git a/src/link/Wasm.zig b/src/link/Wasm.zig index 1f929da150..7bc09c137c 100644 --- a/src/link/Wasm.zig +++ b/src/link/Wasm.zig @@ -3406,39 +3406,14 @@ fn linkWithLLD(wasm: *Wasm, comp: *Compilation, prog_node: *std.Progress.Node) ! try argv.append("--stack-first"); } - var auto_export_symbols = true; // Users are allowed to specify which symbols they want to export to the wasm host. for (wasm.base.options.export_symbol_names) |symbol_name| { const arg = try std.fmt.allocPrint(arena, "--export={s}", .{symbol_name}); try argv.append(arg); - auto_export_symbols = false; } if (wasm.base.options.rdynamic) { try argv.append("--export-dynamic"); - auto_export_symbols = false; - } - - if (auto_export_symbols) { - if (wasm.base.options.module) |mod| { - // when we use stage1, we use the exports that stage1 provided us. - // For stage2, we can directly retrieve them from the module. - const skip_export_non_fn = target.os.tag == .wasi and - wasm.base.options.wasi_exec_model == .command; - for (mod.decl_exports.values()) |exports| { - for (exports.items) |exprt| { - const exported_decl = mod.declPtr(exprt.exported_decl); - if (skip_export_non_fn and exported_decl.ty.zigTypeTag() != .Fn) { - // skip exporting symbols when we're building a WASI command - // and the symbol is not a function - continue; - } - const symbol_name = exported_decl.name; - const arg = try std.fmt.allocPrint(arena, "--export={s}", .{symbol_name}); - try argv.append(arg); - } - } - } } if (wasm.base.options.entry) |entry| { @@ -3457,6 +3432,12 @@ fn linkWithLLD(wasm: *Wasm, comp: *Compilation, prog_node: *std.Progress.Node) ! if (wasm.base.options.wasi_exec_model == .reactor) { // Reactor execution model does not have _start so lld doesn't look for it. try argv.append("--no-entry"); + // Make sure "_initialize" and other used-defined functions are exported if this is WASI reactor. + // If rdynamic is true, it will already be appended, so only verify if the user did not specify + // the flag in which case, we ensure `--export-dynamic` is called. + if (!wasm.base.options.rdynamic) { + try argv.append("--export-dynamic"); + } } } else if (wasm.base.options.entry == null) { try argv.append("--no-entry"); // So lld doesn't look for _start.