summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/tools/wasm-emscripten-finalize.cpp11
-rw-r--r--src/wasm/wasm-emscripten.cpp18
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\": [";