summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2019-02-04 11:14:04 -0800
committerGitHub <noreply@github.com>2019-02-04 11:14:04 -0800
commit484f62f985cb2180139d1cf991ac04ee41635417 (patch)
treeb0f865ccfdd9de0a1583ada4331190af57bbe169 /src
parentddb5acd34238967a2487a70926849c89f38a35e2 (diff)
downloadbinaryen-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.cpp15
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);