diff --git a/src/jsifier.mjs b/src/jsifier.mjs index 0f5249fb1fd26..14e43cf5ab78d 100644 --- a/src/jsifier.mjs +++ b/src/jsifier.mjs @@ -12,7 +12,7 @@ import * as path from 'node:path'; import { ATEXITS, ATINITS, - ATMAINS, + ATPOSTCTORS, defineI64Param, indentify, makeReturn64, @@ -778,7 +778,7 @@ var proxiedFunctionTable = [ asyncFuncs, libraryDefinitions: LibraryManager.libraryDefinitions, ATINITS: ATINITS.join('\n'), - ATMAINS: STRICT ? '' : ATMAINS.join('\n'), + ATPOSTCTORS: ATPOSTCTORS.join('\n'), ATEXITS: ATEXITS.join('\n'), }), ); diff --git a/src/lib/libdylink.js b/src/lib/libdylink.js index d5acbf3f215fd..cd4d46303fcf2 100644 --- a/src/lib/libdylink.js +++ b/src/lib/libdylink.js @@ -859,7 +859,7 @@ var LibraryDylink = { init(); } else { // we aren't ready to run compiled code yet - __ATINIT__.push(init); + __ATPOSTCTOR__.push(init); } } #if PTHREADS diff --git a/src/lib/libembind_gen.js b/src/lib/libembind_gen.js index d13024db3dbe4..4b5eac87a378b 100644 --- a/src/lib/libembind_gen.js +++ b/src/lib/libembind_gen.js @@ -835,7 +835,7 @@ var LibraryEmbind = { #if EMBIND_AOT $embindEmitAotJs__deps: ['$awaitingDependencies', '$throwBindingError', '$getTypeName', '$moduleDefinitions', '$JsPrinter'], - $embindEmitAotJs__postset: 'addOnInit(embindEmitAotJs);', + $embindEmitAotJs__postset: () => { addAtPostCtor('embindEmitAotJs()'); }, $embindEmitAotJs: () => { for (const typeId in awaitingDependencies) { throwBindingError(`Missing binding for type: '${getTypeName(typeId)}' typeId: ${typeId}`); @@ -845,7 +845,7 @@ var LibraryEmbind = { }, #else // EMBIND_AOT $embindEmitTypes__deps: ['$awaitingDependencies', '$throwBindingError', '$getTypeName', '$moduleDefinitions', '$TsPrinter'], - $embindEmitTypes__postset: 'addOnInit(embindEmitTypes);', + $embindEmitTypes__postset: () => { addAtPostCtor('embindEmitTypes()'); }, $embindEmitTypes: () => { for (const typeId in awaitingDependencies) { throwBindingError(`Missing binding for type: '${getTypeName(typeId)}' typeId: ${typeId}`); diff --git a/src/lib/libfs.js b/src/lib/libfs.js index 05d1762d89845..da2d75c164e97 100644 --- a/src/lib/libfs.js +++ b/src/lib/libfs.js @@ -33,11 +33,8 @@ addToLibrary({ ], $FS__postset: () => { // TODO: do we need noFSInit? - addAtInit(` -if (!Module['noFSInit'] && !FS.initialized) - FS.init(); -FS.ignorePermissions = false; -`) + addAtInit(`if (!Module['noFSInit'] && !FS.initialized) FS.init();`); + addAtPostCtor('FS.ignorePermissions = false;'); addAtExit('FS.quit();'); return ` FS.createPreloadedFile = FS_createPreloadedFile; diff --git a/src/parseTools.mjs b/src/parseTools.mjs index 843b98cf97758..250909eff7426 100644 --- a/src/parseTools.mjs +++ b/src/parseTools.mjs @@ -731,14 +731,22 @@ function makeEval(code) { return ret; } -export const ATMAINS = []; - export const ATINITS = []; +// Add code to run after the Wasm module is loaded, but before static +// constructors and main (if applicable). The code will be executed before the +// runtime `__ATINIT__` callbacks. function addAtInit(code) { ATINITS.push(code); } +export const ATPOSTCTORS = []; + +// Add code to run after static constructors, but before main (if applicable). +function addAtPostCtor(code) { + ATPOSTCTORS.push(code); +} + export const ATEXITS = []; function addAtExit(code) { @@ -1104,6 +1112,7 @@ addToCompileTimeContext({ ENVIRONMENT_IS_WORKER_THREAD, addAtExit, addAtInit, + addAtPostCtor, asyncIf, awaitIf, buildStringArray, diff --git a/src/parseTools_legacy.mjs b/src/parseTools_legacy.mjs index 9f3d9bd014110..4d97cb67f4ad6 100644 --- a/src/parseTools_legacy.mjs +++ b/src/parseTools_legacy.mjs @@ -5,7 +5,7 @@ */ import {warn, addToCompileTimeContext} from './utility.mjs'; -import {ATMAINS, POINTER_SIZE, runIfMainThread} from './parseTools.mjs'; +import {POINTER_SIZE, runIfMainThread} from './parseTools.mjs'; // Replaced (at least internally) with receiveI64ParamAsI53 that does // bounds checking. @@ -42,7 +42,6 @@ const Runtime = { const runOnMainThread = runIfMainThread; addToCompileTimeContext({ - ATMAINS, Runtime, makeMalloc, receiveI64ParamAsDouble, diff --git a/src/postamble_minimal.js b/src/postamble_minimal.js index a39967a4a87eb..fa388fab3f8bc 100644 --- a/src/postamble_minimal.js +++ b/src/postamble_minimal.js @@ -13,8 +13,6 @@ function run() { emscriptenMemoryProfiler.onPreloadComplete(); #endif - <<< ATMAINS >>> - #if PROXY_TO_PTHREAD // User requested the PROXY_TO_PTHREAD option, so call a stub main which // pthread_create()s a new thread that will call the user's real main() for @@ -73,11 +71,13 @@ function initRuntime(wasmExports) { PThread.tlsInitFunctions.push(wasmExports['_emscripten_tls_init']); #endif + <<< ATINITS >>> + #if hasExportedSymbol('__wasm_call_ctors') wasmExports['__wasm_call_ctors'](); #endif - <<< ATINITS >>> + <<< ATPOSTCTORS >>> } // Initialize wasm (asynchronous) diff --git a/src/preamble.js b/src/preamble.js index db1f9db29a93a..f2a665cc84791 100644 --- a/src/preamble.js +++ b/src/preamble.js @@ -177,6 +177,7 @@ assert(!Module['INITIAL_MEMORY'], 'Detected runtime INITIAL_MEMORY setting. Use var __ATPRERUN__ = []; // functions called before the runtime is initialized var __ATINIT__ = []; // functions called during startup +var __ATPOSTCTOR__ = []; // functions called after static constructors #if HAS_MAIN var __ATMAIN__ = []; // functions called when main() is to be run #endif @@ -230,8 +231,16 @@ function initRuntime() { #if RELOCATABLE callRuntimeCallbacks(__RELOC_FUNCS__); #endif + <<< ATINITS >>> callRuntimeCallbacks(__ATINIT__); + +#if hasExportedSymbol('__wasm_call_ctors') + wasmExports['__wasm_call_ctors'](); +#endif + + <<< ATPOSTCTORS >>> + callRuntimeCallbacks(__ATPOSTCTOR__); } #if HAS_MAIN @@ -239,7 +248,6 @@ function preMain() { #if STACK_OVERFLOW_CHECK checkStackCookie(); #endif - <<< ATMAINS >>> callRuntimeCallbacks(__ATMAIN__); } #endif @@ -960,10 +968,6 @@ function getWasmImports() { #endif #endif -#if hasExportedSymbol('__wasm_call_ctors') - addOnInit(wasmExports['__wasm_call_ctors']); -#endif - #if hasExportedSymbol('__wasm_apply_data_relocs') __RELOC_FUNCS__.push(wasmExports['__wasm_apply_data_relocs']); #endif diff --git a/test/browser/test_small_js_flags.js.size b/test/browser/test_small_js_flags.js.size index f60afa776bc38..1349f6f4ff13d 100644 --- a/test/browser/test_small_js_flags.js.size +++ b/test/browser/test_small_js_flags.js.size @@ -1 +1 @@ -4340 +4343 diff --git a/test/other/codesize/test_codesize_cxx_ctors1.gzsize b/test/other/codesize/test_codesize_cxx_ctors1.gzsize index d7bec804220ec..b57252391c66a 100644 --- a/test/other/codesize/test_codesize_cxx_ctors1.gzsize +++ b/test/other/codesize/test_codesize_cxx_ctors1.gzsize @@ -1 +1 @@ -8350 +8357 diff --git a/test/other/codesize/test_codesize_cxx_ctors1.jssize b/test/other/codesize/test_codesize_cxx_ctors1.jssize index 21ce7fe7a474d..52d7d913295b4 100644 --- a/test/other/codesize/test_codesize_cxx_ctors1.jssize +++ b/test/other/codesize/test_codesize_cxx_ctors1.jssize @@ -1 +1 @@ -20267 +20268 diff --git a/test/other/codesize/test_codesize_cxx_ctors2.gzsize b/test/other/codesize/test_codesize_cxx_ctors2.gzsize index c30d0363d4564..66e7b083aee8d 100644 --- a/test/other/codesize/test_codesize_cxx_ctors2.gzsize +++ b/test/other/codesize/test_codesize_cxx_ctors2.gzsize @@ -1 +1 @@ -8333 +8341 diff --git a/test/other/codesize/test_codesize_cxx_ctors2.jssize b/test/other/codesize/test_codesize_cxx_ctors2.jssize index b1a957393459b..a081ddb2cf858 100644 --- a/test/other/codesize/test_codesize_cxx_ctors2.jssize +++ b/test/other/codesize/test_codesize_cxx_ctors2.jssize @@ -1 +1 @@ -20235 +20247 diff --git a/test/other/codesize/test_codesize_cxx_except.gzsize b/test/other/codesize/test_codesize_cxx_except.gzsize index 6ba3ca7f455af..84bc3e95efcd3 100644 --- a/test/other/codesize/test_codesize_cxx_except.gzsize +++ b/test/other/codesize/test_codesize_cxx_except.gzsize @@ -1 +1 @@ -9351 +9363 diff --git a/test/other/codesize/test_codesize_cxx_except.jssize b/test/other/codesize/test_codesize_cxx_except.jssize index 527b910a1185d..df59c98c49547 100644 --- a/test/other/codesize/test_codesize_cxx_except.jssize +++ b/test/other/codesize/test_codesize_cxx_except.jssize @@ -1 +1 @@ -24035 +24036 diff --git a/test/other/codesize/test_codesize_cxx_except_wasm.gzsize b/test/other/codesize/test_codesize_cxx_except_wasm.gzsize index 6a8b03d0c606f..4d3f78154a94a 100644 --- a/test/other/codesize/test_codesize_cxx_except_wasm.gzsize +++ b/test/other/codesize/test_codesize_cxx_except_wasm.gzsize @@ -1 +1 @@ -8296 +8305 diff --git a/test/other/codesize/test_codesize_cxx_except_wasm.jssize b/test/other/codesize/test_codesize_cxx_except_wasm.jssize index eed7df1e1760b..d2718a29205d9 100644 --- a/test/other/codesize/test_codesize_cxx_except_wasm.jssize +++ b/test/other/codesize/test_codesize_cxx_except_wasm.jssize @@ -1 +1 @@ -20160 +20161 diff --git a/test/other/codesize/test_codesize_cxx_except_wasm_legacy.gzsize b/test/other/codesize/test_codesize_cxx_except_wasm_legacy.gzsize index 6a8b03d0c606f..4d3f78154a94a 100644 --- a/test/other/codesize/test_codesize_cxx_except_wasm_legacy.gzsize +++ b/test/other/codesize/test_codesize_cxx_except_wasm_legacy.gzsize @@ -1 +1 @@ -8296 +8305 diff --git a/test/other/codesize/test_codesize_cxx_except_wasm_legacy.jssize b/test/other/codesize/test_codesize_cxx_except_wasm_legacy.jssize index eed7df1e1760b..d2718a29205d9 100644 --- a/test/other/codesize/test_codesize_cxx_except_wasm_legacy.jssize +++ b/test/other/codesize/test_codesize_cxx_except_wasm_legacy.jssize @@ -1 +1 @@ -20160 +20161 diff --git a/test/other/codesize/test_codesize_cxx_lto.gzsize b/test/other/codesize/test_codesize_cxx_lto.gzsize index 098f94b2c1797..1c35f29ce93d9 100644 --- a/test/other/codesize/test_codesize_cxx_lto.gzsize +++ b/test/other/codesize/test_codesize_cxx_lto.gzsize @@ -1 +1 @@ -8361 +8365 diff --git a/test/other/codesize/test_codesize_cxx_lto.jssize b/test/other/codesize/test_codesize_cxx_lto.jssize index 9932745b117c8..f078514523db7 100644 --- a/test/other/codesize/test_codesize_cxx_lto.jssize +++ b/test/other/codesize/test_codesize_cxx_lto.jssize @@ -1 +1 @@ -20342 +20344 diff --git a/test/other/codesize/test_codesize_cxx_mangle.gzsize b/test/other/codesize/test_codesize_cxx_mangle.gzsize index 0888a57fbd1bb..349afb7e51a7c 100644 --- a/test/other/codesize/test_codesize_cxx_mangle.gzsize +++ b/test/other/codesize/test_codesize_cxx_mangle.gzsize @@ -1 +1 @@ -9357 +9368 diff --git a/test/other/codesize/test_codesize_cxx_mangle.jssize b/test/other/codesize/test_codesize_cxx_mangle.jssize index 527b910a1185d..035ce9f371551 100644 --- a/test/other/codesize/test_codesize_cxx_mangle.jssize +++ b/test/other/codesize/test_codesize_cxx_mangle.jssize @@ -1 +1 @@ -24035 +24037 diff --git a/test/other/codesize/test_codesize_cxx_noexcept.gzsize b/test/other/codesize/test_codesize_cxx_noexcept.gzsize index d7bec804220ec..b57252391c66a 100644 --- a/test/other/codesize/test_codesize_cxx_noexcept.gzsize +++ b/test/other/codesize/test_codesize_cxx_noexcept.gzsize @@ -1 +1 @@ -8350 +8357 diff --git a/test/other/codesize/test_codesize_cxx_noexcept.jssize b/test/other/codesize/test_codesize_cxx_noexcept.jssize index 21ce7fe7a474d..52d7d913295b4 100644 --- a/test/other/codesize/test_codesize_cxx_noexcept.jssize +++ b/test/other/codesize/test_codesize_cxx_noexcept.jssize @@ -1 +1 @@ -20267 +20268 diff --git a/test/other/codesize/test_codesize_cxx_wasmfs.gzsize b/test/other/codesize/test_codesize_cxx_wasmfs.gzsize index f2b9d490a2f08..61c5a7e888399 100644 --- a/test/other/codesize/test_codesize_cxx_wasmfs.gzsize +++ b/test/other/codesize/test_codesize_cxx_wasmfs.gzsize @@ -1 +1 @@ -3561 +3564 diff --git a/test/other/codesize/test_codesize_cxx_wasmfs.jssize b/test/other/codesize/test_codesize_cxx_wasmfs.jssize index 015f7ca004017..58870b453249c 100644 --- a/test/other/codesize/test_codesize_cxx_wasmfs.jssize +++ b/test/other/codesize/test_codesize_cxx_wasmfs.jssize @@ -1 +1 @@ -7675 +7677 diff --git a/test/other/codesize/test_codesize_files_js_fs.gzsize b/test/other/codesize/test_codesize_files_js_fs.gzsize index c02621465977d..3480ae92d1598 100644 --- a/test/other/codesize/test_codesize_files_js_fs.gzsize +++ b/test/other/codesize/test_codesize_files_js_fs.gzsize @@ -1 +1 @@ -7657 +7658 diff --git a/test/other/codesize/test_codesize_files_js_fs.jssize b/test/other/codesize/test_codesize_files_js_fs.jssize index 550d0d2937cd9..863b9e81f2f70 100644 --- a/test/other/codesize/test_codesize_files_js_fs.jssize +++ b/test/other/codesize/test_codesize_files_js_fs.jssize @@ -1 +1 @@ -18813 +18815 diff --git a/test/other/codesize/test_codesize_files_wasmfs.gzsize b/test/other/codesize/test_codesize_files_wasmfs.gzsize index 9ddd587ee7d83..3327d2792ed58 100644 --- a/test/other/codesize/test_codesize_files_wasmfs.gzsize +++ b/test/other/codesize/test_codesize_files_wasmfs.gzsize @@ -1 +1 @@ -2797 +2798 diff --git a/test/other/codesize/test_codesize_files_wasmfs.jssize b/test/other/codesize/test_codesize_files_wasmfs.jssize index 0576d03eb92a0..55b68d7689203 100644 --- a/test/other/codesize/test_codesize_files_wasmfs.jssize +++ b/test/other/codesize/test_codesize_files_wasmfs.jssize @@ -1 +1 @@ -5983 +5986 diff --git a/test/other/codesize/test_codesize_hello_O0.jssize b/test/other/codesize/test_codesize_hello_O0.jssize index 0dfdef12e6f4e..b20e3acabbb48 100644 --- a/test/other/codesize/test_codesize_hello_O0.jssize +++ b/test/other/codesize/test_codesize_hello_O0.jssize @@ -1 +1 @@ -20982 +20996 diff --git a/test/other/codesize/test_codesize_hello_O1.gzsize b/test/other/codesize/test_codesize_hello_O1.gzsize index ff9ba736249ec..fd5e1fa1be1a5 100644 --- a/test/other/codesize/test_codesize_hello_O1.gzsize +++ b/test/other/codesize/test_codesize_hello_O1.gzsize @@ -1 +1 @@ -2656 +2659 diff --git a/test/other/codesize/test_codesize_hello_O1.jssize b/test/other/codesize/test_codesize_hello_O1.jssize index cb8b5c157aa53..d24406713de24 100644 --- a/test/other/codesize/test_codesize_hello_O1.jssize +++ b/test/other/codesize/test_codesize_hello_O1.jssize @@ -1 +1 @@ -6836 +6851 diff --git a/test/other/codesize/test_codesize_hello_O2.gzsize b/test/other/codesize/test_codesize_hello_O2.gzsize index dd26e61bafb3b..ed5edbf7f250d 100644 --- a/test/other/codesize/test_codesize_hello_O2.gzsize +++ b/test/other/codesize/test_codesize_hello_O2.gzsize @@ -1 +1 @@ -2318 +2320 diff --git a/test/other/codesize/test_codesize_hello_O2.jssize b/test/other/codesize/test_codesize_hello_O2.jssize index d2527039ea7d4..2a6bd613639d5 100644 --- a/test/other/codesize/test_codesize_hello_O2.jssize +++ b/test/other/codesize/test_codesize_hello_O2.jssize @@ -1 +1 @@ -4777 +4780 diff --git a/test/other/codesize/test_codesize_hello_O3.gzsize b/test/other/codesize/test_codesize_hello_O3.gzsize index 1724e23e2d5fa..20c65f21df41d 100644 --- a/test/other/codesize/test_codesize_hello_O3.gzsize +++ b/test/other/codesize/test_codesize_hello_O3.gzsize @@ -1 +1 @@ -2276 +2279 diff --git a/test/other/codesize/test_codesize_hello_O3.jssize b/test/other/codesize/test_codesize_hello_O3.jssize index 9f3b7fa93bd41..a4c77792658e9 100644 --- a/test/other/codesize/test_codesize_hello_O3.jssize +++ b/test/other/codesize/test_codesize_hello_O3.jssize @@ -1 +1 @@ -4719 +4722 diff --git a/test/other/codesize/test_codesize_hello_Os.gzsize b/test/other/codesize/test_codesize_hello_Os.gzsize index 1724e23e2d5fa..20c65f21df41d 100644 --- a/test/other/codesize/test_codesize_hello_Os.gzsize +++ b/test/other/codesize/test_codesize_hello_Os.gzsize @@ -1 +1 @@ -2276 +2279 diff --git a/test/other/codesize/test_codesize_hello_Os.jssize b/test/other/codesize/test_codesize_hello_Os.jssize index 9f3b7fa93bd41..a4c77792658e9 100644 --- a/test/other/codesize/test_codesize_hello_Os.jssize +++ b/test/other/codesize/test_codesize_hello_Os.jssize @@ -1 +1 @@ -4719 +4722 diff --git a/test/other/codesize/test_codesize_hello_Oz.gzsize b/test/other/codesize/test_codesize_hello_Oz.gzsize index 1724e23e2d5fa..20c65f21df41d 100644 --- a/test/other/codesize/test_codesize_hello_Oz.gzsize +++ b/test/other/codesize/test_codesize_hello_Oz.gzsize @@ -1 +1 @@ -2276 +2279 diff --git a/test/other/codesize/test_codesize_hello_Oz.jssize b/test/other/codesize/test_codesize_hello_Oz.jssize index 9f3b7fa93bd41..a4c77792658e9 100644 --- a/test/other/codesize/test_codesize_hello_Oz.jssize +++ b/test/other/codesize/test_codesize_hello_Oz.jssize @@ -1 +1 @@ -4719 +4722 diff --git a/test/other/codesize/test_codesize_hello_dylink.gzsize b/test/other/codesize/test_codesize_hello_dylink.gzsize index 1ec1e5d80d62e..f9b62825ef79f 100644 --- a/test/other/codesize/test_codesize_hello_dylink.gzsize +++ b/test/other/codesize/test_codesize_hello_dylink.gzsize @@ -1 +1 @@ -5988 +5990 diff --git a/test/other/codesize/test_codesize_hello_dylink.jssize b/test/other/codesize/test_codesize_hello_dylink.jssize index cef7e0c01f55c..d3c8fcab986bd 100644 --- a/test/other/codesize/test_codesize_hello_dylink.jssize +++ b/test/other/codesize/test_codesize_hello_dylink.jssize @@ -1 +1 @@ -13240 +13242 diff --git a/test/other/codesize/test_codesize_hello_export_nothing.gzsize b/test/other/codesize/test_codesize_hello_export_nothing.gzsize index c7410a5b0a019..9b53651732a69 100644 --- a/test/other/codesize/test_codesize_hello_export_nothing.gzsize +++ b/test/other/codesize/test_codesize_hello_export_nothing.gzsize @@ -1 +1 @@ -1675 +1677 diff --git a/test/other/codesize/test_codesize_hello_export_nothing.jssize b/test/other/codesize/test_codesize_hello_export_nothing.jssize index d0ee287550f10..00987dc4e5708 100644 --- a/test/other/codesize/test_codesize_hello_export_nothing.jssize +++ b/test/other/codesize/test_codesize_hello_export_nothing.jssize @@ -1 +1 @@ -3632 +3633 diff --git a/test/other/codesize/test_codesize_hello_wasmfs.gzsize b/test/other/codesize/test_codesize_hello_wasmfs.gzsize index 1724e23e2d5fa..20c65f21df41d 100644 --- a/test/other/codesize/test_codesize_hello_wasmfs.gzsize +++ b/test/other/codesize/test_codesize_hello_wasmfs.gzsize @@ -1 +1 @@ -2276 +2279 diff --git a/test/other/codesize/test_codesize_hello_wasmfs.jssize b/test/other/codesize/test_codesize_hello_wasmfs.jssize index 9f3b7fa93bd41..a4c77792658e9 100644 --- a/test/other/codesize/test_codesize_hello_wasmfs.jssize +++ b/test/other/codesize/test_codesize_hello_wasmfs.jssize @@ -1 +1 @@ -4719 +4722 diff --git a/test/other/codesize/test_codesize_libcxxabi_message_O3.jssize b/test/other/codesize/test_codesize_libcxxabi_message_O3.jssize index 7565b177f4d23..1263586a20af3 100644 --- a/test/other/codesize/test_codesize_libcxxabi_message_O3.jssize +++ b/test/other/codesize/test_codesize_libcxxabi_message_O3.jssize @@ -1 +1 @@ -3995 +3996 diff --git a/test/other/codesize/test_codesize_libcxxabi_message_O3_standalone.gzsize b/test/other/codesize/test_codesize_libcxxabi_message_O3_standalone.gzsize index 23357b1b72e7e..a7568adae3387 100644 --- a/test/other/codesize/test_codesize_libcxxabi_message_O3_standalone.gzsize +++ b/test/other/codesize/test_codesize_libcxxabi_message_O3_standalone.gzsize @@ -1 +1 @@ -1909 +1914 diff --git a/test/other/codesize/test_codesize_libcxxabi_message_O3_standalone.jssize b/test/other/codesize/test_codesize_libcxxabi_message_O3_standalone.jssize index 4a3a63211e267..9309a5e04e5df 100644 --- a/test/other/codesize/test_codesize_libcxxabi_message_O3_standalone.jssize +++ b/test/other/codesize/test_codesize_libcxxabi_message_O3_standalone.jssize @@ -1 +1 @@ -4043 +4053 diff --git a/test/other/codesize/test_codesize_mem_O3.gzsize b/test/other/codesize/test_codesize_mem_O3.gzsize index e2eb349359407..da898df886b32 100644 --- a/test/other/codesize/test_codesize_mem_O3.gzsize +++ b/test/other/codesize/test_codesize_mem_O3.gzsize @@ -1 +1 @@ -2324 +2326 diff --git a/test/other/codesize/test_codesize_mem_O3.jssize b/test/other/codesize/test_codesize_mem_O3.jssize index 7e6b749cd38c3..6d7ab002fd517 100644 --- a/test/other/codesize/test_codesize_mem_O3.jssize +++ b/test/other/codesize/test_codesize_mem_O3.jssize @@ -1 +1 @@ -4887 +4890 diff --git a/test/other/codesize/test_codesize_mem_O3_grow.gzsize b/test/other/codesize/test_codesize_mem_O3_grow.gzsize index 1717fe9e7fe81..9c36d6cf0d554 100644 --- a/test/other/codesize/test_codesize_mem_O3_grow.gzsize +++ b/test/other/codesize/test_codesize_mem_O3_grow.gzsize @@ -1 +1 @@ -2472 +2473 diff --git a/test/other/codesize/test_codesize_mem_O3_grow.jssize b/test/other/codesize/test_codesize_mem_O3_grow.jssize index 8a7ee64c99edb..6902890327b83 100644 --- a/test/other/codesize/test_codesize_mem_O3_grow.jssize +++ b/test/other/codesize/test_codesize_mem_O3_grow.jssize @@ -1 +1 @@ -5171 +5174 diff --git a/test/other/codesize/test_codesize_mem_O3_grow_standalone.gzsize b/test/other/codesize/test_codesize_mem_O3_grow_standalone.gzsize index b62c68ea1f5da..2bf9f80f6bf2a 100644 --- a/test/other/codesize/test_codesize_mem_O3_grow_standalone.gzsize +++ b/test/other/codesize/test_codesize_mem_O3_grow_standalone.gzsize @@ -1 +1 @@ -2173 +2178 diff --git a/test/other/codesize/test_codesize_mem_O3_grow_standalone.jssize b/test/other/codesize/test_codesize_mem_O3_grow_standalone.jssize index f4b0425c0ebe4..ecdf4f5ba87d5 100644 --- a/test/other/codesize/test_codesize_mem_O3_grow_standalone.jssize +++ b/test/other/codesize/test_codesize_mem_O3_grow_standalone.jssize @@ -1 +1 @@ -4580 +4592 diff --git a/test/other/codesize/test_codesize_mem_O3_standalone.gzsize b/test/other/codesize/test_codesize_mem_O3_standalone.gzsize index dbb8b69b4433f..cc14af1215280 100644 --- a/test/other/codesize/test_codesize_mem_O3_standalone.gzsize +++ b/test/other/codesize/test_codesize_mem_O3_standalone.gzsize @@ -1 +1 @@ -2138 +2144 diff --git a/test/other/codesize/test_codesize_mem_O3_standalone.jssize b/test/other/codesize/test_codesize_mem_O3_standalone.jssize index a6f7eb75d5fd1..146f070cdcabf 100644 --- a/test/other/codesize/test_codesize_mem_O3_standalone.jssize +++ b/test/other/codesize/test_codesize_mem_O3_standalone.jssize @@ -1 +1 @@ -4512 +4522 diff --git a/test/other/codesize/test_codesize_mem_O3_standalone_lib.gzsize b/test/other/codesize/test_codesize_mem_O3_standalone_lib.gzsize index 034873be1fb91..e911879840ab7 100644 --- a/test/other/codesize/test_codesize_mem_O3_standalone_lib.gzsize +++ b/test/other/codesize/test_codesize_mem_O3_standalone_lib.gzsize @@ -1 +1 @@ -1895 +1901 diff --git a/test/other/codesize/test_codesize_mem_O3_standalone_lib.jssize b/test/other/codesize/test_codesize_mem_O3_standalone_lib.jssize index 97a67bc728a46..8e9651efd7803 100644 --- a/test/other/codesize/test_codesize_mem_O3_standalone_lib.jssize +++ b/test/other/codesize/test_codesize_mem_O3_standalone_lib.jssize @@ -1 +1 @@ -4042 +4052 diff --git a/test/other/codesize/test_codesize_mem_O3_standalone_narg.gzsize b/test/other/codesize/test_codesize_mem_O3_standalone_narg.gzsize index 23357b1b72e7e..a7568adae3387 100644 --- a/test/other/codesize/test_codesize_mem_O3_standalone_narg.gzsize +++ b/test/other/codesize/test_codesize_mem_O3_standalone_narg.gzsize @@ -1 +1 @@ -1909 +1914 diff --git a/test/other/codesize/test_codesize_mem_O3_standalone_narg.jssize b/test/other/codesize/test_codesize_mem_O3_standalone_narg.jssize index 4a3a63211e267..9309a5e04e5df 100644 --- a/test/other/codesize/test_codesize_mem_O3_standalone_narg.jssize +++ b/test/other/codesize/test_codesize_mem_O3_standalone_narg.jssize @@ -1 +1 @@ -4043 +4053 diff --git a/test/other/codesize/test_codesize_mem_O3_standalone_narg_flto.gzsize b/test/other/codesize/test_codesize_mem_O3_standalone_narg_flto.gzsize index 23357b1b72e7e..a7568adae3387 100644 --- a/test/other/codesize/test_codesize_mem_O3_standalone_narg_flto.gzsize +++ b/test/other/codesize/test_codesize_mem_O3_standalone_narg_flto.gzsize @@ -1 +1 @@ -1909 +1914 diff --git a/test/other/codesize/test_codesize_mem_O3_standalone_narg_flto.jssize b/test/other/codesize/test_codesize_mem_O3_standalone_narg_flto.jssize index 4a3a63211e267..9309a5e04e5df 100644 --- a/test/other/codesize/test_codesize_mem_O3_standalone_narg_flto.jssize +++ b/test/other/codesize/test_codesize_mem_O3_standalone_narg_flto.jssize @@ -1 +1 @@ -4043 +4053 diff --git a/test/other/codesize/test_codesize_minimal_64.gzsize b/test/other/codesize/test_codesize_minimal_64.gzsize index 94a370615d33a..4efaa29df49f1 100644 --- a/test/other/codesize/test_codesize_minimal_64.gzsize +++ b/test/other/codesize/test_codesize_minimal_64.gzsize @@ -1 +1 @@ -1438 +1430 diff --git a/test/other/codesize/test_codesize_minimal_64.jssize b/test/other/codesize/test_codesize_minimal_64.jssize index f32572d25ec3c..533bca3a8eef1 100644 --- a/test/other/codesize/test_codesize_minimal_64.jssize +++ b/test/other/codesize/test_codesize_minimal_64.jssize @@ -1 +1 @@ -3057 +3004 diff --git a/test/other/codesize/test_codesize_minimal_O0.gzsize b/test/other/codesize/test_codesize_minimal_O0.gzsize index d91cd0411632f..0a85a000114a0 100644 --- a/test/other/codesize/test_codesize_minimal_O0.gzsize +++ b/test/other/codesize/test_codesize_minimal_O0.gzsize @@ -1 +1 @@ -6445 +6425 diff --git a/test/other/codesize/test_codesize_minimal_O0.jssize b/test/other/codesize/test_codesize_minimal_O0.jssize index c9237da5fded6..7146ebc520af6 100644 --- a/test/other/codesize/test_codesize_minimal_O0.jssize +++ b/test/other/codesize/test_codesize_minimal_O0.jssize @@ -1 +1 @@ -17093 +16914 diff --git a/test/other/codesize/test_codesize_minimal_O1.gzsize b/test/other/codesize/test_codesize_minimal_O1.gzsize index 45ff3acb5f914..00b89bd1f8d4e 100644 --- a/test/other/codesize/test_codesize_minimal_O1.gzsize +++ b/test/other/codesize/test_codesize_minimal_O1.gzsize @@ -1 +1 @@ -1531 +1514 diff --git a/test/other/codesize/test_codesize_minimal_O1.jssize b/test/other/codesize/test_codesize_minimal_O1.jssize index bcd2f48da0696..2565d3a8c5163 100644 --- a/test/other/codesize/test_codesize_minimal_O1.jssize +++ b/test/other/codesize/test_codesize_minimal_O1.jssize @@ -1 +1 @@ -3701 +3529 diff --git a/test/other/codesize/test_codesize_minimal_O2.gzsize b/test/other/codesize/test_codesize_minimal_O2.gzsize index 30ed602b91565..5ae289b43f8d7 100644 --- a/test/other/codesize/test_codesize_minimal_O2.gzsize +++ b/test/other/codesize/test_codesize_minimal_O2.gzsize @@ -1 +1 @@ -1378 +1371 diff --git a/test/other/codesize/test_codesize_minimal_O2.jssize b/test/other/codesize/test_codesize_minimal_O2.jssize index 2e4e684632bf7..6c23a278a3763 100644 --- a/test/other/codesize/test_codesize_minimal_O2.jssize +++ b/test/other/codesize/test_codesize_minimal_O2.jssize @@ -1 +1 @@ -2805 +2752 diff --git a/test/other/codesize/test_codesize_minimal_O3.gzsize b/test/other/codesize/test_codesize_minimal_O3.gzsize index 07aeb9bc360f6..6f2c618b8048c 100644 --- a/test/other/codesize/test_codesize_minimal_O3.gzsize +++ b/test/other/codesize/test_codesize_minimal_O3.gzsize @@ -1 +1 @@ -1345 +1335 diff --git a/test/other/codesize/test_codesize_minimal_O3.jssize b/test/other/codesize/test_codesize_minimal_O3.jssize index f42890a161280..39ae71311a1c3 100644 --- a/test/other/codesize/test_codesize_minimal_O3.jssize +++ b/test/other/codesize/test_codesize_minimal_O3.jssize @@ -1 +1 @@ -2755 +2701 diff --git a/test/other/codesize/test_codesize_minimal_Os.gzsize b/test/other/codesize/test_codesize_minimal_Os.gzsize index 07aeb9bc360f6..6f2c618b8048c 100644 --- a/test/other/codesize/test_codesize_minimal_Os.gzsize +++ b/test/other/codesize/test_codesize_minimal_Os.gzsize @@ -1 +1 @@ -1345 +1335 diff --git a/test/other/codesize/test_codesize_minimal_Os.jssize b/test/other/codesize/test_codesize_minimal_Os.jssize index f42890a161280..39ae71311a1c3 100644 --- a/test/other/codesize/test_codesize_minimal_Os.jssize +++ b/test/other/codesize/test_codesize_minimal_Os.jssize @@ -1 +1 @@ -2755 +2701 diff --git a/test/other/codesize/test_codesize_minimal_Oz-ctors.gzsize b/test/other/codesize/test_codesize_minimal_Oz-ctors.gzsize index 7345521b14101..4d52c915fefce 100644 --- a/test/other/codesize/test_codesize_minimal_Oz-ctors.gzsize +++ b/test/other/codesize/test_codesize_minimal_Oz-ctors.gzsize @@ -1 +1 @@ -1336 +1331 diff --git a/test/other/codesize/test_codesize_minimal_Oz-ctors.jssize b/test/other/codesize/test_codesize_minimal_Oz-ctors.jssize index 6472d0b95c22b..180cab9ea1dea 100644 --- a/test/other/codesize/test_codesize_minimal_Oz-ctors.jssize +++ b/test/other/codesize/test_codesize_minimal_Oz-ctors.jssize @@ -1 +1 @@ -2740 +2695 diff --git a/test/other/codesize/test_codesize_minimal_Oz.gzsize b/test/other/codesize/test_codesize_minimal_Oz.gzsize index 07aeb9bc360f6..6f2c618b8048c 100644 --- a/test/other/codesize/test_codesize_minimal_Oz.gzsize +++ b/test/other/codesize/test_codesize_minimal_Oz.gzsize @@ -1 +1 @@ -1345 +1335 diff --git a/test/other/codesize/test_codesize_minimal_Oz.jssize b/test/other/codesize/test_codesize_minimal_Oz.jssize index f42890a161280..39ae71311a1c3 100644 --- a/test/other/codesize/test_codesize_minimal_Oz.jssize +++ b/test/other/codesize/test_codesize_minimal_Oz.jssize @@ -1 +1 @@ -2755 +2701 diff --git a/test/other/codesize/test_codesize_minimal_esm.gzsize b/test/other/codesize/test_codesize_minimal_esm.gzsize index bf9b50714b41e..04cad1aa78298 100644 --- a/test/other/codesize/test_codesize_minimal_esm.gzsize +++ b/test/other/codesize/test_codesize_minimal_esm.gzsize @@ -1 +1 @@ -1540 +1533 diff --git a/test/other/codesize/test_codesize_minimal_esm.jssize b/test/other/codesize/test_codesize_minimal_esm.jssize index 63931d7c6739e..f9e142c7821f0 100644 --- a/test/other/codesize/test_codesize_minimal_esm.jssize +++ b/test/other/codesize/test_codesize_minimal_esm.jssize @@ -1 +1 @@ -3221 +3169 diff --git a/test/other/codesize/test_codesize_minimal_pthreads.gzsize b/test/other/codesize/test_codesize_minimal_pthreads.gzsize index 8597d55482f06..8df1f3688fac0 100644 --- a/test/other/codesize/test_codesize_minimal_pthreads.gzsize +++ b/test/other/codesize/test_codesize_minimal_pthreads.gzsize @@ -1 +1 @@ -4181 +4195 diff --git a/test/other/codesize/test_codesize_minimal_pthreads.jssize b/test/other/codesize/test_codesize_minimal_pthreads.jssize index faa3cf49186aa..d99f3e659c402 100644 --- a/test/other/codesize/test_codesize_minimal_pthreads.jssize +++ b/test/other/codesize/test_codesize_minimal_pthreads.jssize @@ -1 +1 @@ -8724 +8732 diff --git a/test/other/codesize/test_codesize_minimal_wasmfs.gzsize b/test/other/codesize/test_codesize_minimal_wasmfs.gzsize index 07aeb9bc360f6..6f2c618b8048c 100644 --- a/test/other/codesize/test_codesize_minimal_wasmfs.gzsize +++ b/test/other/codesize/test_codesize_minimal_wasmfs.gzsize @@ -1 +1 @@ -1345 +1335 diff --git a/test/other/codesize/test_codesize_minimal_wasmfs.jssize b/test/other/codesize/test_codesize_minimal_wasmfs.jssize index f42890a161280..39ae71311a1c3 100644 --- a/test/other/codesize/test_codesize_minimal_wasmfs.jssize +++ b/test/other/codesize/test_codesize_minimal_wasmfs.jssize @@ -1 +1 @@ -2755 +2701 diff --git a/test/other/test_INCOMING_MODULE_JS_API.js.size b/test/other/test_INCOMING_MODULE_JS_API.js.size index 3dc49aa04aae0..0877ca9756034 100644 --- a/test/other/test_INCOMING_MODULE_JS_API.js.size +++ b/test/other/test_INCOMING_MODULE_JS_API.js.size @@ -1 +1 @@ -3733 +3736 diff --git a/test/other/test_unoptimized_code_size.js.size b/test/other/test_unoptimized_code_size.js.size index b62a548395437..0c73111de616b 100644 --- a/test/other/test_unoptimized_code_size.js.size +++ b/test/other/test_unoptimized_code_size.js.size @@ -1 +1 @@ -52680 +52784 diff --git a/test/other/test_unoptimized_code_size_no_asserts.js.size b/test/other/test_unoptimized_code_size_no_asserts.js.size index 8d9d4814a96d5..a88a7ecb8032d 100644 --- a/test/other/test_unoptimized_code_size_no_asserts.js.size +++ b/test/other/test_unoptimized_code_size_no_asserts.js.size @@ -1 +1 @@ -28428 +28532 diff --git a/test/other/test_unoptimized_code_size_strict.js.size b/test/other/test_unoptimized_code_size_strict.js.size index 6ec3d25eedb11..fa24d184e1415 100644 --- a/test/other/test_unoptimized_code_size_strict.js.size +++ b/test/other/test_unoptimized_code_size_strict.js.size @@ -1 +1 @@ -51463 +51567 diff --git a/test/test_other.py b/test/test_other.py index 3ff1aa33aa469..e52aec9613e68 100644 --- a/test/test_other.py +++ b/test/test_other.py @@ -8454,6 +8454,30 @@ def test_binaryen_stack_ir(self, opts, disable_and_enable): self.assertLess(err.count(DISABLE), 2) self.assertLess(err.count(ENABLE), 2) + @also_with_minimal_runtime + def test_run_order(self): + create_file('lib.js', r''' +addToLibrary({ + foo__postset: () => { + addAtPostCtor("console.log(`addAtPostCtor`);"); + addAtInit("console.log(`addAtInit`);"); + }, + foo: () => {}, +}); +''') + create_file('src.c', r''' + #include + void foo(); + __attribute__((constructor)) void ctor() { + printf("ctor\n"); + } + int main() { + printf("main\n"); + foo(); + } + ''') + self.do_runf('src.c', 'addAtInit\nctor\naddAtPostCtor\nmain\n', emcc_args=['--js-library', 'lib.js']) + def test_override_js_execution_environment(self): create_file('main.c', r''' #include diff --git a/tools/building.py b/tools/building.py index 568335891c0c3..9128b5fd65cc6 100644 --- a/tools/building.py +++ b/tools/building.py @@ -403,10 +403,7 @@ def acorn_optimizer(filename, passes, extra_info=None, return_output=False, work # evals ctors. if binaryen_bin is provided, it is the dir of the binaryen tool # for this, and we are in wasm mode def eval_ctors(js_file, wasm_file, debug_info): - if settings.MINIMAL_RUNTIME: - CTOR_ADD_PATTERN = f"wasmExports['{WASM_CALL_CTORS}']();" # TODO test - else: - CTOR_ADD_PATTERN = f"addOnInit(wasmExports['{WASM_CALL_CTORS}']);" + CTOR_ADD_PATTERN = f"wasmExports['{WASM_CALL_CTORS}']();" js = utils.read_file(js_file) diff --git a/tools/emscripten.py b/tools/emscripten.py index 2900a11211915..d312c7ffb5c4b 100644 --- a/tools/emscripten.py +++ b/tools/emscripten.py @@ -162,8 +162,7 @@ def update_settings_glue(wasm_file, metadata, base_metadata): def apply_static_code_hooks(forwarded_json, code): code = shared.do_replace(code, '<<< ATINITS >>>', str(forwarded_json['ATINITS'])) - if settings.HAS_MAIN: - code = shared.do_replace(code, '<<< ATMAINS >>>', str(forwarded_json['ATMAINS'])) + code = shared.do_replace(code, '<<< ATPOSTCTORS >>>', str(forwarded_json['ATPOSTCTORS'])) if settings.EXIT_RUNTIME and (not settings.MINIMAL_RUNTIME or settings.HAS_MAIN): code = shared.do_replace(code, '<<< ATEXITS >>>', str(forwarded_json['ATEXITS'])) return code