diff --git a/src/preamble.js b/src/preamble.js index 7ba3754e88051..eaec26460ab79 100644 --- a/src/preamble.js +++ b/src/preamble.js @@ -48,6 +48,10 @@ if (typeof WebAssembly != 'object') { #include "runtime_safe_heap.js" #endif +#if SHARED_MEMORY && ALLOW_MEMORY_GROWTH +#include "growableHeap.js" +#endif + #if USE_ASAN #include "runtime_asan.js" #endif diff --git a/src/preamble_minimal.js b/src/preamble_minimal.js index a49ca40962d44..322adb69982e4 100644 --- a/src/preamble_minimal.js +++ b/src/preamble_minimal.js @@ -8,6 +8,10 @@ #include "runtime_safe_heap.js" #endif +#if SHARED_MEMORY && ALLOW_MEMORY_GROWTH +#include "growableHeap.js" +#endif + #if USE_ASAN #include "runtime_asan.js" #endif diff --git a/tools/acorn-optimizer.mjs b/tools/acorn-optimizer.mjs index a6932295e1f5c..61ddfed3d69ca 100755 --- a/tools/acorn-optimizer.mjs +++ b/tools/acorn-optimizer.mjs @@ -1251,6 +1251,12 @@ function littleEndianHeap(ast) { // in each access), see #8365. function growableHeap(ast) { recursiveWalk(ast, { + FunctionDeclaration(node, c) { + // Do not recurse into to GROWABLE_HEAP_ helper functions themselves. + if (!(node.id.type === 'Identifier' && node.id.name.startsWith('GROWABLE_HEAP_'))) { + c(node.body); + } + }, AssignmentExpression: (node) => { if (node.left.type === 'Identifier' && isEmscriptenHEAP(node.left.name)) { // Don't transform initial setup of the arrays. diff --git a/tools/building.py b/tools/building.py index c1caf75ca6840..81e3781b38c73 100644 --- a/tools/building.py +++ b/tools/building.py @@ -1055,12 +1055,7 @@ def little_endian_heap(js_file): def apply_wasm_memory_growth(js_file): logger.debug('supporting wasm memory growth with pthreads') - fixed = acorn_optimizer(js_file, ['growableHeap']) - ret = js_file + '.pgrow.js' - fixed = utils.read_file(fixed) - support_code = utils.read_file(path_from_root('src/growableHeap.js')) - utils.write_file(ret, support_code + '\n' + fixed) - return ret + return acorn_optimizer(js_file, ['growableHeap']) def use_unsigned_pointers_in_js(js_file):