diff options
author | Alon Zakai <alonzakai@gmail.com> | 2019-02-04 11:14:04 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-02-04 11:14:04 -0800 |
commit | 484f62f985cb2180139d1cf991ac04ee41635417 (patch) | |
tree | b0f865ccfdd9de0a1583ada4331190af57bbe169 /src | |
parent | ddb5acd34238967a2487a70926849c89f38a35e2 (diff) | |
download | binaryen-484f62f985cb2180139d1cf991ac04ee41635417.tar.gz binaryen-484f62f985cb2180139d1cf991ac04ee41635417.tar.bz2 binaryen-484f62f985cb2180139d1cf991ac04ee41635417.zip |
Fix EM_ASM+pthreads (#1891)
To calculate the metadata, we must look at the segments. If we split them out earlier (which we do for threads), they aren't there.
Diffstat (limited to 'src')
-rw-r--r-- | src/tools/wasm-emscripten-finalize.cpp | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/tools/wasm-emscripten-finalize.cpp b/src/tools/wasm-emscripten-finalize.cpp index d0b664c0c..f2c74221d 100644 --- a/src/tools/wasm-emscripten-finalize.cpp +++ b/src/tools/wasm-emscripten-finalize.cpp @@ -204,12 +204,8 @@ int main(int argc, const char *argv[]) { generator.generateDynCallThunks(); generator.generateJSCallThunks(numReservedFunctionPointers); - if (!dataSegmentFile.empty()) { - Output memInitFile(dataSegmentFile, Flags::Binary, Flags::Release); - generator.separateDataSegments(&memInitFile); - } - // Finally, legalize the wasm. + // Legalize the wasm. { PassRunner passRunner(&wasm); passRunner.setDebug(options.debug); @@ -221,9 +217,16 @@ int main(int argc, const char *argv[]) { passRunner.run(); } - // All changes to the wasm are done, create the metadata. + // Substantial changes to the wasm are done, enough to create the metadata. std::string metadata = generator.generateEmscriptenMetadata(dataSize, initializerFunctions, numReservedFunctionPointers); + // Finally, separate out data segments if relevant (they may have been needed + // for metadata). + if (!dataSegmentFile.empty()) { + Output memInitFile(dataSegmentFile, Flags::Binary, Flags::Release); + generator.separateDataSegments(&memInitFile); + } + if (options.debug) { std::cerr << "Module after:\n"; WasmPrinter::printModule(&wasm, std::cerr); |