From b518dda3ff9f236310247844df9f5294f651fd8b Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Mon, 30 Jul 2018 13:05:01 +0100 Subject: [PATCH 01/16] Upgrade Binaryen to 1.38.24 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Paweł Bylica --- cmake/ProjectBinaryen.cmake | 8 ++++---- src/binaryen.cpp | 16 ++++++++++------ src/shell-interface.h | 2 +- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/cmake/ProjectBinaryen.cmake b/cmake/ProjectBinaryen.cmake index bbe989839..b9385ee71 100644 --- a/cmake/ProjectBinaryen.cmake +++ b/cmake/ProjectBinaryen.cmake @@ -29,6 +29,7 @@ set(binaryen_other_libraries ${binary_dir}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}wasm${CMAKE_STATIC_LIBRARY_SUFFIX} ${binary_dir}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}asmjs${CMAKE_STATIC_LIBRARY_SUFFIX} ${binary_dir}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}passes${CMAKE_STATIC_LIBRARY_SUFFIX} + ${binary_dir}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}wasm${CMAKE_STATIC_LIBRARY_SUFFIX} ${binary_dir}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}cfg${CMAKE_STATIC_LIBRARY_SUFFIX} ${binary_dir}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}ir${CMAKE_STATIC_LIBRARY_SUFFIX} ${binary_dir}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}emscripten-optimizer${CMAKE_STATIC_LIBRARY_SUFFIX} @@ -37,12 +38,12 @@ set(binaryen_other_libraries ExternalProject_Add(binaryen PREFIX ${prefix} - DOWNLOAD_NAME binaryen-1.37.35.tar.gz + DOWNLOAD_NAME binaryen-1.38.24.tar.gz DOWNLOAD_DIR ${prefix}/downloads SOURCE_DIR ${source_dir} BINARY_DIR ${binary_dir} - URL https://github.com/WebAssembly/binaryen/archive/1.37.35.tar.gz - URL_HASH SHA256=19439e41dc576446eaae0c4a8e07d4cd4c40aea7dfb0a6475b925686852f8006 + URL https://github.com/WebAssembly/binaryen/archive/1.38.24.tar.gz + URL_HASH SHA256=981874b17a4b2a14f7838da3aab4824bbe63e7e18dc439b5869b372bdce9fd66 CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= -DCMAKE_INSTALL_LIBDIR=lib @@ -63,7 +64,6 @@ set_target_properties( IMPORTED_LOCATION_RELEASE ${binaryen_library} INTERFACE_INCLUDE_DIRECTORIES ${binaryen_include_dir} INTERFACE_LINK_LIBRARIES "${binaryen_other_libraries}" - ) add_dependencies(binaryen::binaryen binaryen) diff --git a/src/binaryen.cpp b/src/binaryen.cpp index ff42a1a9e..45f8a1761 100644 --- a/src/binaryen.cpp +++ b/src/binaryen.cpp @@ -49,9 +49,9 @@ class BinaryenEthereumInterface : public wasm::ShellExternalInterface, EthereumI { } protected: - wasm::Literal callImport(wasm::Import *import, wasm::LiteralList& arguments) override; + wasm::Literal callImport(wasm::Function* import, wasm::LiteralList& arguments) override; #if HERA_DEBUGGING - wasm::Literal callDebugImport(wasm::Import *import, wasm::LiteralList& arguments); + wasm::Literal callDebugImport(wasm::Function* import, wasm::LiteralList& arguments); #endif void importGlobals(map& globals, wasm::Module& wasm) override; @@ -77,7 +77,7 @@ class BinaryenEthereumInterface : public wasm::ShellExternalInterface, EthereumI } #if HERA_DEBUGGING - wasm::Literal BinaryenEthereumInterface::callDebugImport(wasm::Import *import, wasm::LiteralList& arguments) { + wasm::Literal BinaryenEthereumInterface::callDebugImport(wasm::Function *import, wasm::LiteralList& arguments) { heraAssert(import->module == wasm::Name("debug"), "Import namespace error."); if (import->base == wasm::Name("print32")) { @@ -138,7 +138,7 @@ class BinaryenEthereumInterface : public wasm::ShellExternalInterface, EthereumI } #endif - wasm::Literal BinaryenEthereumInterface::callImport(wasm::Import *import, wasm::LiteralList& arguments) { + wasm::Literal BinaryenEthereumInterface::callImport(wasm::Function* import, wasm::LiteralList& arguments) { #if HERA_DEBUGGING if (import->module == wasm::Name("debug")) // Reroute to debug namespace @@ -635,7 +635,11 @@ void BinaryenEngine::verifyContract(wasm::Module & module) { wasm::Name("selfDestruct"), createFunctionType({ wasm::Type::i32 }, wasm::Type::none) } }; - for (auto const& import: module.imports) { + for (auto const& import: module.functions) { + + if (!import->imported()) // Only check imported functions. + continue; + #if HERA_DEBUGGING if (import->module == wasm::Name("debug")) continue; @@ -655,7 +659,7 @@ void BinaryenEngine::verifyContract(wasm::Module & module) // NOTE: needs to be a copy by value due to `structuralComparison` requiring a non-const input wasm::FunctionType eei_function_type = eei_signatures.at(import->base); - wasm::FunctionType* function_type = module.getFunctionTypeOrNull(import->functionType); + wasm::FunctionType* function_type = module.getFunctionTypeOrNull(import->type); ensureCondition( function_type, ContractValidationFailure, diff --git a/src/shell-interface.h b/src/shell-interface.h index 556417291..64fdb2533 100644 --- a/src/shell-interface.h +++ b/src/shell-interface.h @@ -122,7 +122,7 @@ struct ShellExternalInterface : ModuleInstance::ExternalInterface { trap("No globals supported."); } - Literal callImport(Import *import, LiteralList& arguments) override { + Literal callImport(Function* import, LiteralList& arguments) override { (void)import; (void)arguments; trap("No imports supported."); From 82fa6cbfb9ae9d503bec9e80ff33955923cb4ca1 Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Mon, 30 Jul 2018 13:05:44 +0100 Subject: [PATCH 02/16] Simplify callExport() since the arguments parameter is const now --- src/binaryen.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/binaryen.cpp b/src/binaryen.cpp index 45f8a1761..d147f4b3a 100644 --- a/src/binaryen.cpp +++ b/src/binaryen.cpp @@ -505,9 +505,7 @@ ExecutionResult BinaryenEngine::execute( executionStarted(); try { - wasm::Name main = wasm::Name("main"); - wasm::LiteralList args; - instance.callExport(main, args); + instance.callExport(wasm::Name("main"), wasm::LiteralList{}); } catch (EndExecution const&) { // This exception is ignored here because we consider it to be a success. // It is only a clutch for POSIX style exit() From 8b4b7c624b3d6f81dac6f293056a001d3855e1da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Bylica?= Date: Mon, 21 Jan 2019 13:31:36 +0100 Subject: [PATCH 03/16] Circle CI: Enable ASan memory leaks check for Binaryen --- circle.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/circle.yml b/circle.yml index 61d890eb8..ff00795f7 100644 --- a/circle.yml +++ b/circle.yml @@ -135,7 +135,6 @@ defaults: run: name: "Test shared Hera (binaryen)" command: | - export ASAN_OPTIONS=detect_leaks=0 SO=$([ $(uname) = Darwin ] && echo dylib || echo so) if [[ $PRELOAD_ASAN ]]; then export LD_PRELOAD=/usr/lib/clang/8/lib/linux/libclang_rt.asan-x86_64.so; fi testeth --version From cfd54508b3e1ce7a74c232bd1e0a2f0b2e7d8161 Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Thu, 24 Jan 2019 17:45:57 +0000 Subject: [PATCH 04/16] Update shell-interface.h from Binaryen --- src/shell-interface.h | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/shell-interface.h b/src/shell-interface.h index 64fdb2533..27cd3b886 100644 --- a/src/shell-interface.h +++ b/src/shell-interface.h @@ -52,6 +52,7 @@ struct ShellExternalInterface : ModuleInstance::ExternalInterface { public: Memory() {} + Memory() = default; // Gives no guarantee about the length of the memory. Caller needs to ensure that. char* rawpointer(size_t offset) { return &memory[offset]; @@ -94,13 +95,16 @@ struct ShellExternalInterface : ModuleInstance::ExternalInterface { std::vector table; ShellExternalInterface() : memory() {} + virtual ~ShellExternalInterface() = default; void init(Module& wasm, ModuleInstance& instance) override { memory.resize(wasm.memory.initial * wasm::Memory::kPageSize); // apply memory segments for (auto& segment : wasm.memory.segments) { Address offset = static_cast(ConstantExpressionRunner(instance.globals).visit(segment.offset).value.geti32()); - assert(offset + segment.data.size() <= wasm.memory.initial * wasm::Memory::kPageSize); + if (offset + segment.data.size() > wasm.memory.initial * wasm::Memory::kPageSize) { + trap("invalid offset when initializing memory"); + } for (size_t i = 0; i != segment.data.size(); ++i) { memory.set(offset + i, segment.data[i]); } @@ -109,7 +113,9 @@ struct ShellExternalInterface : ModuleInstance::ExternalInterface { table.resize(wasm.table.initial); for (auto& segment : wasm.table.segments) { Address offset = static_cast(ConstantExpressionRunner(instance.globals).visit(segment.offset).value.geti32()); - assert(offset + segment.data.size() <= wasm.table.initial); + if (offset + segment.data.size() > wasm.table.initial) { + trap("invalid offset when initializing table"); + } for (size_t i = 0; i != segment.data.size(); ++i) { table[offset + i] = segment.data[i]; } @@ -142,7 +148,11 @@ struct ShellExternalInterface : ModuleInstance::ExternalInterface { if (func->result != result) { trap("callIndirect: bad result type"); } - return instance.callFunctionInternal(func->name, arguments); + if (func->imported()) { + return callImport(func, arguments); + } else { + return instance.callFunctionInternal(func->name, arguments); + } } int8_t load8s(Address addr) override { return memory.get(addr); } @@ -153,11 +163,17 @@ struct ShellExternalInterface : ModuleInstance::ExternalInterface { uint32_t load32u(Address addr) override { return memory.get(addr); } int64_t load64s(Address addr) override { return memory.get(addr); } uint64_t load64u(Address addr) override { return memory.get(addr); } + std::array load128(Address addr) override { + return memory.get>(addr); + } void store8(Address addr, int8_t value) override { memory.set(addr, value); } void store16(Address addr, int16_t value) override { memory.set(addr, value); } void store32(Address addr, int32_t value) override { memory.set(addr, value); } void store64(Address addr, int64_t value) override { memory.set(addr, value); } + void store128(Address addr, const std::array& value) override { + memory.set>(addr, value); + } void growMemory(Address /*oldSize*/, Address newSize) override { memory.resize(newSize); From 6abcf972ffa90d5ddf3120924c88974fdafb9060 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Bylica?= Date: Fri, 1 Feb 2019 12:04:26 +0100 Subject: [PATCH 05/16] CMake: Use the same compiler and CXX flags to build Binaryen --- cmake/ProjectBinaryen.cmake | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/cmake/ProjectBinaryen.cmake b/cmake/ProjectBinaryen.cmake index b9385ee71..f659221f7 100644 --- a/cmake/ProjectBinaryen.cmake +++ b/cmake/ProjectBinaryen.cmake @@ -36,6 +36,11 @@ set(binaryen_other_libraries ${binary_dir}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}support${CMAKE_STATIC_LIBRARY_SUFFIX} ) +set(binaryen_cxx_flags ${CMAKE_CXX_FLAGS}) +if (SANITIZE) + set(binaryen_cxx_flags "${binaryen_cxx_flags} -fsanitize=${SANITIZE}") +endif() + ExternalProject_Add(binaryen PREFIX ${prefix} DOWNLOAD_NAME binaryen-1.38.24.tar.gz @@ -49,6 +54,8 @@ ExternalProject_Add(binaryen -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_BUILD_TYPE=Release -DBUILD_STATIC_LIB=ON + -DCMAKE_CXX_FLAGS=${binaryen_cxx_flags} + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} ${build_command} ${install_command} BUILD_BYPRODUCTS ${binaryen_library} ${binaryen_other_libraries} From 30234dddad2f6e00df20c023c02cd9f3216cf164 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Bylica?= Date: Fri, 1 Feb 2019 12:11:28 +0100 Subject: [PATCH 06/16] TMP: Debug Binaryen on macos with ASan --- circle.yml | 21 ++------------------- cmake/ProjectBinaryen.cmake | 2 +- 2 files changed, 3 insertions(+), 20 deletions(-) diff --git a/circle.yml b/circle.yml index ff00795f7..fa31f559b 100644 --- a/circle.yml +++ b/circle.yml @@ -136,7 +136,7 @@ defaults: name: "Test shared Hera (binaryen)" command: | SO=$([ $(uname) = Darwin ] && echo dylib || echo so) - if [[ $PRELOAD_ASAN ]]; then export LD_PRELOAD=/usr/lib/clang/8/lib/linux/libclang_rt.asan-x86_64.so; fi + export DYLD_INSERT_LIBRARIES=/Applications/Xcode-10.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/10.0.0/lib/darwin/libclang_rt.asan_osx_dynamic.dylib testeth --version testeth -t GeneralStateTests/stEWASMTests -- --testpath tests --vm ~/build/src/libhera.$SO --singlenet Byzantium --evmc engine=binaryen $TESTETH_OPTIONS @@ -298,7 +298,7 @@ jobs: - CXX: c++ - GENERATOR: Unix Makefiles - BUILD_PARALLEL_JOBS: 4 - - CMAKE_OPTIONS: -DHERA_DEBUGGING=ON -DHERA_BINARYEN=ON -DHERA_WABT=ON + - CMAKE_OPTIONS: -DHERA_DEBUGGING=ON -DHERA_BINARYEN=ON -DHERA_WABT=ON -DSANITIZE=address macos: xcode: "10.1.0" steps: @@ -353,24 +353,7 @@ workflows: version: 2 hera: jobs: - - lint - - linux-clang-shared-asan - - linux-gcc-shared-coverage - - linux-gcc-static-debug - - linux-clang-shared-release: - filters: - tags: - only: /.*/ - macos: filters: tags: only: /.*/ - - deploy: - requires: - - linux-clang-shared-release - - macos - filters: - branches: - ignore: /.*/ - tags: - only: /^v[0-9].*/ diff --git a/cmake/ProjectBinaryen.cmake b/cmake/ProjectBinaryen.cmake index f659221f7..0603a0a68 100644 --- a/cmake/ProjectBinaryen.cmake +++ b/cmake/ProjectBinaryen.cmake @@ -52,7 +52,7 @@ ExternalProject_Add(binaryen CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= -DCMAKE_INSTALL_LIBDIR=lib - -DCMAKE_BUILD_TYPE=Release + -DCMAKE_BUILD_TYPE=Debug -DBUILD_STATIC_LIB=ON -DCMAKE_CXX_FLAGS=${binaryen_cxx_flags} -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} From c143d81be261041db0651b3f69c806b622c1c2c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Bylica?= Date: Thu, 7 Feb 2019 20:09:43 +0100 Subject: [PATCH 07/16] Revert "TMP: Debug Binaryen on macos with ASan" This reverts commit fa2788276a98d4748905b3ea4d5d329fc4df6457. --- circle.yml | 19 ++++++++++++++++++- cmake/ProjectBinaryen.cmake | 2 +- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/circle.yml b/circle.yml index fa31f559b..1a7ec00d7 100644 --- a/circle.yml +++ b/circle.yml @@ -136,7 +136,7 @@ defaults: name: "Test shared Hera (binaryen)" command: | SO=$([ $(uname) = Darwin ] && echo dylib || echo so) - export DYLD_INSERT_LIBRARIES=/Applications/Xcode-10.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/10.0.0/lib/darwin/libclang_rt.asan_osx_dynamic.dylib + if [[ $PRELOAD_ASAN ]]; then export LD_PRELOAD=/usr/lib/clang/6.0/lib/linux/libclang_rt.asan-x86_64.so; fi testeth --version testeth -t GeneralStateTests/stEWASMTests -- --testpath tests --vm ~/build/src/libhera.$SO --singlenet Byzantium --evmc engine=binaryen $TESTETH_OPTIONS @@ -353,7 +353,24 @@ workflows: version: 2 hera: jobs: + - lint + - linux-clang-shared-asan + - linux-gcc-shared-coverage + - linux-gcc-static-debug + - linux-clang-shared-release: + filters: + tags: + only: /.*/ - macos: filters: tags: only: /.*/ + - deploy: + requires: + - linux-clang-shared-release + - macos + filters: + branches: + ignore: /.*/ + tags: + only: /^v[0-9].*/ diff --git a/cmake/ProjectBinaryen.cmake b/cmake/ProjectBinaryen.cmake index 0603a0a68..f659221f7 100644 --- a/cmake/ProjectBinaryen.cmake +++ b/cmake/ProjectBinaryen.cmake @@ -52,7 +52,7 @@ ExternalProject_Add(binaryen CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= -DCMAKE_INSTALL_LIBDIR=lib - -DCMAKE_BUILD_TYPE=Debug + -DCMAKE_BUILD_TYPE=Release -DBUILD_STATIC_LIB=ON -DCMAKE_CXX_FLAGS=${binaryen_cxx_flags} -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} From 7beedbfa1b878c5afec6ab41b7df86756c4419ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Bylica?= Date: Thu, 14 Feb 2019 17:53:50 +0100 Subject: [PATCH 08/16] Revert "Revert "TMP: Debug Binaryen on macos with ASan"" This reverts commit 5b0f7a6f4685f5b6849347de1ac453d529e85923. --- circle.yml | 19 +------------------ cmake/ProjectBinaryen.cmake | 2 +- 2 files changed, 2 insertions(+), 19 deletions(-) diff --git a/circle.yml b/circle.yml index 1a7ec00d7..fa31f559b 100644 --- a/circle.yml +++ b/circle.yml @@ -136,7 +136,7 @@ defaults: name: "Test shared Hera (binaryen)" command: | SO=$([ $(uname) = Darwin ] && echo dylib || echo so) - if [[ $PRELOAD_ASAN ]]; then export LD_PRELOAD=/usr/lib/clang/6.0/lib/linux/libclang_rt.asan-x86_64.so; fi + export DYLD_INSERT_LIBRARIES=/Applications/Xcode-10.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/10.0.0/lib/darwin/libclang_rt.asan_osx_dynamic.dylib testeth --version testeth -t GeneralStateTests/stEWASMTests -- --testpath tests --vm ~/build/src/libhera.$SO --singlenet Byzantium --evmc engine=binaryen $TESTETH_OPTIONS @@ -353,24 +353,7 @@ workflows: version: 2 hera: jobs: - - lint - - linux-clang-shared-asan - - linux-gcc-shared-coverage - - linux-gcc-static-debug - - linux-clang-shared-release: - filters: - tags: - only: /.*/ - macos: filters: tags: only: /.*/ - - deploy: - requires: - - linux-clang-shared-release - - macos - filters: - branches: - ignore: /.*/ - tags: - only: /^v[0-9].*/ diff --git a/cmake/ProjectBinaryen.cmake b/cmake/ProjectBinaryen.cmake index f659221f7..0603a0a68 100644 --- a/cmake/ProjectBinaryen.cmake +++ b/cmake/ProjectBinaryen.cmake @@ -52,7 +52,7 @@ ExternalProject_Add(binaryen CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= -DCMAKE_INSTALL_LIBDIR=lib - -DCMAKE_BUILD_TYPE=Release + -DCMAKE_BUILD_TYPE=Debug -DBUILD_STATIC_LIB=ON -DCMAKE_CXX_FLAGS=${binaryen_cxx_flags} -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} From 1f2e13f161c673df3a49948ca8808d5fbf8f9591 Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Mon, 25 Feb 2019 10:27:51 +0000 Subject: [PATCH 09/16] use binaryen 1.38.28 --- cmake/ProjectBinaryen.cmake | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cmake/ProjectBinaryen.cmake b/cmake/ProjectBinaryen.cmake index 0603a0a68..6f3ecc07e 100644 --- a/cmake/ProjectBinaryen.cmake +++ b/cmake/ProjectBinaryen.cmake @@ -43,12 +43,12 @@ endif() ExternalProject_Add(binaryen PREFIX ${prefix} - DOWNLOAD_NAME binaryen-1.38.24.tar.gz + DOWNLOAD_NAME binaryen-1.38.28.tar.gz DOWNLOAD_DIR ${prefix}/downloads SOURCE_DIR ${source_dir} BINARY_DIR ${binary_dir} - URL https://github.com/WebAssembly/binaryen/archive/1.38.24.tar.gz - URL_HASH SHA256=981874b17a4b2a14f7838da3aab4824bbe63e7e18dc439b5869b372bdce9fd66 + URL https://github.com/WebAssembly/binaryen/archive/1.38.28.tar.gz + URL_HASH SHA256=4cdf51ceaba2cbb98f3bf20022716f43911b4f437f89a4da479340a82a14f213 CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= -DCMAKE_INSTALL_LIBDIR=lib From f7d3253f6f589f41f7797d802bd2132e0a828024 Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Fri, 12 Apr 2019 20:41:08 +0100 Subject: [PATCH 10/16] use binaryen 1.38.30 --- cmake/ProjectBinaryen.cmake | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cmake/ProjectBinaryen.cmake b/cmake/ProjectBinaryen.cmake index 6f3ecc07e..a7b65ff17 100644 --- a/cmake/ProjectBinaryen.cmake +++ b/cmake/ProjectBinaryen.cmake @@ -43,12 +43,12 @@ endif() ExternalProject_Add(binaryen PREFIX ${prefix} - DOWNLOAD_NAME binaryen-1.38.28.tar.gz + DOWNLOAD_NAME binaryen-1.38.30.tar.gz DOWNLOAD_DIR ${prefix}/downloads SOURCE_DIR ${source_dir} BINARY_DIR ${binary_dir} - URL https://github.com/WebAssembly/binaryen/archive/1.38.28.tar.gz - URL_HASH SHA256=4cdf51ceaba2cbb98f3bf20022716f43911b4f437f89a4da479340a82a14f213 + URL https://github.com/WebAssembly/binaryen/archive/1.38.30.tar.gz + URL_HASH SHA256=bb55a9824d54c764d4352086959dfbcb70be31d697570364d8a4fb53601d432d CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= -DCMAKE_INSTALL_LIBDIR=lib From 45b3db0c0950d259043df56c3cf7023d88ddbedc Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Thu, 25 Apr 2019 12:27:21 +0100 Subject: [PATCH 11/16] use binaryen 1.38.31 --- cmake/ProjectBinaryen.cmake | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cmake/ProjectBinaryen.cmake b/cmake/ProjectBinaryen.cmake index a7b65ff17..53bc7fe97 100644 --- a/cmake/ProjectBinaryen.cmake +++ b/cmake/ProjectBinaryen.cmake @@ -43,12 +43,12 @@ endif() ExternalProject_Add(binaryen PREFIX ${prefix} - DOWNLOAD_NAME binaryen-1.38.30.tar.gz + DOWNLOAD_NAME binaryen-1.38.31.tar.gz DOWNLOAD_DIR ${prefix}/downloads SOURCE_DIR ${source_dir} BINARY_DIR ${binary_dir} - URL https://github.com/WebAssembly/binaryen/archive/1.38.30.tar.gz - URL_HASH SHA256=bb55a9824d54c764d4352086959dfbcb70be31d697570364d8a4fb53601d432d + URL https://github.com/WebAssembly/binaryen/archive/1.38.31.tar.gz + URL_HASH SHA256=5115c65d7ca4dcf688b91741c2767999cb8caebc82cd903a1f4078a7b2685de8 CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= -DCMAKE_INSTALL_LIBDIR=lib From e1f13293f78f9d1d025e950eb4fe37e3e6e35821 Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Thu, 23 May 2019 00:30:13 +0100 Subject: [PATCH 12/16] use binaryen 1.38.32 --- cmake/ProjectBinaryen.cmake | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cmake/ProjectBinaryen.cmake b/cmake/ProjectBinaryen.cmake index 53bc7fe97..afa74b1fa 100644 --- a/cmake/ProjectBinaryen.cmake +++ b/cmake/ProjectBinaryen.cmake @@ -43,12 +43,12 @@ endif() ExternalProject_Add(binaryen PREFIX ${prefix} - DOWNLOAD_NAME binaryen-1.38.31.tar.gz + DOWNLOAD_NAME binaryen-1.38.32.tar.gz DOWNLOAD_DIR ${prefix}/downloads SOURCE_DIR ${source_dir} BINARY_DIR ${binary_dir} - URL https://github.com/WebAssembly/binaryen/archive/1.38.31.tar.gz - URL_HASH SHA256=5115c65d7ca4dcf688b91741c2767999cb8caebc82cd903a1f4078a7b2685de8 + URL https://github.com/WebAssembly/binaryen/archive/1.38.32.tar.gz + URL_HASH SHA256=519b1dae68b110dd3c514edcdd2991d4c3693082bb06ac525724a5875bb7bdbf CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= -DCMAKE_INSTALL_LIBDIR=lib From f244fc260194395087c14b09780249a4319e49b3 Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Thu, 23 May 2019 00:39:55 +0100 Subject: [PATCH 13/16] Typo --- src/shell-interface.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/shell-interface.h b/src/shell-interface.h index 27cd3b886..b7ea0b9e3 100644 --- a/src/shell-interface.h +++ b/src/shell-interface.h @@ -51,7 +51,6 @@ struct ShellExternalInterface : ModuleInstance::ExternalInterface { Memory& operator=(const Memory&) = delete; public: - Memory() {} Memory() = default; // Gives no guarantee about the length of the memory. Caller needs to ensure that. char* rawpointer(size_t offset) { From c3e8e5da5918ac0777af5508f9b9bdddc5ed7391 Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Thu, 12 Sep 2019 19:48:04 +0100 Subject: [PATCH 14/16] user binaryen version89 --- cmake/ProjectBinaryen.cmake | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cmake/ProjectBinaryen.cmake b/cmake/ProjectBinaryen.cmake index afa74b1fa..056ae78bc 100644 --- a/cmake/ProjectBinaryen.cmake +++ b/cmake/ProjectBinaryen.cmake @@ -43,12 +43,12 @@ endif() ExternalProject_Add(binaryen PREFIX ${prefix} - DOWNLOAD_NAME binaryen-1.38.32.tar.gz + DOWNLOAD_NAME version_89.tar.gz DOWNLOAD_DIR ${prefix}/downloads SOURCE_DIR ${source_dir} BINARY_DIR ${binary_dir} - URL https://github.com/WebAssembly/binaryen/archive/1.38.32.tar.gz - URL_HASH SHA256=519b1dae68b110dd3c514edcdd2991d4c3693082bb06ac525724a5875bb7bdbf + URL https://github.com/WebAssembly/binaryen/archive/version_89.tar.gz + URL_HASH SHA256=e8b35e751cc9b90ce4c4a9d309595ee9c3afac2964fd0c4cc06c12ec43f6d55e CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= -DCMAKE_INSTALL_LIBDIR=lib From f59e2398338ffd61433cecd1fcd92fee895fa9f4 Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Thu, 12 Sep 2019 19:48:13 +0100 Subject: [PATCH 15/16] update shell-interface --- src/shell-interface.h | 23 +++-------------------- 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/src/shell-interface.h b/src/shell-interface.h index b7ea0b9e3..09f82126a 100644 --- a/src/shell-interface.h +++ b/src/shell-interface.h @@ -97,28 +97,9 @@ struct ShellExternalInterface : ModuleInstance::ExternalInterface { virtual ~ShellExternalInterface() = default; void init(Module& wasm, ModuleInstance& instance) override { + (void)instance; memory.resize(wasm.memory.initial * wasm::Memory::kPageSize); - // apply memory segments - for (auto& segment : wasm.memory.segments) { - Address offset = static_cast(ConstantExpressionRunner(instance.globals).visit(segment.offset).value.geti32()); - if (offset + segment.data.size() > wasm.memory.initial * wasm::Memory::kPageSize) { - trap("invalid offset when initializing memory"); - } - for (size_t i = 0; i != segment.data.size(); ++i) { - memory.set(offset + i, segment.data[i]); - } - } - table.resize(wasm.table.initial); - for (auto& segment : wasm.table.segments) { - Address offset = static_cast(ConstantExpressionRunner(instance.globals).visit(segment.offset).value.geti32()); - if (offset + segment.data.size() > wasm.table.initial) { - trap("invalid offset when initializing table"); - } - for (size_t i = 0; i != segment.data.size(); ++i) { - table[offset + i] = segment.data[i]; - } - } } void importGlobals(std::map& globals, Module& wasm) override { @@ -174,6 +155,8 @@ struct ShellExternalInterface : ModuleInstance::ExternalInterface { memory.set>(addr, value); } + void tableStore(Address addr, Name entry) override { table[addr] = entry; } + void growMemory(Address /*oldSize*/, Address newSize) override { memory.resize(newSize); } From ef243b00ac93db84491ae89044bbbfd4ee5a0822 Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Wed, 6 Nov 2019 15:00:02 +0000 Subject: [PATCH 16/16] use binaryen 1.39.1 --- cmake/ProjectBinaryen.cmake | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cmake/ProjectBinaryen.cmake b/cmake/ProjectBinaryen.cmake index 056ae78bc..caba17849 100644 --- a/cmake/ProjectBinaryen.cmake +++ b/cmake/ProjectBinaryen.cmake @@ -43,12 +43,12 @@ endif() ExternalProject_Add(binaryen PREFIX ${prefix} - DOWNLOAD_NAME version_89.tar.gz + DOWNLOAD_NAME binaryen-1.39.1.tar.gz DOWNLOAD_DIR ${prefix}/downloads SOURCE_DIR ${source_dir} BINARY_DIR ${binary_dir} - URL https://github.com/WebAssembly/binaryen/archive/version_89.tar.gz - URL_HASH SHA256=e8b35e751cc9b90ce4c4a9d309595ee9c3afac2964fd0c4cc06c12ec43f6d55e + URL https://github.com/WebAssembly/binaryen/archive/1.39.1.tar.gz + URL_HASH SHA256=4852a676c383efffa368e58f2abf3108fcf02f0e8b6cd3923b0cdc35bc0ee8c9 CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= -DCMAKE_INSTALL_LIBDIR=lib