| ... | @@ -1800,9 +1800,36 @@ fn setupExports(wasm: *Wasm) !void { | ... | @@ -1800,9 +1800,36 @@ fn setupExports(wasm: *Wasm) !void { |
| 1800 | if (wasm.base.options.output_mode == .Obj) return; | 1800 | if (wasm.base.options.output_mode == .Obj) return; |
| 1801 | log.debug("Building exports from symbols", .{}); | 1801 | log.debug("Building exports from symbols", .{}); |
| 1802 | | 1802 | |
| | 1803 | const force_exp_names = wasm.base.options.export_symbol_names; |
| | 1804 | if (force_exp_names.len > 0) { |
| | 1805 | var failed_exports = try std.ArrayList([]const u8).initCapacity(wasm.base.allocator, force_exp_names.len); |
| | 1806 | defer failed_exports.deinit(); |
| | 1807 | |
| | 1808 | for (force_exp_names) |exp_name| { |
| | 1809 | const name_index = wasm.string_table.getOffset(exp_name) orelse { |
| | 1810 | failed_exports.appendAssumeCapacity(exp_name); |
| | 1811 | continue; |
| | 1812 | }; |
| | 1813 | const loc = wasm.globals.get(name_index) orelse { |
| | 1814 | failed_exports.appendAssumeCapacity(exp_name); |
| | 1815 | continue; |
| | 1816 | }; |
| | 1817 | |
| | 1818 | const symbol = loc.getSymbol(wasm); |
| | 1819 | symbol.setFlag(.WASM_SYM_EXPORTED); |
| | 1820 | } |
| | 1821 | |
| | 1822 | if (failed_exports.items.len > 0) { |
| | 1823 | for (failed_exports.items) |exp_name| { |
| | 1824 | log.err("could not export '{s}', symbol not found", .{exp_name}); |
| | 1825 | } |
| | 1826 | return error.MissingSymbol; |
| | 1827 | } |
| | 1828 | } |
| | 1829 | |
| 1803 | for (wasm.resolved_symbols.keys()) |sym_loc| { | 1830 | for (wasm.resolved_symbols.keys()) |sym_loc| { |
| 1804 | const symbol = sym_loc.getSymbol(wasm); | 1831 | const symbol = sym_loc.getSymbol(wasm); |
| 1805 | if (!symbol.isExported()) continue; | 1832 | if (!symbol.isExported(wasm.base.options.rdynamic)) continue; |
| 1806 | | 1833 | |
| 1807 | const sym_name = sym_loc.getName(wasm); | 1834 | const sym_name = sym_loc.getName(wasm); |
| 1808 | const export_name = if (wasm.export_names.get(sym_loc)) |name| name else blk: { | 1835 | const export_name = if (wasm.export_names.get(sym_loc)) |name| name else blk: { |