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.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);