| ... | ... | @@ -1800,9 +1800,36 @@ fn setupExports(wasm: *Wasm) !void { |
| 1800 | 1800 | if (wasm.base.options.output_mode == .Obj) return; |
| 1801 | 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 | 1830 | for (wasm.resolved_symbols.keys()) |sym_loc| { |
| 1804 | 1831 | const symbol = sym_loc.getSymbol(wasm); |
| 1805 | | if (!symbol.isExported()) continue; |
| 1832 | if (!symbol.isExported(wasm.base.options.rdynamic)) continue; |
| 1806 | 1833 | |
| 1807 | 1834 | const sym_name = sym_loc.getName(wasm); |
| 1808 | 1835 | const export_name = if (wasm.export_names.get(sym_loc)) |name| name else blk: { |