summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2015-11-28 14:08:55 -0800
committerAlon Zakai <alonzakai@gmail.com>2015-11-28 14:08:55 -0800
commitd98de7569efadb1c654cd53c6404f40b15ad7ae7 (patch)
tree2cc29733acad14fa506a2b9f4ebe444338c91752
parent6d36e9640efa7bbefc05e4db0fc6c97d79053c9b (diff)
downloadbinaryen-d98de7569efadb1c654cd53c6404f40b15ad7ae7.tar.gz
binaryen-d98de7569efadb1c654cd53c6404f40b15ad7ae7.tar.bz2
binaryen-d98de7569efadb1c654cd53c6404f40b15ad7ae7.zip
when using native wasm support, we need to merge the written data with the mem init that wasm provides
-rwxr-xr-xbuild.sh2
-rw-r--r--src/js/post.js4
2 files changed, 4 insertions, 2 deletions
diff --git a/build.sh b/build.sh
index aefa83e77..0e62486b5 100755
--- a/build.sh
+++ b/build.sh
@@ -3,6 +3,6 @@ g++ -O2 -std=c++11 src/binaryen-shell.cpp src/pass.cpp src/passes/*.cpp -o bin/b
echo "building asm2wasm"
g++ -O2 -std=c++11 src/asm2wasm-main.cpp src/emscripten-optimizer/parser.cpp src/emscripten-optimizer/simple_ast.cpp src/emscripten-optimizer/optimizer-shared.cpp -o bin/asm2wasm
echo "building interpreter/js"
-em++ -std=c++11 src/wasm-js.cpp src/emscripten-optimizer/parser.cpp src/emscripten-optimizer/simple_ast.cpp src/emscripten-optimizer/optimizer-shared.cpp -o bin/wasm.js -s MODULARIZE=1 -s 'EXPORT_NAME="WasmJS"' --memory-init-file 0 -Oz -s ALLOW_MEMORY_GROWTH=1 #-profiling -s DEMANGLE_SUPPORT=1 #-DWASM_JS_DEBUG -DWASM_INTERPRETER_DEBUG=2
+em++ -std=c++11 src/wasm-js.cpp src/emscripten-optimizer/parser.cpp src/emscripten-optimizer/simple_ast.cpp src/emscripten-optimizer/optimizer-shared.cpp -o bin/wasm.js -s MODULARIZE=1 -s 'EXPORT_NAME="WasmJS"' --memory-init-file 0 -Oz -s ALLOW_MEMORY_GROWTH=1 -profiling -s DEMANGLE_SUPPORT=1 #-DWASM_JS_DEBUG -DWASM_INTERPRETER_DEBUG=2
cat src/js/post.js >> bin/wasm.js
diff --git a/src/js/post.js b/src/js/post.js
index 72cd836ba..e64774c3c 100644
--- a/src/js/post.js
+++ b/src/js/post.js
@@ -22,7 +22,9 @@ function integrateWasmJS(Module) {
var oldBuffer = Module['buffer'];
var newBuffer = instance.memory;
assert(newBuffer.byteLength >= oldBuffer.byteLength, 'we might fail if we allocated more than TOTAL_MEMORY');
- (new Int8Array(newBuffer)).set(new Int8Array(oldBuffer));
+ // the wasm module does write out the memory initialization, in range STATIC_BASE..STATIC_BUMP, so avoid that
+ (new Int8Array(newBuffer).subarray(0, STATIC_BASE)).set(new Int8Array(oldBuffer).subarray(0, STATIC_BASE));
+ (new Int8Array(newBuffer).subarray(STATIC_BASE + STATIC_BUMP)).set(new Int8Array(oldBuffer).subarray(STATIC_BASE + STATIC_BUMP));
updateGlobalBuffer(newBuffer);
updateGlobalBufferViews();
Module['reallocBuffer'] = function(size) {