From b73edc8587861f6ec9ac4b01f914f7b693701b80 Mon Sep 17 00:00:00 2001 From: Wenyong Huang Date: Fri, 3 Dec 2021 15:30:32 +0800 Subject: [PATCH] Refine code when aux stack global isn't found (#862) When auxiliary stack global isn't found in wasm app, it must be unused in the wasm app, we set it to __heap_base global and set its size to 0, so as to shrink the linear memory to reduce the memory consumption. --- core/iwasm/interpreter/wasm_loader.c | 14 +++++++++++++- core/iwasm/interpreter/wasm_mini_loader.c | 14 +++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/core/iwasm/interpreter/wasm_loader.c b/core/iwasm/interpreter/wasm_loader.c index 286a7aa57..fdbefcab7 100644 --- a/core/iwasm/interpreter/wasm_loader.c +++ b/core/iwasm/interpreter/wasm_loader.c @@ -3040,6 +3040,18 @@ load_from_sections(WASMModule *module, WASMSection *sections, break; } } + if (!aux_stack_top_global) { + /* Auxiliary stack global isn't found, it must be unused + in the wasm app, as if it is used, the global must be + defined. Here we set it to __heap_base global and set + its size to 0. */ + aux_stack_top_global = aux_heap_base_global; + aux_stack_top = aux_heap_base; + module->aux_stack_top_global_index = + module->aux_heap_base_global_index; + module->aux_stack_bottom = aux_stack_top; + module->aux_stack_size = 0; + } break; } } @@ -3084,7 +3096,7 @@ load_from_sections(WASMModule *module, WASMSection *sections, export->name, export->index); /* resolve retain function. - If not find, reset malloc function index */ + If not found, reset malloc function index */ export_tmp = module->exports; for (j = 0; j < module->export_count; j++, export_tmp++) { if ((export_tmp->kind == EXPORT_KIND_FUNC) diff --git a/core/iwasm/interpreter/wasm_mini_loader.c b/core/iwasm/interpreter/wasm_mini_loader.c index 0565188c3..4a43b068f 100644 --- a/core/iwasm/interpreter/wasm_mini_loader.c +++ b/core/iwasm/interpreter/wasm_mini_loader.c @@ -1959,6 +1959,18 @@ load_from_sections(WASMModule *module, WASMSection *sections, break; } } + if (!aux_stack_top_global) { + /* Auxiliary stack global isn't found, it must be unused + in the wasm app, as if it is used, the global must be + defined. Here we set it to __heap_base global and set + its size to 0. */ + aux_stack_top_global = aux_heap_base_global; + aux_stack_top = aux_heap_base; + module->aux_stack_top_global_index = + module->aux_heap_base_global_index; + module->aux_stack_bottom = aux_stack_top; + module->aux_stack_size = 0; + } break; } } @@ -2002,7 +2014,7 @@ load_from_sections(WASMModule *module, WASMSection *sections, export->name, export->index); /* resolve retain function. - If not find, reset malloc function index */ + If not found, reset malloc function index */ export_tmp = module->exports; for (j = 0; j < module->export_count; j++, export_tmp++) { if ((export_tmp->kind == EXPORT_KIND_FUNC)