diff --git a/src/wasm/wasm-emscripten.cpp b/src/wasm/wasm-emscripten.cpp index a3433bf9f3d..3ee3e44244d 100644 --- a/src/wasm/wasm-emscripten.cpp +++ b/src/wasm/wasm-emscripten.cpp @@ -1042,7 +1042,23 @@ std::string EmscriptenGlueGenerator::generateEmscriptenMetadata( wasm.features.iterFeatures([&](FeatureSet::Feature f) { meta << nextElement() << "\"--enable-" << FeatureSet::toString(f) << '"'; }); - meta << "\n ]\n"; + meta << "\n ],\n"; + + auto mainReadsParams = false; + if (auto* exp = wasm.getExportOrNull("main")) { + if (exp->kind == ExternalKind::Function) { + auto* main = wasm.getFunction(exp->value); + mainReadsParams = true; + // If main does not read its parameters, it will just be a stub that + // calls __original_main (which has no parameters). + if (auto* call = main->body->dynCast()) { + if (call->operands.empty()) { + mainReadsParams = false; + } + } + } + } + meta << " \"mainReadsParams\": " << int(mainReadsParams) << '\n'; meta << "}\n"; diff --git a/test/lld/duplicate_imports.wast.out b/test/lld/duplicate_imports.wast.out index 7aebdca5060..32336571133 100644 --- a/test/lld/duplicate_imports.wast.out +++ b/test/lld/duplicate_imports.wast.out @@ -115,7 +115,8 @@ "invoke_ffd" ], "features": [ - ] + ], + "mainReadsParams": 1 } -- END METADATA -- ;) diff --git a/test/lld/em_asm.wast.mem.out b/test/lld/em_asm.wast.mem.out index 90b3560ce47..13d289f46b7 100644 --- a/test/lld/em_asm.wast.mem.out +++ b/test/lld/em_asm.wast.mem.out @@ -262,7 +262,8 @@ "invokeFuncs": [ ], "features": [ - ] + ], + "mainReadsParams": 0 } -- END METADATA -- ;) diff --git a/test/lld/em_asm.wast.out b/test/lld/em_asm.wast.out index 6cb47ac932b..f0c38792d56 100644 --- a/test/lld/em_asm.wast.out +++ b/test/lld/em_asm.wast.out @@ -263,7 +263,8 @@ "invokeFuncs": [ ], "features": [ - ] + ], + "mainReadsParams": 0 } -- END METADATA -- ;) diff --git a/test/lld/em_asm_O0.wast.out b/test/lld/em_asm_O0.wast.out index 2426f382930..10c293a0be1 100644 --- a/test/lld/em_asm_O0.wast.out +++ b/test/lld/em_asm_O0.wast.out @@ -123,7 +123,8 @@ "invokeFuncs": [ ], "features": [ - ] + ], + "mainReadsParams": 1 } -- END METADATA -- ;) diff --git a/test/lld/em_asm_shared.wast.out b/test/lld/em_asm_shared.wast.out index a76906028b9..5b984f7ae34 100644 --- a/test/lld/em_asm_shared.wast.out +++ b/test/lld/em_asm_shared.wast.out @@ -244,7 +244,8 @@ "invokeFuncs": [ ], "features": [ - ] + ], + "mainReadsParams": 0 } -- END METADATA -- ;) diff --git a/test/lld/em_asm_table.wast.out b/test/lld/em_asm_table.wast.out index ed821cd186c..48d02d2088c 100644 --- a/test/lld/em_asm_table.wast.out +++ b/test/lld/em_asm_table.wast.out @@ -93,7 +93,8 @@ "invokeFuncs": [ ], "features": [ - ] + ], + "mainReadsParams": 0 } -- END METADATA -- ;) diff --git a/test/lld/em_js_O0.wast.out b/test/lld/em_js_O0.wast.out index fb647ffdee2..6e141975d25 100644 --- a/test/lld/em_js_O0.wast.out +++ b/test/lld/em_js_O0.wast.out @@ -73,7 +73,8 @@ "invokeFuncs": [ ], "features": [ - ] + ], + "mainReadsParams": 0 } -- END METADATA -- ;) diff --git a/test/lld/hello_world.passive.wast.out b/test/lld/hello_world.passive.wast.out index 88a06c1f3bd..6c9fd4ef7dc 100644 --- a/test/lld/hello_world.passive.wast.out +++ b/test/lld/hello_world.passive.wast.out @@ -105,7 +105,8 @@ "invokeFuncs": [ ], "features": [ - ] + ], + "mainReadsParams": 0 } -- END METADATA -- ;) diff --git a/test/lld/hello_world.wast.mem.out b/test/lld/hello_world.wast.mem.out index 49a44177274..c8891f6d9bb 100644 --- a/test/lld/hello_world.wast.mem.out +++ b/test/lld/hello_world.wast.mem.out @@ -97,7 +97,8 @@ "invokeFuncs": [ ], "features": [ - ] + ], + "mainReadsParams": 0 } -- END METADATA -- ;) diff --git a/test/lld/hello_world.wast.out b/test/lld/hello_world.wast.out index 6b2870e147f..9e01def2062 100644 --- a/test/lld/hello_world.wast.out +++ b/test/lld/hello_world.wast.out @@ -98,7 +98,8 @@ "invokeFuncs": [ ], "features": [ - ] + ], + "mainReadsParams": 0 } -- END METADATA -- ;) diff --git a/test/lld/init.wast.out b/test/lld/init.wast.out index fc95468e08a..273e0d6aa02 100644 --- a/test/lld/init.wast.out +++ b/test/lld/init.wast.out @@ -110,7 +110,8 @@ "invokeFuncs": [ ], "features": [ - ] + ], + "mainReadsParams": 0 } -- END METADATA -- ;) diff --git a/test/lld/recursive.wast.out b/test/lld/recursive.wast.out index a7c7bd85c6d..24868211d6e 100644 --- a/test/lld/recursive.wast.out +++ b/test/lld/recursive.wast.out @@ -155,7 +155,8 @@ "invokeFuncs": [ ], "features": [ - ] + ], + "mainReadsParams": 0 } -- END METADATA -- ;) diff --git a/test/lld/reserved_func_ptr.wast.out b/test/lld/reserved_func_ptr.wast.out index a05faf2b935..613802f6ab8 100644 --- a/test/lld/reserved_func_ptr.wast.out +++ b/test/lld/reserved_func_ptr.wast.out @@ -192,7 +192,8 @@ "invokeFuncs": [ ], "features": [ - ] + ], + "mainReadsParams": 1 } -- END METADATA -- ;) diff --git a/test/lld/shared.wast.out b/test/lld/shared.wast.out index 1e2ab04eb16..4931092d65b 100644 --- a/test/lld/shared.wast.out +++ b/test/lld/shared.wast.out @@ -124,7 +124,8 @@ "invokeFuncs": [ ], "features": [ - ] + ], + "mainReadsParams": 0 } -- END METADATA -- ;)