diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/tools/wasm-emscripten-finalize.cpp | 27 | ||||
-rw-r--r-- | src/wasm/wasm-emscripten.cpp | 9 |
2 files changed, 15 insertions, 21 deletions
diff --git a/src/tools/wasm-emscripten-finalize.cpp b/src/tools/wasm-emscripten-finalize.cpp index 5c2e37ac3..d0b664c0c 100644 --- a/src/tools/wasm-emscripten-finalize.cpp +++ b/src/tools/wasm-emscripten-finalize.cpp @@ -173,17 +173,6 @@ int main(int argc, const char *argv[]) { EmscriptenGlueGenerator generator(wasm); generator.fixInvokeFunctionNames(); - { - PassRunner passRunner(&wasm); - passRunner.setDebug(options.debug); - passRunner.setDebugInfo(debugInfo); - passRunner.add(ABI::getLegalizationPass( - legalizeJavaScriptFFI ? ABI::LegalizationLevel::Full - : ABI::LegalizationLevel::Minimal - )); - passRunner.run(); - } - std::vector<Name> initializerFunctions; // The names of standard imports/exports used by lld doesn't quite match that @@ -215,12 +204,26 @@ int main(int argc, const char *argv[]) { generator.generateDynCallThunks(); generator.generateJSCallThunks(numReservedFunctionPointers); - std::string metadata = generator.generateEmscriptenMetadata(dataSize, initializerFunctions, numReservedFunctionPointers); if (!dataSegmentFile.empty()) { Output memInitFile(dataSegmentFile, Flags::Binary, Flags::Release); generator.separateDataSegments(&memInitFile); } + // Finally, legalize the wasm. + { + PassRunner passRunner(&wasm); + passRunner.setDebug(options.debug); + passRunner.setDebugInfo(debugInfo); + passRunner.add(ABI::getLegalizationPass( + legalizeJavaScriptFFI ? ABI::LegalizationLevel::Full + : ABI::LegalizationLevel::Minimal + )); + passRunner.run(); + } + + // All changes to the wasm are done, create the metadata. + std::string metadata = generator.generateEmscriptenMetadata(dataSize, initializerFunctions, numReservedFunctionPointers); + if (options.debug) { std::cerr << "Module after:\n"; WasmPrinter::printModule(&wasm, std::cerr); diff --git a/src/wasm/wasm-emscripten.cpp b/src/wasm/wasm-emscripten.cpp index 3dee642b1..e09ad98d2 100644 --- a/src/wasm/wasm-emscripten.cpp +++ b/src/wasm/wasm-emscripten.cpp @@ -161,14 +161,6 @@ void EmscriptenGlueGenerator::generateStackInitialization(Address addr) { stackPointer->init->cast<Const>()->value = Literal(int32_t(addr)); } -static bool hasI64ResultOrParam(FunctionType* ft) { - if (ft->result == i64) return true; - for (auto ty : ft->params) { - if (ty == i64) return true; - } - return false; -} - inline void exportFunction(Module& wasm, Name name, bool must_export) { if (!wasm.getFunctionOrNull(name)) { assert(!must_export); @@ -194,7 +186,6 @@ void EmscriptenGlueGenerator::generateDynCallThunks() { } std::string sig = getSig(wasm.getFunction(indirectFunc)); auto* funcType = ensureFunctionType(sig, &wasm); - if (hasI64ResultOrParam(funcType)) continue; // Can't export i64s on the web. if (!sigs.insert(sig).second) continue; // Sig is already in the set std::vector<NameType> params; params.emplace_back("fptr", i32); // function pointer param |