From 2074ccb528f0d7e786e7df8ddff07b0aa87f746a Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Fri, 11 Sep 2020 13:24:10 -0700 Subject: [PATCH 1/4] Remove STATIC_BUMP setting and STATICTOP variable --- emcc.py | 2 +- emscripten.py | 25 ++++++++----------------- src/jsifier.js | 6 ------ src/modules.js | 1 - src/settings_internal.js | 5 ----- src/shell_minimal.js | 1 - tools/shared.py | 2 -- 7 files changed, 9 insertions(+), 33 deletions(-) diff --git a/emcc.py b/emcc.py index 47fa696200b23..068e71f000837 100755 --- a/emcc.py +++ b/emcc.py @@ -1414,7 +1414,7 @@ def check(input_file): shared.Settings.EXPORTED_FUNCTIONS += ['_stackSave', '_stackRestore', '_stackAlloc'] # We need to preserve the __data_end symbol so that wasm-emscripten-finalize can determine - # the STATIC_BUMP value. + # where static data ends (and correspondingly where the stack begins). shared.Settings.EXPORTED_FUNCTIONS += ['___data_end'] if not shared.Settings.STANDALONE_WASM: # in standalone mode, crt1 will call the constructors from inside the wasm diff --git a/emscripten.py b/emscripten.py index e686b11ed7f4d..2e0d6e55d17db 100644 --- a/emscripten.py +++ b/emscripten.py @@ -116,12 +116,6 @@ def align_memory(addr): return (addr + 15) & -16 -def align_static_bump(metadata): - # TODO: remove static bump entirely - metadata['staticBump'] = align_memory(metadata['staticBump']) - return metadata['staticBump'] - - def update_settings_glue(metadata, DEBUG): optimize_syscalls(metadata['declares'], DEBUG) @@ -159,7 +153,7 @@ def read_proxied_function_signatures(asmConsts): shared.Settings.PROXIED_FUNCTION_SIGNATURES = read_proxied_function_signatures(metadata['asmConsts']) - shared.Settings.STATIC_BUMP = align_static_bump(metadata) + metadata['staticBump'] = align_memory(metadata['staticBump']) shared.Settings.BINARYEN_FEATURES = metadata['features'] shared.Settings.WASM_TABLE_SIZE = metadata['tableSize'] @@ -188,7 +182,6 @@ def apply_static_code_hooks(code): def apply_forwarded_data(forwarded_data): forwarded_json = json.loads(forwarded_data) # Be aware of JS static allocations - shared.Settings.STATIC_BUMP = forwarded_json['STATIC_BUMP'] # Be aware of JS static code hooks StaticCodeHooks.atinits = str(forwarded_json['ATINITS']) StaticCodeHooks.atmains = str(forwarded_json['ATMAINS']) @@ -216,7 +209,7 @@ def compile_settings(temp_files): class Memory(): - def __init__(self): + def __init__(self, metadata): # Note: if RELOCATABLE, then only relative sizes can be computed, and we don't # actually write out any absolute memory locations ({{{ STACK_BASE }}} # does not exist, etc.) @@ -224,7 +217,7 @@ def __init__(self): # Memory layout: # * first the static globals self.global_base = shared.Settings.GLOBAL_BASE - self.static_bump = shared.Settings.STATIC_BUMP + self.static_bump = metadata['staticBump'] # * then the stack (up on fastcomp, down on upstream) self.stack_low = align_memory(self.global_base + self.static_bump) self.stack_high = align_memory(self.stack_low + shared.Settings.TOTAL_STACK) @@ -237,9 +230,9 @@ def __init__(self): exit_with_error('Memory is not large enough for static data (%d) plus the stack (%d), please increase INITIAL_MEMORY (%d) to at least %d' % (self.static_bump, shared.Settings.TOTAL_STACK, shared.Settings.INITIAL_MEMORY, self.dynamic_base)) -def apply_memory(js): +def apply_memory(js, metadata): # Apply the statically-at-compile-time computed memory locations. - memory = Memory() + memory = Memory(metadata) # Write it all out js = js.replace('{{{ STATIC_BUMP }}}', str(memory.static_bump)) @@ -447,7 +440,7 @@ def emscript(infile, outfile, memfile, temp_files, DEBUG): global_initializers = ', '.join('{ func: function() { %s() } }' % i for i in metadata['initializers']) - staticbump = shared.Settings.STATIC_BUMP + staticbump = metadata['staticBump'] if shared.Settings.MINIMAL_RUNTIME: # In minimal runtime, global initializers are run after the Wasm Module instantiation has finished. @@ -458,11 +451,9 @@ def emscript(infile, outfile, memfile, temp_files, DEBUG): ''' % ('if (!ENVIRONMENT_IS_PTHREAD)' if shared.Settings.USE_PTHREADS else '', global_initializers) - pre = pre.replace('STATICTOP = STATIC_BASE + 0;', '''STATICTOP = STATIC_BASE + %d; -%s -''' % (staticbump, global_initializers)) + pre += '\n' + global_initializers + '\n' - pre = apply_memory(pre) + pre = apply_memory(pre, metadata) pre = apply_static_code_hooks(pre) # In regular runtime, atinits etc. exist in the preamble part post = apply_static_code_hooks(post) # In MINIMAL_RUNTIME, atinit exists in the postamble part diff --git a/src/jsifier.js b/src/jsifier.js index c58086868c58e..36abce1236336 100644 --- a/src/jsifier.js +++ b/src/jsifier.js @@ -394,12 +394,6 @@ function JSify(data, functionsOnly) { // if (!mainPass) { - if (!Variables.generatedGlobalBase) { - Variables.generatedGlobalBase = true; - // Globals are done, here is the rest of static memory - // emit "metadata" in a comment. FIXME make this nicer - print('// STATICTOP = STATIC_BASE + ' + alignMemory(Variables.nextIndexedOffset) + ';\n'); - } var generated = itemsDict.function.concat(itemsDict.type).concat(itemsDict.GlobalVariableStub).concat(itemsDict.GlobalVariable); print(generated.map(function(item) { return item.JS; }).join('\n')); diff --git a/src/modules.js b/src/modules.js index 759c1d0b97a1b..52617fd88bd09 100644 --- a/src/modules.js +++ b/src/modules.js @@ -544,7 +544,6 @@ var PassManager = { print('\n//FORWARDED_DATA:' + JSON.stringify({ Functions: Functions, EXPORTED_FUNCTIONS: EXPORTED_FUNCTIONS, - STATIC_BUMP: STATIC_BUMP, // updated with info from JS ATINITS: ATINITS.join('\n'), ATMAINS: ATMAINS.join('\n'), ATEXITS: ATEXITS.join('\n'), diff --git a/src/settings_internal.js b/src/settings_internal.js index b67940b6164a5..b6d5fdae6c711 100644 --- a/src/settings_internal.js +++ b/src/settings_internal.js @@ -129,11 +129,6 @@ var MEM_INIT_IN_WASM = 0; // This is set internally when needed (SINGLE_FILE) var SUPPORT_BASE64_EMBEDDING = 0; -// the total static allocation, that is, how much to bump the start of memory -// for static globals. received from the backend, and possibly increased due -// to JS static allocations -var STATIC_BUMP = -1; - // the total initial wasm table size. var WASM_TABLE_SIZE = 0; diff --git a/src/shell_minimal.js b/src/shell_minimal.js index 8e23c274506de..1d1039a41114f 100644 --- a/src/shell_minimal.js +++ b/src/shell_minimal.js @@ -144,7 +144,6 @@ var ENVIRONMENT_IS_WORKER = ENVIRONMENT_IS_PTHREAD = typeof importScripts === 'f #if MODULARIZE if (ENVIRONMENT_IS_WORKER) { var buffer = {{{EXPORT_NAME}}}.buffer; - var STATICTOP = {{{EXPORT_NAME}}}.STATICTOP; var STACK_BASE = {{{EXPORT_NAME}}}.STACK_BASE; var STACKTOP = {{{EXPORT_NAME}}}.STACKTOP; var STACK_MAX = {{{EXPORT_NAME}}}.STACK_MAX; diff --git a/tools/shared.py b/tools/shared.py index a94c9ae682a6c..ba58e202afb75 100644 --- a/tools/shared.py +++ b/tools/shared.py @@ -1073,8 +1073,6 @@ class JS(object): memory_initializer_pattern = r'/\* memory initializer \*/ allocate\(\[([\d, ]*)\], "i8", ALLOC_NONE, ([\d+\.GLOBAL_BASEHgb]+)\);' no_memory_initializer_pattern = r'/\* no memory initializer \*/' - memory_staticbump_pattern = r'STATICTOP = STATIC_BASE \+ (\d+);' - global_initializers_pattern = r'/\* global initializers \*/ __ATINIT__.push\((.+)\);' emscripten_license = '''\ From a4db85ef8a1f99c84f14093df93bdad019add149 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Fri, 11 Sep 2020 13:28:09 -0700 Subject: [PATCH 2/4] Remove STATIC* runtime vars --- src/library_trace.js | 2 +- src/memoryprofiler.js | 4 ++-- src/preamble.js | 3 +-- src/preamble_minimal.js | 5 ----- 4 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/library_trace.js b/src/library_trace.js index 103092313ed79..3b5d94c70ccfc 100644 --- a/src/library_trace.js +++ b/src/library_trace.js @@ -262,7 +262,7 @@ var LibraryTracing = { emscripten_trace_report_memory_layout: function() { if (EmscriptenTrace.postEnabled) { var memory_layout = { - 'static_base': STATIC_BASE, + 'static_base': {{{ GLOBAL_BASE }}}, 'stack_base': STACK_BASE, 'stack_top': STACKTOP, 'stack_max': STACK_MAX, diff --git a/src/memoryprofiler.js b/src/memoryprofiler.js index e60e2f129d1dc..c18bf8877a3b8 100644 --- a/src/memoryprofiler.js +++ b/src/memoryprofiler.js @@ -476,8 +476,8 @@ var emscriptenMemoryProfiler = { var width = (nBits(HEAP8.length) + 3) / 4; // Pointer 'word width' var html = 'Total HEAP size: ' + self.formatBytes(HEAP8.length) + '.'; - html += '
' + colorBar('#202020') + 'STATIC memory area size: ' + self.formatBytes(Math.min(STACK_BASE, STACK_MAX) - STATIC_BASE); - html += '. STATIC_BASE: ' + toHex(STATIC_BASE, width); + html += '
' + colorBar('#202020') + 'STATIC memory area size: ' + self.formatBytes(Math.min(STACK_BASE, STACK_MAX) - {{{ GLOBAL_BASE }}}); + html += '. {{{ GLOBAL_BASE }}}: ' + toHex({{{ GLOBAL_BASE }}}, width); html += '
' + colorBar('#FF8080') + 'STACK memory area size: ' + self.formatBytes(Math.abs(STACK_MAX - STACK_BASE)); html += '. STACK_BASE: ' + toHex(STACK_BASE, width); diff --git a/src/preamble.js b/src/preamble.js index 699283266ff5d..559f466258827 100644 --- a/src/preamble.js +++ b/src/preamble.js @@ -329,8 +329,7 @@ function updateGlobalBufferAndViews(buf) { Module['HEAPF64'] = HEAPF64 = new Float64Array(buf); } -var STATIC_BASE = {{{ GLOBAL_BASE }}}, - STACK_BASE = {{{ getQuoted('STACK_BASE') }}}, +var STACK_BASE = {{{ getQuoted('STACK_BASE') }}}, STACKTOP = STACK_BASE, STACK_MAX = {{{ getQuoted('STACK_MAX') }}}, DYNAMIC_BASE = {{{ getQuoted('DYNAMIC_BASE') }}}; diff --git a/src/preamble_minimal.js b/src/preamble_minimal.js index cecd22aae39f3..2ba5c083ab7fe 100644 --- a/src/preamble_minimal.js +++ b/src/preamble_minimal.js @@ -56,16 +56,11 @@ Module['wasm'] = base64Decode('{{{ getQuoted("WASM_BINARY_DATA") }}}'); #include "runtime_strings.js" #if USE_PTHREADS -var STATIC_BASE = {{{ GLOBAL_BASE }}}; - if (!ENVIRONMENT_IS_PTHREAD) { #endif var GLOBAL_BASE = {{{ GLOBAL_BASE }}}, TOTAL_STACK = {{{ TOTAL_STACK }}}, -#if !USE_PTHREADS - STATIC_BASE = {{{ GLOBAL_BASE }}}, -#endif STACK_BASE = {{{ getQuoted('STACK_BASE') }}}, STACKTOP = STACK_BASE, STACK_MAX = {{{ getQuoted('STACK_MAX') }}} From afa285c91dca0a1d67a56f464d232a98313bdf05 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Fri, 11 Sep 2020 13:36:10 -0700 Subject: [PATCH 3/4] fix --- emscripten.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/emscripten.py b/emscripten.py index 2e0d6e55d17db..455b479f7759e 100644 --- a/emscripten.py +++ b/emscripten.py @@ -440,8 +440,6 @@ def emscript(infile, outfile, memfile, temp_files, DEBUG): global_initializers = ', '.join('{ func: function() { %s() } }' % i for i in metadata['initializers']) - staticbump = metadata['staticBump'] - if shared.Settings.MINIMAL_RUNTIME: # In minimal runtime, global initializers are run after the Wasm Module instantiation has finished. global_initializers = '' From 59a2569d13f9d6894f1c41c4f0892bbcad2f8db2 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Fri, 11 Sep 2020 14:35:47 -0700 Subject: [PATCH 4/4] fix test --- tests/test_core.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/test_core.py b/tests/test_core.py index 17a274f2ed5cb..a1fc1f7d200c5 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -7676,8 +7676,7 @@ def test_memprof_requirements(self): create_test_file('lib.js', ''' mergeInto(LibraryManager.library, { check_memprof_requirements: function() { - if (typeof STATIC_BASE === 'number' && - typeof STACK_BASE === 'number' && + if (typeof STACK_BASE === 'number' && typeof STACK_MAX === 'number' && typeof STACKTOP === 'number' && typeof DYNAMIC_BASE === 'number') {