WebAssembly: don't append --export for functions
No longer automatically append the `--export` flag for each exported
function unconditionally. This was essentially a hack to prevent
binary bloat caused by compiler-rt symbols being always included in
the final binary as they were exported and therefore not garbage-
collected. This is no longer needed as we now support the ability to
set the visibility of exports.
This essentially reverts 6d951aff7e
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user