diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/tools/wasm-emscripten-finalize.cpp | 11 | ||||
-rw-r--r-- | src/wasm/wasm-emscripten.cpp | 18 |
2 files changed, 21 insertions, 8 deletions
diff --git a/src/tools/wasm-emscripten-finalize.cpp b/src/tools/wasm-emscripten-finalize.cpp index 180383a90..0ed0e0857 100644 --- a/src/tools/wasm-emscripten-finalize.cpp +++ b/src/tools/wasm-emscripten-finalize.cpp @@ -135,12 +135,6 @@ int main(int argc, const char *argv[]) { WasmPrinter::printModule(&wasm, std::cerr); } - for (const UserSection& section : wasm.userSections) { - if (section.name == BinaryConsts::UserSections::Dylink) { - isSideModule = true; - } - } - uint32_t dataSize = 0; if (!isSideModule) { @@ -187,6 +181,11 @@ int main(int argc, const char *argv[]) { generator.generateStackInitialization(initialStackPointer); // For side modules these gets called via __post_instantiate if (Function* F = generator.generateAssignGOTEntriesFunction()) { + auto* ex = new Export(); + ex->value = F->name; + ex->name = F->name; + ex->kind = ExternalKind::Function; + wasm.addExport(ex); initializerFunctions.push_back(F->name); } if (auto* e = wasm.getExportOrNull(WASM_CALL_CTORS)) { diff --git a/src/wasm/wasm-emscripten.cpp b/src/wasm/wasm-emscripten.cpp index 404d93ca3..0c02c758e 100644 --- a/src/wasm/wasm-emscripten.cpp +++ b/src/wasm/wasm-emscripten.cpp @@ -261,7 +261,6 @@ void EmscriptenGlueGenerator::generatePostInstantiateFunction() { ex->name = POST_INSTANTIATE; ex->kind = ExternalKind::Function; wasm.addExport(ex); - wasm.updateMaps(); } Function* EmscriptenGlueGenerator::generateMemoryGrowthFunction() { @@ -897,9 +896,24 @@ std::string EmscriptenGlueGenerator::generateEmscriptenMetadata( meta << " \"exports\": ["; commaFirst = true; for (const auto& ex : wasm.exports) { - meta << nextElement() << '"' << ex->name.str << '"'; + if (ex->kind == ExternalKind::Function) { + meta << nextElement() << '"' << ex->name.str << '"'; + } } meta << "\n ],\n"; + + meta << " \"namedGlobals\": {"; + commaFirst = true; + for (const auto& ex : wasm.exports) { + if (ex->kind == ExternalKind::Global) { + const Global* g = wasm.getGlobal(ex->value); + assert(g->type == i32); + Const* init = g->init->cast<Const>(); + uint32_t addr = init->value.geti32(); + meta << nextElement() << '"' << ex->name.str << "\" : \"" << addr << '"'; + } + } + meta << "\n },\n"; } meta << " \"invokeFuncs\": ["; |