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