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.cpp25
1 files changed, 13 insertions, 12 deletions
diff --git a/src/tools/wasm-emscripten-finalize.cpp b/src/tools/wasm-emscripten-finalize.cpp
index 2aa5de46f..180383a90 100644
--- a/src/tools/wasm-emscripten-finalize.cpp
+++ b/src/tools/wasm-emscripten-finalize.cpp
@@ -46,6 +46,7 @@ int main(int argc, const char *argv[]) {
std::string dataSegmentFile;
bool emitBinary = true;
bool debugInfo = false;
+ bool isSideModule = false;
bool legalizeJavaScriptFFI = true;
uint64_t globalBase = INVALID_BASE;
uint64_t initialStackPointer = INVALID_BASE;
@@ -79,7 +80,11 @@ int main(int argc, const char *argv[]) {
[&initialStackPointer](Options*, const std::string&argument ) {
initialStackPointer = std::stoull(argument);
})
-
+ .add("--side-module", "", "Input is an emscripten side module",
+ Options::Arguments::Zero,
+ [&isSideModule](Options *o, const std::string& argument) {
+ isSideModule = true;
+ })
.add("--input-source-map", "-ism", "Consume source map from the specified file",
Options::Arguments::One,
[&inputSourceMapFilename](Options *o, const std::string& argument) { inputSourceMapFilename = argument; })
@@ -130,7 +135,6 @@ int main(int argc, const char *argv[]) {
WasmPrinter::printModule(&wasm, std::cerr);
}
- bool isSideModule = false;
for (const UserSection& section : wasm.userSections) {
if (section.name == BinaryConsts::UserSections::Dylink) {
isSideModule = true;
@@ -166,12 +170,6 @@ int main(int argc, const char *argv[]) {
std::vector<Name> initializerFunctions;
- // The names of standard imports/exports used by lld doesn't quite match that
- // expected by emscripten.
- // TODO(sbc): Unify these
- if (Export* ex = wasm.getExportOrNull("__wasm_call_ctors")) {
- ex->name = "__post_instantiate";
- }
if (wasm.table.imported()) {
if (wasm.table.base != "table") wasm.table.base = Name("table");
}
@@ -182,14 +180,17 @@ int main(int argc, const char *argv[]) {
if (isSideModule) {
generator.replaceStackPointerGlobal();
+ generator.generatePostInstantiateFunction();
} else {
generator.generateRuntimeFunctions();
generator.generateMemoryGrowthFunction();
generator.generateStackInitialization(initialStackPointer);
- // emscripten calls this by default for side libraries so we only need
- // to include in as a static ctor for main module case.
- if (wasm.getExportOrNull("__post_instantiate")) {
- initializerFunctions.push_back("__post_instantiate");
+ // For side modules these gets called via __post_instantiate
+ if (Function* F = generator.generateAssignGOTEntriesFunction()) {
+ initializerFunctions.push_back(F->name);
+ }
+ if (auto* e = wasm.getExportOrNull(WASM_CALL_CTORS)) {
+ initializerFunctions.push_back(e->value);
}
}