summaryrefslogtreecommitdiff
path: root/src/tools/wasm-emscripten-finalize.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/wasm-emscripten-finalize.cpp')
-rw-r--r--src/tools/wasm-emscripten-finalize.cpp21
1 files changed, 15 insertions, 6 deletions
diff --git a/src/tools/wasm-emscripten-finalize.cpp b/src/tools/wasm-emscripten-finalize.cpp
index 6814ae032..1a3499757 100644
--- a/src/tools/wasm-emscripten-finalize.cpp
+++ b/src/tools/wasm-emscripten-finalize.cpp
@@ -155,11 +155,6 @@ int main(int argc, const char *argv[]) {
dataSize = dataEndConst->value.geti32() - globalBase;
}
- std::vector<Name> initializerFunctions;
- if (wasm.getFunctionOrNull("__wasm_call_ctors")) {
- initializerFunctions.push_back("__wasm_call_ctors");
- }
-
EmscriptenGlueGenerator generator(wasm);
generator.fixInvokeFunctionNames();
@@ -171,10 +166,24 @@ int main(int argc, const char *argv[]) {
passRunner.run();
}
- if (!isSideModule) {
+ std::vector<Name> initializerFunctions;
+
+ if (isSideModule) {
+ generator.replaceStackPointerGlobal();
+ // rename __wasm_call_ctors to __post_instantiate which is what
+ // emscripten expects.
+ // TODO(sbc): Unify these two names
+ if (Export* ex = wasm.getExportOrNull("__wasm_call_ctors")) {
+ ex->name = "__post_instantiate";
+ }
+ } else {
generator.generateRuntimeFunctions();
generator.generateMemoryGrowthFunction();
+ if (wasm.getFunctionOrNull("__wasm_call_ctors")) {
+ initializerFunctions.push_back("__wasm_call_ctors");
+ }
}
+
generator.generateDynCallThunks();
generator.generateJSCallThunks(numReservedFunctionPointers);
std::string metadata = generator.generateEmscriptenMetadata(dataSize, initializerFunctions, numReservedFunctionPointers);