From 2cd1c693c9231f6954d86d309e3421ac7d217acd Mon Sep 17 00:00:00 2001 From: Hiroshi Hatake Date: Mon, 25 Nov 2024 16:48:27 +0900 Subject: [PATCH] lib: wasm-micro-runtime: Bump up wasm-micro-runtime to v1.3.3 Signed-off-by: Hiroshi Hatake --- cmake/libraries.cmake | 2 +- .../build-scripts/esp-idf/wamr/CMakeLists.txt | 57 - .../core/iwasm/common/wasm_native.c | 697 -------- .../shared/platform/esp-idf/espidf_socket.c | 231 --- .../wamr-ide/Media/Config_building_target.png | Bin 12887 -> 0 bytes .../wamr-ide/Media/compilation_config.png | Bin 36218 -> 0 bytes .../wamr-ide/Media/compilation_config_2.png | Bin 22681 -> 0 bytes .../VSCode-Extension/src/test/runTest.ts | 33 - .../src/test/suite/extension.test.ts | 183 -- .../VSCode-Extension/src/test/suite/index.ts | 42 - .../.clang-tidy | 0 .../.devcontainer/Dockerfile | 0 .../.devcontainer/devcontainer.json | 0 .../scripts/extract_from_release_notes.py | 0 .../scripts/fetch_and_compare_version.py | 9 +- .../scripts/reuse_latest_release_binaries.py | 0 .../.github/workflows/build_docker_images.yml | 2 +- .../.github/workflows/build_iwasm_release.yml | 4 +- .../workflows/build_llvm_libraries.yml | 28 +- .../.github/workflows/build_wamr_lldb.yml | 8 +- .../.github/workflows/build_wamr_sdk.yml | 2 +- .../workflows/build_wamr_vscode_ext.yml | 2 +- .../.github/workflows/build_wamrc.yml | 4 +- .../.github/workflows/coding_guidelines.yml | 2 +- .../compilation_on_android_ubuntu.yml | 51 +- .../workflows/compilation_on_macos.yml | 44 +- .../workflows/compilation_on_nuttx.yml | 50 +- .../.github/workflows/compilation_on_sgx.yml | 12 +- .../workflows/compilation_on_windows.yml | 4 +- .../.github/workflows/create_tag.yml | 20 +- .../workflows/hadolint_dockerfiles.yml | 2 +- .../.github/workflows/nightly_run.yml | 36 +- .../.github/workflows/release_process.yml | 12 +- .../reuse_latest_release_binaries.yml | 2 +- .../.github/workflows/spec_test_on_nuttx.yml | 64 +- .../.gitignore | 0 .../ATTRIBUTIONS.md | 0 .../CMakeLists.txt | 7 +- .../CODE_OF_CONDUCT.md | 0 .../CONTRIBUTING.md | 2 +- .../LICENSE | 0 .../ORG_CODE_OF_CONDUCT.md | 0 .../README.md | 4 +- .../RELEASE_NOTES.md | 215 +++ .../SConscript | 0 .../SECURITY.md | 0 .../TSC_Charter.md | 0 .../assembly-script/.gitignore | 0 .../assembly-script/README.md | 0 .../assembly-script/package-lock.json | 0 .../assembly-script/package.json | 0 .../samples/event_publisher.ts | 0 .../samples/event_subscriber.ts | 0 .../samples/request_handler.ts | 0 .../assembly-script/samples/request_sender.ts | 0 .../assembly-script/samples/timer.ts | 0 .../assembly-script/samples/tsconfig.json | 0 .../assembly-script/wamr_app_lib/console.ts | 0 .../assembly-script/wamr_app_lib/request.ts | 0 .../assembly-script/wamr_app_lib/timer.ts | 0 .../wamr_app_lib/tsconfig.json | 0 .../build-scripts/SConscript | 0 .../build-scripts/SConscript_config | 0 .../build-scripts/build_llvm.py | 0 .../build-scripts/config_common.cmake | 108 +- .../build-scripts/esp-idf/README.md | 0 .../build-scripts/esp-idf/wamr/CMakeLists.txt | 117 ++ .../build-scripts/esp-idf/wamr/Kconfig | 88 + .../build-scripts/involve_boringssl.cmake | 0 .../build-scripts/lldb_wasm.patch | 0 .../build-scripts/requirements.txt | 0 .../build-scripts/runtime_lib.cmake | 0 .../ci/build_wamr.sh | 0 .../ci/coding_guidelines_check.py | 0 .../ci/pre_commit_hook_sample | 0 .../ci/setup.sh | 0 .../ci/validate_lldb.py | 0 .../core/app-framework/README.md | 0 .../app-framework/app-native-shared/README.md | 0 .../app-native-shared/attr_container.c | 0 .../app-native-shared/bi-inc/attr_container.h | 0 .../app-native-shared/bi-inc/shared_utils.h | 0 .../bi-inc/wgl_shared_utils.h | 0 .../app-native-shared/native_interface.cmake | 0 .../app-native-shared/native_interface.h | 0 .../app-native-shared/restful_utils.c | 0 .../core/app-framework/app_ext_lib_export.c | 0 .../core/app-framework/app_framework.cmake | 0 .../core/app-framework/base/app/bh_platform.c | 0 .../core/app-framework/base/app/bh_platform.h | 0 .../app-framework/base/app/req_resp_api.h | 0 .../core/app-framework/base/app/request.c | 0 .../core/app-framework/base/app/timer.c | 0 .../core/app-framework/base/app/timer_api.h | 0 .../app-framework/base/app/wa-inc/request.h | 0 .../base/app/wa-inc/timer_wasm_app.h | 0 .../app-framework/base/app/wasm_app.cmake | 0 .../core/app-framework/base/app/wasm_app.h | 0 .../app-framework/base/native/base_lib.inl | 0 .../base/native/base_lib_export.c | 0 .../base/native/req_resp_native_api.h | 0 .../base/native/request_response.c | 0 .../app-framework/base/native/runtime_lib.h | 0 .../base/native/timer_native_api.h | 0 .../app-framework/base/native/timer_wrapper.c | 0 .../app-framework/base/native/wasm_lib.cmake | 0 .../app-framework/connection/app/connection.c | 0 .../connection/app/connection_api.h | 0 .../connection/app/wa-inc/connection.h | 0 .../connection/app/wasm_app.cmake | 0 .../connection/native/connection.inl | 0 .../connection/native/connection_lib.h | 0 .../connection/native/connection_native_api.h | 0 .../connection/native/connection_wrapper.c | 0 .../connection/native/linux/conn_tcp.c | 0 .../connection/native/linux/conn_tcp.h | 0 .../connection/native/linux/conn_uart.c | 0 .../connection/native/linux/conn_uart.h | 0 .../connection/native/linux/conn_udp.c | 0 .../connection/native/linux/conn_udp.h | 0 .../connection/native/linux/connection_mgr.c | 0 .../native/linux/connection_mgr.cmake | 0 .../connection/native/wasm_lib.cmake | 0 .../native/zephyr/connection_lib_impl.c | 0 .../native/zephyr/connection_mgr.cmake | 0 .../core/app-framework/sensor/app/sensor.c | 0 .../app-framework/sensor/app/sensor_api.h | 0 .../app-framework/sensor/app/wa-inc/sensor.h | 0 .../app-framework/sensor/app/wasm_app.cmake | 0 .../sensor/native/runtime_sensor.c | 0 .../sensor/native/runtime_sensor.h | 0 .../sensor/native/runtime_sensor.inl | 0 .../sensor/native/sensor_mgr_ref.c | 0 .../sensor/native/sensor_native_api.h | 0 .../sensor/native/wasm_lib.cmake | 0 .../template/app/wa-inc/app_xxx.h | 0 .../app-framework/template/app/wasm_app.cmake | 0 .../app-framework/template/native/app_xxx.inl | 0 .../template/native/wasm_lib.cmake | 0 .../core/app-mgr/README.md | 0 .../core/app-mgr/app-manager/app_manager.c | 0 .../core/app-mgr/app-manager/app_manager.h | 0 .../app-mgr/app-manager/app_manager_host.c | 0 .../app-mgr/app-manager/app_manager_host.h | 0 .../core/app-mgr/app-manager/app_mgr.cmake | 0 .../core/app-mgr/app-manager/ble_msg.c | 0 .../core/app-mgr/app-manager/coding_rule.txt | 0 .../core/app-mgr/app-manager/event.c | 0 .../core/app-mgr/app-manager/event.h | 0 .../core/app-mgr/app-manager/message.c | 0 .../core/app-mgr/app-manager/module_config.h | 0 .../core/app-mgr/app-manager/module_jeff.c | 0 .../core/app-mgr/app-manager/module_jeff.h | 0 .../core/app-mgr/app-manager/module_utils.c | 0 .../app-mgr/app-manager/module_wasm_app.c | 0 .../app-mgr/app-manager/module_wasm_app.h | 0 .../app-mgr/app-manager/module_wasm_lib.c | 0 .../app-mgr/app-manager/module_wasm_lib.h | 0 .../platform/darwin/app_mgr_darwin.c | 0 .../platform/linux/app_mgr_linux.c | 0 .../platform/zephyr/app_mgr_zephyr.c | 6 + .../core/app-mgr/app-manager/resource_reg.c | 0 .../core/app-mgr/app-manager/watchdog.c | 0 .../core/app-mgr/app-manager/watchdog.h | 0 .../app-mgr-shared/app_manager_export.h | 0 .../app-mgr-shared/app_mgr_shared.cmake | 0 .../core/app-mgr/app-mgr-shared/host_link.h | 0 .../core/app-mgr/module.json | 0 .../core/config.h | 40 +- .../core/iwasm/README.md | 0 .../core/iwasm/aot/SConscript | 0 .../core/iwasm/aot/aot_intrinsic.c | 0 .../core/iwasm/aot/aot_intrinsic.h | 0 .../core/iwasm/aot/aot_loader.c | 157 +- .../core/iwasm/aot/aot_reloc.h | 1 + .../core/iwasm/aot/aot_runtime.c | 287 ++-- .../core/iwasm/aot/aot_runtime.h | 9 + .../core/iwasm/aot/arch/aot_reloc_aarch64.c | 0 .../core/iwasm/aot/arch/aot_reloc_arc.c | 0 .../core/iwasm/aot/arch/aot_reloc_arm.c | 0 .../core/iwasm/aot/arch/aot_reloc_mips.c | 0 .../core/iwasm/aot/arch/aot_reloc_riscv.c | 120 +- .../core/iwasm/aot/arch/aot_reloc_thumb.c | 0 .../core/iwasm/aot/arch/aot_reloc_x86_32.c | 0 .../core/iwasm/aot/arch/aot_reloc_x86_64.c | 17 +- .../core/iwasm/aot/arch/aot_reloc_xtensa.c | 0 .../core/iwasm/aot/debug/LICENSE_NUTTX | 0 .../core/iwasm/aot/debug/NOTICE_NUTTX | 0 .../core/iwasm/aot/debug/elf.h | 0 .../core/iwasm/aot/debug/elf32.h | 0 .../core/iwasm/aot/debug/elf64.h | 0 .../core/iwasm/aot/debug/elf_parser.c | 19 +- .../core/iwasm/aot/debug/elf_parser.h | 0 .../core/iwasm/aot/debug/jit_debug.c | 1 - .../core/iwasm/aot/debug/jit_debug.h | 0 .../core/iwasm/aot/iwasm_aot.cmake | 0 .../core/iwasm/common/SConscript | 0 .../iwasm/common/arch/invokeNative_aarch64.s | 0 .../common/arch/invokeNative_aarch64_simd.s | 0 .../core/iwasm/common/arch/invokeNative_arc.s | 0 .../core/iwasm/common/arch/invokeNative_arm.s | 0 .../iwasm/common/arch/invokeNative_arm_vfp.s | 0 .../iwasm/common/arch/invokeNative_em64.asm | 0 .../iwasm/common/arch/invokeNative_em64.s | 0 .../common/arch/invokeNative_em64_simd.asm | 0 .../common/arch/invokeNative_em64_simd.s | 0 .../iwasm/common/arch/invokeNative_general.c | 0 .../iwasm/common/arch/invokeNative_ia32.asm | 0 .../iwasm/common/arch/invokeNative_ia32.s | 0 .../common/arch/invokeNative_mingw_x64.s | 0 .../common/arch/invokeNative_mingw_x64_simd.s | 0 .../iwasm/common/arch/invokeNative_mips.s | 0 .../common/arch/invokeNative_osx_universal.s | 0 .../iwasm/common/arch/invokeNative_riscv.S | 0 .../iwasm/common/arch/invokeNative_thumb.s | 0 .../common/arch/invokeNative_thumb_vfp.s | 0 .../iwasm/common/arch/invokeNative_xtensa.s | 0 .../core/iwasm/common/iwasm_common.cmake | 0 .../core/iwasm/common/wasm_application.c | 2 +- .../core/iwasm/common/wasm_blocking_op.c | 0 .../core/iwasm/common/wasm_c_api.c | 204 +-- .../core/iwasm/common/wasm_c_api_internal.h | 5 + .../core/iwasm/common/wasm_exec_env.c | 0 .../core/iwasm/common/wasm_exec_env.h | 3 + .../core/iwasm/common/wasm_memory.c | 36 +- .../core/iwasm/common/wasm_memory.h | 0 .../core/iwasm/common/wasm_native.c | 1491 +++++++++++++++++ .../core/iwasm/common/wasm_native.h | 5 + .../core/iwasm/common/wasm_runtime_common.c | 238 ++- .../core/iwasm/common/wasm_runtime_common.h | 54 +- .../core/iwasm/common/wasm_shared_memory.c | 9 +- .../core/iwasm/common/wasm_shared_memory.h | 0 .../core/iwasm/common/wasm_suspend_flags.h | 2 + .../core/iwasm/compilation/aot.c | 0 .../core/iwasm/compilation/aot.h | 0 .../core/iwasm/compilation/aot_compiler.c | 76 +- .../core/iwasm/compilation/aot_compiler.h | 7 +- .../iwasm/compilation/aot_emit_aot_file.c | 155 +- .../core/iwasm/compilation/aot_emit_compare.c | 0 .../core/iwasm/compilation/aot_emit_compare.h | 0 .../core/iwasm/compilation/aot_emit_const.c | 0 .../core/iwasm/compilation/aot_emit_const.h | 0 .../core/iwasm/compilation/aot_emit_control.c | 10 +- .../core/iwasm/compilation/aot_emit_control.h | 0 .../iwasm/compilation/aot_emit_conversion.c | 0 .../iwasm/compilation/aot_emit_conversion.h | 0 .../iwasm/compilation/aot_emit_exception.c | 0 .../iwasm/compilation/aot_emit_exception.h | 0 .../iwasm/compilation/aot_emit_function.c | 262 ++- .../iwasm/compilation/aot_emit_function.h | 0 .../core/iwasm/compilation/aot_emit_memory.c | 0 .../core/iwasm/compilation/aot_emit_memory.h | 0 .../iwasm/compilation/aot_emit_numberic.c | 0 .../iwasm/compilation/aot_emit_numberic.h | 0 .../iwasm/compilation/aot_emit_parametric.c | 0 .../iwasm/compilation/aot_emit_parametric.h | 0 .../core/iwasm/compilation/aot_emit_table.c | 12 + .../core/iwasm/compilation/aot_emit_table.h | 5 +- .../iwasm/compilation/aot_emit_variable.c | 0 .../iwasm/compilation/aot_emit_variable.h | 0 .../core/iwasm/compilation/aot_llvm.c | 55 +- .../core/iwasm/compilation/aot_llvm.h | 10 +- .../core/iwasm/compilation/aot_llvm_extra.cpp | 10 +- .../iwasm/compilation/aot_llvm_extra2.cpp | 21 +- .../core/iwasm/compilation/aot_llvm_extra2.h | 2 +- .../core/iwasm/compilation/aot_orc_extra.cpp | 27 + .../core/iwasm/compilation/aot_orc_extra.h | 0 .../core/iwasm/compilation/aot_orc_extra2.cpp | 0 .../compilation/debug/dwarf_extractor.cpp | 72 +- .../iwasm/compilation/debug/dwarf_extractor.h | 0 .../core/iwasm/compilation/iwasm_compl.cmake | 0 .../compilation/simd/simd_access_lanes.c | 0 .../compilation/simd/simd_access_lanes.h | 0 .../iwasm/compilation/simd/simd_bit_shifts.c | 0 .../iwasm/compilation/simd/simd_bit_shifts.h | 0 .../compilation/simd/simd_bitmask_extracts.c | 0 .../compilation/simd/simd_bitmask_extracts.h | 0 .../iwasm/compilation/simd/simd_bitwise_ops.c | 0 .../iwasm/compilation/simd/simd_bitwise_ops.h | 0 .../compilation/simd/simd_bool_reductions.c | 0 .../compilation/simd/simd_bool_reductions.h | 0 .../core/iwasm/compilation/simd/simd_common.c | 0 .../core/iwasm/compilation/simd/simd_common.h | 0 .../iwasm/compilation/simd/simd_comparisons.c | 0 .../iwasm/compilation/simd/simd_comparisons.h | 0 .../compilation/simd/simd_construct_values.c | 0 .../compilation/simd/simd_construct_values.h | 0 .../iwasm/compilation/simd/simd_conversions.c | 21 +- .../iwasm/compilation/simd/simd_conversions.h | 4 - .../compilation/simd/simd_floating_point.c | 14 - .../compilation/simd/simd_floating_point.h | 8 - .../iwasm/compilation/simd/simd_int_arith.c | 11 +- .../iwasm/compilation/simd/simd_int_arith.h | 4 - .../iwasm/compilation/simd/simd_load_store.c | 0 .../iwasm/compilation/simd/simd_load_store.h | 0 .../compilation/simd/simd_sat_int_arith.c | 15 - .../compilation/simd/simd_sat_int_arith.h | 4 - .../core/iwasm/doc/classic_interpreter.MD | 0 .../doc/images/export_function.excalidraw | 0 .../doc/images/stack_format_ci.excalidraw | 0 .../core/iwasm/doc/images/stack_format_ci.svg | 0 .../core/iwasm/doc/images/wasm_exports.svg | 0 .../iwasm/doc/images/wasm_function.excalidraw | 0 .../core/iwasm/doc/images/wasm_function.svg | 0 .../iwasm/doc/images/wasm_globals.excalidraw | 0 .../core/iwasm/doc/images/wasm_globals.svg | 0 .../core/iwasm/doc/wasm_exports.MD | 0 .../core/iwasm/doc/wasm_function.MD | 0 .../core/iwasm/doc/wasm_globals.MD | 0 .../core/iwasm/fast-jit/asmjit_sgx_patch.diff | 0 .../core/iwasm/fast-jit/cg/LICENSE_ASMJIT | 0 .../core/iwasm/fast-jit/cg/LICENSE_ZYDIS | 0 .../fast-jit/cg/x86-64/jit_codegen_x86_64.cpp | 29 +- .../core/iwasm/fast-jit/fe/jit_emit_compare.c | 0 .../core/iwasm/fast-jit/fe/jit_emit_compare.h | 0 .../core/iwasm/fast-jit/fe/jit_emit_const.c | 0 .../core/iwasm/fast-jit/fe/jit_emit_const.h | 0 .../core/iwasm/fast-jit/fe/jit_emit_control.c | 7 +- .../core/iwasm/fast-jit/fe/jit_emit_control.h | 0 .../iwasm/fast-jit/fe/jit_emit_conversion.c | 0 .../iwasm/fast-jit/fe/jit_emit_conversion.h | 0 .../iwasm/fast-jit/fe/jit_emit_exception.c | 0 .../iwasm/fast-jit/fe/jit_emit_exception.h | 0 .../iwasm/fast-jit/fe/jit_emit_function.c | 0 .../iwasm/fast-jit/fe/jit_emit_function.h | 0 .../core/iwasm/fast-jit/fe/jit_emit_memory.c | 0 .../core/iwasm/fast-jit/fe/jit_emit_memory.h | 0 .../iwasm/fast-jit/fe/jit_emit_numberic.c | 6 +- .../iwasm/fast-jit/fe/jit_emit_numberic.h | 0 .../iwasm/fast-jit/fe/jit_emit_parametric.c | 0 .../iwasm/fast-jit/fe/jit_emit_parametric.h | 0 .../core/iwasm/fast-jit/fe/jit_emit_table.c | 22 +- .../core/iwasm/fast-jit/fe/jit_emit_table.h | 0 .../iwasm/fast-jit/fe/jit_emit_variable.c | 0 .../iwasm/fast-jit/fe/jit_emit_variable.h | 0 .../core/iwasm/fast-jit/iwasm_fast_jit.cmake | 0 .../core/iwasm/fast-jit/jit_codecache.c | 0 .../core/iwasm/fast-jit/jit_codecache.h | 0 .../core/iwasm/fast-jit/jit_codegen.c | 0 .../core/iwasm/fast-jit/jit_codegen.h | 0 .../core/iwasm/fast-jit/jit_compiler.c | 0 .../core/iwasm/fast-jit/jit_compiler.h | 1 - .../core/iwasm/fast-jit/jit_dump.c | 0 .../core/iwasm/fast-jit/jit_dump.h | 0 .../core/iwasm/fast-jit/jit_frontend.c | 18 +- .../core/iwasm/fast-jit/jit_frontend.h | 0 .../core/iwasm/fast-jit/jit_ir.c | 0 .../core/iwasm/fast-jit/jit_ir.def | 0 .../core/iwasm/fast-jit/jit_ir.h | 0 .../core/iwasm/fast-jit/jit_regalloc.c | 0 .../core/iwasm/fast-jit/jit_utils.h | 0 .../core/iwasm/include/aot_export.h | 2 +- .../core/iwasm/include/lib_export.h | 0 .../core/iwasm/include/wasm_c_api.h | 37 +- .../core/iwasm/include/wasm_export.h | 47 +- .../core/iwasm/interpreter/SConscript | 0 .../core/iwasm/interpreter/iwasm_interp.cmake | 0 .../core/iwasm/interpreter/wasm.h | 71 + .../core/iwasm/interpreter/wasm_interp.h | 8 + .../iwasm/interpreter/wasm_interp_classic.c | 816 +++++++-- .../core/iwasm/interpreter/wasm_interp_fast.c | 181 +- .../core/iwasm/interpreter/wasm_loader.c | 1178 +++++++++++-- .../core/iwasm/interpreter/wasm_loader.h | 0 .../core/iwasm/interpreter/wasm_mini_loader.c | 450 ++++- .../core/iwasm/interpreter/wasm_opcode.h | 59 +- .../core/iwasm/interpreter/wasm_runtime.c | 486 ++++-- .../core/iwasm/interpreter/wasm_runtime.h | 60 +- .../libraries/debug-engine/debug_engine.c | 0 .../libraries/debug-engine/debug_engine.cmake | 0 .../libraries/debug-engine/debug_engine.h | 0 .../iwasm/libraries/debug-engine/gdbserver.c | 0 .../iwasm/libraries/debug-engine/gdbserver.h | 0 .../iwasm/libraries/debug-engine/handler.c | 4 +- .../iwasm/libraries/debug-engine/handler.h | 0 .../iwasm/libraries/debug-engine/packets.c | 0 .../iwasm/libraries/debug-engine/packets.h | 0 .../core/iwasm/libraries/debug-engine/utils.c | 0 .../core/iwasm/libraries/debug-engine/utils.h | 0 .../iwasm/libraries/lib-pthread/SConscript | 0 .../libraries/lib-pthread/lib_pthread.cmake | 0 .../lib-pthread/lib_pthread_wrapper.c | 35 +- .../iwasm/libraries/lib-rats/lib_rats.cmake | 0 .../libraries/lib-rats/lib_rats_common.h | 0 .../libraries/lib-rats/lib_rats_wrapper.c | 0 .../libraries/lib-rats/lib_rats_wrapper.h | 0 .../lib-socket/inc/wasi_socket_ext.h | 0 .../lib-socket/lib_socket_wasi.cmake | 2 +- .../lib-socket/src/wasi/wasi_socket_ext.c | 0 .../iwasm/libraries/lib-socket/test/build.sh | 0 .../libraries/lib-socket/test/manifest.json | 0 .../libraries/lib-socket/test/nslookup.c | 0 .../iwasm/libraries/lib-socket/test/tcp_udp.c | 0 .../lib-wasi-threads/lib_wasi_threads.cmake | 0 .../lib_wasi_threads_wrapper.c | 2 +- .../lib-wasi-threads/stress-test/build.sh | 0 .../errorcheck_mutex_stress_test.c | 0 .../stress-test/manifest.json | 0 .../stress-test/mutex_common.h | 0 .../stress-test/normal_mutex_stress_test.c | 0 .../stress-test/recursive_mutex_stress_test.c | 0 .../stress-test/spawn_stress_test.c | 0 .../stress_test_threads_creation.c | 0 .../libraries/lib-wasi-threads/test/build.sh | 0 .../libraries/lib-wasi-threads/test/common.h | 0 .../test/create_threads_until_limit.c | 0 .../lib-wasi-threads/test/global_atomic.c | 0 .../lib-wasi-threads/test/global_lock.c | 0 .../test/linear_memory_size_update.c | 0 .../test/main_proc_exit_busy.c | 0 .../test/main_proc_exit_busy.json | 0 .../test/main_proc_exit_sleep.c | 0 .../test/main_proc_exit_sleep.json | 0 .../test/main_proc_exit_wait.c | 0 .../test/main_proc_exit_wait.json | 0 .../lib-wasi-threads/test/main_trap_busy.c | 0 .../lib-wasi-threads/test/main_trap_busy.json | 0 .../lib-wasi-threads/test/main_trap_sleep.c | 0 .../test/main_trap_sleep.json | 0 .../lib-wasi-threads/test/main_trap_wait.c | 0 .../lib-wasi-threads/test/main_trap_wait.json | 0 .../lib-wasi-threads/test/manifest.json | 0 .../test/nonmain_proc_exit_busy.c | 0 .../test/nonmain_proc_exit_busy.json | 0 .../test/nonmain_proc_exit_sleep.c | 0 .../test/nonmain_proc_exit_sleep.json | 0 .../test/nonmain_proc_exit_wait.c | 0 .../test/nonmain_proc_exit_wait.json | 0 .../lib-wasi-threads/test/nonmain_trap_busy.c | 0 .../test/nonmain_trap_busy.json | 0 .../test/nonmain_trap_sleep.c | 0 .../test/nonmain_trap_sleep.json | 0 .../lib-wasi-threads/test/nonmain_trap_wait.c | 0 .../test/nonmain_trap_wait.json | 0 .../test/spawn_multiple_times.c | 0 .../lib-wasi-threads/test/sync_primitives.h | 0 .../test/trap_after_main_thread_finishes.c | 0 .../test/update_shared_data_and_alloc_heap.c | 0 .../lib-wasi-threads/tid_allocator.c | 0 .../lib-wasi-threads/tid_allocator.h | 0 .../lib_wasi_threads_unit_tests.cmake | 0 .../unit-test/test_tid_allocator.cpp | 0 .../iwasm/libraries/libc-builtin/SConscript | 0 .../libraries/libc-builtin/libc_builtin.cmake | 0 .../libc-builtin/libc_builtin_wrapper.c | 54 +- .../core/iwasm/libraries/libc-emcc/SConscript | 0 .../iwasm/libraries/libc-emcc/libc_emcc.cmake | 0 .../libraries/libc-emcc/libc_emcc_wrapper.c | 0 .../libraries/libc-uvwasi/FindLIBUV.cmake | 0 .../libraries/libc-uvwasi/FindUVWASI.cmake | 0 .../iwasm/libraries/libc-uvwasi/LICENSE_LIBUV | 0 .../libraries/libc-uvwasi/LICENSE_UVWASI | 0 .../libraries/libc-uvwasi/libc_uvwasi.cmake | 0 .../libc-uvwasi/libc_uvwasi_wrapper.c | 0 .../core/iwasm/libraries/libc-wasi/SConscript | 0 .../iwasm/libraries/libc-wasi/libc_wasi.cmake | 0 .../libraries/libc-wasi/libc_wasi_wrapper.c | 196 +-- .../libraries/libc-wasi/libc_wasi_wrapper.h | 0 .../sandboxed-system-primitives/LICENSE | 0 .../include/LICENSE | 0 .../include/wasmtime_ssp.h | 0 .../sandboxed-system-primitives/src/LICENSE | 0 .../sandboxed-system-primitives/src/README.md | 0 .../src/blocking_op.c | 21 + .../src/blocking_op.h | 13 +- .../sandboxed-system-primitives/src/locking.h | 2 +- .../sandboxed-system-primitives/src/posix.c | 41 +- .../sandboxed-system-primitives/src/posix.h | 0 .../sandboxed-system-primitives/src/queue.h | 0 .../sandboxed-system-primitives/src/random.c | 0 .../sandboxed-system-primitives/src/random.h | 0 .../src/refcount.h | 0 .../sandboxed-system-primitives/src/rights.h | 0 .../src/ssp_config.h | 7 +- .../sandboxed-system-primitives/src/str.c | 0 .../sandboxed-system-primitives/src/str.h | 0 .../iwasm/libraries/thread-mgr/SConscript | 0 .../libraries/thread-mgr/thread_manager.c | 197 ++- .../libraries/thread-mgr/thread_manager.h | 18 +- .../libraries/thread-mgr/thread_mgr.cmake | 0 .../core/iwasm/libraries/wasi-nn/.gitignore | 0 .../core/iwasm/libraries/wasi-nn/README.md | 0 .../wasi-nn/cmake/Findtensorflow_lite.cmake | 0 .../wasi-nn/cmake/iwasm_helper.cmake | 0 .../libraries/wasi-nn/cmake/wasi_nn.cmake | 0 .../libraries/wasi-nn/external/CMakeLists.txt | 0 .../libraries/wasi-nn/external/README.md | 0 .../iwasm/libraries/wasi-nn/include/wasi_nn.h | 0 .../libraries/wasi-nn/include/wasi_nn_types.h | 0 .../libraries/wasi-nn/src/utils/logger.h | 0 .../wasi-nn/src/utils/wasi_nn_app_native.c | 0 .../wasi-nn/src/utils/wasi_nn_app_native.h | 0 .../iwasm/libraries/wasi-nn/src/wasi_nn.c | 0 .../libraries/wasi-nn/src/wasi_nn_private.h | 0 .../wasi-nn/src/wasi_nn_tensorflowlite.cpp | 0 .../wasi-nn/src/wasi_nn_tensorflowlite.hpp | 0 .../libraries/wasi-nn/test/Dockerfile.compile | 0 .../libraries/wasi-nn/test/Dockerfile.cpu | 0 .../wasi-nn/test/Dockerfile.nvidia-gpu | 0 .../libraries/wasi-nn/test/Dockerfile.tpu | 0 .../wasi-nn/test/Dockerfile.vx-delegate | 0 .../iwasm/libraries/wasi-nn/test/build.sh | 0 .../libraries/wasi-nn/test/models/average.py | 0 .../libraries/wasi-nn/test/models/max.py | 0 .../wasi-nn/test/models/mult_dimension.py | 0 .../wasi-nn/test/models/mult_outputs.py | 0 .../wasi-nn/test/models/quantized.py | 0 .../libraries/wasi-nn/test/models/sum.py | 0 .../libraries/wasi-nn/test/models/utils.py | 0 .../libraries/wasi-nn/test/requirements.txt | 0 .../libraries/wasi-nn/test/test_tensorflow.c | 0 .../wasi-nn/test/test_tensorflow_quantized.c | 0 .../core/iwasm/libraries/wasi-nn/test/utils.c | 0 .../core/iwasm/libraries/wasi-nn/test/utils.h | 0 .../core/shared/coap/er-coap/LICENSE.md | 0 .../core/shared/coap/er-coap/coap-constants.h | 0 .../core/shared/coap/extension/coap_ext.h | 0 .../core/shared/coap/lib_coap.cmake | 0 .../core/shared/mem-alloc/SConscript | 0 .../core/shared/mem-alloc/ems/ems_alloc.c | 0 .../core/shared/mem-alloc/ems/ems_gc.h | 0 .../shared/mem-alloc/ems/ems_gc_internal.h | 0 .../core/shared/mem-alloc/ems/ems_hmu.c | 0 .../core/shared/mem-alloc/ems/ems_kfc.c | 0 .../core/shared/mem-alloc/mem_alloc.c | 0 .../core/shared/mem-alloc/mem_alloc.cmake | 0 .../core/shared/mem-alloc/mem_alloc.h | 0 .../core/shared/platform/README.md | 0 .../shared/platform/alios/alios_platform.c | 0 .../core/shared/platform/alios/alios_thread.c | 0 .../core/shared/platform/alios/alios_time.c | 9 +- .../shared/platform/alios/platform_internal.h | 0 .../platform/alios/shared_platform.cmake | 0 .../shared/platform/android/platform_init.c | 0 .../platform/android/platform_internal.h | 4 +- .../platform/android/shared_platform.cmake | 0 .../common/freertos/freertos_malloc.c | 0 .../common/freertos/freertos_thread.c | 49 +- .../platform/common/freertos/freertos_time.c | 9 +- .../freertos/platform_api_freertos.cmake | 0 .../platform/common/libc-util/libc_errno.c | 0 .../platform/common/libc-util/libc_errno.h | 0 .../libc-util/platform_common_libc_util.cmake | 0 .../shared/platform/common/math/COPYRIGHT | 0 .../core/shared/platform/common/math/math.c | 0 .../common/math/platform_api_math.cmake | 0 .../common/posix/platform_api_posix.cmake | 0 .../platform/common/posix/posix_blocking_op.c | 1 + .../platform/common/posix/posix_clock.c | 2 + .../shared/platform/common/posix/posix_file.c | 15 +- .../platform/common/posix/posix_malloc.c | 0 .../platform/common/posix/posix_memmap.c | 11 +- .../platform/common/posix/posix_sleep.c | 0 .../platform/common/posix/posix_socket.c | 4 +- .../platform/common/posix/posix_thread.c | 7 +- .../shared/platform/common/posix/posix_time.c | 13 +- .../platform/cosmopolitan/platform_init.c | 0 .../platform/cosmopolitan/platform_internal.h | 11 +- .../cosmopolitan/shared_platform.cmake | 0 .../shared/platform/darwin/platform_init.c | 0 .../platform/darwin/platform_internal.h | 4 +- .../platform/darwin/shared_platform.cmake | 0 .../core/shared/platform/ego/platform_init.c | 0 .../shared/platform/ego/platform_internal.h | 0 .../shared/platform/ego/shared_platform.cmake | 0 .../shared/platform/esp-idf/espidf_clock.c | 88 + .../shared/platform/esp-idf/espidf_file.c | 1009 +++++++++++ .../shared/platform/esp-idf/espidf_malloc.c | 0 .../shared/platform/esp-idf/espidf_memmap.c | 26 +- .../shared/platform/esp-idf/espidf_platform.c | 71 +- .../shared/platform/esp-idf/espidf_socket.c | 1027 ++++++++++++ .../shared/platform/esp-idf/espidf_thread.c | 57 +- .../platform/esp-idf/platform_internal.h | 73 +- .../platform/esp-idf/shared_platform.cmake | 3 + .../shared/platform/freebsd/platform_init.c | 0 .../platform/freebsd/platform_internal.h | 4 +- .../platform/freebsd/shared_platform.cmake | 0 .../platform/include/platform_api_extension.h | 0 .../platform/include/platform_api_vmcore.h | 8 +- .../shared/platform/include/platform_common.h | 0 .../platform/include/platform_wasi_types.h | 0 .../platform/linux-sgx/platform_internal.h | 0 .../core/shared/platform/linux-sgx/sgx_file.c | 0 .../core/shared/platform/linux-sgx/sgx_file.h | 0 .../core/shared/platform/linux-sgx/sgx_ipfs.c | 0 .../core/shared/platform/linux-sgx/sgx_ipfs.h | 0 .../shared/platform/linux-sgx/sgx_platform.c | 21 +- .../shared/platform/linux-sgx/sgx_pthread.c | 0 .../shared/platform/linux-sgx/sgx_pthread.h | 0 .../platform/linux-sgx/sgx_rsrv_mem_mngr.h | 0 .../shared/platform/linux-sgx/sgx_signal.c | 0 .../shared/platform/linux-sgx/sgx_signal.h | 0 .../shared/platform/linux-sgx/sgx_socket.c | 3 +- .../shared/platform/linux-sgx/sgx_socket.h | 0 .../shared/platform/linux-sgx/sgx_thread.c | 0 .../core/shared/platform/linux-sgx/sgx_time.c | 17 +- .../core/shared/platform/linux-sgx/sgx_time.h | 0 .../shared/platform/linux-sgx/sgx_wamr.edl | 0 .../platform/linux-sgx/shared_platform.cmake | 0 .../platform/linux-sgx/untrusted/file.c | 0 .../platform/linux-sgx/untrusted/pthread.c | 0 .../platform/linux-sgx/untrusted/signal.c | 0 .../platform/linux-sgx/untrusted/socket.c | 0 .../platform/linux-sgx/untrusted/time.c | 0 .../shared/platform/linux/platform_init.c | 0 .../shared/platform/linux/platform_internal.h | 4 +- .../platform/linux/shared_platform.cmake | 0 .../shared/platform/nuttx/nuttx_platform.c | 33 +- .../shared/platform/nuttx/platform_internal.h | 0 .../platform/nuttx/shared_platform.cmake | 0 .../shared/platform/riot/platform_internal.h | 0 .../core/shared/platform/riot/riot_platform.c | 0 .../core/shared/platform/riot/riot_thread.c | 0 .../core/shared/platform/riot/riot_time.c | 15 +- .../platform/riot/shared_platform.cmake | 0 .../core/shared/platform/rt-thread/SConscript | 0 .../platform/rt-thread/platform_internal.h | 0 .../shared/platform/rt-thread/rtt_platform.c | 9 +- .../platform/rt-thread/shared_platform.cmake | 0 .../shared/platform/vxworks/platform_init.c | 0 .../platform/vxworks/platform_internal.h | 4 +- .../platform/vxworks/shared_platform.cmake | 0 .../shared/platform/windows/platform_init.c | 0 .../platform/windows/platform_internal.h | 0 .../platform/windows/shared_platform.cmake | 0 .../shared/platform/windows/win_atomic.cpp | 0 .../core/shared/platform/windows/win_clock.c | 0 .../core/shared/platform/windows/win_file.c | 0 .../core/shared/platform/windows/win_malloc.c | 0 .../core/shared/platform/windows/win_memmap.c | 0 .../core/shared/platform/windows/win_socket.c | 4 + .../core/shared/platform/windows/win_thread.c | 0 .../core/shared/platform/windows/win_time.c | 9 +- .../core/shared/platform/windows/win_util.c | 0 .../core/shared/platform/windows/win_util.h | 0 .../platform/zephyr/platform_internal.h | 11 +- .../platform/zephyr/shared_platform.cmake | 4 +- .../shared/platform/zephyr/zephyr_platform.c | 20 +- .../shared/platform/zephyr/zephyr_thread.c | 0 .../core/shared/platform/zephyr/zephyr_time.c | 9 +- .../core/shared/utils/SConscript | 0 .../core/shared/utils/bh_assert.c | 0 .../core/shared/utils/bh_assert.h | 0 .../core/shared/utils/bh_atomic.h | 0 .../core/shared/utils/bh_bitmap.c | 0 .../core/shared/utils/bh_bitmap.h | 0 .../core/shared/utils/bh_common.c | 0 .../core/shared/utils/bh_common.h | 0 .../core/shared/utils/bh_hashmap.c | 4 +- .../core/shared/utils/bh_hashmap.h | 0 .../core/shared/utils/bh_list.c | 0 .../core/shared/utils/bh_list.h | 0 .../core/shared/utils/bh_log.c | 6 +- .../core/shared/utils/bh_log.h | 6 + .../core/shared/utils/bh_platform.h | 0 .../core/shared/utils/bh_queue.c | 0 .../core/shared/utils/bh_queue.h | 0 .../core/shared/utils/bh_vector.c | 0 .../core/shared/utils/bh_vector.h | 0 .../core/shared/utils/gnuc.h | 0 .../core/shared/utils/runtime_timer.c | 4 +- .../core/shared/utils/runtime_timer.h | 0 .../core/shared/utils/shared_utils.cmake | 0 .../core/shared/utils/uncommon/SConscript | 0 .../core/shared/utils/uncommon/bh_getopt.c | 0 .../core/shared/utils/uncommon/bh_getopt.h | 0 .../core/shared/utils/uncommon/bh_read_file.c | 0 .../core/shared/utils/uncommon/bh_read_file.h | 0 .../utils/uncommon/shared_uncommon.cmake | 0 .../core/version.h | 2 +- .../doc/build_wamr.md | 55 +- .../doc/build_wasm_app.md | 16 +- .../doc/devcontainer.md | 0 .../doc/embed_wamr.md | 0 .../doc/embed_wamr_spawn_api.md | 0 .../doc/export_native_api.md | 0 .../doc/linux_sgx.md | 0 .../doc/memory_tune.md | 0 .../doc/memory_usage.md | 0 .../doc/multi_module.md | 2 +- .../doc/other_wasm_compilers.md | 0 .../doc/perf_tune.md | 128 +- .../doc/pics/app_framework.PNG | Bin .../doc/pics/embed.PNG | Bin .../doc/pics/extend_library.PNG | Bin .../doc/pics/multi_module_pic1.png | Bin .../doc/pics/native_call_wasm.PNG | Bin .../doc/pics/request.PNG | Bin .../doc/pics/safe.PNG | Bin .../doc/pics/sensor_callflow.PNG | Bin .../doc/pics/sub.PNG | Bin .../doc/pics/vgl_demo.png | Bin .../doc/pics/vgl_demo2.png | Bin .../doc/pics/vgl_demo_linux.png | Bin .../doc/pics/vgl_linux.PNG | Bin .../doc/pics/wamr-arch.JPG | Bin .../doc/pics/wamr_memory_model.png | Bin .../doc/pics/wamr_menu_config.png | Bin .../doc/port_wamr.md | 0 .../doc/pthread_impls.md | 0 .../doc/pthread_library.md | 0 .../doc/ref_types.md | 0 .../doc/release_ack.md | 0 .../doc/roadmap.md | 0 .../doc/semantic_version.md | 0 .../doc/socket_api.md | 0 .../doc/source_debugging.md | 20 + .../doc/source_debugging_aot.md | 100 ++ .../doc/source_debugging_interpreter.md} | 113 +- .../doc/wamr_api.md | 0 .../doc/wasm_c_api.md | 0 .../doc/xip.md | 0 .../idf_component.yml | 14 + .../language-bindings/go/README.md | 0 .../language-bindings/go/build.sh | 0 .../language-bindings/go/go.mod | 0 .../language-bindings/go/go.sum | 0 .../language-bindings/go/samples/build.sh | 0 .../language-bindings/go/samples/run.sh | 0 .../language-bindings/go/samples/test.go | 0 .../go/samples/wasm-app/build.sh | 0 .../go/samples/wasm-app/main.c | 0 .../language-bindings/go/wamr/cgo.go | 0 .../language-bindings/go/wamr/instance.go | 0 .../go/wamr/instance_test.go | 0 .../language-bindings/go/wamr/module.go | 4 +- .../language-bindings/go/wamr/module_test.go | 0 .../go/wamr/packaged/include/dummy.go | 0 .../wamr/packaged/lib/darwin-aarch64/dummy.go | 0 .../wamr/packaged/lib/darwin-amd64/dummy.go | 0 .../go/wamr/packaged/lib/dummy.go | 0 .../go/wamr/packaged/lib/linux-amd64/dummy.go | 0 .../language-bindings/go/wamr/runtime.go | 0 .../language-bindings/go/wamr/runtime_test.go | 0 .../language-bindings/python/.gitignore | 0 .../language-bindings/python/LICENSE | 0 .../language-bindings/python/MANIFEST.in | 0 .../language-bindings/python/README.md | 0 .../language-bindings/python/pyproject.toml | 0 .../language-bindings/python/setup.py | 0 .../python/src/wamr/__init__.py | 0 .../python/src/wamr/libs/.placeholder | 0 .../python/src/wamr/wamrapi/__init__.py | 0 .../python/src/wamr/wamrapi/wamr.py | 0 .../python/src/wamr/wasmcapi/__init__.py | 0 .../python/src/wamr/wasmcapi/binding.py | 0 .../python/src/wamr/wasmcapi/ffi.py | 0 .../python/utils/create_lib.sh | 0 .../python/wamr-api/README.md | 0 .../python/wamr-api/requirements.txt | 0 .../python/wamr-api/samples/basic/compile.sh | 0 .../python/wamr-api/samples/basic/main.py | 0 .../python/wamr-api/samples/basic/sum.c | 0 .../wamr-api/samples/native-symbol/README.md | 0 .../wamr-api/samples/native-symbol/compile.sh | 0 .../wamr-api/samples/native-symbol/func.c | 0 .../wamr-api/samples/native-symbol/main.py | 0 .../python/wasm-c-api/README.md | 0 .../python/wasm-c-api/docs/design.md | 0 .../docs/images/python_package_life_cycle.png | Bin .../python/wasm-c-api/docs/setup_dev_env.md | 0 .../python/wasm-c-api/requirements.txt | 0 .../python/wasm-c-api/samples/hello.wat | 0 .../python/wasm-c-api/samples/hello_oop.py | 0 .../wasm-c-api/samples/hello_procedural.py | 0 .../python/wasm-c-api/tests/__init__.py | 0 .../python/wasm-c-api/tests/context.py | 0 .../python/wasm-c-api/tests/test_advanced.py | 32 - .../python/wasm-c-api/tests/test_basic.py | 0 .../python/wasm-c-api/utils/bindgen.py | 0 .../product-mini/README.md | 6 +- .../hello-world-cmake/CMakeLists.txt | 0 .../app-samples/hello-world-cmake/build.sh | 0 .../app-samples/hello-world-cmake/main.c | 0 .../app-samples/hello-world-cmake/print.c | 0 .../app-samples/hello-world/build.sh | 0 .../app-samples/hello-world/main.c | 0 .../platforms/alios-things/aos.mk | 0 .../platforms/alios-things/src/main.c | 0 .../platforms/alios-things/src/test_wasm.h | 0 .../platforms/android/CMakeLists.txt | 0 .../platforms/android/build_jit.sh | 0 .../platforms/android/build_llvm.sh | 0 .../platforms/android/wasm-jni.cpp | 0 .../product-mini/platforms/common/libc_wasi.c | 0 .../platforms/cosmopolitan/CMakeLists.txt | 0 .../platforms/cosmopolitan/build_cosmocc.sh | 4 +- .../platforms/cosmopolitan/main.c | 0 .../platforms/darwin/CMakeLists.txt | 0 .../platforms/darwin/build_jit.sh | 0 .../platforms/darwin/build_llvm.sh | 0 .../product-mini/platforms/darwin/main.c | 0 .../product-mini/platforms/esp-idf/.gitignore | 0 .../platforms/esp-idf/CMakeLists.txt | 3 - .../platforms/esp-idf/build_and_run.sh | 0 .../platforms/esp-idf/main/CMakeLists.txt | 3 +- .../platforms/esp-idf/main/idf_component.yml | 7 + .../platforms/esp-idf/main/main.c | 4 - .../platforms/esp-idf/main/test_wasm.h | 0 .../platforms/esp-idf/sdkconfig.defaults | 0 .../esp-idf/sdkconfig.defaults.esp32 | 0 .../esp-idf/sdkconfig.defaults.esp32c3 | 0 .../platforms/freebsd/CMakeLists.txt | 0 .../platforms/freebsd/build_jit.sh | 0 .../platforms/freebsd/build_llvm.sh | 0 .../product-mini/platforms/freebsd/main.c | 0 .../product-mini/platforms/ios/CMakeLists.txt | 0 .../platforms/ios/generate_xcodeproj.sh | 0 .../platforms/linux-sgx/CMakeLists.txt | 12 + .../linux-sgx/CMakeLists_minimal.txt | 0 .../linux-sgx/enclave-sample/Makefile | 13 +- .../linux-sgx/enclave-sample/Makefile_minimal | 2 +- .../platforms/linux/CMakeLists.txt | 0 .../product-mini/platforms/linux/build_jit.sh | 0 .../platforms/linux/build_llvm.sh | 0 .../product-mini/platforms/linux/main.c | 0 .../product-mini/platforms/nuttx/main.c | 0 .../product-mini/platforms/nuttx/wamr.mk | 24 +- .../product-mini/platforms/posix/main.c | 25 +- .../platforms/riot/CMakeLists.txt | 0 .../product-mini/platforms/riot/Makefile | 0 .../product-mini/platforms/riot/iwasmt.c | 0 .../product-mini/platforms/riot/test_wasm.h | 0 .../platforms/rt-thread/SConscript | 0 .../product-mini/platforms/rt-thread/iwasm.c | 0 .../platforms/rt-thread/iwasm.cmake | 0 .../platforms/vxworks/CMakeLists.txt | 0 .../product-mini/platforms/vxworks/main.c | 0 .../platforms/windows/CMakeLists.txt | 0 .../platforms/windows/build_llvm.py | 0 .../product-mini/platforms/windows/main.c | 6 +- .../windows/wasi_filtered_tests.json | 0 .../platforms/zephyr/simple/CMakeLists.txt | 0 .../platforms/zephyr/simple/Dockerfile | 0 .../platforms/zephyr/simple/README.md | 0 .../zephyr/simple/boards/nucleo_f767zi.conf | 0 .../zephyr/simple/boards/qemu_cortex_a53.conf | 0 .../platforms/zephyr/simple/build_and_run.sh | 0 .../platforms/zephyr/simple/prj.conf | 0 .../platforms/zephyr/simple/src/main.c | 0 .../platforms/zephyr/simple/src/test_wasm.h | 0 .../zephyr/simple/src/test_wasm_riscv64.h | 0 .../simple/src/wasm-app-riscv64/build.sh | 0 .../zephyr/simple/src/wasm-app-riscv64/main.c | 0 .../samples/README.md | 0 .../samples/basic/.gitignore | 0 .../samples/basic/CMakeLists.txt | 0 .../samples/basic/README.md | 0 .../samples/basic/build.sh | 2 +- .../samples/basic/run.sh | 0 .../samples/basic/src/main.c | 28 +- .../samples/basic/src/native_impl.c | 0 .../samples/basic/wasm-apps/testapp.c | 0 .../samples/bh-atomic/CMakeLists.txt | 0 .../samples/bh-atomic/main.c | 0 .../samples/file/CMakeLists.txt | 0 .../samples/file/README.md | 2 +- .../samples/file/src/CMakeLists.txt | 0 .../samples/file/src/main.c | 0 .../samples/file/wasm-app/CMakeLists.txt | 0 .../samples/file/wasm-app/main.c | 0 .../samples/gui/README.md | 0 .../samples/gui/build.sh | 0 .../samples/gui/lv_config/lv_conf.h | 0 .../samples/gui/lv_config/lv_drv_conf.h | 0 .../samples/gui/lv_config/system_header.h | 0 .../samples/gui/wamr_config_gui.cmake | 0 .../samples/gui/wasm-apps/build_apps.sh | 0 .../samples/gui/wasm-apps/decrease/Makefile | 0 .../samples/gui/wasm-apps/decrease/src/main.c | 0 .../gui/wasm-apps/increase/CMakeLists.txt | 0 .../samples/gui/wasm-apps/increase/Makefile | 0 .../samples/gui/wasm-apps/increase/src/main.c | 0 .../src/platform/linux/iwasm_main.c | 0 .../src/platform/linux/lv_drv_conf.h | 0 .../src/platform/linux/main.c | 0 .../src/platform/zephyr/LICENSE | 0 .../src/platform/zephyr/XPT2046.c | 8 +- .../src/platform/zephyr/XPT2046.h | 0 .../src/platform/zephyr/board_config.h | 0 .../src/platform/zephyr/display.h | 0 .../src/platform/zephyr/display_ili9340.c | 0 .../src/platform/zephyr/display_ili9340.h | 5 + .../zephyr/display_ili9340_adafruit_1480.c | 0 .../src/platform/zephyr/iwasm_main.c | 5 + .../src/platform/zephyr/main.c | 0 .../src/platform/zephyr/pin_config_jlf.h | 0 .../src/platform/zephyr/pin_config_stm32.h | 0 .../samples/inst-context-threads/.gitignore | 0 .../inst-context-threads/CMakeLists.txt | 0 .../samples/inst-context-threads/README.md | 0 .../samples/inst-context-threads/build.sh | 0 .../samples/inst-context-threads/run.sh | 0 .../samples/inst-context-threads/src/main.c | 0 .../inst-context-threads/src/my_context.h | 0 .../inst-context-threads/src/native_impl.c | 0 .../inst-context-threads/wasm-apps/testapp.c | 0 .../samples/inst-context/.gitignore | 0 .../samples/inst-context/CMakeLists.txt | 0 .../samples/inst-context/README.md | 0 .../samples/inst-context/build.sh | 0 .../samples/inst-context/run.sh | 0 .../samples/inst-context/src/main.c | 0 .../samples/inst-context/src/my_context.h | 0 .../samples/inst-context/src/native_impl.c | 0 .../samples/inst-context/wasm-apps/testapp.c | 0 .../samples/littlevgl/LICENCE.txt | 0 .../samples/littlevgl/README.md | 0 .../samples/littlevgl/build.sh | 0 .../samples/littlevgl/lv_config/lv_conf.h | 0 .../samples/littlevgl/lv_config/lv_drv_conf.h | 0 .../vgl-native-ui-app/CMakeLists.txt | 0 .../vgl-native-ui-app/CMakeLists.txt.in | 0 .../vgl-native-ui-app/lv-drivers/.gitignore | 0 .../lv-drivers/display_indev.h | 0 .../lv-drivers/indev/mouse.c | 0 .../lv-drivers/indev/mouse.h | 0 .../lv-drivers/linux_display_indev.c | 0 .../lv-drivers/system_header.h | 0 .../littlevgl/vgl-native-ui-app/main.c | 0 .../littlevgl/vgl-wasm-runtime/CMakeLists.txt | 0 .../vgl-wasm-runtime/src/display_indev.h | 0 .../src/platform/linux/display_indev.c | 0 .../src/platform/linux/iwasm_main.c | 0 .../src/platform/linux/main.c | 0 .../src/platform/linux/mouse.c | 0 .../src/platform/zephyr/LICENSE | 0 .../src/platform/zephyr/XPT2046.c | 8 +- .../src/platform/zephyr/XPT2046.h | 0 .../src/platform/zephyr/board_config.h | 0 .../src/platform/zephyr/display.h | 0 .../src/platform/zephyr/display_ili9340.c | 0 .../src/platform/zephyr/display_ili9340.h | 5 + .../zephyr/display_ili9340_adafruit_1480.c | 0 .../src/platform/zephyr/display_indev.c | 0 .../src/platform/zephyr/iwasm_main.c | 5 + .../src/platform/zephyr/main.c | 0 .../src/platform/zephyr/pin_config_jlf.h | 0 .../src/platform/zephyr/pin_config_stm32.h | 0 .../littlevgl/wamr_config_littlevgl.cmake | 0 .../littlevgl/wasm-apps/Makefile_wasm_app | 0 .../wasm-apps/Makefile_wasm_app_no_wasi | 0 .../littlevgl/wasm-apps/build_wasm_app.sh | 0 .../littlevgl/wasm-apps/src/display_indev.h | 0 .../samples/littlevgl/wasm-apps/src/main.c | 0 .../littlevgl/wasm-apps/src/system_header.h | 0 .../samples/mem-allocator/CMakeLists.txt | 0 .../samples/mem-allocator/main.c | 0 .../samples/multi-module/CMakeLists.txt | 1 + .../samples/multi-module/README.md | 0 .../samples/multi-module/src/main.c | 0 .../multi-module/wasm-apps/CMakeLists.txt | 0 .../samples/multi-module/wasm-apps/mA.c | 0 .../samples/multi-module/wasm-apps/mB.c | 0 .../samples/multi-module/wasm-apps/mC.c | 0 .../samples/multi-module/wasm-apps/mD.cpp | 0 .../samples/multi-module/wasm-apps/mE.cpp | 0 .../samples/multi-thread/CMakeLists.txt | 0 .../multi-thread/wasm-apps/CMakeLists.txt | 0 .../samples/multi-thread/wasm-apps/main.c | 0 .../wasm-apps/main_global_atomic.c | 0 .../wasm-apps/main_thread_exception.c | 0 .../samples/native-lib/CMakeLists.txt | 0 .../samples/native-lib/README.md | 2 +- .../samples/native-lib/test_add.c | 0 .../samples/native-lib/test_hello.c | 0 .../samples/native-lib/test_hello2.c | 0 .../samples/native-lib/test_sqrt.c | 0 .../native-lib/wasm-app/CMakeLists.txt | 0 .../samples/native-lib/wasm-app/main.c | 0 .../samples/ref-types/CMakeLists.txt | 0 .../samples/ref-types/src/hello.c | 0 .../samples/ref-types/src/hello.wat | 0 .../samples/sgx-ra/CMakeLists.txt | 1 + .../samples/sgx-ra/README.md | 0 .../samples/sgx-ra/wasm-app/CMakeLists.txt | 0 .../samples/sgx-ra/wasm-app/main.c | 0 .../samples/shared-module/.gitignore | 0 .../samples/shared-module/CMakeLists.txt | 0 .../samples/shared-module/README.md | 0 .../samples/shared-module/build.sh | 2 +- .../samples/shared-module/run.sh | 0 .../samples/shared-module/src/main.c | 0 .../shared-module/wasm-apps/testapp.wat | 0 .../samples/simple/.gitignore | 0 .../samples/simple/CMakeLists.txt | 0 .../samples/simple/README.md | 0 .../samples/simple/build.sh | 2 +- .../profiles/arm-interp/toolchain.cmake | 0 .../arm-interp/wamr_config_simple.cmake | 0 .../simple/profiles/arm64-aot/toolchain.cmake | 0 .../arm64-aot/wamr_config_simple.cmake | 0 .../profiles/arm64-interp/toolchain.cmake | 0 .../arm64-interp/wamr_config_simple.cmake | 0 .../host-aot/wamr_config_simple.cmake | 0 .../host-interp/wamr_config_simple.cmake | 0 .../macos-interp/wamr_config_simple.cmake | 0 .../samples/simple/sample_test_run.py | 0 .../samples/simple/src/iwasm_main.c | 0 .../samples/simple/src/main.c | 0 .../samples/simple/wasm-apps/connection.c | 0 .../simple/wasm-apps/event_publisher.c | 0 .../simple/wasm-apps/event_subscriber.c | 0 .../simple/wasm-apps/request_handler.c | 0 .../samples/simple/wasm-apps/request_sender.c | 0 .../samples/simple/wasm-apps/sensor.c | 0 .../samples/simple/wasm-apps/timer.c | 0 .../samples/socket-api/CMakeLists.txt | 0 .../samples/socket-api/README.md | 2 +- .../samples/socket-api/sample_test_run.py | 0 .../socket-api/wasm-src/CMakeLists.txt | 0 .../socket-api/wasm-src/addr_resolve.c | 0 .../samples/socket-api/wasm-src/inc/.gitkeep | 0 .../socket-api/wasm-src/multicast_client.c | 0 .../socket-api/wasm-src/multicast_server.c | 0 .../samples/socket-api/wasm-src/send_recv.c | 0 .../samples/socket-api/wasm-src/socket_opts.c | 0 .../socket-api/wasm-src/socket_utils.h | 0 .../samples/socket-api/wasm-src/tcp_client.c | 0 .../samples/socket-api/wasm-src/tcp_server.c | 0 .../socket-api/wasm-src/timeout_client.c | 0 .../socket-api/wasm-src/timeout_server.c | 0 .../samples/socket-api/wasm-src/udp_client.c | 0 .../samples/socket-api/wasm-src/udp_server.c | 0 .../samples/spawn-thread/CMakeLists.txt | 4 +- .../samples/spawn-thread/src/main.c | 0 .../spawn-thread/wasm-apps/CMakeLists.txt | 1 + .../samples/spawn-thread/wasm-apps/sum.c | 13 +- .../samples/terminate/.gitignore | 1 + .../samples/terminate/CMakeLists.txt | 98 ++ .../samples/terminate/README.md | 4 + .../samples/terminate/build.sh | 63 + .../samples/terminate/run.sh | 3 + .../samples/terminate/src/main.c | 219 +++ .../samples/terminate/wasm-apps/testapp.wat | 53 + .../samples/wasi-threads/CMakeLists.txt | 0 .../samples/wasi-threads/README.md | 0 .../wasi-threads/wasm-apps/CMakeLists.txt | 0 .../wasi-threads/wasm-apps/no_pthread.c | 0 .../wasm-apps/wasi_thread_start.S | 0 .../wasm-apps/wasi_thread_start.h | 1 + .../samples/wasm-c-api-imports/.gitignore | 0 .../samples/wasm-c-api-imports/CMakeLists.txt | 0 .../samples/wasm-c-api-imports/README.md | 0 .../wasm-c-api-imports/host/CMakeLists.txt | 0 .../wasm-c-api-imports/host/example1.c | 0 .../wasm-c-api-imports/wasm/CMakeLists.txt | 2 +- .../wasm-c-api-imports/wasm/inc/.gitkeep | 0 .../wasm-c-api-imports/wasm/send_recv.c | 0 .../samples/wasm-c-api/CMakeLists.txt | 0 .../samples/wasm-c-api/README.md | 0 .../samples/wasm-c-api/src/LICENSE | 0 .../samples/wasm-c-api/src/callback.c | 0 .../samples/wasm-c-api/src/callback.wat | 0 .../samples/wasm-c-api/src/callback_chain.c | 0 .../samples/wasm-c-api/src/callback_chain.wat | 0 .../samples/wasm-c-api/src/clone.c | 0 .../samples/wasm-c-api/src/clone.wat | 0 .../samples/wasm-c-api/src/empty_imports.c | 0 .../samples/wasm-c-api/src/empty_imports.wat | 0 .../samples/wasm-c-api/src/global.c | 0 .../samples/wasm-c-api/src/global.wat | 0 .../wasm-c-api/src/globalexportimport-0.wat | 0 .../wasm-c-api/src/globalexportimport-1.wat | 0 .../wasm-c-api/src/globalexportimport.c | 0 .../samples/wasm-c-api/src/hello.c | 0 .../samples/wasm-c-api/src/hello.wat | 0 .../samples/wasm-c-api/src/hostref.c | 0 .../samples/wasm-c-api/src/hostref.wat | 0 .../samples/wasm-c-api/src/memory.c | 0 .../samples/wasm-c-api/src/memory.wat | 0 .../samples/wasm-c-api/src/multi.c | 0 .../samples/wasm-c-api/src/multi.wat | 0 .../samples/wasm-c-api/src/reflect.c | 0 .../samples/wasm-c-api/src/reflect.wat | 0 .../samples/wasm-c-api/src/serialize.c | 0 .../samples/wasm-c-api/src/serialize.wat | 0 .../samples/wasm-c-api/src/table.c | 0 .../samples/wasm-c-api/src/table.wat | 0 .../samples/wasm-c-api/src/threads.c | 0 .../samples/wasm-c-api/src/threads.wat | 0 .../samples/wasm-c-api/src/trap.c | 0 .../samples/wasm-c-api/src/trap.wat | 0 .../wasm-c-api/src/utils/multi_module_utils.c | 0 .../samples/workload/CMakeLists.txt | 0 .../samples/workload/README.md | 0 .../samples/workload/XNNPACK/.gitignore | 0 .../samples/workload/XNNPACK/CMakeLists.txt | 0 .../samples/workload/XNNPACK/README.md | 0 .../samples/workload/XNNPACK/benchmark.patch | 0 .../samples/workload/XNNPACK/xnnpack.patch | 0 .../samples/workload/bwa/.gitignore | 0 .../workload/bwa/CMakeLists.bwa_wasm.txt | 0 .../samples/workload/bwa/CMakeLists.txt | 0 .../samples/workload/bwa/README.md | 0 .../samples/workload/bwa/bwa.patch | 0 .../samples/workload/cmake/FindBinaryen.cmake | 0 .../samples/workload/cmake/FindWASISDK.cmake | 0 .../samples/workload/include/.gitkeep | 0 .../samples/workload/meshoptimizer/.gitignore | 0 .../workload/meshoptimizer/CMakeLists.txt | 0 .../samples/workload/meshoptimizer/README.md | 0 .../workload/meshoptimizer/codecbench.patch | 0 .../samples/workload/preparation.sh | 0 .../samples/workload/tensorflow/README.md | 0 .../samples/workload/tensorflow/build.sh | 0 .../samples/workload/tensorflow/tf_lite.patch | 0 .../samples/workload/wasm-av1/.gitignore | 0 .../workload/wasm-av1/CMakeLists.avx_wasm.txt | 0 .../samples/workload/wasm-av1/CMakeLists.txt | 0 .../samples/workload/wasm-av1/README.md | 0 .../samples/workload/wasm-av1/av1-clang.patch | 0 .../samples/workload/wasm-av1/build.sh | 0 .../samples/workload/wasm-av1/wasm-av1.patch | 0 .../test-tools/.gitignore | 0 .../test-tools/IoT-APP-Store-Demo/README.md | 0 .../IoT-APP-Store-Demo/docker-compose.yml | 0 .../IoT-APP-Store-Demo/wasm_django/Dockerfile | 0 .../IoT-APP-Store-Demo/wasm_django/db.sqlite3 | Bin .../wasm_django/devices/__init__.py | 0 .../wasm_django/devices/admin.py | 0 .../wasm_django/devices/apps.py | 0 .../devices/migrations/__init__.py | 0 .../wasm_django/devices/models.py | 0 .../devices/templates/application.html | 0 .../devices/templates/appstore.html | 0 .../wasm_django/devices/templates/empty.html | 0 .../wasm_django/devices/templates/help.html | 0 .../wasm_django/devices/templates/mysite.html | 0 .../wasm_django/devices/tests.py | 0 .../wasm_django/devices/views.py | 0 .../IoT-APP-Store-Demo/wasm_django/manage.py | 0 .../wasm_django/mysite/__init__.py | 0 .../wasm_django/mysite/settings.py | 0 .../wasm_django/mysite/urls.py | 0 .../wasm_django/mysite/wsgi.py | 0 .../wasm_django/server/Dockerfile | 0 .../wasm_django/server/wasm_server.py | 0 .../wasm_django/static/css/application.css | 0 .../wasm_django/static/css/appstore.css | 0 .../wasm_django/static/css/index.css | 0 .../wasm_django/static/js/application.js | 0 .../wasm_django/static/js/appstore.js | 0 .../wasm_django/static/js/index.js | 0 .../wasm_django/static/photo/app(1).png | Bin .../wasm_django/static/photo/application.png | Bin .../wasm_django/static/photo/delete.png | Bin .../wasm_django/static/photo/download(1).png | Bin .../wasm_django/static/photo/menu.png | Bin .../static/photo/milky-way-2695569_1280.jpg | Bin .../wasm_django/static/photo/net_device.png | Bin .../static/photo/software-icon-32081.png | Bin .../wasm_django/static/photo/totalblack.png | Bin .../wasm_django/static/upload/connection.wasm | Bin .../static/upload/event_publisher.wasm | Bin .../static/upload/event_subscriber.wasm | Bin .../static/upload/request_handler.wasm | Bin .../static/upload/request_sender.wasm | Bin .../wasm_django/static/upload/sensor.wasm | Bin .../wasm_django/static/upload/simple | Bin .../static/upload/sys/connection.wasm | Bin .../static/upload/sys/event_publisher.wasm | Bin .../static/upload/sys/event_subscriber.wasm | Bin .../static/upload/sys/request_handler.wasm | Bin .../static/upload/sys/request_sender.wasm | Bin .../wasm_django/static/upload/sys/timer.wasm | Bin .../wasm_django/static/upload/timer.wasm | Bin .../wasm_django/static/upload/ui_app.wasm | Bin .../static/upload/wasm_runtime_wgl | Bin .../append-aot-to-wasm/append_aot_to_wasm.py | 161 ++ .../test-tools/binarydump-tool/CMakeLists.txt | 0 .../test-tools/binarydump-tool/binarydump.c | 0 .../test-tools/component-test/README.md | 0 .../test-tools/component-test/__init__.py | 0 .../component-test/framework/__init__.py | 0 .../component-test/framework/case_base.py | 0 .../component-test/framework/engine.py | 0 .../component-test/framework/framework.py | 0 .../component-test/framework/suite.py | 0 .../component-test/framework/test_api.py | 0 .../component-test/framework/test_utils.py | 0 .../component-test/harness/__init__.py | 0 .../component-test/harness/harness_api.py | 0 .../host-clients/src/host_app_sample.c | 0 .../component-test/host-clients/src/makefile | 0 .../test-tools/component-test/set_dev_env.sh | 0 .../test-tools/component-test/start.py | 0 .../suites/01-life-cycle/__init__.py | 0 .../cases/01-install/__init__.py | 0 .../01-life-cycle/cases/01-install/case.py | 0 .../cases/02-request/__init__.py | 0 .../01-life-cycle/cases/02-request/case.py | 0 .../01-life-cycle/cases/03-event/__init__.py | 0 .../01-life-cycle/cases/03-event/case.py | 0 .../cases/04-request-internal/__init__.py | 0 .../cases/04-request-internal/case.py | 0 .../cases/05-event-internal/__init__.py | 0 .../cases/05-event-internal/case.py | 0 .../01-life-cycle/cases/06-timer/__init__.py | 0 .../01-life-cycle/cases/06-timer/case.py | 0 .../01-life-cycle/cases/07-sensor/__init__.py | 0 .../01-life-cycle/cases/07-sensor/case.py | 0 .../cases/08-on-destroy/__init__.py | 0 .../01-life-cycle/cases/08-on-destroy/case.py | 0 .../suites/01-life-cycle/cases/__init__.py | 0 .../suites/01-life-cycle/suite_setup.py | 0 .../01-life-cycle/test-app/01_install.c | 0 .../01-life-cycle/test-app/02_request.c | 0 .../suites/01-life-cycle/test-app/03_event.c | 0 .../test-app/04_request_internal_req.c | 0 .../test-app/04_request_internal_resp.c | 0 .../test-app/05_event_internal_provider.c | 0 .../test-app/05_event_internal_subscriber.c | 0 .../suites/01-life-cycle/test-app/06_timer.c | 0 .../suites/01-life-cycle/test-app/07_sensor.c | 0 .../01-life-cycle/test-app/08_on_destroy.c | 0 .../suites/01-life-cycle/test-app/build.sh | 0 .../01-life-cycle/tools/product/start.sh | 0 .../01-life-cycle/tools/product/stop.sh | 0 .../component-test/suites/__init__.py | 0 .../component-test/suites/readme.txt | 0 .../test-tools/host-tool/CMakeLists.txt | 0 .../host-tool/external/cJSON/LICENSE | 0 .../host-tool/external/cJSON/cJSON.c | 0 .../host-tool/external/cJSON/cJSON.h | 0 .../host-tool/external/cJSON/cjson.cmake | 0 .../host-tool/src/host_tool_utils.c | 0 .../host-tool/src/host_tool_utils.h | 0 .../test-tools/host-tool/src/main.c | 0 .../test-tools/host-tool/src/transport.c | 0 .../test-tools/host-tool/src/transport.h | 0 .../collect_files.py | 0 .../trans_wasm_func_name.py | 210 +++ .../test-tools/wamr-ide/.gitattributes | 0 .../wamr-ide/Media/Config_building_target.png | Bin 0 -> 110517 bytes .../wamr-ide/Media/build_folder.png | Bin .../wamr-ide/Media/build_terminal.png | Bin .../Media/change_workspace_dialog.png | Bin .../wamr-ide/Media/compilation_config.png | Bin 0 -> 114054 bytes .../wamr-ide/Media/compilation_config_2.png | Bin 0 -> 127660 bytes .../test-tools/wamr-ide/Media/debug.png | Bin .../wamr-ide/Media/decoration_for_files.png | Bin .../wamr-ide/Media/docker_config.jpg | Bin .../wamr-ide/Media/docker_engine_config.png | Bin .../wamr-ide/Media/docker_images.png | Bin .../wamr-ide/Media/install_from_vsix.png | Bin .../wamr-ide/Media/new_project_page.png | Bin .../wamr-ide/Media/open_project_page.png | Bin .../wamr-ide/Media/project_template.png | Bin .../wamr-ide/Media/right_click_menus_1.png | Bin .../wamr-ide/Media/right_click_menus_2.png | Bin .../test-tools/wamr-ide/Media/run.png | Bin .../wamr-ide/Media/save_configuration.png | Bin .../Media/set_up_workspace_message.png | Bin .../wamr-ide/Media/wamr_ide_main_menu.png | Bin .../test-tools/wamr-ide/README.md | 48 +- .../test-tools/wamr-ide/Script/build.bat | 0 .../test-tools/wamr-ide/Script/build.sh | 0 .../wamr-ide/VSCode-Extension/.eslintrc.json | 0 .../wamr-ide/VSCode-Extension/.gitignore | 0 .../wamr-ide/VSCode-Extension/.npmrc | 0 .../VSCode-Extension/.prettierrc.json | 0 .../wamr-ide/VSCode-Extension/.vscodeignore | 0 .../wamr-ide/VSCode-Extension/CONTRIBUTING.md | 0 .../wamr-ide/VSCode-Extension/LICENSE | 0 .../wamr-ide/VSCode-Extension/README.md | 0 .../VSCode-Extension/formatters/rust.py | 0 .../wamr-ide/VSCode-Extension/package.json | 2 +- .../resource/scripts/CMakeLists.txt | 0 .../resource/scripts/boot_debugger_server.bat | 2 +- .../resource/scripts/boot_debugger_server.sh | 2 +- .../resource/scripts/build.bat | 0 .../resource/scripts/build.sh | 0 .../resource/scripts/destroy.bat | 0 .../resource/scripts/destroy.sh | 0 .../resource/scripts/project.cmake | 0 .../VSCode-Extension/resource/scripts/run.bat | 2 +- .../VSCode-Extension/resource/scripts/run.sh | 2 +- .../VSCode-Extension/resource/test/build.sh | 0 .../VSCode-Extension/resource/test/test.rs | 0 .../libc-builtin-sysroot/include/assert.h | 0 .../libc-builtin-sysroot/include/ctype.h | 0 .../libc-builtin-sysroot/include/errno.h | 0 .../libc-builtin-sysroot/include/fcntl.h | 0 .../libc-builtin-sysroot/include/inttypes.h | 0 .../libc-builtin-sysroot/include/limits.h | 0 .../libc-builtin-sysroot/include/pthread.h | 0 .../libc-builtin-sysroot/include/stdarg.h | 0 .../libc-builtin-sysroot/include/stdbool.h | 0 .../libc-builtin-sysroot/include/stdint.h | 0 .../libc-builtin-sysroot/include/stdio.h | 0 .../libc-builtin-sysroot/include/stdlib.h | 0 .../libc-builtin-sysroot/include/string.h | 0 .../libc-builtin-sysroot/include/strings.h | 0 .../resource/webview/css/style.css | 0 .../resource/webview/js/configbuildtarget.js | 2 + .../resource/webview/js/newproj.js | 0 .../webview/page/configBuildTarget.html | 20 +- .../resource/webview/page/newProject.html | 0 .../VSCode-Extension/src/constants.ts | 0 .../src/debugConfigurationProvider.ts | 42 +- .../src/decorationProvider.ts | 0 .../VSCode-Extension/src/extension.ts | 5 +- .../VSCode-Extension/src/taskProvider.ts | 5 +- .../VSCode-Extension/src/test/runTest.ts | 33 + .../src/test/suite/extension.test.ts | 243 +++ .../VSCode-Extension/src/test/suite/index.ts | 42 + .../VSCode-Extension/src/test/suite/utils.ts | 28 +- .../src/utilities/directoryUtilities.ts | 0 .../src/utilities/dockerUtilities.ts | 0 .../VSCode-Extension/src/utilities/getUri.ts | 0 .../src/utilities/lldbUtilities.ts | 9 +- .../src/view/NewProjectPanel.ts | 0 .../src/view/TargetConfigPanel.ts | 18 +- .../wamr-ide/VSCode-Extension/tsconfig.json | 0 .../WASM-Debug-Server/Docker/Dockerfile | 0 .../WASM-Debug-Server/Docker/README.md | 0 .../Docker/build_docker_image.bat | 0 .../Docker/build_docker_image.sh | 0 .../Docker/resource/debug.sh | 3 +- .../WASM-Debug-Server/Docker/resource/run.sh | 3 +- .../WASM-Toolchain/Docker/.dockerignore | 0 .../wamr-ide/WASM-Toolchain/Docker/Dockerfile | 0 .../wamr-ide/WASM-Toolchain/Docker/README.md | 0 .../Docker/build_docker_image.bat | 0 .../Docker/build_docker_image.sh | 0 .../Docker/resource/build_wasm.sh | 0 .../Docker/resource/wamr_toolchain.cmake | 0 .../tests/benchmarks/README.md | 0 .../tests/benchmarks/coremark/README.md | 2 +- .../tests/benchmarks/coremark/build.sh | 0 .../tests/benchmarks/coremark/run.sh | 0 .../tests/benchmarks/coremark/test_pgo.sh | 0 .../tests/benchmarks/dhrystone/LICENSE | 0 .../tests/benchmarks/dhrystone/build.sh | 0 .../tests/benchmarks/dhrystone/include/dhry.h | 0 .../tests/benchmarks/dhrystone/run.sh | 0 .../tests/benchmarks/dhrystone/src/dhry_1.c | 0 .../tests/benchmarks/dhrystone/src/dhry_2.c | 0 .../tests/benchmarks/dhrystone/test_pgo.sh | 0 .../tests/benchmarks/jetstream/README.md | 0 .../tests/benchmarks/jetstream/build.sh | 0 .../benchmarks/jetstream/jetstream.patch | 0 .../tests/benchmarks/jetstream/run_aot.sh | 0 .../tests/benchmarks/jetstream/test_pgo.sh | 0 .../tests/benchmarks/jetstream/tsf.patch | 0 .../tests/benchmarks/libsodium/README.md | 0 .../tests/benchmarks/libsodium/build.sh | 0 .../tests/benchmarks/libsodium/run_aot.sh | 0 .../tests/benchmarks/libsodium/test_pgo.sh | 0 .../tests/benchmarks/polybench/README.md | 2 +- .../tests/benchmarks/polybench/build.sh | 0 .../tests/benchmarks/polybench/run_aot.sh | 0 .../tests/benchmarks/polybench/run_interp.sh | 0 .../tests/benchmarks/polybench/test_pgo.sh | 0 .../tests/benchmarks/sightglass/README.md | 2 +- .../tests/benchmarks/sightglass/build.sh | 0 .../tests/benchmarks/sightglass/run_aot.sh | 0 .../tests/benchmarks/sightglass/run_interp.sh | 0 .../tests/benchmarks/sightglass/test_pgo.sh | 0 .../tests/unit/CMakeLists.txt | 0 .../tests/unit/main.cpp | 0 .../tests/wamr-compiler/.gitignore | 0 .../tests/wamr-compiler/README.md | 0 .../test_shift_negative_constants.wat | 0 .../tests/wamr-test-suites/README.md | 0 .../wamr-test-suites/spec-test-script/CHANGES | 0 .../wamr-test-suites/spec-test-script/all.py | 38 +- .../wamr-test-suites/spec-test-script/all.sh | 0 .../spec-test-script/collect_coverage.sh | 0 .../spec-test-script/exception_handling.patch | 20 + .../spec-test-script/ignore_cases.patch | 0 .../multi_module_aot_ignore_cases.patch | 0 .../spec-test-script/runtest.py | 50 + .../spec-test-script/simd_ignore_cases.patch | 0 .../tail-call/return_call.wast | 0 .../tail-call/return_call_indirect.wast | 0 .../thread_proposal_fix_atomic_case.patch | 0 .../thread_proposal_ignore_cases.patch | 0 .../tests/wamr-test-suites/test_wamr.sh | 38 +- .../wamr-test-suites/tsan_suppressions.txt | 1 + .../run_wamr_compiler_tests.sh | 0 .../wamr-test-suites/wasi-test-script/pipe.py | 0 .../wasi-test-script/run_wasi_tests.sh | 0 .../wamr-compiler/CMakeLists.txt | 139 +- .../wamr-compiler/README.md | 0 .../wamr-compiler/build_llvm.py | 0 .../wamr-compiler/build_llvm.sh | 0 .../wamr-compiler/build_llvm_arc.sh | 0 .../wamr-compiler/build_llvm_xtensa.sh | 0 .../wamr-compiler/main.c | 35 +- .../wamr-sdk/Kconfig | 0 .../wamr-sdk/Makefile | 0 .../wamr-sdk/README.md | 2 +- .../wamr-sdk/app/CMakeLists.txt | 0 .../app/libc-builtin-sysroot/include/assert.h | 0 .../app/libc-builtin-sysroot/include/ctype.h | 0 .../app/libc-builtin-sysroot/include/errno.h | 0 .../app/libc-builtin-sysroot/include/fcntl.h | 0 .../libc-builtin-sysroot/include/inttypes.h | 0 .../app/libc-builtin-sysroot/include/limits.h | 0 .../libc-builtin-sysroot/include/pthread.h | 0 .../libc-builtin-sysroot/include/semaphore.h | 0 .../app/libc-builtin-sysroot/include/stdarg.h | 0 .../libc-builtin-sysroot/include/stdbool.h | 0 .../app/libc-builtin-sysroot/include/stdint.h | 0 .../app/libc-builtin-sysroot/include/stdio.h | 0 .../app/libc-builtin-sysroot/include/stdlib.h | 0 .../app/libc-builtin-sysroot/include/string.h | 0 .../libc-builtin-sysroot/include/strings.h | 0 .../share/defined-symbols.txt | 0 .../wamr-sdk/app/wamr_toolchain.cmake | 0 .../wamr-sdk/app/wasi_toolchain.cmake | 0 .../wamr-sdk/build_sdk.sh | 0 .../wamr-sdk/menuconfig.sh | 0 .../wamr-sdk/runtime/CMakeLists.txt | 0 .../wamr-sdk/wamr_config_default.cmake | 0 .../wamr-sdk/wamr_config_macos_release.cmake | 0 .../wamr-sdk/wamr_config_ubuntu_release.cmake | 0 .../zephyr/module.yml | 0 1419 files changed, 11511 insertions(+), 3248 deletions(-) delete mode 100644 lib/wasm-micro-runtime-WAMR-1.3.0/build-scripts/esp-idf/wamr/CMakeLists.txt delete mode 100644 lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_native.c delete mode 100644 lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/esp-idf/espidf_socket.c delete mode 100644 lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/Config_building_target.png delete mode 100644 lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/compilation_config.png delete mode 100644 lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/compilation_config_2.png delete mode 100644 lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/test/runTest.ts delete mode 100644 lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/test/suite/extension.test.ts delete mode 100644 lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/test/suite/index.ts rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/.clang-tidy (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/.devcontainer/Dockerfile (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/.devcontainer/devcontainer.json (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/.github/scripts/extract_from_release_notes.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/.github/scripts/fetch_and_compare_version.py (92%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/.github/scripts/reuse_latest_release_binaries.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/.github/workflows/build_docker_images.yml (99%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/.github/workflows/build_iwasm_release.yml (98%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/.github/workflows/build_llvm_libraries.yml (78%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/.github/workflows/build_wamr_lldb.yml (98%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/.github/workflows/build_wamr_sdk.yml (98%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/.github/workflows/build_wamr_vscode_ext.yml (98%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/.github/workflows/build_wamrc.yml (97%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/.github/workflows/coding_guidelines.yml (96%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/.github/workflows/compilation_on_android_ubuntu.yml (95%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/.github/workflows/compilation_on_macos.yml (93%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/.github/workflows/compilation_on_nuttx.yml (73%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/.github/workflows/compilation_on_sgx.yml (98%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/.github/workflows/compilation_on_windows.yml (98%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/.github/workflows/create_tag.yml (78%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/.github/workflows/hadolint_dockerfiles.yml (97%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/.github/workflows/nightly_run.yml (96%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/.github/workflows/release_process.yml (97%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/.github/workflows/reuse_latest_release_binaries.yml (98%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/.github/workflows/spec_test_on_nuttx.yml (69%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/.gitignore (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/ATTRIBUTIONS.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/CMakeLists.txt (96%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/CODE_OF_CONDUCT.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/CONTRIBUTING.md (92%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/LICENSE (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/ORG_CODE_OF_CONDUCT.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/README.md (98%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/RELEASE_NOTES.md (75%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/SConscript (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/SECURITY.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/TSC_Charter.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/assembly-script/.gitignore (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/assembly-script/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/assembly-script/package-lock.json (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/assembly-script/package.json (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/assembly-script/samples/event_publisher.ts (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/assembly-script/samples/event_subscriber.ts (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/assembly-script/samples/request_handler.ts (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/assembly-script/samples/request_sender.ts (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/assembly-script/samples/timer.ts (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/assembly-script/samples/tsconfig.json (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/assembly-script/wamr_app_lib/console.ts (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/assembly-script/wamr_app_lib/request.ts (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/assembly-script/wamr_app_lib/timer.ts (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/assembly-script/wamr_app_lib/tsconfig.json (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/build-scripts/SConscript (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/build-scripts/SConscript_config (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/build-scripts/build_llvm.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/build-scripts/config_common.cmake (84%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/build-scripts/esp-idf/README.md (100%) create mode 100644 lib/wasm-micro-runtime-WAMR-1.3.3/build-scripts/esp-idf/wamr/CMakeLists.txt create mode 100644 lib/wasm-micro-runtime-WAMR-1.3.3/build-scripts/esp-idf/wamr/Kconfig rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/build-scripts/involve_boringssl.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/build-scripts/lldb_wasm.patch (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/build-scripts/requirements.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/build-scripts/runtime_lib.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/ci/build_wamr.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/ci/coding_guidelines_check.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/ci/pre_commit_hook_sample (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/ci/setup.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/ci/validate_lldb.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/app-native-shared/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/app-native-shared/attr_container.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/app-native-shared/bi-inc/attr_container.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/app-native-shared/bi-inc/shared_utils.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/app-native-shared/bi-inc/wgl_shared_utils.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/app-native-shared/native_interface.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/app-native-shared/native_interface.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/app-native-shared/restful_utils.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/app_ext_lib_export.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/app_framework.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/base/app/bh_platform.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/base/app/bh_platform.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/base/app/req_resp_api.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/base/app/request.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/base/app/timer.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/base/app/timer_api.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/base/app/wa-inc/request.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/base/app/wa-inc/timer_wasm_app.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/base/app/wasm_app.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/base/app/wasm_app.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/base/native/base_lib.inl (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/base/native/base_lib_export.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/base/native/req_resp_native_api.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/base/native/request_response.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/base/native/runtime_lib.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/base/native/timer_native_api.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/base/native/timer_wrapper.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/base/native/wasm_lib.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/connection/app/connection.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/connection/app/connection_api.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/connection/app/wa-inc/connection.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/connection/app/wasm_app.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/connection/native/connection.inl (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/connection/native/connection_lib.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/connection/native/connection_native_api.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/connection/native/connection_wrapper.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/connection/native/linux/conn_tcp.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/connection/native/linux/conn_tcp.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/connection/native/linux/conn_uart.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/connection/native/linux/conn_uart.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/connection/native/linux/conn_udp.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/connection/native/linux/conn_udp.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/connection/native/linux/connection_mgr.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/connection/native/linux/connection_mgr.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/connection/native/wasm_lib.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/connection/native/zephyr/connection_lib_impl.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/connection/native/zephyr/connection_mgr.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/sensor/app/sensor.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/sensor/app/sensor_api.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/sensor/app/wa-inc/sensor.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/sensor/app/wasm_app.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/sensor/native/runtime_sensor.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/sensor/native/runtime_sensor.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/sensor/native/runtime_sensor.inl (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/sensor/native/sensor_mgr_ref.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/sensor/native/sensor_native_api.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/sensor/native/wasm_lib.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/template/app/wa-inc/app_xxx.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/template/app/wasm_app.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/template/native/app_xxx.inl (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-framework/template/native/wasm_lib.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-mgr/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-mgr/app-manager/app_manager.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-mgr/app-manager/app_manager.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-mgr/app-manager/app_manager_host.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-mgr/app-manager/app_manager_host.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-mgr/app-manager/app_mgr.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-mgr/app-manager/ble_msg.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-mgr/app-manager/coding_rule.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-mgr/app-manager/event.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-mgr/app-manager/event.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-mgr/app-manager/message.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-mgr/app-manager/module_config.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-mgr/app-manager/module_jeff.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-mgr/app-manager/module_jeff.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-mgr/app-manager/module_utils.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-mgr/app-manager/module_wasm_app.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-mgr/app-manager/module_wasm_app.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-mgr/app-manager/module_wasm_lib.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-mgr/app-manager/module_wasm_lib.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-mgr/app-manager/platform/darwin/app_mgr_darwin.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-mgr/app-manager/platform/linux/app_mgr_linux.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-mgr/app-manager/platform/zephyr/app_mgr_zephyr.c (93%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-mgr/app-manager/resource_reg.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-mgr/app-manager/watchdog.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-mgr/app-manager/watchdog.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-mgr/app-mgr-shared/app_manager_export.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-mgr/app-mgr-shared/app_mgr_shared.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-mgr/app-mgr-shared/host_link.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/app-mgr/module.json (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/config.h (91%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/aot/SConscript (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/aot/aot_intrinsic.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/aot/aot_intrinsic.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/aot/aot_loader.c (96%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/aot/aot_reloc.h (99%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/aot/aot_runtime.c (94%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/aot/aot_runtime.h (98%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/aot/arch/aot_reloc_aarch64.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/aot/arch/aot_reloc_arc.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/aot/arch/aot_reloc_arm.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/aot/arch/aot_reloc_mips.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/aot/arch/aot_reloc_riscv.c (91%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/aot/arch/aot_reloc_thumb.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/aot/arch/aot_reloc_x86_32.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/aot/arch/aot_reloc_x86_64.c (94%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/aot/arch/aot_reloc_xtensa.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/aot/debug/LICENSE_NUTTX (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/aot/debug/NOTICE_NUTTX (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/aot/debug/elf.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/aot/debug/elf32.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/aot/debug/elf64.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/aot/debug/elf_parser.c (87%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/aot/debug/elf_parser.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/aot/debug/jit_debug.c (99%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/aot/debug/jit_debug.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/aot/iwasm_aot.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/SConscript (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/arch/invokeNative_aarch64.s (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/arch/invokeNative_aarch64_simd.s (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/arch/invokeNative_arc.s (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/arch/invokeNative_arm.s (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/arch/invokeNative_arm_vfp.s (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/arch/invokeNative_em64.asm (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/arch/invokeNative_em64.s (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/arch/invokeNative_em64_simd.asm (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/arch/invokeNative_em64_simd.s (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/arch/invokeNative_general.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/arch/invokeNative_ia32.asm (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/arch/invokeNative_ia32.s (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/arch/invokeNative_mingw_x64.s (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/arch/invokeNative_mingw_x64_simd.s (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/arch/invokeNative_mips.s (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/arch/invokeNative_osx_universal.s (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/arch/invokeNative_riscv.S (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/arch/invokeNative_thumb.s (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/arch/invokeNative_thumb_vfp.s (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/arch/invokeNative_xtensa.s (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/iwasm_common.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/wasm_application.c (99%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/wasm_blocking_op.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/wasm_c_api.c (97%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/wasm_c_api_internal.h (98%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/wasm_exec_env.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/wasm_exec_env.h (99%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/wasm_memory.c (97%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/wasm_memory.h (100%) create mode 100644 lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_native.c rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/wasm_native.h (96%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/wasm_runtime_common.c (96%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/wasm_runtime_common.h (96%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/wasm_shared_memory.c (97%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/wasm_shared_memory.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/common/wasm_suspend_flags.h (95%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot_compiler.c (98%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot_compiler.h (97%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot_emit_aot_file.c (96%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot_emit_compare.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot_emit_compare.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot_emit_const.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot_emit_const.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot_emit_control.c (99%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot_emit_control.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot_emit_conversion.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot_emit_conversion.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot_emit_exception.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot_emit_exception.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot_emit_function.c (85%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot_emit_function.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot_emit_memory.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot_emit_memory.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot_emit_numberic.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot_emit_numberic.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot_emit_parametric.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot_emit_parametric.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot_emit_table.c (97%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot_emit_table.h (95%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot_emit_variable.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot_emit_variable.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot_llvm.c (99%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot_llvm.h (98%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot_llvm_extra.cpp (97%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot_llvm_extra2.cpp (88%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot_llvm_extra2.h (97%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot_orc_extra.cpp (92%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot_orc_extra.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/aot_orc_extra2.cpp (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/debug/dwarf_extractor.cpp (86%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/debug/dwarf_extractor.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/iwasm_compl.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/simd/simd_access_lanes.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/simd/simd_access_lanes.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/simd/simd_bit_shifts.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/simd/simd_bit_shifts.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/simd/simd_bitmask_extracts.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/simd/simd_bitmask_extracts.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/simd/simd_bitwise_ops.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/simd/simd_bitwise_ops.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/simd/simd_bool_reductions.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/simd/simd_bool_reductions.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/simd/simd_common.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/simd/simd_common.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/simd/simd_comparisons.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/simd/simd_comparisons.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/simd/simd_construct_values.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/simd/simd_construct_values.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/simd/simd_conversions.c (98%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/simd/simd_conversions.h (95%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/simd/simd_floating_point.c (97%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/simd/simd_floating_point.h (92%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/simd/simd_int_arith.c (97%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/simd/simd_int_arith.h (95%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/simd/simd_load_store.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/simd/simd_load_store.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/simd/simd_sat_int_arith.c (80%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/compilation/simd/simd_sat_int_arith.h (79%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/doc/classic_interpreter.MD (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/doc/images/export_function.excalidraw (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/doc/images/stack_format_ci.excalidraw (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/doc/images/stack_format_ci.svg (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/doc/images/wasm_exports.svg (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/doc/images/wasm_function.excalidraw (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/doc/images/wasm_function.svg (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/doc/images/wasm_globals.excalidraw (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/doc/images/wasm_globals.svg (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/doc/wasm_exports.MD (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/doc/wasm_function.MD (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/doc/wasm_globals.MD (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/asmjit_sgx_patch.diff (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/cg/LICENSE_ASMJIT (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/cg/LICENSE_ZYDIS (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/cg/x86-64/jit_codegen_x86_64.cpp (99%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/fe/jit_emit_compare.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/fe/jit_emit_compare.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/fe/jit_emit_const.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/fe/jit_emit_const.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/fe/jit_emit_control.c (99%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/fe/jit_emit_control.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/fe/jit_emit_conversion.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/fe/jit_emit_conversion.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/fe/jit_emit_exception.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/fe/jit_emit_exception.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/fe/jit_emit_function.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/fe/jit_emit_function.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/fe/jit_emit_memory.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/fe/jit_emit_memory.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/fe/jit_emit_numberic.c (99%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/fe/jit_emit_numberic.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/fe/jit_emit_parametric.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/fe/jit_emit_parametric.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/fe/jit_emit_table.c (94%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/fe/jit_emit_table.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/fe/jit_emit_variable.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/fe/jit_emit_variable.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/iwasm_fast_jit.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/jit_codecache.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/jit_codecache.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/jit_codegen.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/jit_codegen.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/jit_compiler.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/jit_compiler.h (99%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/jit_dump.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/jit_dump.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/jit_frontend.c (99%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/jit_frontend.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/jit_ir.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/jit_ir.def (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/jit_ir.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/jit_regalloc.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/fast-jit/jit_utils.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/include/aot_export.h (98%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/include/lib_export.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/include/wasm_c_api.h (95%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/include/wasm_export.h (97%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/interpreter/SConscript (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/interpreter/iwasm_interp.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/interpreter/wasm.h (92%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/interpreter/wasm_interp.h (92%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/interpreter/wasm_interp_classic.c (82%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/interpreter/wasm_interp_fast.c (96%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/interpreter/wasm_loader.c (90%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/interpreter/wasm_loader.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/interpreter/wasm_mini_loader.c (94%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/interpreter/wasm_opcode.h (96%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/interpreter/wasm_runtime.c (90%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/interpreter/wasm_runtime.h (93%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/debug-engine/debug_engine.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/debug-engine/debug_engine.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/debug-engine/debug_engine.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/debug-engine/gdbserver.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/debug-engine/gdbserver.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/debug-engine/handler.c (99%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/debug-engine/handler.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/debug-engine/packets.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/debug-engine/packets.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/debug-engine/utils.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/debug-engine/utils.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-pthread/SConscript (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-pthread/lib_pthread.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-pthread/lib_pthread_wrapper.c (96%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-rats/lib_rats.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-rats/lib_rats_common.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-rats/lib_rats_wrapper.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-rats/lib_rats_wrapper.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-socket/inc/wasi_socket_ext.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-socket/lib_socket_wasi.cmake (90%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-socket/src/wasi/wasi_socket_ext.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-socket/test/build.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-socket/test/manifest.json (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-socket/test/nslookup.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-socket/test/tcp_udp.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/lib_wasi_threads.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/lib_wasi_threads_wrapper.c (99%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/stress-test/build.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/stress-test/errorcheck_mutex_stress_test.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/stress-test/manifest.json (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/stress-test/mutex_common.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/stress-test/normal_mutex_stress_test.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/stress-test/recursive_mutex_stress_test.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/stress-test/spawn_stress_test.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/stress-test/stress_test_threads_creation.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/build.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/common.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/create_threads_until_limit.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/global_atomic.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/global_lock.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/linear_memory_size_update.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/main_proc_exit_busy.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/main_proc_exit_busy.json (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/main_proc_exit_sleep.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/main_proc_exit_sleep.json (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/main_proc_exit_wait.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/main_proc_exit_wait.json (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/main_trap_busy.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/main_trap_busy.json (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/main_trap_sleep.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/main_trap_sleep.json (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/main_trap_wait.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/main_trap_wait.json (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/manifest.json (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/nonmain_proc_exit_busy.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/nonmain_proc_exit_busy.json (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/nonmain_proc_exit_sleep.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/nonmain_proc_exit_sleep.json (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/nonmain_proc_exit_wait.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/nonmain_proc_exit_wait.json (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/nonmain_trap_busy.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/nonmain_trap_busy.json (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/nonmain_trap_sleep.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/nonmain_trap_sleep.json (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/nonmain_trap_wait.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/nonmain_trap_wait.json (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/spawn_multiple_times.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/sync_primitives.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/trap_after_main_thread_finishes.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/test/update_shared_data_and_alloc_heap.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/tid_allocator.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/tid_allocator.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/unit-test/lib_wasi_threads_unit_tests.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/lib-wasi-threads/unit-test/test_tid_allocator.cpp (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/libc-builtin/SConscript (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/libc-builtin/libc_builtin.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/libc-builtin/libc_builtin_wrapper.c (98%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/libc-emcc/SConscript (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/libc-emcc/libc_emcc.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/libc-emcc/libc_emcc_wrapper.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/libc-uvwasi/FindLIBUV.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/libc-uvwasi/FindUVWASI.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/libc-uvwasi/LICENSE_LIBUV (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/libc-uvwasi/LICENSE_UVWASI (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/libc-uvwasi/libc_uvwasi.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/libc-uvwasi/libc_uvwasi_wrapper.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/libc-wasi/SConscript (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/libc-wasi/libc_wasi.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/libc-wasi/libc_wasi_wrapper.c (91%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/libc-wasi/libc_wasi_wrapper.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/LICENSE (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/include/LICENSE (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/include/wasmtime_ssp.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/LICENSE (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/blocking_op.c (91%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/blocking_op.h (89%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/locking.h (99%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/posix.c (99%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/posix.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/queue.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/random.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/random.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/refcount.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/rights.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/ssp_config.h (94%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/str.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/str.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/thread-mgr/SConscript (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/thread-mgr/thread_manager.c (90%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/thread-mgr/thread_manager.h (90%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/thread-mgr/thread_mgr.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/wasi-nn/.gitignore (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/wasi-nn/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/wasi-nn/cmake/Findtensorflow_lite.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/wasi-nn/cmake/iwasm_helper.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/wasi-nn/cmake/wasi_nn.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/wasi-nn/external/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/wasi-nn/external/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/wasi-nn/include/wasi_nn.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/wasi-nn/include/wasi_nn_types.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/wasi-nn/src/utils/logger.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/wasi-nn/src/utils/wasi_nn_app_native.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/wasi-nn/src/utils/wasi_nn_app_native.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/wasi-nn/src/wasi_nn.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/wasi-nn/src/wasi_nn_private.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/wasi-nn/src/wasi_nn_tensorflowlite.cpp (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/wasi-nn/src/wasi_nn_tensorflowlite.hpp (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/wasi-nn/test/Dockerfile.compile (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/wasi-nn/test/Dockerfile.cpu (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/wasi-nn/test/Dockerfile.nvidia-gpu (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/wasi-nn/test/Dockerfile.tpu (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/wasi-nn/test/Dockerfile.vx-delegate (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/wasi-nn/test/build.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/wasi-nn/test/models/average.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/wasi-nn/test/models/max.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/wasi-nn/test/models/mult_dimension.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/wasi-nn/test/models/mult_outputs.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/wasi-nn/test/models/quantized.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/wasi-nn/test/models/sum.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/wasi-nn/test/models/utils.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/wasi-nn/test/requirements.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/wasi-nn/test/test_tensorflow.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/wasi-nn/test/test_tensorflow_quantized.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/wasi-nn/test/utils.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/iwasm/libraries/wasi-nn/test/utils.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/coap/er-coap/LICENSE.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/coap/er-coap/coap-constants.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/coap/extension/coap_ext.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/coap/lib_coap.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/mem-alloc/SConscript (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/mem-alloc/ems/ems_alloc.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/mem-alloc/ems/ems_gc.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/mem-alloc/ems/ems_gc_internal.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/mem-alloc/ems/ems_hmu.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/mem-alloc/ems/ems_kfc.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/mem-alloc/mem_alloc.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/mem-alloc/mem_alloc.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/mem-alloc/mem_alloc.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/alios/alios_platform.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/alios/alios_thread.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/alios/alios_time.c (60%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/alios/platform_internal.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/alios/shared_platform.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/android/platform_init.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/android/platform_internal.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/android/shared_platform.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/common/freertos/freertos_malloc.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/common/freertos/freertos_thread.c (93%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/common/freertos/freertos_time.c (66%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/common/freertos/platform_api_freertos.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/common/libc-util/libc_errno.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/common/libc-util/libc_errno.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/common/libc-util/platform_common_libc_util.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/common/math/COPYRIGHT (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/common/math/math.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/common/math/platform_api_math.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/common/posix/platform_api_posix.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/common/posix/posix_blocking_op.c (98%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/common/posix/posix_clock.c (99%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/common/posix/posix_file.c (98%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/common/posix/posix_malloc.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/common/posix/posix_memmap.c (97%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/common/posix/posix_sleep.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/common/posix/posix_socket.c (99%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/common/posix/posix_thread.c (99%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/common/posix/posix_time.c (58%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/cosmopolitan/platform_init.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/cosmopolitan/platform_internal.h (96%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/cosmopolitan/shared_platform.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/darwin/platform_init.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/darwin/platform_internal.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/darwin/shared_platform.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/ego/platform_init.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/ego/platform_internal.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/ego/shared_platform.cmake (100%) create mode 100644 lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/esp-idf/espidf_clock.c create mode 100644 lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/esp-idf/espidf_file.c rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/esp-idf/espidf_malloc.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/esp-idf/espidf_memmap.c (74%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/esp-idf/espidf_platform.c (76%) create mode 100644 lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/esp-idf/espidf_socket.c rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/esp-idf/espidf_thread.c (86%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/esp-idf/platform_internal.h (79%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/esp-idf/shared_platform.cmake (81%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/freebsd/platform_init.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/freebsd/platform_internal.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/freebsd/shared_platform.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/include/platform_api_extension.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/include/platform_api_vmcore.h (96%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/include/platform_common.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/include/platform_wasi_types.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/linux-sgx/platform_internal.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/linux-sgx/sgx_file.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/linux-sgx/sgx_file.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/linux-sgx/sgx_ipfs.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/linux-sgx/sgx_ipfs.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/linux-sgx/sgx_platform.c (91%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/linux-sgx/sgx_pthread.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/linux-sgx/sgx_pthread.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/linux-sgx/sgx_rsrv_mem_mngr.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/linux-sgx/sgx_signal.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/linux-sgx/sgx_signal.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/linux-sgx/sgx_socket.c (99%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/linux-sgx/sgx_socket.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/linux-sgx/sgx_thread.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/linux-sgx/sgx_time.c (90%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/linux-sgx/sgx_time.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/linux-sgx/sgx_wamr.edl (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/linux-sgx/shared_platform.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/linux-sgx/untrusted/file.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/linux-sgx/untrusted/pthread.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/linux-sgx/untrusted/signal.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/linux-sgx/untrusted/socket.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/linux-sgx/untrusted/time.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/linux/platform_init.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/linux/platform_internal.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/linux/shared_platform.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/nuttx/nuttx_platform.c (86%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/nuttx/platform_internal.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/nuttx/shared_platform.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/riot/platform_internal.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/riot/riot_platform.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/riot/riot_thread.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/riot/riot_time.c (73%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/riot/shared_platform.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/rt-thread/SConscript (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/rt-thread/platform_internal.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/rt-thread/rtt_platform.c (96%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/rt-thread/shared_platform.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/vxworks/platform_init.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/vxworks/platform_internal.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/vxworks/shared_platform.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/windows/platform_init.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/windows/platform_internal.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/windows/shared_platform.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/windows/win_atomic.cpp (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/windows/win_clock.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/windows/win_file.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/windows/win_malloc.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/windows/win_memmap.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/windows/win_socket.c (99%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/windows/win_thread.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/windows/win_time.c (77%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/windows/win_util.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/windows/win_util.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/zephyr/platform_internal.h (93%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/zephyr/shared_platform.cmake (79%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/zephyr/zephyr_platform.c (92%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/zephyr/zephyr_thread.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/platform/zephyr/zephyr_time.c (59%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/utils/SConscript (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/utils/bh_assert.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/utils/bh_assert.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/utils/bh_atomic.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/utils/bh_bitmap.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/utils/bh_bitmap.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/utils/bh_common.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/utils/bh_common.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/utils/bh_hashmap.c (97%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/utils/bh_hashmap.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/utils/bh_list.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/utils/bh_list.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/utils/bh_log.c (96%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/utils/bh_log.h (94%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/utils/bh_platform.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/utils/bh_queue.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/utils/bh_queue.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/utils/bh_vector.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/utils/bh_vector.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/utils/gnuc.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/utils/runtime_timer.c (98%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/utils/runtime_timer.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/utils/shared_utils.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/utils/uncommon/SConscript (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/utils/uncommon/bh_getopt.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/utils/uncommon/bh_getopt.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/utils/uncommon/bh_read_file.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/utils/uncommon/bh_read_file.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/shared/utils/uncommon/shared_uncommon.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/core/version.h (89%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/build_wamr.md (84%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/build_wasm_app.md (96%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/devcontainer.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/embed_wamr.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/embed_wamr_spawn_api.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/export_native_api.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/linux_sgx.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/memory_tune.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/memory_usage.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/multi_module.md (98%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/other_wasm_compilers.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/perf_tune.md (57%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/pics/app_framework.PNG (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/pics/embed.PNG (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/pics/extend_library.PNG (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/pics/multi_module_pic1.png (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/pics/native_call_wasm.PNG (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/pics/request.PNG (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/pics/safe.PNG (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/pics/sensor_callflow.PNG (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/pics/sub.PNG (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/pics/vgl_demo.png (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/pics/vgl_demo2.png (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/pics/vgl_demo_linux.png (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/pics/vgl_linux.PNG (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/pics/wamr-arch.JPG (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/pics/wamr_memory_model.png (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/pics/wamr_menu_config.png (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/port_wamr.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/pthread_impls.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/pthread_library.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/ref_types.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/release_ack.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/roadmap.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/semantic_version.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/socket_api.md (100%) create mode 100644 lib/wasm-micro-runtime-WAMR-1.3.3/doc/source_debugging.md create mode 100644 lib/wasm-micro-runtime-WAMR-1.3.3/doc/source_debugging_aot.md rename lib/{wasm-micro-runtime-WAMR-1.3.0/doc/source_debugging.md => wasm-micro-runtime-WAMR-1.3.3/doc/source_debugging_interpreter.md} (55%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/wamr_api.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/wasm_c_api.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/doc/xip.md (100%) create mode 100644 lib/wasm-micro-runtime-WAMR-1.3.3/idf_component.yml rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/go/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/go/build.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/go/go.mod (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/go/go.sum (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/go/samples/build.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/go/samples/run.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/go/samples/test.go (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/go/samples/wasm-app/build.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/go/samples/wasm-app/main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/go/wamr/cgo.go (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/go/wamr/instance.go (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/go/wamr/instance_test.go (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/go/wamr/module.go (96%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/go/wamr/module_test.go (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/go/wamr/packaged/include/dummy.go (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/go/wamr/packaged/lib/darwin-aarch64/dummy.go (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/go/wamr/packaged/lib/darwin-amd64/dummy.go (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/go/wamr/packaged/lib/dummy.go (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/go/wamr/packaged/lib/linux-amd64/dummy.go (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/go/wamr/runtime.go (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/go/wamr/runtime_test.go (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/.gitignore (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/LICENSE (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/MANIFEST.in (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/pyproject.toml (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/setup.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/src/wamr/__init__.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/src/wamr/libs/.placeholder (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/src/wamr/wamrapi/__init__.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/src/wamr/wamrapi/wamr.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/src/wamr/wasmcapi/__init__.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/src/wamr/wasmcapi/binding.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/src/wamr/wasmcapi/ffi.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/utils/create_lib.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/wamr-api/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/wamr-api/requirements.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/wamr-api/samples/basic/compile.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/wamr-api/samples/basic/main.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/wamr-api/samples/basic/sum.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/wamr-api/samples/native-symbol/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/wamr-api/samples/native-symbol/compile.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/wamr-api/samples/native-symbol/func.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/wamr-api/samples/native-symbol/main.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/wasm-c-api/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/wasm-c-api/docs/design.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/wasm-c-api/docs/images/python_package_life_cycle.png (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/wasm-c-api/docs/setup_dev_env.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/wasm-c-api/requirements.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/wasm-c-api/samples/hello.wat (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/wasm-c-api/samples/hello_oop.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/wasm-c-api/samples/hello_procedural.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/wasm-c-api/tests/__init__.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/wasm-c-api/tests/context.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/wasm-c-api/tests/test_advanced.py (93%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/wasm-c-api/tests/test_basic.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/language-bindings/python/wasm-c-api/utils/bindgen.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/README.md (98%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/app-samples/hello-world-cmake/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/app-samples/hello-world-cmake/build.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/app-samples/hello-world-cmake/main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/app-samples/hello-world-cmake/print.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/app-samples/hello-world/build.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/app-samples/hello-world/main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/alios-things/aos.mk (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/alios-things/src/main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/alios-things/src/test_wasm.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/android/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/android/build_jit.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/android/build_llvm.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/android/wasm-jni.cpp (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/common/libc_wasi.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/cosmopolitan/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/cosmopolitan/build_cosmocc.sh (76%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/cosmopolitan/main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/darwin/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/darwin/build_jit.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/darwin/build_llvm.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/darwin/main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/esp-idf/.gitignore (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/esp-idf/CMakeLists.txt (68%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/esp-idf/build_and_run.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/esp-idf/main/CMakeLists.txt (70%) create mode 100644 lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/esp-idf/main/idf_component.yml rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/esp-idf/main/main.c (98%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/esp-idf/main/test_wasm.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/esp-idf/sdkconfig.defaults (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/esp-idf/sdkconfig.defaults.esp32 (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/esp-idf/sdkconfig.defaults.esp32c3 (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/freebsd/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/freebsd/build_jit.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/freebsd/build_llvm.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/freebsd/main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/ios/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/ios/generate_xcodeproj.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/linux-sgx/CMakeLists.txt (92%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/linux-sgx/CMakeLists_minimal.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/linux-sgx/enclave-sample/Makefile (94%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/linux-sgx/enclave-sample/Makefile_minimal (99%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/linux/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/linux/build_jit.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/linux/build_llvm.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/linux/main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/nuttx/main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/nuttx/wamr.mk (95%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/posix/main.c (97%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/riot/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/riot/Makefile (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/riot/iwasmt.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/riot/test_wasm.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/rt-thread/SConscript (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/rt-thread/iwasm.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/rt-thread/iwasm.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/vxworks/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/vxworks/main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/windows/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/windows/build_llvm.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/windows/main.c (98%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/windows/wasi_filtered_tests.json (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/zephyr/simple/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/zephyr/simple/Dockerfile (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/zephyr/simple/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/zephyr/simple/boards/nucleo_f767zi.conf (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/zephyr/simple/boards/qemu_cortex_a53.conf (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/zephyr/simple/build_and_run.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/zephyr/simple/prj.conf (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/zephyr/simple/src/main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/zephyr/simple/src/test_wasm.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/zephyr/simple/src/test_wasm_riscv64.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/zephyr/simple/src/wasm-app-riscv64/build.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/product-mini/platforms/zephyr/simple/src/wasm-app-riscv64/main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/basic/.gitignore (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/basic/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/basic/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/basic/build.sh (94%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/basic/run.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/basic/src/main.c (90%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/basic/src/native_impl.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/basic/wasm-apps/testapp.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/bh-atomic/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/bh-atomic/main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/file/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/file/README.md (97%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/file/src/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/file/src/main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/file/wasm-app/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/file/wasm-app/main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/gui/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/gui/build.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/gui/lv_config/lv_conf.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/gui/lv_config/lv_drv_conf.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/gui/lv_config/system_header.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/gui/wamr_config_gui.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/gui/wasm-apps/build_apps.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/gui/wasm-apps/decrease/Makefile (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/gui/wasm-apps/decrease/src/main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/gui/wasm-apps/increase/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/gui/wasm-apps/increase/Makefile (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/gui/wasm-apps/increase/src/main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/gui/wasm-runtime-wgl/src/platform/linux/iwasm_main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/gui/wasm-runtime-wgl/src/platform/linux/lv_drv_conf.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/gui/wasm-runtime-wgl/src/platform/linux/main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/gui/wasm-runtime-wgl/src/platform/zephyr/LICENSE (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/gui/wasm-runtime-wgl/src/platform/zephyr/XPT2046.c (98%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/gui/wasm-runtime-wgl/src/platform/zephyr/XPT2046.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/gui/wasm-runtime-wgl/src/platform/zephyr/board_config.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display_ili9340.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display_ili9340.h (95%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display_ili9340_adafruit_1480.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/gui/wasm-runtime-wgl/src/platform/zephyr/iwasm_main.c (97%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/gui/wasm-runtime-wgl/src/platform/zephyr/main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/gui/wasm-runtime-wgl/src/platform/zephyr/pin_config_jlf.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/gui/wasm-runtime-wgl/src/platform/zephyr/pin_config_stm32.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/inst-context-threads/.gitignore (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/inst-context-threads/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/inst-context-threads/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/inst-context-threads/build.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/inst-context-threads/run.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/inst-context-threads/src/main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/inst-context-threads/src/my_context.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/inst-context-threads/src/native_impl.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/inst-context-threads/wasm-apps/testapp.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/inst-context/.gitignore (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/inst-context/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/inst-context/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/inst-context/build.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/inst-context/run.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/inst-context/src/main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/inst-context/src/my_context.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/inst-context/src/native_impl.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/inst-context/wasm-apps/testapp.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/LICENCE.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/build.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/lv_config/lv_conf.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/lv_config/lv_drv_conf.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/vgl-native-ui-app/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/vgl-native-ui-app/CMakeLists.txt.in (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/vgl-native-ui-app/lv-drivers/.gitignore (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/vgl-native-ui-app/lv-drivers/display_indev.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/vgl-native-ui-app/lv-drivers/indev/mouse.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/vgl-native-ui-app/lv-drivers/indev/mouse.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/vgl-native-ui-app/lv-drivers/linux_display_indev.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/vgl-native-ui-app/lv-drivers/system_header.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/vgl-native-ui-app/main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/vgl-wasm-runtime/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/vgl-wasm-runtime/src/display_indev.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/display_indev.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/iwasm_main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/mouse.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/LICENSE (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/XPT2046.c (98%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/XPT2046.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/board_config.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_ili9340.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_ili9340.h (95%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_ili9340_adafruit_1480.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_indev.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/iwasm_main.c (96%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/pin_config_jlf.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/pin_config_stm32.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/wamr_config_littlevgl.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/wasm-apps/Makefile_wasm_app (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/wasm-apps/Makefile_wasm_app_no_wasi (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/wasm-apps/build_wasm_app.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/wasm-apps/src/display_indev.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/wasm-apps/src/main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/littlevgl/wasm-apps/src/system_header.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/mem-allocator/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/mem-allocator/main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/multi-module/CMakeLists.txt (99%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/multi-module/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/multi-module/src/main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/multi-module/wasm-apps/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/multi-module/wasm-apps/mA.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/multi-module/wasm-apps/mB.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/multi-module/wasm-apps/mC.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/multi-module/wasm-apps/mD.cpp (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/multi-module/wasm-apps/mE.cpp (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/multi-thread/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/multi-thread/wasm-apps/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/multi-thread/wasm-apps/main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/multi-thread/wasm-apps/main_global_atomic.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/multi-thread/wasm-apps/main_thread_exception.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/native-lib/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/native-lib/README.md (95%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/native-lib/test_add.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/native-lib/test_hello.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/native-lib/test_hello2.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/native-lib/test_sqrt.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/native-lib/wasm-app/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/native-lib/wasm-app/main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/ref-types/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/ref-types/src/hello.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/ref-types/src/hello.wat (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/sgx-ra/CMakeLists.txt (97%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/sgx-ra/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/sgx-ra/wasm-app/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/sgx-ra/wasm-app/main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/shared-module/.gitignore (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/shared-module/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/shared-module/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/shared-module/build.sh (97%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/shared-module/run.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/shared-module/src/main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/shared-module/wasm-apps/testapp.wat (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/simple/.gitignore (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/simple/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/simple/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/simple/build.sh (98%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/simple/profiles/arm-interp/toolchain.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/simple/profiles/arm-interp/wamr_config_simple.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/simple/profiles/arm64-aot/toolchain.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/simple/profiles/arm64-aot/wamr_config_simple.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/simple/profiles/arm64-interp/toolchain.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/simple/profiles/arm64-interp/wamr_config_simple.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/simple/profiles/host-aot/wamr_config_simple.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/simple/profiles/host-interp/wamr_config_simple.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/simple/profiles/macos-interp/wamr_config_simple.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/simple/sample_test_run.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/simple/src/iwasm_main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/simple/src/main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/simple/wasm-apps/connection.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/simple/wasm-apps/event_publisher.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/simple/wasm-apps/event_subscriber.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/simple/wasm-apps/request_handler.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/simple/wasm-apps/request_sender.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/simple/wasm-apps/sensor.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/simple/wasm-apps/timer.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/socket-api/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/socket-api/README.md (97%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/socket-api/sample_test_run.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/socket-api/wasm-src/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/socket-api/wasm-src/addr_resolve.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/socket-api/wasm-src/inc/.gitkeep (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/socket-api/wasm-src/multicast_client.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/socket-api/wasm-src/multicast_server.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/socket-api/wasm-src/send_recv.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/socket-api/wasm-src/socket_opts.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/socket-api/wasm-src/socket_utils.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/socket-api/wasm-src/tcp_client.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/socket-api/wasm-src/tcp_server.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/socket-api/wasm-src/timeout_client.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/socket-api/wasm-src/timeout_server.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/socket-api/wasm-src/udp_client.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/socket-api/wasm-src/udp_server.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/spawn-thread/CMakeLists.txt (97%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/spawn-thread/src/main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/spawn-thread/wasm-apps/CMakeLists.txt (97%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/spawn-thread/wasm-apps/sum.c (61%) create mode 100644 lib/wasm-micro-runtime-WAMR-1.3.3/samples/terminate/.gitignore create mode 100644 lib/wasm-micro-runtime-WAMR-1.3.3/samples/terminate/CMakeLists.txt create mode 100644 lib/wasm-micro-runtime-WAMR-1.3.3/samples/terminate/README.md create mode 100755 lib/wasm-micro-runtime-WAMR-1.3.3/samples/terminate/build.sh create mode 100755 lib/wasm-micro-runtime-WAMR-1.3.3/samples/terminate/run.sh create mode 100644 lib/wasm-micro-runtime-WAMR-1.3.3/samples/terminate/src/main.c create mode 100644 lib/wasm-micro-runtime-WAMR-1.3.3/samples/terminate/wasm-apps/testapp.wat rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasi-threads/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasi-threads/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasi-threads/wasm-apps/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasi-threads/wasm-apps/no_pthread.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasi-threads/wasm-apps/wasi_thread_start.S (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasi-threads/wasm-apps/wasi_thread_start.h (96%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api-imports/.gitignore (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api-imports/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api-imports/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api-imports/host/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api-imports/host/example1.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api-imports/wasm/CMakeLists.txt (91%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api-imports/wasm/inc/.gitkeep (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api-imports/wasm/send_recv.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/src/LICENSE (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/src/callback.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/src/callback.wat (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/src/callback_chain.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/src/callback_chain.wat (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/src/clone.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/src/clone.wat (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/src/empty_imports.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/src/empty_imports.wat (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/src/global.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/src/global.wat (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/src/globalexportimport-0.wat (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/src/globalexportimport-1.wat (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/src/globalexportimport.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/src/hello.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/src/hello.wat (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/src/hostref.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/src/hostref.wat (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/src/memory.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/src/memory.wat (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/src/multi.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/src/multi.wat (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/src/reflect.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/src/reflect.wat (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/src/serialize.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/src/serialize.wat (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/src/table.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/src/table.wat (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/src/threads.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/src/threads.wat (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/src/trap.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/src/trap.wat (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/wasm-c-api/src/utils/multi_module_utils.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/workload/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/workload/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/workload/XNNPACK/.gitignore (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/workload/XNNPACK/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/workload/XNNPACK/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/workload/XNNPACK/benchmark.patch (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/workload/XNNPACK/xnnpack.patch (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/workload/bwa/.gitignore (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/workload/bwa/CMakeLists.bwa_wasm.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/workload/bwa/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/workload/bwa/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/workload/bwa/bwa.patch (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/workload/cmake/FindBinaryen.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/workload/cmake/FindWASISDK.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/workload/include/.gitkeep (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/workload/meshoptimizer/.gitignore (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/workload/meshoptimizer/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/workload/meshoptimizer/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/workload/meshoptimizer/codecbench.patch (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/workload/preparation.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/workload/tensorflow/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/workload/tensorflow/build.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/workload/tensorflow/tf_lite.patch (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/workload/wasm-av1/.gitignore (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/workload/wasm-av1/CMakeLists.avx_wasm.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/workload/wasm-av1/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/workload/wasm-av1/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/workload/wasm-av1/av1-clang.patch (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/workload/wasm-av1/build.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/samples/workload/wasm-av1/wasm-av1.patch (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/.gitignore (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/docker-compose.yml (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/Dockerfile (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/db.sqlite3 (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/devices/__init__.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/devices/admin.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/devices/apps.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/devices/migrations/__init__.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/devices/models.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/application.html (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/appstore.html (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/empty.html (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/help.html (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/mysite.html (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/devices/tests.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/devices/views.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/manage.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/__init__.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/settings.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/urls.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/wsgi.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/server/Dockerfile (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/server/wasm_server.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/static/css/application.css (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/static/css/appstore.css (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/static/css/index.css (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/static/js/application.js (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/static/js/appstore.js (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/static/js/index.js (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/app(1).png (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/application.png (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/delete.png (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/download(1).png (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/menu.png (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/milky-way-2695569_1280.jpg (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/net_device.png (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/software-icon-32081.png (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/totalblack.png (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/connection.wasm (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/event_publisher.wasm (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/event_subscriber.wasm (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/request_handler.wasm (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/request_sender.wasm (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sensor.wasm (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/simple (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/connection.wasm (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/event_publisher.wasm (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/event_subscriber.wasm (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/request_handler.wasm (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/request_sender.wasm (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/timer.wasm (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/timer.wasm (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/ui_app.wasm (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/wasm_runtime_wgl (100%) create mode 100644 lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/append-aot-to-wasm/append_aot_to_wasm.py rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/binarydump-tool/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/binarydump-tool/binarydump.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/__init__.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/framework/__init__.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/framework/case_base.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/framework/engine.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/framework/framework.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/framework/suite.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/framework/test_api.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/framework/test_utils.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/harness/__init__.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/harness/harness_api.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/host-clients/src/host_app_sample.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/host-clients/src/makefile (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/set_dev_env.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/start.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/suites/01-life-cycle/__init__.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/suites/01-life-cycle/cases/01-install/__init__.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/suites/01-life-cycle/cases/01-install/case.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/suites/01-life-cycle/cases/02-request/__init__.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/suites/01-life-cycle/cases/02-request/case.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/suites/01-life-cycle/cases/03-event/__init__.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/suites/01-life-cycle/cases/03-event/case.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/suites/01-life-cycle/cases/04-request-internal/__init__.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/suites/01-life-cycle/cases/04-request-internal/case.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/suites/01-life-cycle/cases/05-event-internal/__init__.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/suites/01-life-cycle/cases/05-event-internal/case.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/suites/01-life-cycle/cases/06-timer/__init__.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/suites/01-life-cycle/cases/06-timer/case.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/suites/01-life-cycle/cases/07-sensor/__init__.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/suites/01-life-cycle/cases/07-sensor/case.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/suites/01-life-cycle/cases/08-on-destroy/__init__.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/suites/01-life-cycle/cases/08-on-destroy/case.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/suites/01-life-cycle/cases/__init__.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/suites/01-life-cycle/suite_setup.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/suites/01-life-cycle/test-app/01_install.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/suites/01-life-cycle/test-app/02_request.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/suites/01-life-cycle/test-app/03_event.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/suites/01-life-cycle/test-app/04_request_internal_req.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/suites/01-life-cycle/test-app/04_request_internal_resp.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/suites/01-life-cycle/test-app/05_event_internal_provider.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/suites/01-life-cycle/test-app/05_event_internal_subscriber.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/suites/01-life-cycle/test-app/06_timer.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/suites/01-life-cycle/test-app/07_sensor.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/suites/01-life-cycle/test-app/08_on_destroy.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/suites/01-life-cycle/test-app/build.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/suites/01-life-cycle/tools/product/start.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/suites/01-life-cycle/tools/product/stop.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/suites/__init__.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/component-test/suites/readme.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/host-tool/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/host-tool/external/cJSON/LICENSE (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/host-tool/external/cJSON/cJSON.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/host-tool/external/cJSON/cJSON.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/host-tool/external/cJSON/cjson.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/host-tool/src/host_tool_utils.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/host-tool/src/host_tool_utils.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/host-tool/src/main.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/host-tool/src/transport.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/host-tool/src/transport.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/pick-up-emscripten-headers/collect_files.py (100%) create mode 100644 lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/trans-jitted-func-name/trans_wasm_func_name.py rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/.gitattributes (100%) create mode 100644 lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/Config_building_target.png rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/Media/build_folder.png (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/Media/build_terminal.png (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/Media/change_workspace_dialog.png (100%) create mode 100644 lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/compilation_config.png create mode 100644 lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/compilation_config_2.png rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/Media/debug.png (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/Media/decoration_for_files.png (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/Media/docker_config.jpg (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/Media/docker_engine_config.png (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/Media/docker_images.png (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/Media/install_from_vsix.png (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/Media/new_project_page.png (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/Media/open_project_page.png (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/Media/project_template.png (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/Media/right_click_menus_1.png (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/Media/right_click_menus_2.png (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/Media/run.png (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/Media/save_configuration.png (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/Media/set_up_workspace_message.png (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/Media/wamr_ide_main_menu.png (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/README.md (87%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/Script/build.bat (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/Script/build.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/.eslintrc.json (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/.gitignore (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/.npmrc (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/.prettierrc.json (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/.vscodeignore (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/CONTRIBUTING.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/LICENSE (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/formatters/rust.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/package.json (99%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/resource/scripts/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/resource/scripts/boot_debugger_server.bat (86%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/resource/scripts/boot_debugger_server.sh (86%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/resource/scripts/build.bat (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/resource/scripts/build.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/resource/scripts/destroy.bat (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/resource/scripts/destroy.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/resource/scripts/project.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/resource/scripts/run.bat (85%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/resource/scripts/run.sh (86%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/resource/test/build.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/resource/test/test.rs (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/assert.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/ctype.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/errno.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/fcntl.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/inttypes.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/limits.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/pthread.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/stdarg.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/stdbool.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/stdint.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/stdio.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/stdlib.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/string.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/strings.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/resource/webview/css/style.css (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/resource/webview/js/configbuildtarget.js (86%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/resource/webview/js/newproj.js (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/resource/webview/page/configBuildTarget.html (77%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/resource/webview/page/newProject.html (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/src/constants.ts (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/src/debugConfigurationProvider.ts (69%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/src/decorationProvider.ts (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/src/extension.ts (99%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/src/taskProvider.ts (98%) create mode 100644 lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/test/runTest.ts create mode 100644 lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/test/suite/extension.test.ts create mode 100644 lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/test/suite/index.ts rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/src/test/suite/utils.ts (63%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/src/utilities/directoryUtilities.ts (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/src/utilities/dockerUtilities.ts (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/src/utilities/getUri.ts (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/src/utilities/lldbUtilities.ts (95%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/src/view/NewProjectPanel.ts (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/src/view/TargetConfigPanel.ts (92%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/VSCode-Extension/tsconfig.json (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/WASM-Debug-Server/Docker/Dockerfile (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/WASM-Debug-Server/Docker/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/WASM-Debug-Server/Docker/build_docker_image.bat (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/WASM-Debug-Server/Docker/build_docker_image.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/WASM-Debug-Server/Docker/resource/debug.sh (61%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/WASM-Debug-Server/Docker/resource/run.sh (66%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/WASM-Toolchain/Docker/.dockerignore (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/WASM-Toolchain/Docker/Dockerfile (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/WASM-Toolchain/Docker/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/WASM-Toolchain/Docker/build_docker_image.bat (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/WASM-Toolchain/Docker/build_docker_image.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/WASM-Toolchain/Docker/resource/build_wasm.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/test-tools/wamr-ide/WASM-Toolchain/Docker/resource/wamr_toolchain.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/benchmarks/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/benchmarks/coremark/README.md (92%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/benchmarks/coremark/build.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/benchmarks/coremark/run.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/benchmarks/coremark/test_pgo.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/benchmarks/dhrystone/LICENSE (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/benchmarks/dhrystone/build.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/benchmarks/dhrystone/include/dhry.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/benchmarks/dhrystone/run.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/benchmarks/dhrystone/src/dhry_1.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/benchmarks/dhrystone/src/dhry_2.c (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/benchmarks/dhrystone/test_pgo.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/benchmarks/jetstream/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/benchmarks/jetstream/build.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/benchmarks/jetstream/jetstream.patch (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/benchmarks/jetstream/run_aot.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/benchmarks/jetstream/test_pgo.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/benchmarks/jetstream/tsf.patch (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/benchmarks/libsodium/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/benchmarks/libsodium/build.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/benchmarks/libsodium/run_aot.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/benchmarks/libsodium/test_pgo.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/benchmarks/polybench/README.md (94%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/benchmarks/polybench/build.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/benchmarks/polybench/run_aot.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/benchmarks/polybench/run_interp.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/benchmarks/polybench/test_pgo.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/benchmarks/sightglass/README.md (93%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/benchmarks/sightglass/build.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/benchmarks/sightglass/run_aot.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/benchmarks/sightglass/run_interp.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/benchmarks/sightglass/test_pgo.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/unit/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/unit/main.cpp (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/wamr-compiler/.gitignore (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/wamr-compiler/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/wamr-compiler/test_shift_negative_constants.wat (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/wamr-test-suites/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/wamr-test-suites/spec-test-script/CHANGES (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/wamr-test-suites/spec-test-script/all.py (92%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/wamr-test-suites/spec-test-script/all.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/wamr-test-suites/spec-test-script/collect_coverage.sh (100%) create mode 100644 lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/spec-test-script/exception_handling.patch rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/wamr-test-suites/spec-test-script/ignore_cases.patch (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/wamr-test-suites/spec-test-script/multi_module_aot_ignore_cases.patch (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/wamr-test-suites/spec-test-script/runtest.py (96%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/wamr-test-suites/spec-test-script/simd_ignore_cases.patch (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/wamr-test-suites/spec-test-script/tail-call/return_call.wast (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/wamr-test-suites/spec-test-script/tail-call/return_call_indirect.wast (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/wamr-test-suites/spec-test-script/thread_proposal_fix_atomic_case.patch (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/wamr-test-suites/spec-test-script/thread_proposal_ignore_cases.patch (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/wamr-test-suites/test_wamr.sh (96%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/wamr-test-suites/tsan_suppressions.txt (96%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/wamr-test-suites/wamr-compiler-test-script/run_wamr_compiler_tests.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/wamr-test-suites/wasi-test-script/pipe.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/tests/wamr-test-suites/wasi-test-script/run_wasi_tests.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-compiler/CMakeLists.txt (75%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-compiler/README.md (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-compiler/build_llvm.py (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-compiler/build_llvm.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-compiler/build_llvm_arc.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-compiler/build_llvm_xtensa.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-compiler/main.c (95%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-sdk/Kconfig (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-sdk/Makefile (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-sdk/README.md (97%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-sdk/app/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-sdk/app/libc-builtin-sysroot/include/assert.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-sdk/app/libc-builtin-sysroot/include/ctype.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-sdk/app/libc-builtin-sysroot/include/errno.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-sdk/app/libc-builtin-sysroot/include/fcntl.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-sdk/app/libc-builtin-sysroot/include/inttypes.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-sdk/app/libc-builtin-sysroot/include/limits.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-sdk/app/libc-builtin-sysroot/include/pthread.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-sdk/app/libc-builtin-sysroot/include/semaphore.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-sdk/app/libc-builtin-sysroot/include/stdarg.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-sdk/app/libc-builtin-sysroot/include/stdbool.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-sdk/app/libc-builtin-sysroot/include/stdint.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-sdk/app/libc-builtin-sysroot/include/stdio.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-sdk/app/libc-builtin-sysroot/include/stdlib.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-sdk/app/libc-builtin-sysroot/include/string.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-sdk/app/libc-builtin-sysroot/include/strings.h (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-sdk/app/libc-builtin-sysroot/share/defined-symbols.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-sdk/app/wamr_toolchain.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-sdk/app/wasi_toolchain.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-sdk/build_sdk.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-sdk/menuconfig.sh (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-sdk/runtime/CMakeLists.txt (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-sdk/wamr_config_default.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-sdk/wamr_config_macos_release.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/wamr-sdk/wamr_config_ubuntu_release.cmake (100%) rename lib/{wasm-micro-runtime-WAMR-1.3.0 => wasm-micro-runtime-WAMR-1.3.3}/zephyr/module.yml (100%) diff --git a/cmake/libraries.cmake b/cmake/libraries.cmake index f17e9267dda..f92abcf452c 100644 --- a/cmake/libraries.cmake +++ b/cmake/libraries.cmake @@ -24,4 +24,4 @@ set(FLB_PATH_LIB_CARES "lib/c-ares-1.33.1") set(FLB_PATH_LIB_SNAPPY "lib/snappy-fef67ac") set(FLB_PATH_LIB_RDKAFKA "lib/librdkafka-2.4.0") set(FLB_PATH_LIB_RING_BUFFER "lib/lwrb") -set(FLB_PATH_LIB_WASM_MICRO_RUNTIME "lib/wasm-micro-runtime-WAMR-1.3.0") +set(FLB_PATH_LIB_WASM_MICRO_RUNTIME "lib/wasm-micro-runtime-WAMR-1.3.3") diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/build-scripts/esp-idf/wamr/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.0/build-scripts/esp-idf/wamr/CMakeLists.txt deleted file mode 100644 index 5ac04ddc92e..00000000000 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/build-scripts/esp-idf/wamr/CMakeLists.txt +++ /dev/null @@ -1,57 +0,0 @@ -# Copyright (C) 2021 Intel Corporation and others. All rights reserved. -# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception - -# Set WAMR's build options -if("${IDF_TARGET}" STREQUAL "esp32c3") - set(WAMR_BUILD_TARGET "RISCV32") -else() - set(WAMR_BUILD_TARGET "XTENSA") -endif() - -set(WAMR_BUILD_PLATFORM "esp-idf") - -if (NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE Release) -endif () - -if (NOT DEFINED WAMR_BUILD_INTERP) - set (WAMR_BUILD_INTERP 1) -endif () - -if (NOT DEFINED WAMR_BUILD_FAST_INTERP) - set (WAMR_BUILD_FAST_INTERP 1) -endif () - -if (NOT DEFINED WAMR_BUILD_AOT) - set (WAMR_BUILD_AOT 1) -endif () - -if (NOT DEFINED WAMR_BUILD_LIBC_BUILTIN) - set (WAMR_BUILD_LIBC_BUILTIN 1) -endif () - -if (NOT DEFINED WAMR_BUILD_APP_FRAMEWORK) - set (WAMR_BUILD_APP_FRAMEWORK 0) -endif () - -if (NOT CMAKE_BUILD_EARLY_EXPANSION) - if (WAMR_BUILD_TARGET STREQUAL "XTENSA") - idf_build_set_property(COMPILE_DEFINITIONS "-DBUILD_TARGET_XTENSA=1" APPEND) - endif () - if (WAMR_BUILD_INTERP) - idf_build_set_property(COMPILE_DEFINITIONS "-DWASM_ENABLE_INTERP=1" APPEND) - endif () - if (WAMR_BUILD_AOT) - idf_build_set_property(COMPILE_DEFINITIONS "-DWASM_ENABLE_AOT=1" APPEND) - endif () - - set(WAMR_ROOT_DIR ${CMAKE_CURRENT_LIST_DIR}/../../..) - include(${WAMR_ROOT_DIR}/build-scripts/runtime_lib.cmake) -endif() - -idf_component_register(SRCS ${WAMR_RUNTIME_LIB_SOURCE} ${PLATFORM_SHARED_SOURCE} - INCLUDE_DIRS ${IWASM_DIR}/include ${UTILS_SHARED_DIR} ${PLATFORM_SHARED_DIR} ${PLATFORM_SHARED_DIR}/../include - REQUIRES pthread lwip esp_timer -) - - diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_native.c b/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_native.c deleted file mode 100644 index c42bf7b318a..00000000000 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_native.c +++ /dev/null @@ -1,697 +0,0 @@ -/* - * Copyright (C) 2019 Intel Corporation. All rights reserved. - * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception - */ - -#include "wasm_native.h" -#include "wasm_runtime_common.h" -#include "bh_log.h" -#if WASM_ENABLE_INTERP != 0 -#include "../interpreter/wasm_runtime.h" -#endif -#if WASM_ENABLE_AOT != 0 -#include "../aot/aot_runtime.h" -#endif -#if WASM_ENABLE_THREAD_MGR != 0 -#include "../libraries/thread-mgr/thread_manager.h" -#endif - -#if !defined(BH_PLATFORM_ZEPHYR) && !defined(BH_PLATFORM_ALIOS_THINGS) \ - && !defined(BH_PLATFORM_OPENRTOS) && !defined(BH_PLATFORM_ESP_IDF) -#define ENABLE_QUICKSORT 1 -#else -#define ENABLE_QUICKSORT 0 -#endif - -#define ENABLE_SORT_DEBUG 0 - -#if ENABLE_SORT_DEBUG != 0 -#include -#endif - -static NativeSymbolsList g_native_symbols_list = NULL; - -#if WASM_ENABLE_LIBC_WASI != 0 -static void *g_wasi_context_key; -#endif /* WASM_ENABLE_LIBC_WASI */ - -uint32 -get_libc_builtin_export_apis(NativeSymbol **p_libc_builtin_apis); - -#if WASM_ENABLE_SPEC_TEST != 0 -uint32 -get_spectest_export_apis(NativeSymbol **p_libc_builtin_apis); -#endif - -uint32 -get_libc_wasi_export_apis(NativeSymbol **p_libc_wasi_apis); - -uint32_t -get_wasi_nn_export_apis(NativeSymbol **p_libc_wasi_apis); - -uint32 -get_base_lib_export_apis(NativeSymbol **p_base_lib_apis); - -uint32 -get_ext_lib_export_apis(NativeSymbol **p_ext_lib_apis); - -#if WASM_ENABLE_LIB_PTHREAD != 0 -bool -lib_pthread_init(); - -void -lib_pthread_destroy(); - -uint32 -get_lib_pthread_export_apis(NativeSymbol **p_lib_pthread_apis); -#endif - -#if WASM_ENABLE_LIB_WASI_THREADS != 0 -bool -lib_wasi_threads_init(void); - -void -lib_wasi_threads_destroy(void); - -uint32 -get_lib_wasi_threads_export_apis(NativeSymbol **p_lib_wasi_threads_apis); -#endif - -uint32 -get_libc_emcc_export_apis(NativeSymbol **p_libc_emcc_apis); - -uint32 -get_lib_rats_export_apis(NativeSymbol **p_lib_rats_apis); - -static bool -compare_type_with_signautre(uint8 type, const char signature) -{ - const char num_sig_map[] = { 'F', 'f', 'I', 'i' }; - - if (VALUE_TYPE_F64 <= type && type <= VALUE_TYPE_I32 - && signature == num_sig_map[type - VALUE_TYPE_F64]) { - return true; - } - -#if WASM_ENABLE_REF_TYPES != 0 - if ('r' == signature && type == VALUE_TYPE_EXTERNREF) - return true; -#endif - - /* TODO: a v128 parameter */ - return false; -} - -static bool -check_symbol_signature(const WASMType *type, const char *signature) -{ - const char *p = signature, *p_end; - char sig; - uint32 i = 0; - - if (!p || strlen(p) < 2) - return false; - - p_end = p + strlen(signature); - - if (*p++ != '(') - return false; - - if ((uint32)(p_end - p) < (uint32)(type->param_count + 1)) - /* signatures of parameters, and ')' */ - return false; - - for (i = 0; i < type->param_count; i++) { - sig = *p++; - - /* a f64/f32/i64/i32/externref parameter */ - if (compare_type_with_signautre(type->types[i], sig)) - continue; - - /* a pointer/string paramter */ - if (type->types[i] != VALUE_TYPE_I32) - /* pointer and string must be i32 type */ - return false; - - if (sig == '*') { - /* it is a pointer */ - if (i + 1 < type->param_count - && type->types[i + 1] == VALUE_TYPE_I32 && *p == '~') { - /* pointer length followed */ - i++; - p++; - } - } - else if (sig == '$') { - /* it is a string */ - } - else { - /* invalid signature */ - return false; - } - } - - if (*p++ != ')') - return false; - - if (type->result_count) { - if (p >= p_end) - return false; - - /* result types includes: f64,f32,i64,i32,externref */ - if (!compare_type_with_signautre(type->types[i], *p)) - return false; - - p++; - } - - if (*p != '\0') - return false; - - return true; -} - -#if ENABLE_QUICKSORT == 0 -static void -sort_symbol_ptr(NativeSymbol *native_symbols, uint32 n_native_symbols) -{ - uint32 i, j; - NativeSymbol temp; - - for (i = 0; i < n_native_symbols - 1; i++) { - for (j = i + 1; j < n_native_symbols; j++) { - if (strcmp(native_symbols[i].symbol, native_symbols[j].symbol) - > 0) { - temp = native_symbols[i]; - native_symbols[i] = native_symbols[j]; - native_symbols[j] = temp; - } - } - } -} -#else -static void -swap_symbol(NativeSymbol *left, NativeSymbol *right) -{ - NativeSymbol temp = *left; - *left = *right; - *right = temp; -} - -static void -quick_sort_symbols(NativeSymbol *native_symbols, int left, int right) -{ - NativeSymbol base_symbol; - int pin_left = left; - int pin_right = right; - - if (left >= right) { - return; - } - - base_symbol = native_symbols[left]; - while (left < right) { - while (left < right - && strcmp(native_symbols[right].symbol, base_symbol.symbol) - > 0) { - right--; - } - - if (left < right) { - swap_symbol(&native_symbols[left], &native_symbols[right]); - left++; - } - - while (left < right - && strcmp(native_symbols[left].symbol, base_symbol.symbol) < 0) { - left++; - } - - if (left < right) { - swap_symbol(&native_symbols[left], &native_symbols[right]); - right--; - } - } - native_symbols[left] = base_symbol; - - quick_sort_symbols(native_symbols, pin_left, left - 1); - quick_sort_symbols(native_symbols, left + 1, pin_right); -} -#endif /* end of ENABLE_QUICKSORT */ - -static void * -lookup_symbol(NativeSymbol *native_symbols, uint32 n_native_symbols, - const char *symbol, const char **p_signature, void **p_attachment) -{ - int low = 0, mid, ret; - int high = (int32)n_native_symbols - 1; - - while (low <= high) { - mid = (low + high) / 2; - ret = strcmp(symbol, native_symbols[mid].symbol); - if (ret == 0) { - *p_signature = native_symbols[mid].signature; - *p_attachment = native_symbols[mid].attachment; - return native_symbols[mid].func_ptr; - } - else if (ret < 0) - high = mid - 1; - else - low = mid + 1; - } - - return NULL; -} - -/** - * allow func_type and all outputs, like p_signature, p_attachment and - * p_call_conv_raw to be NULL - */ -void * -wasm_native_resolve_symbol(const char *module_name, const char *field_name, - const WASMType *func_type, const char **p_signature, - void **p_attachment, bool *p_call_conv_raw) -{ - NativeSymbolsNode *node, *node_next; - const char *signature = NULL; - void *func_ptr = NULL, *attachment; - - node = g_native_symbols_list; - while (node) { - node_next = node->next; - if (!strcmp(node->module_name, module_name)) { - if ((func_ptr = - lookup_symbol(node->native_symbols, node->n_native_symbols, - field_name, &signature, &attachment)) - || (field_name[0] == '_' - && (func_ptr = lookup_symbol( - node->native_symbols, node->n_native_symbols, - field_name + 1, &signature, &attachment)))) - break; - } - node = node_next; - } - - if (!p_signature || !p_attachment || !p_call_conv_raw) - return func_ptr; - - if (func_ptr) { - if (signature && signature[0] != '\0') { - /* signature is not empty, check its format */ - if (!func_type || !check_symbol_signature(func_type, signature)) { -#if WASM_ENABLE_WAMR_COMPILER == 0 - /* Output warning except running aot compiler */ - LOG_WARNING("failed to check signature '%s' and resolve " - "pointer params for import function (%s %s)\n", - signature, module_name, field_name); -#endif - return NULL; - } - else - /* Save signature for runtime to do pointer check and - address conversion */ - *p_signature = signature; - } - else - /* signature is empty */ - *p_signature = NULL; - - *p_attachment = attachment; - *p_call_conv_raw = node->call_conv_raw; - } - - return func_ptr; -} - -static bool -register_natives(const char *module_name, NativeSymbol *native_symbols, - uint32 n_native_symbols, bool call_conv_raw) -{ - NativeSymbolsNode *node; -#if ENABLE_SORT_DEBUG != 0 - struct timeval start; - struct timeval end; - unsigned long timer; -#endif - - if (!(node = wasm_runtime_malloc(sizeof(NativeSymbolsNode)))) - return false; -#if WASM_ENABLE_MEMORY_TRACING != 0 - os_printf("Register native, size: %u\n", sizeof(NativeSymbolsNode)); -#endif - - node->module_name = module_name; - node->native_symbols = native_symbols; - node->n_native_symbols = n_native_symbols; - node->call_conv_raw = call_conv_raw; - - /* Add to list head */ - node->next = g_native_symbols_list; - g_native_symbols_list = node; - -#if ENABLE_SORT_DEBUG != 0 - gettimeofday(&start, NULL); -#endif - -#if ENABLE_QUICKSORT == 0 - sort_symbol_ptr(native_symbols, n_native_symbols); -#else - quick_sort_symbols(native_symbols, 0, (int)(n_native_symbols - 1)); -#endif - -#if ENABLE_SORT_DEBUG != 0 - gettimeofday(&end, NULL); - timer = - 1000000 * (end.tv_sec - start.tv_sec) + (end.tv_usec - start.tv_usec); - LOG_ERROR("module_name: %s, nums: %d, sorted used: %ld us", module_name, - n_native_symbols, timer); -#endif - return true; -} - -bool -wasm_native_register_natives(const char *module_name, - NativeSymbol *native_symbols, - uint32 n_native_symbols) -{ - return register_natives(module_name, native_symbols, n_native_symbols, - false); -} - -bool -wasm_native_register_natives_raw(const char *module_name, - NativeSymbol *native_symbols, - uint32 n_native_symbols) -{ - return register_natives(module_name, native_symbols, n_native_symbols, - true); -} - -bool -wasm_native_unregister_natives(const char *module_name, - NativeSymbol *native_symbols) -{ - NativeSymbolsNode **prevp; - NativeSymbolsNode *node; - - prevp = &g_native_symbols_list; - while ((node = *prevp) != NULL) { - if (node->native_symbols == native_symbols - && !strcmp(node->module_name, module_name)) { - *prevp = node->next; - wasm_runtime_free(node); - return true; - } - prevp = &node->next; - } - return false; -} - -#if WASM_ENABLE_MODULE_INST_CONTEXT != 0 -static uint32 -context_key_to_idx(void *key) -{ - bh_assert(key != NULL); - uint32 idx = (uint32)(uintptr_t)key; - bh_assert(idx > 0); - bh_assert(idx <= WASM_MAX_INSTANCE_CONTEXTS); - return idx - 1; -} - -static void * -context_idx_to_key(uint32 idx) -{ - bh_assert(idx < WASM_MAX_INSTANCE_CONTEXTS); - return (void *)(uintptr_t)(idx + 1); -} - -typedef void (*dtor_t)(WASMModuleInstanceCommon *, void *); -static dtor_t g_context_dtors[WASM_MAX_INSTANCE_CONTEXTS]; - -static void -dtor_noop(WASMModuleInstanceCommon *inst, void *ctx) -{} - -void * -wasm_native_create_context_key(void (*dtor)(WASMModuleInstanceCommon *inst, - void *ctx)) -{ - uint32 i; - for (i = 0; i < WASM_MAX_INSTANCE_CONTEXTS; i++) { - if (g_context_dtors[i] == NULL) { - if (dtor == NULL) { - dtor = dtor_noop; - } - g_context_dtors[i] = dtor; - return context_idx_to_key(i); - } - } - LOG_ERROR("failed to allocate instance context key"); - return NULL; -} - -void -wasm_native_destroy_context_key(void *key) -{ - uint32 idx = context_key_to_idx(key); - bh_assert(g_context_dtors[idx] != NULL); - g_context_dtors[idx] = NULL; -} - -static WASMModuleInstanceExtraCommon * -wasm_module_inst_extra_common(WASMModuleInstanceCommon *inst) -{ -#if WASM_ENABLE_INTERP != 0 - if (inst->module_type == Wasm_Module_Bytecode) { - return &((WASMModuleInstance *)inst)->e->common; - } -#endif -#if WASM_ENABLE_AOT != 0 - if (inst->module_type == Wasm_Module_AoT) { - return &((AOTModuleInstanceExtra *)((AOTModuleInstance *)inst)->e) - ->common; - } -#endif - bh_assert(false); - return NULL; -} - -void -wasm_native_set_context(WASMModuleInstanceCommon *inst, void *key, void *ctx) -{ - uint32 idx = context_key_to_idx(key); - WASMModuleInstanceExtraCommon *common = wasm_module_inst_extra_common(inst); - common->contexts[idx] = ctx; -} - -void -wasm_native_set_context_spread(WASMModuleInstanceCommon *inst, void *key, - void *ctx) -{ -#if WASM_ENABLE_THREAD_MGR != 0 - wasm_cluster_set_context(inst, key, ctx); -#else - wasm_native_set_context(inst, key, ctx); -#endif -} - -void * -wasm_native_get_context(WASMModuleInstanceCommon *inst, void *key) -{ - uint32 idx = context_key_to_idx(key); - WASMModuleInstanceExtraCommon *common = wasm_module_inst_extra_common(inst); - return common->contexts[idx]; -} - -void -wasm_native_call_context_dtors(WASMModuleInstanceCommon *inst) -{ - WASMModuleInstanceExtraCommon *common = wasm_module_inst_extra_common(inst); - uint32 i; - for (i = 0; i < WASM_MAX_INSTANCE_CONTEXTS; i++) { - dtor_t dtor = g_context_dtors[i]; - if (dtor != NULL) { - dtor(inst, common->contexts[i]); - } - } -} - -void -wasm_native_inherit_contexts(WASMModuleInstanceCommon *child, - WASMModuleInstanceCommon *parent) -{ - WASMModuleInstanceExtraCommon *parent_common = - wasm_module_inst_extra_common(parent); - WASMModuleInstanceExtraCommon *child_common = - wasm_module_inst_extra_common(child); - bh_memcpy_s(child_common->contexts, - sizeof(*child_common->contexts) * WASM_MAX_INSTANCE_CONTEXTS, - parent_common->contexts, - sizeof(*parent_common->contexts) * WASM_MAX_INSTANCE_CONTEXTS); -} -#endif /* WASM_ENABLE_MODULE_INST_CONTEXT != 0 */ - -#if WASM_ENABLE_LIBC_WASI != 0 -WASIContext * -wasm_runtime_get_wasi_ctx(WASMModuleInstanceCommon *module_inst_comm) -{ - return wasm_native_get_context(module_inst_comm, g_wasi_context_key); -} - -void -wasm_runtime_set_wasi_ctx(WASMModuleInstanceCommon *module_inst_comm, - WASIContext *wasi_ctx) -{ - wasm_native_set_context(module_inst_comm, g_wasi_context_key, wasi_ctx); -} - -static void -wasi_context_dtor(WASMModuleInstanceCommon *inst, void *ctx) -{ - if (ctx == NULL) { - return; - } - wasm_runtime_destroy_wasi(inst); -} -#endif /* end of WASM_ENABLE_LIBC_WASI */ - -bool -wasm_native_init() -{ -#if WASM_ENABLE_SPEC_TEST != 0 || WASM_ENABLE_LIBC_BUILTIN != 0 \ - || WASM_ENABLE_BASE_LIB != 0 || WASM_ENABLE_LIBC_EMCC != 0 \ - || WASM_ENABLE_LIB_RATS != 0 || WASM_ENABLE_WASI_NN != 0 \ - || WASM_ENABLE_APP_FRAMEWORK != 0 || WASM_ENABLE_LIBC_WASI != 0 \ - || WASM_ENABLE_LIB_PTHREAD != 0 || WASM_ENABLE_LIB_WASI_THREADS != 0 - NativeSymbol *native_symbols; - uint32 n_native_symbols; -#endif - -#if WASM_ENABLE_LIBC_BUILTIN != 0 - n_native_symbols = get_libc_builtin_export_apis(&native_symbols); - if (!wasm_native_register_natives("env", native_symbols, n_native_symbols)) - goto fail; -#endif /* WASM_ENABLE_LIBC_BUILTIN */ - -#if WASM_ENABLE_SPEC_TEST - n_native_symbols = get_spectest_export_apis(&native_symbols); - if (!wasm_native_register_natives("spectest", native_symbols, - n_native_symbols)) - goto fail; -#endif /* WASM_ENABLE_SPEC_TEST */ - -#if WASM_ENABLE_LIBC_WASI != 0 - g_wasi_context_key = wasm_native_create_context_key(wasi_context_dtor); - if (g_wasi_context_key == NULL) { - goto fail; - } - n_native_symbols = get_libc_wasi_export_apis(&native_symbols); - if (!wasm_native_register_natives("wasi_unstable", native_symbols, - n_native_symbols)) - goto fail; - if (!wasm_native_register_natives("wasi_snapshot_preview1", native_symbols, - n_native_symbols)) - goto fail; -#endif - -#if WASM_ENABLE_BASE_LIB != 0 - n_native_symbols = get_base_lib_export_apis(&native_symbols); - if (n_native_symbols > 0 - && !wasm_native_register_natives("env", native_symbols, - n_native_symbols)) - goto fail; -#endif - -#if WASM_ENABLE_APP_FRAMEWORK != 0 - n_native_symbols = get_ext_lib_export_apis(&native_symbols); - if (n_native_symbols > 0 - && !wasm_native_register_natives("env", native_symbols, - n_native_symbols)) - goto fail; -#endif - -#if WASM_ENABLE_LIB_PTHREAD != 0 - if (!lib_pthread_init()) - goto fail; - - n_native_symbols = get_lib_pthread_export_apis(&native_symbols); - if (n_native_symbols > 0 - && !wasm_native_register_natives("env", native_symbols, - n_native_symbols)) - goto fail; -#endif - -#if WASM_ENABLE_LIB_WASI_THREADS != 0 - if (!lib_wasi_threads_init()) - goto fail; - - n_native_symbols = get_lib_wasi_threads_export_apis(&native_symbols); - if (n_native_symbols > 0 - && !wasm_native_register_natives("wasi", native_symbols, - n_native_symbols)) - goto fail; -#endif - -#if WASM_ENABLE_LIBC_EMCC != 0 - n_native_symbols = get_libc_emcc_export_apis(&native_symbols); - if (n_native_symbols > 0 - && !wasm_native_register_natives("env", native_symbols, - n_native_symbols)) - goto fail; -#endif /* WASM_ENABLE_LIBC_EMCC */ - -#if WASM_ENABLE_LIB_RATS != 0 - n_native_symbols = get_lib_rats_export_apis(&native_symbols); - if (n_native_symbols > 0 - && !wasm_native_register_natives("env", native_symbols, - n_native_symbols)) - goto fail; -#endif /* WASM_ENABLE_LIB_RATS */ - -#if WASM_ENABLE_WASI_NN != 0 - n_native_symbols = get_wasi_nn_export_apis(&native_symbols); - if (!wasm_native_register_natives("wasi_nn", native_symbols, - n_native_symbols)) - goto fail; -#endif - - return true; -#if WASM_ENABLE_SPEC_TEST != 0 || WASM_ENABLE_LIBC_BUILTIN != 0 \ - || WASM_ENABLE_BASE_LIB != 0 || WASM_ENABLE_LIBC_EMCC != 0 \ - || WASM_ENABLE_LIB_RATS != 0 || WASM_ENABLE_WASI_NN != 0 \ - || WASM_ENABLE_APP_FRAMEWORK != 0 || WASM_ENABLE_LIBC_WASI != 0 \ - || WASM_ENABLE_LIB_PTHREAD != 0 || WASM_ENABLE_LIB_WASI_THREADS != 0 -fail: - wasm_native_destroy(); - return false; -#endif -} - -void -wasm_native_destroy() -{ - NativeSymbolsNode *node, *node_next; - -#if WASM_ENABLE_LIBC_WASI != 0 - if (g_wasi_context_key != NULL) { - wasm_native_destroy_context_key(g_wasi_context_key); - g_wasi_context_key = NULL; - } -#endif -#if WASM_ENABLE_LIB_PTHREAD != 0 - lib_pthread_destroy(); -#endif - -#if WASM_ENABLE_LIB_WASI_THREADS != 0 - lib_wasi_threads_destroy(); -#endif - - node = g_native_symbols_list; - while (node) { - node_next = node->next; - wasm_runtime_free(node); - node = node_next; - } - - g_native_symbols_list = NULL; -} diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/esp-idf/espidf_socket.c b/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/esp-idf/espidf_socket.c deleted file mode 100644 index a75d82975d0..00000000000 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/esp-idf/espidf_socket.c +++ /dev/null @@ -1,231 +0,0 @@ -/* - * Copyright (C) 2021 Intel Corporation. All rights reserved. - * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception - */ - -#include "platform_api_vmcore.h" -#include "platform_api_extension.h" -#include "libc_errno.h" - -#include - -static void -textual_addr_to_sockaddr(const char *textual, int port, struct sockaddr_in *out) -{ - assert(textual); - - out->sin_family = AF_INET; - out->sin_port = htons(port); - out->sin_addr.s_addr = inet_addr(textual); -} - -static int -sockaddr_to_bh_sockaddr(const struct sockaddr *sockaddr, socklen_t socklen, - bh_sockaddr_t *bh_sockaddr) -{ - switch (sockaddr->sa_family) { - case AF_INET: - { - struct sockaddr_in *addr = (struct sockaddr_in *)sockaddr; - - assert(socklen >= sizeof(struct sockaddr_in)); - - bh_sockaddr->port = ntohs(addr->sin_port); - bh_sockaddr->addr_buffer.ipv4 = ntohl(addr->sin_addr.s_addr); - bh_sockaddr->is_ipv4 = true; - return BHT_OK; - } - default: - errno = EAFNOSUPPORT; - return BHT_ERROR; - } -} - -int -os_socket_create(bh_socket_t *sock, bool is_ipv4, bool is_tcp) -{ - if (!sock) { - return BHT_ERROR; - } - - if (is_tcp) { - *sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); - } - else { - *sock = socket(AF_INET, SOCK_DGRAM, 0); - } - - return (*sock == -1) ? BHT_ERROR : BHT_OK; -} - -int -os_socket_bind(bh_socket_t socket, const char *host, int *port) -{ - struct sockaddr_in addr; - socklen_t socklen; - int ret; - - assert(host); - assert(port); - - addr.sin_addr.s_addr = inet_addr(host); - addr.sin_port = htons(*port); - addr.sin_family = AF_INET; - - ret = bind(socket, (struct sockaddr *)&addr, sizeof(addr)); - if (ret < 0) { - goto fail; - } - - socklen = sizeof(addr); - if (getsockname(socket, (struct sockaddr *)&addr, &socklen) == -1) { - goto fail; - } - - *port = ntohs(addr.sin_port); - - return BHT_OK; - -fail: - return BHT_ERROR; -} - -int -os_socket_settimeout(bh_socket_t socket, uint64 timeout_us) -{ - struct timeval tv; - tv.tv_sec = timeout_us / 1000000UL; - tv.tv_usec = timeout_us % 1000000UL; - - if (setsockopt(socket, SOL_SOCKET, SO_RCVTIMEO, (const char *)&tv, - sizeof(tv)) - != 0) { - return BHT_ERROR; - } - - return BHT_OK; -} - -int -os_socket_listen(bh_socket_t socket, int max_client) -{ - if (listen(socket, max_client) != 0) { - return BHT_ERROR; - } - - return BHT_OK; -} - -int -os_socket_accept(bh_socket_t server_sock, bh_socket_t *sock, void *addr, - unsigned int *addrlen) -{ - struct sockaddr addr_tmp; - socklen_t len = sizeof(struct sockaddr); - - *sock = accept(server_sock, (struct sockaddr *)&addr_tmp, &len); - - if (*sock < 0) { - return BHT_ERROR; - } - - return BHT_OK; -} - -int -os_socket_connect(bh_socket_t socket, const char *addr, int port) -{ - struct sockaddr_in addr_in = { 0 }; - socklen_t addr_len = sizeof(struct sockaddr_in); - int ret = 0; - - textual_addr_to_sockaddr(addr, port, &addr_in); - - ret = connect(socket, (struct sockaddr *)&addr_in, addr_len); - if (ret == -1) { - return BHT_ERROR; - } - - return BHT_OK; -} - -int -os_socket_recv(bh_socket_t socket, void *buf, unsigned int len) -{ - return recv(socket, buf, len, 0); -} - -int -os_socket_send(bh_socket_t socket, const void *buf, unsigned int len) -{ - return send(socket, buf, len, 0); -} - -int -os_socket_close(bh_socket_t socket) -{ - close(socket); - return BHT_OK; -} - -__wasi_errno_t -os_socket_shutdown(bh_socket_t socket) -{ - if (shutdown(socket, O_RDWR) != 0) { - return convert_errno(errno); - } - return __WASI_ESUCCESS; -} - -int -os_socket_inet_network(bool is_ipv4, const char *cp, bh_ip_addr_buffer_t *out) -{ - if (!cp) - return BHT_ERROR; - - if (is_ipv4) { - if (inet_pton(AF_INET, cp, &out->ipv4) != 1) { - return BHT_ERROR; - } - /* Note: ntohl(INADDR_NONE) == INADDR_NONE */ - out->ipv4 = ntohl(out->ipv4); - } - else { - if (inet_pton(AF_INET6, cp, out->ipv6) != 1) { - return BHT_ERROR; - } - for (int i = 0; i < 8; i++) { - out->ipv6[i] = ntohs(out->ipv6[i]); - } - } - - return BHT_OK; -} - -int -os_socket_addr_remote(bh_socket_t socket, bh_sockaddr_t *sockaddr) -{ - struct sockaddr_in addr; - socklen_t addr_len = sizeof(addr); - - if (getpeername(socket, (struct sockaddr *)&addr, &addr_len) == -1) { - return BHT_ERROR; - } - - return sockaddr_to_bh_sockaddr((struct sockaddr *)&addr, addr_len, - sockaddr); -} - -int -os_socket_addr_local(bh_socket_t socket, bh_sockaddr_t *sockaddr) -{ - struct sockaddr_in addr; - socklen_t addr_len = sizeof(addr); - - if (getsockname(socket, (struct sockaddr *)&addr, &addr_len) == -1) { - return BHT_ERROR; - } - - return sockaddr_to_bh_sockaddr((struct sockaddr *)&addr, addr_len, - sockaddr); -} diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/Config_building_target.png b/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/Config_building_target.png deleted file mode 100644 index a1270007fda138dc28ea687ac4ecbcbee11e9072..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12887 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 s@Wq^mdKI;Vst0COB6xc~qF diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/compilation_config_2.png b/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/compilation_config_2.png deleted file mode 100644 index c16bb09ec344905b8f57342c96fbdc83cf9303de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22681 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 { - console.log(`Error from debugger process: ${data}`); - }); - }); - - after(async function () { - await vscode.debug.stopDebugging(); - debuggerProcess.kill(); - }); - - test('Rust formatters', async function () { - // timeout of 1 minutes - this.timeout(60 * 1000); - clearAllBp(); - setBpAtMarker(`${EXTENSION_PATH}/resource/test/test.rs`, "BP_MARKER_1"); - - const getVariables = new Promise((resolve, reject) => { - vscode.debug.registerDebugAdapterTrackerFactory("wamr-debug", { - createDebugAdapterTracker: function () { - return { - // The debug adapter has sent a Debug Adapter Protocol message to the editor. - onDidSendMessage: (message: DebugProtocol.ProtocolMessage) => { - if (message.type === "response") { - const m = message as DebugProtocol.Response; - if (m.command === "variables") { - const res = m as DebugProtocol.VariablesResponse; - resolve(res.body.variables); - } - } - }, - onError: (error: Error) => { - reject("An error occurred before vscode reached the breakpoint: " + error); - }, - onExit: (code: number | undefined) => { - reject(`Debugger exited before vscode reached the breakpoint with code: ${code}`); - }, - }; - } - }); - }); - - const config: WasmDebugConfig = { - type: "wamr-debug", - request: "attach", - name: "Attach Debugger", - stopOnEntry: false, - initCommands: [ - `command script import ${EXTENSION_PATH}/formatters/rust.py` - ], - attachCommands: [ - `process connect -p wasm connect://127.0.0.1:${port}` - ] - }; - - if (os.platform() === 'win32' || os.platform() === 'darwin') { - config.initCommands?.push('platform select remote-linux'); - } - - try { - await vscode.debug.startDebugging(undefined, config); - } catch (e) { - assert.fail("Could not connect to debug adapter"); - } - - // wait until vs code has reached breakpoint and has requested the variables. - const variables = await getVariables; - const namesToVariables = variables.reduce((acc: { [name: string]: DebugProtocol.Variable }, c) => { - if (c.evaluateName) { - acc[c.evaluateName] = c; - } - return acc; - }, {}); - - assert.includeMembers(Object.keys(namesToVariables), ["vector", "map", "string", "slice", "deque", "ref_cell"], "The Debugger did not return all expected debugger variables."); - - // Vector - assert.equal(namesToVariables["vector"].value, " (5) vec![1, 2, 3, 4, 12]", "The Vector summary string looks different than expected"); - - // Map - assert.equal(namesToVariables["map"].value, " size=5, capacity=8", "The Map summary string looks different than expected"); - - // String - assert.equal(namesToVariables["string"].value, " \"this is a string\"", "The String summary string looks different than expected"); - - // Slice - assert.equal(namesToVariables["slice"].value, " \"ello\"", "The Slice summary string looks different than expected"); - - // Deque - assert.equal(namesToVariables["deque"].value, " (5) VecDeque[1, 2, 3, 4, 5]", "The Deque summary string looks different than expected"); - - // RefCell - assert.equal(namesToVariables["ref_cell"].value, " 5", "The RefCell summary string looks different than expected"); - }); -}); diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/test/suite/index.ts b/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/test/suite/index.ts deleted file mode 100644 index 9b56c6ffe67..00000000000 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/test/suite/index.ts +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2019 Intel Corporation. All rights reserved. - * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception - */ - -import * as path from 'path'; -import * as Mocha from 'mocha'; -import * as glob from 'glob'; - -export function run(): Promise { - // Create the mocha test - const mocha = new Mocha({ - ui: 'tdd' - }); - - const testsRoot = path.resolve(__dirname, '..'); - - return new Promise((c, e) => { - glob('**/**.test.js', { cwd: testsRoot }, (err, files) => { - if (err) { - return e(err); - } - - // Add files to the test suite - files.forEach(f => mocha.addFile(path.resolve(testsRoot, f))); - - try { - // Run the mocha test - mocha.run(failures => { - if (failures > 0) { - e(new Error(`${failures} tests failed.`)); - } else { - c(); - } - }); - } catch (err) { - console.error(err); - e(err); - } - }); - }); -} diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/.clang-tidy b/lib/wasm-micro-runtime-WAMR-1.3.3/.clang-tidy similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/.clang-tidy rename to lib/wasm-micro-runtime-WAMR-1.3.3/.clang-tidy diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/.devcontainer/Dockerfile b/lib/wasm-micro-runtime-WAMR-1.3.3/.devcontainer/Dockerfile similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/.devcontainer/Dockerfile rename to lib/wasm-micro-runtime-WAMR-1.3.3/.devcontainer/Dockerfile diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/.devcontainer/devcontainer.json b/lib/wasm-micro-runtime-WAMR-1.3.3/.devcontainer/devcontainer.json similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/.devcontainer/devcontainer.json rename to lib/wasm-micro-runtime-WAMR-1.3.3/.devcontainer/devcontainer.json diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/scripts/extract_from_release_notes.py b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/scripts/extract_from_release_notes.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/.github/scripts/extract_from_release_notes.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/.github/scripts/extract_from_release_notes.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/scripts/fetch_and_compare_version.py b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/scripts/fetch_and_compare_version.py similarity index 92% rename from lib/wasm-micro-runtime-WAMR-1.3.0/.github/scripts/fetch_and_compare_version.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/.github/scripts/fetch_and_compare_version.py index ac206cadec3..ad9e53a0a5c 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/scripts/fetch_and_compare_version.py +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/scripts/fetch_and_compare_version.py @@ -42,9 +42,12 @@ def fetch_version_from_code(): def fetch_latest_git_tag(): - list_tag_cmd = ( - 'git tag --list WAMR-*.*.* --sort=committerdate --format="%(refname:short)"' - ) + """ + Get the most recent tag from the HEAD, + if it's main branch, it should be the latest release tag. + if it's release/x.x.x branch, it should be the latest release tag of the branch. + """ + list_tag_cmd = "git describe --tags --abbrev=0 HEAD" p = subprocess.run(shlex.split(list_tag_cmd), capture_output=True, check=True) all_tags = p.stdout.decode().strip() diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/scripts/reuse_latest_release_binaries.py b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/scripts/reuse_latest_release_binaries.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/.github/scripts/reuse_latest_release_binaries.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/.github/scripts/reuse_latest_release_binaries.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/build_docker_images.yml b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/build_docker_images.yml similarity index 99% rename from lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/build_docker_images.yml rename to lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/build_docker_images.yml index 819bf94c311..d5bf682c4ea 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/build_docker_images.yml +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/build_docker_images.yml @@ -21,7 +21,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Build and save Docker image(wasm-debug-server:${{ inputs.ver_num }}) to tar file run: | diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/build_iwasm_release.yml b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/build_iwasm_release.yml similarity index 98% rename from lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/build_iwasm_release.yml rename to lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/build_iwasm_release.yml index 64aa9a92c17..86e50ede99a 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/build_iwasm_release.yml +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/build_iwasm_release.yml @@ -35,11 +35,11 @@ jobs: build: runs-on: ${{ inputs.runner }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: get cached LLVM libraries id: retrieve_llvm_libs - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ./core/deps/llvm/build/bin diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/build_llvm_libraries.yml b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/build_llvm_libraries.yml similarity index 78% rename from lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/build_llvm_libraries.yml rename to lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/build_llvm_libraries.yml index 7ef1dd63f86..67eaf614d1b 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/build_llvm_libraries.yml +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/build_llvm_libraries.yml @@ -11,6 +11,9 @@ on: arch: required: true type: string + container_image: + required: false + type: string outputs: cache_key: description: "A cached key of LLVM libraries" @@ -19,17 +22,27 @@ on: jobs: build_llvm_libraries: runs-on: ${{ inputs.os }} + # Using given container image if it is specified. + # Otherwise, it will be ignored by the runner. + container: + image: ${{ inputs.container_image }} outputs: key: ${{ steps.create_lib_cache_key.outputs.key}} steps: - name: checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - - name: install dependencies + - name: install dependencies for non macos-14 + if: inputs.os != 'macos-14' run: /usr/bin/env python3 -m pip install -r requirements.txt working-directory: build-scripts + - name: install dependencies for macos-14 + if: inputs.os == 'macos-14' + run: /usr/bin/env python3 -m pip install -r requirements.txt --break-system-packages + working-directory: build-scripts + - name: retrive the last commit ID id: get_last_commit run: echo "last_commit=$(GH_TOKEN=${{ secrets.GITHUB_TOKEN }} /usr/bin/env python3 ./build_llvm.py --llvm-ver)" >> $GITHUB_OUTPUT @@ -45,7 +58,7 @@ jobs: - name: Cache LLVM libraries id: retrieve_llvm_libs - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ./core/deps/llvm/build/bin @@ -55,7 +68,7 @@ jobs: ./core/deps/llvm/build/share key: ${{ steps.create_lib_cache_key.outputs.key}} - - uses: actions/cache@v3 + - uses: actions/cache@v4 with: path: ~/.ccache key: 0-ccache-${{ inputs.os }}-${{ steps.get_last_commit.outputs.last_commit }} @@ -63,7 +76,7 @@ jobs: 0-ccache-${{ inputs.os }} if: steps.retrieve_llvm_libs.outputs.cache-hit != 'true' && inputs.os == 'ubuntu-20.04' - - uses: actions/cache@v3 + - uses: actions/cache@v4 with: path: ~/.cache/ccache key: 0-ccache-${{ inputs.os }}-${{ steps.get_last_commit.outputs.last_commit }} @@ -71,10 +84,11 @@ jobs: 0-ccache-${{ inputs.os }} if: steps.retrieve_llvm_libs.outputs.cache-hit != 'true' && inputs.os == 'ubuntu-22.04' + # Don't install dependencies if the cache is hit or running in docker container - run: sudo apt install -y ccache ninja-build - if: steps.retrieve_llvm_libs.outputs.cache-hit != 'true' && startsWith(inputs.os, 'ubuntu') + if: steps.retrieve_llvm_libs.outputs.cache-hit != 'true' && startsWith(inputs.os, 'ubuntu') && inputs.container_image == '' - - uses: actions/cache@v3 + - uses: actions/cache@v4 with: path: ~/Library/Caches/ccache key: 0-ccache-${{ inputs.os }}-${{ steps.get_last_commit.outputs.last_commit }} diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/build_wamr_lldb.yml b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/build_wamr_lldb.yml similarity index 98% rename from lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/build_wamr_lldb.yml rename to lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/build_wamr_lldb.yml index 1a73750a642..03474c53e14 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/build_wamr_lldb.yml +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/build_wamr_lldb.yml @@ -47,7 +47,7 @@ jobs: PYTHON_UBUNTU_STANDALONE_BUILD: https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.10.11+20230507-x86_64-unknown-linux-gnu-install_only.tar.gz PYTHON_MACOS_STANDALONE_BUILD: https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.10.11+20230507-x86_64-apple-darwin-install_only.tar.gz steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: download and install wasi-sdk run: | @@ -60,7 +60,7 @@ jobs: - name: Cache build id: lldb_build_cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ./core/deps/llvm-project/build/bin @@ -82,9 +82,7 @@ jobs: - name: install utils macos if: steps.lldb_build_cache.outputs.cache-hit != 'true' && contains(inputs.runner, 'macos') run: | - brew remove swig - brew install swig@4.1 cmake ninja libedit - brew link --overwrite swig@4.1 + brew install swig cmake ninja libedit sudo rm -rf /Library/Developer/CommandLineTools - name: install utils ubuntu diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/build_wamr_sdk.yml b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/build_wamr_sdk.yml similarity index 98% rename from lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/build_wamr_sdk.yml rename to lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/build_wamr_sdk.yml index fff6d85df74..f4ca9afd481 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/build_wamr_sdk.yml +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/build_wamr_sdk.yml @@ -35,7 +35,7 @@ jobs: build: runs-on: ${{ inputs.runner }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: download and install wasi-sdk run: | diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/build_wamr_vscode_ext.yml b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/build_wamr_vscode_ext.yml similarity index 98% rename from lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/build_wamr_vscode_ext.yml rename to lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/build_wamr_vscode_ext.yml index 3dfb290cf77..b91f054cf60 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/build_wamr_vscode_ext.yml +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/build_wamr_vscode_ext.yml @@ -18,7 +18,7 @@ jobs: build: runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Use Node.js 16.x uses: actions/setup-node@v3 diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/build_wamrc.yml b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/build_wamrc.yml similarity index 97% rename from lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/build_wamrc.yml rename to lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/build_wamrc.yml index 11c5de9bafe..7c4dab039f2 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/build_wamrc.yml +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/build_wamrc.yml @@ -35,11 +35,11 @@ jobs: build: runs-on: ${{ inputs.runner }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: get cached LLVM libraries id: retrieve_llvm_libs - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ./core/deps/llvm/build/bin diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/coding_guidelines.yml b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/coding_guidelines.yml similarity index 96% rename from lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/coding_guidelines.yml rename to lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/coding_guidelines.yml index 17d60ac43d7..b0aa0a2b865 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/coding_guidelines.yml +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/coding_guidelines.yml @@ -19,7 +19,7 @@ jobs: runs-on: ubuntu-20.04 steps: - name: checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/compilation_on_android_ubuntu.yml b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/compilation_on_android_ubuntu.yml similarity index 95% rename from lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/compilation_on_android_ubuntu.yml rename to lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/compilation_on_android_ubuntu.yml index 98d346f9ebb..55383014fe6 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/compilation_on_android_ubuntu.yml +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/compilation_on_android_ubuntu.yml @@ -85,13 +85,13 @@ jobs: llvm_cache_key: ${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }} steps: - name: checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 # since jobs.id can't contain the dot character # it is hard to use `format` to assemble the cache key - name: Get LLVM libraries id: retrieve_llvm_libs - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ./core/deps/llvm/build/bin @@ -145,6 +145,7 @@ jobs: "-DWAMR_BUILD_SIMD=1", "-DWAMR_BUILD_TAIL_CALL=1", "-DWAMR_DISABLE_HW_BOUND_CHECK=1", + "-DWAMR_ENABLE_SHARED_MEMORY_MMAP=1", ] os: [ubuntu-22.04] platform: [android, linux] @@ -213,13 +214,13 @@ jobs: llvm_cache_key: ${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }} steps: - name: checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 # only download llvm cache when needed - name: Get LLVM libraries id: retrieve_llvm_libs if: endsWith(matrix.make_options_run_mode, '_JIT_BUILD_OPTIONS') - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ./core/deps/llvm/build/bin @@ -284,12 +285,12 @@ jobs: steps: - name: checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Get LLVM libraries id: retrieve_llvm_libs if: (!endsWith(matrix.make_options, '_INTERP_BUILD_OPTIONS')) - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ./core/deps/llvm/build/bin @@ -322,7 +323,7 @@ jobs: run: | VERBOSE=1 cmake -S . -B build ${{ matrix.make_options }} - cmake --build build --config Release --parallel 4 + cmake --build build --config Debug --parallel 4 ctest --test-dir build --output-on-failure working-directory: samples/wasm-c-api @@ -350,7 +351,7 @@ jobs: llvm_cache_key: ${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }} steps: - name: checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: download and install wasi-sdk run: | @@ -367,7 +368,7 @@ jobs: sudo mv wabt-1.0.31 wabt - name: Get LLVM libraries id: retrieve_llvm_libs - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ./core/deps/llvm/build/bin @@ -393,7 +394,7 @@ jobs: cd samples/file mkdir build && cd build cmake .. - cmake --build . --config Release --parallel 4 + cmake --build . --config Debug --parallel 4 ./src/iwasm -f wasm-app/file.wasm -d . - name: Build Sample [multi-thread] @@ -401,7 +402,7 @@ jobs: cd samples/multi-thread mkdir build && cd build cmake .. - cmake --build . --config Release --parallel 4 + cmake --build . --config Debug --parallel 4 ./iwasm wasm-apps/test.wasm - name: Build Sample [multi-module] @@ -409,7 +410,7 @@ jobs: cd samples/multi-module mkdir build && cd build cmake .. -DWAMR_BUILD_AOT=1 - cmake --build . --config Release --parallel 4 + cmake --build . --config Debug --parallel 4 ./multi_module mC.wasm ./multi_module mC.aot @@ -418,7 +419,7 @@ jobs: cd samples/spawn-thread mkdir build && cd build cmake .. - cmake --build . --config Release --parallel 4 + cmake --build . --config Debug --parallel 4 ./spawn_thread - name: Build Sample [ref-types] @@ -426,7 +427,7 @@ jobs: cd samples/ref-types mkdir build && cd build cmake .. - cmake --build . --config Release --parallel 4 + cmake --build . --config Debug --parallel 4 ./hello - name: Build Sample [simple] @@ -441,7 +442,7 @@ jobs: cd samples/wasi-threads mkdir build && cd build cmake .. - cmake --build . --config Release --parallel 4 + cmake --build . --config Debug --parallel 4 ./iwasm wasm-apps/no_pthread.wasm - name: Build Sample [shared-module] @@ -450,6 +451,12 @@ jobs: ./build.sh ./run.sh + - name: Build Sample [terminate] + run: | + cd samples/terminate + ./build.sh + ./run.sh + test: needs: [ @@ -513,7 +520,7 @@ jobs: test_option: $SIMD_TEST_OPTIONS steps: - name: checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: download and install wasi-sdk if: matrix.test_option == '$WASI_TEST_OPTIONS' @@ -548,7 +555,7 @@ jobs: - name: Get LLVM libraries if: env.USE_LLVM == 'true' id: retrieve_llvm_libs - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ./core/deps/llvm/build/bin @@ -610,7 +617,7 @@ jobs: steps: - name: checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: install dependencies run: | @@ -619,6 +626,12 @@ jobs: npm install working-directory: test-tools/wamr-ide/VSCode-Extension + - name: code style check + run: | + npm install --save-dev prettier + npm run prettier-format-check + working-directory: test-tools/wamr-ide/VSCode-Extension + - name: build iwasm with source debugging feature run: | mkdir build @@ -629,7 +642,7 @@ jobs: - name: Cache LLDB id: cache-lldb - uses: actions/cache@v3 + uses: actions/cache@v4 env: cache-name: cache-lldb-vscode with: diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/compilation_on_macos.yml b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/compilation_on_macos.yml similarity index 93% rename from lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/compilation_on_macos.yml rename to lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/compilation_on_macos.yml index 12f1d73cb91..f3ec53057c3 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/compilation_on_macos.yml +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/compilation_on_macos.yml @@ -1,7 +1,7 @@ # Copyright (C) 2019 Intel Corporation. All rights reserved. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -name: compilation on macos-latest +name: compilation on macos on: # will be triggered on PR events @@ -58,7 +58,7 @@ jobs: build_llvm_libraries: uses: ./.github/workflows/build_llvm_libraries.yml with: - os: "macos-latest" + os: "macos-13" arch: "X86" build_wamrc: @@ -67,15 +67,15 @@ jobs: strategy: matrix: include: - - os: macos-latest + - os: macos-13 llvm_cache_key: ${{ needs.build_llvm_libraries.outputs.cache_key }} steps: - name: checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Get LLVM libraries id: retrieve_llvm_libs - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ./core/deps/llvm/build/bin @@ -128,7 +128,7 @@ jobs: "-DWAMR_BUILD_TAIL_CALL=1", "-DWAMR_DISABLE_HW_BOUND_CHECK=1", ] - os: [macos-latest] + os: [macos-13] platform: [darwin] exclude: # uncompatiable feature and platform @@ -170,17 +170,17 @@ jobs: - make_options_run_mode: $LLVM_EAGER_JIT_BUILD_OPTIONS make_options_feature: "-DWAMR_BUILD_MINI_LOADER=1" include: - - os: macos-latest + - os: macos-13 llvm_cache_key: ${{ needs.build_llvm_libraries.outputs.cache_key }} steps: - name: checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 # only download llvm cache when needed - name: Get LLVM libraries id: retrieve_llvm_libs if: endsWith(matrix.make_options_run_mode, '_JIT_BUILD_OPTIONS') - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ./core/deps/llvm/build/bin @@ -215,7 +215,7 @@ jobs: #$LLVM_EAGER_JIT_BUILD_OPTIONS, #$AOT_BUILD_OPTIONS, ] - os: [macos-latest] + os: [macos-13] wasi_sdk_release: [ "https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-macos.tar.gz", @@ -226,7 +226,7 @@ jobs: ] steps: - name: checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: download and install wabt run: | @@ -247,7 +247,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [macos-latest] + os: [macos-13] wasi_sdk_release: [ "https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-macos.tar.gz", @@ -258,7 +258,7 @@ jobs: ] steps: - name: checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: download and install wasi-sdk run: | @@ -285,7 +285,7 @@ jobs: cd samples/file mkdir build && cd build cmake .. - cmake --build . --config Release --parallel 4 + cmake --build . --config Debug --parallel 4 ./src/iwasm -f wasm-app/file.wasm -d . - name: Build Sample [multi-thread] @@ -293,7 +293,7 @@ jobs: cd samples/multi-thread mkdir build && cd build cmake .. - cmake --build . --config Release --parallel 4 + cmake --build . --config Debug --parallel 4 ./iwasm wasm-apps/test.wasm - name: Build Sample [multi-module] @@ -301,7 +301,7 @@ jobs: cd samples/multi-module mkdir build && cd build cmake .. - cmake --build . --config Release --parallel 4 + cmake --build . --config Debug --parallel 4 ./multi_module mC.wasm - name: Build Sample [spawn-thread] @@ -309,7 +309,7 @@ jobs: cd samples/spawn-thread mkdir build && cd build cmake .. - cmake --build . --config Release --parallel 4 + cmake --build . --config Debug --parallel 4 ./spawn_thread - name: Build Sample [ref-types] @@ -317,7 +317,7 @@ jobs: cd samples/ref-types mkdir build && cd build cmake .. - cmake --build . --config Release --parallel 4 + cmake --build . --config Debug --parallel 4 ./hello - name: Build Sample [wasi-threads] @@ -325,7 +325,7 @@ jobs: cd samples/wasi-threads mkdir build && cd build cmake .. - cmake --build . --config Release --parallel 4 + cmake --build . --config Debug --parallel 4 ./iwasm wasm-apps/no_pthread.wasm - name: Build Sample [shared-module] @@ -333,3 +333,9 @@ jobs: cd samples/shared-module ./build.sh ./run.sh + + - name: Build Sample [terminate] + run: | + cd samples/terminate + ./build.sh + ./run.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/compilation_on_nuttx.yml b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/compilation_on_nuttx.yml similarity index 73% rename from lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/compilation_on_nuttx.yml rename to lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/compilation_on_nuttx.yml index 77b3da75a10..2eff73c2c33 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/compilation_on_nuttx.yml +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/compilation_on_nuttx.yml @@ -50,7 +50,10 @@ env: jobs: build_iwasm_on_nuttx: - runs-on: ubuntu-22.04 + runs-on: ubuntu-latest + container: + image: ghcr.io/apache/nuttx/apache-nuttx-ci-linux@sha256:d9261eacf6c6ebe656c571757751c803e8f04c3ae9b820320a5ea5dd57b7205a + strategy: matrix: nuttx_board_config: [ @@ -60,12 +63,14 @@ jobs: "boards/arm/rp2040/raspberrypi-pico/configs/nsh", # cortex-m7 "boards/arm/stm32h7/nucleo-h743zi/configs/nsh", - # riscv32imac + # riscv32imc + "boards/risc-v/espressif/esp32c3-generic/configs/nsh", + # riscv32gc "boards/risc-v/qemu-rv/rv-virt/configs/nsh", - # riscv64imac - "boards/risc-v/qemu-rv/rv-virt/configs/nsh64", # riscv64gc - "boards/risc-v/k210/maix-bit/configs/nsh", + "boards/risc-v/qemu-rv/rv-virt/configs/nsh64", + # arm64 + "boards/arm64/qemu/qemu-armv8a/configs/nsh", ] wamr_config_option: [ "CONFIG_INTERPRETERS_WAMR=y\\nCONFIG_INTERPRETERS_WAMR_AOT=y\\nCONFIG_INTERPRETERS_WAMR_FAST=y\\n", @@ -81,52 +86,29 @@ jobs: ] steps: - - name: Install Utilities - run: | - sudo apt install -y kconfig-frontends-nox genromfs - pip3 install pyelftools - pip3 install cxxfilt - - - name: Install ARM Compilers - if: contains(matrix.nuttx_board_config, 'arm') - run: sudo apt install -y gcc-arm-none-eabi - - - name: Install RISC-V Compilers - if: contains(matrix.nuttx_board_config, 'risc-v') - run: | - curl -L https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases/download/v12.3.0-1/xpack-riscv-none-elf-gcc-12.3.0-1-linux-x64.tar.gz > riscv.tar.gz - tar xvf riscv.tar.gz - echo "$PWD/xpack-riscv-none-elf-gcc-12.3.0-1/bin" >> $GITHUB_PATH - - - name: Install WASI-SDK - run: | - curl -L https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-19/wasi-sdk-19.0-linux.tar.gz > wasi-sdk.tar.gz - tar xvf wasi-sdk.tar.gz - sudo mv wasi-sdk-* /opt/wasi-sdk - - name: Checkout NuttX - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: apache/incubator-nuttx - ref: releases/12.3 + ref: releases/12.4 path: nuttx - name: Checkout NuttX Apps - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: apache/incubator-nuttx-apps - ref: releases/12.3 + ref: releases/12.4 path: apps - name: Checkout WAMR - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: ${{ github.repository }} path: apps/interpreters/wamr/wamr - name: Enable WAMR for NuttX run: | - find nuttx/boards -name defconfig | xargs sed -i '$a\CONFIG_EOL_IS_LF=y\nCONFIG_PSEUDOFS_SOFTLINKS=y\n${{ matrix.wamr_config_option }}' + find nuttx/boards -name defconfig | xargs sed -i '$a\CONFIG_EOL_IS_LF=y\n${{ matrix.wamr_config_option }}' find nuttx/boards/sim -name defconfig | xargs sed -i '$a\CONFIG_LIBM=y\n' - name: Build diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/compilation_on_sgx.yml b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/compilation_on_sgx.yml similarity index 98% rename from lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/compilation_on_sgx.yml rename to lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/compilation_on_sgx.yml index 0d19d83ad94..8dadb518df5 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/compilation_on_sgx.yml +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/compilation_on_sgx.yml @@ -119,7 +119,7 @@ jobs: source /opt/intel/sgxsdk/environment - name: checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Build iwasm run: | @@ -165,7 +165,7 @@ jobs: steps: - name: checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: download and install wasi-sdk run: | @@ -221,7 +221,7 @@ jobs: - name: Get LLVM libraries if: matrix.iwasm_make_options_run_mode == '$AOT_BUILD_OPTIONS' id: retrieve_llvm_libs - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ./core/deps/llvm/build/bin @@ -246,7 +246,7 @@ jobs: cd samples/file mkdir build && cd build cmake .. - cmake --build . --config Release --parallel 4 + cmake --build . --config Debug --parallel 4 cp wasm-app/file.wasm `pwd`/../../../product-mini/platforms/${{ matrix.platform }}/enclave-sample - name: Test Sample [file] in non-aot mode @@ -290,12 +290,12 @@ jobs: steps: - name: checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Get LLVM libraries if: matrix.running_mode == 'aot' id: retrieve_llvm_libs - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ./core/deps/llvm/build/bin diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/compilation_on_windows.yml b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/compilation_on_windows.yml similarity index 98% rename from lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/compilation_on_windows.yml rename to lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/compilation_on_windows.yml index 97a4aaae20e..a623ab1a774 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/compilation_on_windows.yml +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/compilation_on_windows.yml @@ -74,7 +74,7 @@ jobs: "-DWAMR_BUILD_LIBC_UVWASI=0 -DWAMR_BUILD_LIBC_WASI=1" ] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: clone uvwasi library if: ${{ !contains(matrix.build_options, '-DWAMR_BUILD_LIBC_UVWASI=0') }} @@ -108,7 +108,7 @@ jobs: ] steps: - name: checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: download and install wasi-sdk if: matrix.test_option == '$WASI_TEST_OPTIONS' diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/create_tag.yml b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/create_tag.yml similarity index 78% rename from lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/create_tag.yml rename to lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/create_tag.yml index 3a145bf041e..5480592a933 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/create_tag.yml +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/create_tag.yml @@ -24,7 +24,7 @@ jobs: new_tag: ${{ steps.preparation.outputs.new_tag }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 # Full git history is needed to get a proper list of commits and tags with: fetch-depth: 0 @@ -32,8 +32,22 @@ jobs: - name: prepare id: preparation run: | - # show latest 3 versions - git tag --list WAMR-*.*.* --sort=committerdate --format="%(refname:short)" | tail -n 3 + # show latest 3 versions on the branch that create release + # Set the initial commit to the head of the branch + commit="HEAD" + # + # Loop to get the three most recent tags + for i in {1..3} + do + # Get the most recent tag reachable from the current commit + tag=$(git describe --tags --abbrev=0 $commit) + + # Print the tag + echo "$tag" + + # Move to the commit before the found tag to find the next tag in the next iteration + commit=$(git rev-list -n 1 $tag^) + done # compare latest git tag and semantic version definition result=$(python3 ./.github/scripts/fetch_and_compare_version.py) echo "script result is ${result}" diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/hadolint_dockerfiles.yml b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/hadolint_dockerfiles.yml similarity index 97% rename from lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/hadolint_dockerfiles.yml rename to lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/hadolint_dockerfiles.yml index bdabeb6e5d4..c540649c895 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/hadolint_dockerfiles.yml +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/hadolint_dockerfiles.yml @@ -34,7 +34,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 # on default, hadolint will fail on warnings and errors - name: Run hadolint on dockerfiles diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/nightly_run.yml b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/nightly_run.yml similarity index 96% rename from lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/nightly_run.yml rename to lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/nightly_run.yml index 8153cea99f4..21b1be901c9 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/nightly_run.yml +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/nightly_run.yml @@ -68,13 +68,13 @@ jobs: llvm_cache_key: ${{ needs.build_llvm_libraries_on_ubuntu_2004.outputs.cache_key }} steps: - name: checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 # since jobs.id can't contain the dot character # it is hard to use `format` to assemble the cache key - name: Get LLVM libraries id: retrieve_llvm_libs - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ./core/deps/llvm/build/bin @@ -199,13 +199,13 @@ jobs: steps: - name: checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 # only download llvm cache when needed - name: Get LLVM libraries id: retrieve_llvm_libs if: endsWith(matrix.make_options_run_mode, '_JIT_BUILD_OPTIONS') - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ./core/deps/llvm/build/bin @@ -347,12 +347,12 @@ jobs: sanitizer: asan steps: - name: checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Get LLVM libraries id: retrieve_llvm_libs if: (!endsWith(matrix.make_options, '_INTERP_BUILD_OPTIONS')) - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ./core/deps/llvm/build/bin @@ -383,7 +383,9 @@ jobs: - name: Build Sample [wasm-c-api] run: | VERBOSE=1 - cmake -S . -B build ${{ matrix.make_options }} -D WAMR_BUILD_SANITIZER="${{matrix.sanitizer}}" + cmake -S . -B build ${{ matrix.make_options }} \ + -D WAMR_BUILD_SANITIZER="${{matrix.sanitizer}}" \ + -D WAMR_BUILD_QUICK_AOT_ENTRY=0 cmake --build build --config Release --parallel 4 ctest --test-dir build --output-on-failure working-directory: samples/wasm-c-api @@ -412,7 +414,7 @@ jobs: llvm_cache_key: ${{ needs.build_llvm_libraries_on_ubuntu_2004.outputs.cache_key }} steps: - name: checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: download and install wasi-sdk run: | @@ -429,7 +431,7 @@ jobs: - name: Get LLVM libraries id: retrieve_llvm_libs - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ./core/deps/llvm/build/bin @@ -507,6 +509,12 @@ jobs: cd samples/shared-module ./build.sh ./run.sh + + - name: Build Sample [terminate] + run: | + cd samples/terminate + ./build.sh + ./run.sh test: needs: [ @@ -593,7 +601,7 @@ jobs: test_option: $SIMD_TEST_OPTIONS steps: - name: checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: download and install wasi-sdk if: matrix.test_option == '$WASI_TEST_OPTIONS' @@ -624,14 +632,16 @@ jobs: run: echo "TEST_ON_X86_32=true" >> $GITHUB_ENV - name: set additional tsan options - run: echo "TSAN_OPTIONS=suppressions=$PWD/tsan_suppressions.txt" >> $GITHUB_ENV + run: | + echo "TSAN_OPTIONS=suppressions=$PWD/tsan_suppressions.txt" >> $GITHUB_ENV + sudo sysctl vm.mmap_rnd_bits=28 working-directory: tests/wamr-test-suites #only download llvm libraries in jit and aot mode - name: Get LLVM libraries if: env.USE_LLVM == 'true' id: retrieve_llvm_libs - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ./core/deps/llvm/build/bin @@ -666,7 +676,7 @@ jobs: - name: run tests timeout-minutes: 40 - run: ./test_wamr.sh ${{ matrix.test_option }} -t ${{ matrix.running_mode }} -T %{{matrix.sanitizer}} + run: ./test_wamr.sh ${{ matrix.test_option }} -t ${{ matrix.running_mode }} -T "${{ matrix.sanitizer }}" working-directory: ./tests/wamr-test-suites #only install x32 support libraries when to run x86_32 cases diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/release_process.yml b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/release_process.yml similarity index 97% rename from lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/release_process.yml rename to lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/release_process.yml index ef722acdb1f..cab3f1677f0 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/release_process.yml +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/release_process.yml @@ -28,7 +28,7 @@ jobs: outputs: upload_url: ${{ steps.create_release.outputs.upload_url }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: prepare the release note run: | @@ -69,7 +69,7 @@ jobs: needs: [create_tag, create_release] uses: ./.github/workflows/build_llvm_libraries.yml with: - os: "macos-latest" + os: "macos-13" arch: "AArch64 ARM Mips RISCV X86" # @@ -100,7 +100,7 @@ jobs: with: llvm_cache_key: ${{ needs.build_llvm_libraries_on_macos.outputs.cache_key }} release: true - runner: macos-latest + runner: macos-13 upload_url: ${{ needs.create_release.outputs.upload_url }} ver_num: ${{ needs.create_tag.outputs.new_ver }} @@ -132,7 +132,7 @@ jobs: with: cwd: product-mini/platforms/darwin llvm_cache_key: ${{ needs.build_llvm_libraries_on_macos.outputs.cache_key }} - runner: macos-latest + runner: macos-13 upload_url: ${{ needs.create_release.outputs.upload_url }} ver_num: ${{ needs.create_tag.outputs.new_ver}} @@ -163,7 +163,7 @@ jobs: uses: ./.github/workflows/build_wamr_sdk.yml with: config_file: wamr_config_macos_release.cmake - runner: macos-latest + runner: macos-13 upload_url: ${{ needs.create_release.outputs.upload_url }} ver_num: ${{ needs.create_tag.outputs.new_ver}} wasi_sdk_url: https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-19/wasi-sdk-19.0-macos.tar.gz @@ -209,7 +209,7 @@ jobs: needs: [create_tag, create_release] uses: ./.github/workflows/build_wamr_lldb.yml with: - runner: macos-latest + runner: macos-13 arch: universal upload_url: ${{ needs.create_release.outputs.upload_url }} ver_num: ${{ needs.create_tag.outputs.new_ver}} diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/reuse_latest_release_binaries.yml b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/reuse_latest_release_binaries.yml similarity index 98% rename from lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/reuse_latest_release_binaries.yml rename to lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/reuse_latest_release_binaries.yml index 7f82672a69a..c9832cec958 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/reuse_latest_release_binaries.yml +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/reuse_latest_release_binaries.yml @@ -28,7 +28,7 @@ jobs: outputs: result: ${{ steps.try_reuse.outputs.result }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 # Full git history is needed to get a proper list of commits and tags with: fetch-depth: 0 diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/spec_test_on_nuttx.yml b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/spec_test_on_nuttx.yml similarity index 69% rename from lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/spec_test_on_nuttx.yml rename to lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/spec_test_on_nuttx.yml index 48fff2d23c0..5bdad8f232a 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/.github/workflows/spec_test_on_nuttx.yml +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/.github/workflows/spec_test_on_nuttx.yml @@ -6,9 +6,10 @@ name: spec test on nuttx on: pull_request: types: - - closed - branches: - - main + - opened + - synchronize + paths: + - ".github/workflows/spec_test_on_nuttx.yml" schedule: - cron: '0 0 * * *' @@ -27,10 +28,13 @@ jobs: with: os: "ubuntu-22.04" arch: "ARM RISCV AArch64" + container_image: ghcr.io/apache/nuttx/apache-nuttx-ci-linux@sha256:d9261eacf6c6ebe656c571757751c803e8f04c3ae9b820320a5ea5dd57b7205a spec_test_on_qemu: - runs-on: ubuntu-22.04 + runs-on: ubuntu-latest needs: [build_llvm_libraries] + container: + image: ghcr.io/apache/nuttx/apache-nuttx-ci-linux@sha256:d9261eacf6c6ebe656c571757751c803e8f04c3ae9b820320a5ea5dd57b7205a strategy: matrix: target_config: [ @@ -91,48 +95,22 @@ jobs: wamr_test_option: { mode: "-t aot -X" } steps: - - name: Install Utilities - run: | - sudo apt install -y kconfig-frontends-nox genromfs - - - name: Install ARM Compilers - if: startsWith(matrix.target_config.config, 'boards/arm') - run: | - sudo apt install -y gcc-arm-none-eabi - wget --quiet https://developer.arm.com/-/media/Files/downloads/gnu/11.2-2022.02/binrel/gcc-arm-11.2-2022.02-x86_64-aarch64-none-elf.tar.xz - xz -d gcc-arm-11.2-2022.02-x86_64-aarch64-none-elf.tar.xz - tar xf gcc-arm-11.2-2022.02-x86_64-aarch64-none-elf.tar - echo "$PWD/gcc-arm-11.2-2022.02-x86_64-aarch64-none-elf/bin" >> $GITHUB_PATH - - - name: Install RISC-V Compilers - if: startsWith(matrix.target_config.config, 'boards/risc-v') - run: | - curl -L https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases/download/v12.3.0-1/xpack-riscv-none-elf-gcc-12.3.0-1-linux-x64.tar.gz > riscv.tar.gz - tar xvf riscv.tar.gz - echo "$PWD/xpack-riscv-none-elf-gcc-12.3.0-1/bin" >> $GITHUB_PATH - - - name: Install WASI-SDK - run: | - curl -L https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-19/wasi-sdk-19.0-linux.tar.gz > wasi-sdk.tar.gz - tar xvf wasi-sdk.tar.gz - sudo mv wasi-sdk-* /opt/wasi-sdk - - name: Checkout NuttX - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: apache/incubator-nuttx - ref: releases/12.3 + ref: releases/12.4 path: nuttx - name: Checkout NuttX Apps - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: apache/incubator-nuttx-apps - ref: releases/12.3 + ref: releases/12.4 path: apps - name: Checkout WAMR - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: ${{ github.repository }} path: apps/interpreters/wamr/wamr @@ -140,7 +118,7 @@ jobs: - name: Get LLVM libraries if: contains(matrix.wamr_test_option.mode, 'aot') id: retrieve_llvm_libs - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ./core/deps/llvm/build/bin @@ -190,20 +168,6 @@ jobs: tools/configure.sh ${{ matrix.target_config.config }} make -j$(nproc) echo "firmware=$PWD/nuttx" >> $GITHUB_OUTPUT - - - name: Install QEMU for ARM - if: startsWith(matrix.target_config.config, 'boards/arm') - run: | - curl -L https://github.com/xpack-dev-tools/qemu-arm-xpack/releases/download/v7.1.0-1/xpack-qemu-arm-7.1.0-1-linux-x64.tar.gz > xpack-qemu-arm.tar.gz - tar xvf xpack-qemu-arm.tar.gz - echo $PWD/xpack-qemu-arm-7.1.0-1/bin >> $GITHUB_PATH - - - name: Install QEMU for RISC-V - if: startsWith(matrix.target_config.config, 'boards/risc-v') - run: | - curl -L https://github.com/xpack-dev-tools/qemu-riscv-xpack/releases/download/v7.1.0-1/xpack-qemu-riscv-7.1.0-1-linux-x64.tar.gz > xpack-qemu-riscv.tar.gz - tar xvf xpack-qemu-riscv.tar.gz - echo PATH=$PATH:$PWD/xpack-qemu-riscv-7.1.0-1/bin >> $GITHUB_PATH - name: Test run: | diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/.gitignore b/lib/wasm-micro-runtime-WAMR-1.3.3/.gitignore similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/.gitignore rename to lib/wasm-micro-runtime-WAMR-1.3.3/.gitignore diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/ATTRIBUTIONS.md b/lib/wasm-micro-runtime-WAMR-1.3.3/ATTRIBUTIONS.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/ATTRIBUTIONS.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/ATTRIBUTIONS.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/CMakeLists.txt similarity index 96% rename from lib/wasm-micro-runtime-WAMR-1.3.0/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/CMakeLists.txt index 1c87994945a..0ffba05a41a 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/CMakeLists.txt +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/CMakeLists.txt @@ -3,6 +3,11 @@ cmake_minimum_required (VERSION 3.0) +if(ESP_PLATFORM) + include (${COMPONENT_DIR}/build-scripts/esp-idf/wamr/CMakeLists.txt) + return() +endif() + project (iwasm) set (CMAKE_VERBOSE_MAKEFILE OFF) @@ -151,7 +156,7 @@ if (WAMR_BUILD_WASM_CACHE EQUAL 1) endif () if (MINGW) - target_link_libraries (iwasm_shared -lWs2_32) + target_link_libraries (iwasm_shared INTERFACE -lWs2_32 -lwsock32) endif () install (TARGETS iwasm_shared LIBRARY DESTINATION lib) diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/CODE_OF_CONDUCT.md b/lib/wasm-micro-runtime-WAMR-1.3.3/CODE_OF_CONDUCT.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/CODE_OF_CONDUCT.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/CODE_OF_CONDUCT.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/CONTRIBUTING.md b/lib/wasm-micro-runtime-WAMR-1.3.3/CONTRIBUTING.md similarity index 92% rename from lib/wasm-micro-runtime-WAMR-1.3.0/CONTRIBUTING.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/CONTRIBUTING.md index 9210b3deb1c..0e04101d293 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/CONTRIBUTING.md +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/CONTRIBUTING.md @@ -27,7 +27,7 @@ We Use Github Flow, So All Code Changes Happen Through Pull Requests. Pull reque Coding Style =============================== Please use [K&R](https://en.wikipedia.org/wiki/Indentation_style#K.26R) coding style, such as 4 spaces for indentation rather than tabs etc. -We suggest use Eclipse like IDE or stable coding format tools to make your code compliant to K&R format. +We suggest using VS Code like IDE or stable coding format tools, like clang-format, to make your code compliant to the customized format(in .clang-format). Report bugs =================== diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/LICENSE b/lib/wasm-micro-runtime-WAMR-1.3.3/LICENSE similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/LICENSE rename to lib/wasm-micro-runtime-WAMR-1.3.3/LICENSE diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/ORG_CODE_OF_CONDUCT.md b/lib/wasm-micro-runtime-WAMR-1.3.3/ORG_CODE_OF_CONDUCT.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/ORG_CODE_OF_CONDUCT.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/ORG_CODE_OF_CONDUCT.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/README.md similarity index 98% rename from lib/wasm-micro-runtime-WAMR-1.3.0/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/README.md index dfdae2da894..31156b9cc39 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/README.md +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/README.md @@ -75,9 +75,9 @@ The following platforms are supported, click each link below for how to build iw - [Blog: The WAMR memory model](https://bytecodealliance.github.io/wamr.dev/blog/the-wamr-memory-model/) - [Blog: Understand WAMR heaps](https://bytecodealliance.github.io/wamr.dev/blog/understand-the-wamr-heaps/) and [stacks](https://bytecodealliance.github.io/wamr.dev/blog/understand-the-wamr-stacks/) - [Blog: Introduction to WAMR running modes](https://bytecodealliance.github.io/wamr.dev/blog/introduction-to-wamr-running-modes/) -- [Memory usage tunning](./doc/memory_tune.md): the memory model and how to tune the memory usage +- [Memory usage tuning](./doc/memory_tune.md): the memory model and how to tune the memory usage - [Memory usage profiling](./doc/build_wamr.md#enable-memory-profiling-experiment): how to profile the memory usage -- [Performance tunning](./doc/perf_tune.md): how to tune the performance +- [Performance tuning](./doc/perf_tune.md): how to tune the performance - [Benchmarks](./tests/benchmarks): checkout these links for how to run the benchmarks: [PolyBench](./tests/benchmarks/polybench), [CoreMark](./tests/benchmarks/coremark), [Sightglass](./tests/benchmarks/sightglass), [JetStream2](./tests/benchmarks/jetstream) - [Performance and footprint data](https://github.com/bytecodealliance/wasm-micro-runtime/wiki/Performance): the performance and footprint data diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/RELEASE_NOTES.md b/lib/wasm-micro-runtime-WAMR-1.3.3/RELEASE_NOTES.md similarity index 75% rename from lib/wasm-micro-runtime-WAMR-1.3.0/RELEASE_NOTES.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/RELEASE_NOTES.md index fbb97f5d756..6cc01936862 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/RELEASE_NOTES.md +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/RELEASE_NOTES.md @@ -1,3 +1,218 @@ +## WAMR-1.3.3 + +### Breaking Changes + +### New Features + +### Bug Fixes +- Cumulative fixes for release/1.3.x (#3155) + Apply patches in branch main for branch `release/1.3.x`: + - Fix loader check_wasi_abi_compatibility (#3126) + - Zero the memory mapped from os_mmap in NuttX (#3132) + - Fix possible integer overflow in loader target block check (#3133) + - Fix locel.set in polymorphic stack (#3135) + - Fix threads opcodes' boundary check in classic-interp and fast-interp (#3136) + - aot_compile_op_call: Stop setting calling convention explicitly (#3140) + - aot compiler: Place precheck wrapper before the corresponding wrapped function (#3141) + - fast-interp: Fix copy_stack_top_i64 overlap issue (#3146) + - fast-interp: Fix frame_offset overflow issue (#3149) + - Fix null pointer access in fast-interp when configurable soft bound check is enabled (#3150) +- Cumulative fixes for release/1.3.x (#3268) + Apply patches which were fixed branch main to branch `release/1.3.x`: + - zephyr: Use zephyr sys_cache instead of CMSIS (#3162) + - Fix llvm jit push funcref/externref result type issue (#3169) + - Fix inconsistent coding convention (#3171) + - VSCode IDE enhancement and readme update (#3172) + - zephyr: include math only with minimal libc (#3177) + - Fix wasm loader handling opcode br_table (#3176) + - Specify language in the wasi socket ext project (#3183) + - lldb_function_to_function_dbi: Fix a null dereference (#3189) + - Fix LLVM assertion failure and update CONTRIBUTING.md (#3197) + - lldb_function_to_function_dbi: A hack to avoid crashing on C++ methods (#3190) + - Fix compilation errors on MinGW (#3217) + - Fix compilation errors on esp-idf platform (#3224) + - Fix aot relocation symbols not found on windows 32-bit (#3231) + - Fix nightly run tsan ASLR issue (#3233) + - Go binding: Change C.long to C.int64_t when call wasm_runtime_set_wasi_args_ex (#3235) + - posix_file.c: Correct the dirfd argument that passes to fstatat (#3244) + - Fix compilation errors on zephyr platform (#3255) + - Fix dynamic offset not updated in op_br for block with ret type (#3269) + - Fix CI error when install packages for macos-14 (#3270) +- Fix ESP-IDF platform mmap data size error (#3288) +- Fix ESP32-S3 compiling error (#3360) +- release/1.3.x: Cumulative fixes for release/1.3.x (#3342) + Apply patches which were fixed in branch main to branch `release/1.3.x`: + - aot debug: Fix a few NULL dereferences on errors (#3273) + - aot debug: Fix a NULL dereference (#3274) + - aot debug: Process lldb_function_to_function_dbi only for C (#3278) + - Revert "lldb_function_to_function_dbi: A hack to avoid crashing on C++ methods (#3190)" (#3281) + - Fix warnings/issues reported in Windows and by CodeQL/Coverity (#3275) + - thread mgr: Free aux stack only when it was allocated (#3282) + - interp: Restore context from prev_frame after tail calling a native function (#3283) + - Sync simd opcode definitions spec (#3290) + - Add more checks in wasm loader (#3300) + - Fix posix_fadvise error handling (#3323) + - Fix readdir for posix (#3339) + - wasm loader: Fix checks for opcode ref.func and opcode else (#3340) + - Enhance wasm loader checks for opcode br_table (#3352) + - CI: Use macos-13 instead of macos-latest (#3366) + +### Enhancements +- Add wamr to esp-idf components registry (#3264) +- Update esp-idf platform support in release/v1.3.x (#3296) +- Add WASI support for esp-idf platform in release/1.3.x (#3334) + +### Others +- Update release CI (#3294) + +--- + +## WAMR-1.3.2 + +### Breaking Changes + +### New Features +- Implement Exception Handling for classic interpreter (#3096) + - Use `cmake -DWAMR_BUILD_EXCE_HANDLING=1/0` option to enable/disable + the feature, and by default it is disabled + - It is still in highly experimental stage + +### Bug Fixes +- Fix build errors when initializing wasm_val_t values with macros (#3007) +- fix(wasm-c-api): Do not clone stack frames if there's no trap (#3008) +- classic-interp: Handle SIMD opcode when JIT is enabled (#3046) +- fast-interp: Fix dynamic offset error issue in else branch (#3058) +- wasm_cluster_destroy_spawned_exec_env: Avoid "invalid exec env" trap (#3068) +- thread-mgr: Fix locking problems around aux stack allocation (#3073) +- cosmopolitan: Update compiler and update platform_internal.h (#3079) +- wasi: Apply wasm_runtime_begin_blocking_op to poll as well (#3080) +- Fix memory/table segment checks in memory.init/table.init (#3081) +- perf profiling: Adjust the calculation of execution time (#3089) +- aot: Fix LLVMSetTailCallKind check (#3099) +- fast-interp: Fix stack recovery for else branch (#3100) +- fast-interp: Fix frame_offset pop order (#3101) +- Fix AOT compilation on MacOS (#3102) +- fast-interp: Fix block with parameter in polymorphic stack issue (#3112) +- Fix read and validation of misc/simd/atomic sub opcodes (#3115) + +### Enhancements +- Clear compilation warning and dead code (#3002) +- aot debug: Try to use a bit more appropriate file names (#3000) +- Increase default app thread stack size (#3010) +- Rename rwlock_init to avoid conflict (#3016) +- nuttx: Use larger alignment for os_mmap and comment why (#3017) +- Allow using mmap for shared memory if hw bound check is disabled (#3029) +- Don't redefine D_INO if already defined (#3036) +- Enhancements on wasm function execution time statistic (#2985) +- wamr-compiler: Fix non-x86{_64} host builds (#3037) +- Disable quick aot entry for interp and fast-jit (#3039) +- nuttx: Add option to enable quick aot entry (#3040) +- Set CONFIG_HAS_CAP_ENTER to support posix file api for freertos (#3041) +- Revert "Enable MAP_32BIT for macOS (#2992)" (#3032) +- Enable quick aot entry when hw bound check is disabled (#3044) +- Do not inherit WASM_SUSPEND_FLAG_BLOCKING from the parent thread (#3051) +- wasm_runtime_begin_blocking_op: A comment about usage expectation (#3056) +- Check arguments before calling bh_hash_map_find (#3055) +- Fix aot large model (--size-level=0) with LLVM 18 (#3057) +- Add flag to control Winsocket initialization (#3060) +- nuttx: If STACK_GUARD_SIZE is not set, leave it to config.h (#2927) +- Enhance setting write gs base with cmake variable (#3066) +- aot_reloc_x86_64.c: Suggest to try --size-level=0 as well (#3067) +- Fix some issues reported by CodeQL (#3064) +- Remove a lot of "unused parameter" warnings (#3075) +- Forward log and log level to custom bh_log callback (#3070) +- Fix inconsistent code style in aot_loader.c (#3082) +- freertos: Thread exit more common (#3094) +- Fix windows build error and compilation warnings (#3095) + +### Others +- Fix nightly-run CI failure (#3014) +- Build samples in debug mode (#3019) +- Remove deprecated tests in language-bindings python (#3018) +- Avoid unused thread_id warning and recompile multi-module sample (#3033) +- samples/terminate: Add a sample to demonstrate wasm_runtime_terminate (#3043) +- Bump NuttX version to 12.4.x in CI (#3047) +- perf_tune.md: Add refine the calling processes between host and wasm (#3065) +- build_wamr.md: Update the document (#3074) +- Fix download link for wasi-sdk (#3077) +- README.md: Fix typo tunning to tuning (#3078) +- Update outdated reference link in multi_module.md (#3092) +- Add comments to suppress warning from clang-tidy (#3088) +- CI: Update version of checkout to suppress warnings (#3093) +- test_wamr.sh: Allow using test script on different platforms (#3098) + +--- + +## WAMR-1.3.1 + +### Breaking Changes +- In multi-threading, when an exception was thrown in wasm_func_call(), + the trap returned contains the stack frames of the thread where the + exception occurs, but not the stack frames of the main thread. +- Disable emitting custom name section to AOT file with + `wamrc --enable-dump-call-stack` option, instead, use + `wamrc --emit-custom-sections=name` to emit it and make it clear. + +### New Features +- Enable AOT linux perf support (#2930) + +### Bug Fixes +- Corrects Zephyr include files for current versions of Zephyr (#2881) +- Fix possible dead lock in wasm_cluster_spawn_exec_env (#2882) +- Handle ambiguous fstflags on fd_filestat_set_times (#2892) +- Fix memory size not updating after growing in interpreter (#2898) +- fixed(freertos): Fix crash when wasm app call pthread_exit(NULL) (#2970) +- fast-jit: Fix const shift and const i64 compare issues (#2969) +- Fix ref.is_null processing in fast-interp loader (#2971) +- simd-128: The input lanes of integer-to-integer narrowing ops should be interpreted as signed (#2850) +- Fix ref.func function declared check in wasm loader (#2972) +- Fix fast-interp polymorphic stack processing (#2974) +- Fix potential recursive lock in pthread_create_wrapper (#2980) +- Fix build failure on esp-idf platform (#2991) +- Return stack frames of crashed thread when using wasm-c-api (#2908) +- Fix compilation error on iOS due to macOS-specific API (#2995) +- Fix a bug when emit the custom name section to aot file (#2987) +- Fix linux-sgx build error when libc-wasi is disabled (#2997) + +### Enhancements +- fix command-reactor: Look for _initialize only if _start not found (#2891) +- Refactor reloc symbols for riscv (#2894) +- Avoid memory import failure when wasi-threads is enabled (#2893) +- interpreter: Simplify memory.grow a bit (#2899) +- Avoid reporting timestamp if custom logger is used (#2905) +- Expose API to set log level in embedder (#2907) +- Add a script to translate jitted function names in flamegraph (#2906) +- Refine wasm-c-api wasm_func_call (#2922) +- Add VectorCombine pass for JIT and AOT (#2923) +- Enable wasm_runtime_terminate for single-threading (#2924) +- nuttx: Add CONFIG_INTERPRETERS_WAMR_DEBUG_AOT (#2929) +- Allow to control built-in libraries for wamrc from command line options (#2928) +- Fix a bug that appends '_precheck' to aot_func (#2936) +- freertos: Add os_cond_broadcast for pthread wrapper (#2937) +- Append .aot to .wasm as a custom section named "aot" (#2933) +- fix(sgx-ra): Fix building when enclave is built without librats ahead (#2968) +- Refine LLVM JIT function call process (#2925) +- Refine AOT function call process (#2940) +- Allow to set segue flags for wasm-c-api JIT (#2926) +- freertos: Minor changes for freertos libc_wasi build adaption (#2973) +- freertos: Change ssp_config.h due to clock_nanosleep() not supported in freertos (#2979) +- aot compiler: Some updates for LLVM 18 (#2981) +- Enable MAP_32BIT for macOS (#2992) +- Register quick call entries to speedup the aot/jit func call process (#2978) +- Refine AOT/JIT code call wasm-c-api import process (#2982) + +### Others +- compilation_on_nuttx.yml: Use docker image to simplify env setup (#2878) +- samples/spawn-thread: Disable libc and pthread (#2883) +- Add arm64 to nuttx compilation test (#2886) +- samples/spawn-thread: Tweak to expose a bug (#2888) +- Fix typo in CI config and suppress STORE_U8 in TSAN (#2802) +- Using docker image for nuttx spectest (#2887) +- doc: Separate source_debugging.md into two files (#2932) +- doc/build_wasm_app.md: Add a note about aot abi compatibility (#2993) + +--- + ## WAMR-1.3.0 ### Breaking Changes diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/SConscript b/lib/wasm-micro-runtime-WAMR-1.3.3/SConscript similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/SConscript rename to lib/wasm-micro-runtime-WAMR-1.3.3/SConscript diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/SECURITY.md b/lib/wasm-micro-runtime-WAMR-1.3.3/SECURITY.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/SECURITY.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/SECURITY.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/TSC_Charter.md b/lib/wasm-micro-runtime-WAMR-1.3.3/TSC_Charter.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/TSC_Charter.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/TSC_Charter.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/assembly-script/.gitignore b/lib/wasm-micro-runtime-WAMR-1.3.3/assembly-script/.gitignore similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/assembly-script/.gitignore rename to lib/wasm-micro-runtime-WAMR-1.3.3/assembly-script/.gitignore diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/assembly-script/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/assembly-script/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/assembly-script/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/assembly-script/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/assembly-script/package-lock.json b/lib/wasm-micro-runtime-WAMR-1.3.3/assembly-script/package-lock.json similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/assembly-script/package-lock.json rename to lib/wasm-micro-runtime-WAMR-1.3.3/assembly-script/package-lock.json diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/assembly-script/package.json b/lib/wasm-micro-runtime-WAMR-1.3.3/assembly-script/package.json similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/assembly-script/package.json rename to lib/wasm-micro-runtime-WAMR-1.3.3/assembly-script/package.json diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/assembly-script/samples/event_publisher.ts b/lib/wasm-micro-runtime-WAMR-1.3.3/assembly-script/samples/event_publisher.ts similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/assembly-script/samples/event_publisher.ts rename to lib/wasm-micro-runtime-WAMR-1.3.3/assembly-script/samples/event_publisher.ts diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/assembly-script/samples/event_subscriber.ts b/lib/wasm-micro-runtime-WAMR-1.3.3/assembly-script/samples/event_subscriber.ts similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/assembly-script/samples/event_subscriber.ts rename to lib/wasm-micro-runtime-WAMR-1.3.3/assembly-script/samples/event_subscriber.ts diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/assembly-script/samples/request_handler.ts b/lib/wasm-micro-runtime-WAMR-1.3.3/assembly-script/samples/request_handler.ts similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/assembly-script/samples/request_handler.ts rename to lib/wasm-micro-runtime-WAMR-1.3.3/assembly-script/samples/request_handler.ts diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/assembly-script/samples/request_sender.ts b/lib/wasm-micro-runtime-WAMR-1.3.3/assembly-script/samples/request_sender.ts similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/assembly-script/samples/request_sender.ts rename to lib/wasm-micro-runtime-WAMR-1.3.3/assembly-script/samples/request_sender.ts diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/assembly-script/samples/timer.ts b/lib/wasm-micro-runtime-WAMR-1.3.3/assembly-script/samples/timer.ts similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/assembly-script/samples/timer.ts rename to lib/wasm-micro-runtime-WAMR-1.3.3/assembly-script/samples/timer.ts diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/assembly-script/samples/tsconfig.json b/lib/wasm-micro-runtime-WAMR-1.3.3/assembly-script/samples/tsconfig.json similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/assembly-script/samples/tsconfig.json rename to lib/wasm-micro-runtime-WAMR-1.3.3/assembly-script/samples/tsconfig.json diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/assembly-script/wamr_app_lib/console.ts b/lib/wasm-micro-runtime-WAMR-1.3.3/assembly-script/wamr_app_lib/console.ts similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/assembly-script/wamr_app_lib/console.ts rename to lib/wasm-micro-runtime-WAMR-1.3.3/assembly-script/wamr_app_lib/console.ts diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/assembly-script/wamr_app_lib/request.ts b/lib/wasm-micro-runtime-WAMR-1.3.3/assembly-script/wamr_app_lib/request.ts similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/assembly-script/wamr_app_lib/request.ts rename to lib/wasm-micro-runtime-WAMR-1.3.3/assembly-script/wamr_app_lib/request.ts diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/assembly-script/wamr_app_lib/timer.ts b/lib/wasm-micro-runtime-WAMR-1.3.3/assembly-script/wamr_app_lib/timer.ts similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/assembly-script/wamr_app_lib/timer.ts rename to lib/wasm-micro-runtime-WAMR-1.3.3/assembly-script/wamr_app_lib/timer.ts diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/assembly-script/wamr_app_lib/tsconfig.json b/lib/wasm-micro-runtime-WAMR-1.3.3/assembly-script/wamr_app_lib/tsconfig.json similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/assembly-script/wamr_app_lib/tsconfig.json rename to lib/wasm-micro-runtime-WAMR-1.3.3/assembly-script/wamr_app_lib/tsconfig.json diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/build-scripts/SConscript b/lib/wasm-micro-runtime-WAMR-1.3.3/build-scripts/SConscript similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/build-scripts/SConscript rename to lib/wasm-micro-runtime-WAMR-1.3.3/build-scripts/SConscript diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/build-scripts/SConscript_config b/lib/wasm-micro-runtime-WAMR-1.3.3/build-scripts/SConscript_config similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/build-scripts/SConscript_config rename to lib/wasm-micro-runtime-WAMR-1.3.3/build-scripts/SConscript_config diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/build-scripts/build_llvm.py b/lib/wasm-micro-runtime-WAMR-1.3.3/build-scripts/build_llvm.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/build-scripts/build_llvm.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/build-scripts/build_llvm.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/build-scripts/config_common.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/build-scripts/config_common.cmake similarity index 84% rename from lib/wasm-micro-runtime-WAMR-1.3.0/build-scripts/config_common.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/build-scripts/config_common.cmake index e73ebc85f1f..22783a50921 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/build-scripts/config_common.cmake +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/build-scripts/config_common.cmake @@ -147,13 +147,20 @@ elseif (WAMR_BUILD_SANITIZER STREQUAL "asan") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fno-omit-frame-pointer -fsanitize=address -fno-sanitize-recover=all" ) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address") endif() -elseif (WAMR_BUILD_SANITIZER STREQUAL "tsan") +elseif (WAMR_BUILD_SANITIZER STREQUAL "tsan") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fno-omit-frame-pointer -fsanitize=thread -fno-sanitize-recover=all" ) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=thread") elseif (NOT (WAMR_BUILD_SANITIZER STREQUAL "") ) message(SEND_ERROR "Unsupported sanitizer: ${WAMR_BUILD_SANITIZER}") endif() +if (WAMR_BUILD_LINUX_PERF EQUAL 1) + if (NOT WAMR_BUILD_JIT AND NOT WAMR_BUILD_AOT) + message(WARNING "only support perf in aot and llvm-jit") + set(WAMR_BUILD_LINUX_PERF 0) + endif () +endif () + ######################################## message ("-- Build Configurations:") @@ -241,6 +248,12 @@ if (WAMR_BUILD_SHARED_MEMORY EQUAL 1) else () add_definitions (-DWASM_ENABLE_SHARED_MEMORY=0) endif () +if (WAMR_ENABLE_SHARED_MEMORY_MMAP EQUAL 1) + add_definitions (-DWASM_ENABLE_SHARED_MEMORY_MMAP=1) + message (" Shared memory allocated using mmap enabled") +else () + add_definitions (-DWASM_ENABLE_SHARED_MEMORY_MMAP=0) +endif () if (WAMR_BUILD_THREAD_MGR EQUAL 1) message (" Thread manager enabled") endif () @@ -322,9 +335,17 @@ if (WAMR_BUILD_REF_TYPES EQUAL 1) else () message (" Reference types disabled") endif () +if (WAMR_BUILD_EXCE_HANDLING EQUAL 1) + add_definitions (-DWASM_ENABLE_EXCE_HANDLING=1) + add_definitions (-DWASM_ENABLE_TAGS=1) + message (" Exception Handling enabled") +endif () if (DEFINED WAMR_BH_VPRINTF) add_definitions (-DBH_VPRINTF=${WAMR_BH_VPRINTF}) endif () +if (DEFINED WAMR_BH_LOG) + add_definitions (-DBH_LOG=${WAMR_BH_LOG}) +endif () if (WAMR_DISABLE_APP_ENTRY EQUAL 1) message (" WAMR application entry functions excluded") endif () @@ -408,35 +429,72 @@ if (WAMR_BUILD_STATIC_PGO EQUAL 1) add_definitions (-DWASM_ENABLE_STATIC_PGO=1) message (" AOT static PGO enabled") endif () -if (WAMR_DISABLE_WRITE_GS_BASE EQUAL 1) - add_definitions (-DWASM_DISABLE_WRITE_GS_BASE=1) - message (" Write linear memory base addr to x86 GS register disabled") -elseif (WAMR_BUILD_TARGET STREQUAL "X86_64" - AND WAMR_BUILD_PLATFORM STREQUAL "linux") - set (TEST_WRGSBASE_SOURCE "${CMAKE_BINARY_DIR}/test_wrgsbase.c") - file (WRITE "${TEST_WRGSBASE_SOURCE}" " - #include - #include - int main() { - uint64_t value; - asm volatile (\"wrgsbase %0\" : : \"r\"(value)); - printf(\"WRGSBASE instruction is available.\\n\"); - return 0; - }") - # Try to compile and run the test program - try_run (TEST_WRGSBASE_RESULT - TEST_WRGSBASE_COMPILED - ${CMAKE_BINARY_DIR}/test_wrgsbase - SOURCES ${TEST_WRGSBASE_SOURCE} - CMAKE_FLAGS -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - ) - #message("${TEST_WRGSBASE_COMPILED}, ${TEST_WRGSBASE_RESULT}") - if (NOT TEST_WRGSBASE_RESULT EQUAL 0) +if (WAMR_BUILD_TARGET STREQUAL "X86_64" + AND WAMR_BUILD_PLATFORM STREQUAL "linux") + if (WAMR_DISABLE_WRITE_GS_BASE EQUAL 1) + # disabled by user + set (DISABLE_WRITE_GS_BASE 1) + elseif (WAMR_DISABLE_WRITE_GS_BASE EQUAL 0) + # enabled by user + set (DISABLE_WRITE_GS_BASE 0) + elseif (CMAKE_CROSSCOMPILING) + # disabled in cross compilation environment + set (DISABLE_WRITE_GS_BASE 1) + else () + # auto-detected by the compiler + set (TEST_WRGSBASE_SOURCE "${CMAKE_BINARY_DIR}/test_wrgsbase.c") + file (WRITE "${TEST_WRGSBASE_SOURCE}" " + #include + #include + int main() { + uint64_t value; + asm volatile (\"wrgsbase %0\" : : \"r\"(value)); + printf(\"WRGSBASE instruction is available.\\n\"); + return 0; + }") + # Try to compile and run the test program + try_run (TEST_WRGSBASE_RESULT + TEST_WRGSBASE_COMPILED + ${CMAKE_BINARY_DIR}/test_wrgsbase + SOURCES ${TEST_WRGSBASE_SOURCE} + CMAKE_FLAGS -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + ) + #message("${TEST_WRGSBASE_COMPILED}, ${TEST_WRGSBASE_RESULT}") + if (TEST_WRGSBASE_RESULT EQUAL 0) + set (DISABLE_WRITE_GS_BASE 0) + else () + set (DISABLE_WRITE_GS_BASE 1) + endif () + endif () + if (DISABLE_WRITE_GS_BASE EQUAL 1) add_definitions (-DWASM_DISABLE_WRITE_GS_BASE=1) message (" Write linear memory base addr to x86 GS register disabled") + else () + add_definitions (-DWASM_DISABLE_WRITE_GS_BASE=0) + message (" Write linear memory base addr to x86 GS register enabled") endif () endif () if (WAMR_CONFIGUABLE_BOUNDS_CHECKS EQUAL 1) add_definitions (-DWASM_CONFIGURABLE_BOUNDS_CHECKS=1) message (" Configurable bounds checks enabled") endif () +if (WAMR_BUILD_LINUX_PERF EQUAL 1) + add_definitions (-DWASM_ENABLE_LINUX_PERF=1) + message (" Linux perf support enabled") +endif () +if (WAMR_BUILD_AOT EQUAL 1 OR WAMR_BUILD_JIT EQUAL 1) + if (NOT DEFINED WAMR_BUILD_QUICK_AOT_ENTRY) + # Enable quick aot/jit entries by default + set (WAMR_BUILD_QUICK_AOT_ENTRY 1) + endif () + if (WAMR_BUILD_QUICK_AOT_ENTRY EQUAL 1) + add_definitions (-DWASM_ENABLE_QUICK_AOT_ENTRY=1) + message (" Quick AOT/JIT entries enabled") + else () + add_definitions (-DWASM_ENABLE_QUICK_AOT_ENTRY=0) + message (" Quick AOT/JIT entries disabled") + endif () +else () + # Disable quick aot/jit entries for interp and fast-jit + add_definitions (-DWASM_ENABLE_QUICK_AOT_ENTRY=0) +endif () diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/build-scripts/esp-idf/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/build-scripts/esp-idf/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/build-scripts/esp-idf/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/build-scripts/esp-idf/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.3/build-scripts/esp-idf/wamr/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/build-scripts/esp-idf/wamr/CMakeLists.txt new file mode 100644 index 00000000000..f467f4cadd9 --- /dev/null +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/build-scripts/esp-idf/wamr/CMakeLists.txt @@ -0,0 +1,117 @@ +# Copyright (C) 2021 Intel Corporation and others. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +# Set WAMR's build options +if (NOT CMAKE_BUILD_EARLY_EXPANSION) + + if (CONFIG_IDF_TARGET_ARCH_RISCV) + set (WAMR_BUILD_TARGET "RISCV32") + elseif (CONFIG_IDF_TARGET_ARCH_XTENSA) + set (WAMR_BUILD_TARGET "XTENSA") + else () + message (FATAL_ERROR "Arch ${CONFIG_IDF_TARGET_ARCH} is not supported") + endif () + + set (WAMR_BUILD_PLATFORM "esp-idf") + + if (CONFIG_WAMR_BUILD_DEBUG) + set (CMAKE_BUILD_TYPE Debug) + else () + set (CMAKE_BUILD_TYPE Release) + endif () + + if (CONFIG_WAMR_ENABLE_INTERP) + set (WAMR_BUILD_INTERP 1) + endif () + + if (CONFIG_WAMR_INTERP_FAST) + set (WAMR_BUILD_FAST_INTERP 1) + endif () + + if (CONFIG_WAMR_ENABLE_AOT) + set (WAMR_BUILD_AOT 1) + endif () + + if (CONFIG_WAMR_ENABLE_LIBC_BUILTIN) + set (WAMR_BUILD_LIBC_BUILTIN 1) + endif () + + if (CONFIG_WAMR_ENABLE_APP_FRAMEWORK) + set (WAMR_BUILD_APP_FRAMEWORK 1) + set (WAMR_BUILD_APP_LIST WAMR_APP_BUILD_BASE) + set (WAMR_APP_THREAD_STACK_SIZE_MAX ${CONFIG_WAMR_APP_THREAD_STACK_SIZE_MAX}) + endif () + + if (CONFIG_WAMR_INTERP_LOADER_MINI) + set (WAMR_BUILD_MINI_LOADER 1) + endif () + + if (CONFIG_WAMR_ENABLE_MULTI_MODULE) + set (WAMR_BUILD_MULTI_MODULE 1) + endif () + + if (CONFIG_WAMR_ENABLE_SHARED_MEMORY) + set (WAMR_BUILD_SHARED_MEMORY 1) + endif () + + if (CONFIG_WAMR_ENABLE_MEMORY_PROFILING) + set (WAMR_BUILD_MEMORY_PROFILING 1) + endif () + + if (CONFIG_WAMR_ENABLE_PERF_PROFILING) + set (WAMR_BUILD_PERF_PROFILING 1) + endif () + + if (CONFIG_WAMR_ENABLE_REF_TYPES) + set (WAMR_BUILD_REF_TYPES 1) + endif () + + if (CONFIG_WAMR_ENABLE_LIBC_WASI) + set (WAMR_BUILD_LIBC_WASI 1) + endif () + + if (CONFIG_WAMR_ENABLE_LIB_PTHREAD) + set (WAMR_BUILD_LIB_PTHREAD 1) + endif () + + set (WAMR_ROOT_DIR ${CMAKE_CURRENT_LIST_DIR}/../../..) + include (${WAMR_ROOT_DIR}/build-scripts/runtime_lib.cmake) + + list (APPEND srcs "${WAMR_RUNTIME_LIB_SOURCE}" + "${PLATFORM_SHARED_SOURCE}") + + set (include_dirs "${IWASM_DIR}/include" + "${UTILS_SHARED_DIR}" + "${PLATFORM_SHARED_DIR}" + "${PLATFORM_SHARED_DIR}/../include" + "${IWASM_COMMON_DIR}") + + if (CONFIG_WAMR_ENABLE_APP_FRAMEWORK) + list (APPEND include_dirs "${APP_MGR_SHARED_DIR}" + "${__APP_MGR_DIR}" + "${NATIVE_INTERFACE_DIR}" + "${WASM_APP_LIBS_DIR}" + "${APP_FRAMEWORK_ROOT_DIR}/base/app") + endif () +endif () + +idf_component_register(SRCS ${srcs} + INCLUDE_DIRS ${include_dirs} + REQUIRES pthread lwip esp_timer + KCONFIG ${CMAKE_CURRENT_LIST_DIR}/Kconfig) + +target_compile_options(${COMPONENT_LIB} PRIVATE "-Wno-format") + +if (CONFIG_IDF_TARGET_ARCH_RISCV) + target_compile_definitions(${COMPONENT_LIB} PUBLIC -DBUILD_TARGET_RISCV32_ILP32=1) +elseif (CONFIG_IDF_TARGET_ARCH_XTENSA) + target_compile_definitions(${COMPONENT_LIB} PUBLIC -DBUILD_TARGET_XTENSA=1) +endif () + +if (CONFIG_WAMR_ENABLE_AOT) + target_compile_definitions(${COMPONENT_LIB} PUBLIC -DWASM_ENABLE_AOT=1) +endif () + +if (CONFIG_WAMR_ENABLE_INTERP) + target_compile_definitions(${COMPONENT_LIB} PUBLIC -DWASM_ENABLE_INTERP=1) +endif () diff --git a/lib/wasm-micro-runtime-WAMR-1.3.3/build-scripts/esp-idf/wamr/Kconfig b/lib/wasm-micro-runtime-WAMR-1.3.3/build-scripts/esp-idf/wamr/Kconfig new file mode 100644 index 00000000000..ba7c679df1c --- /dev/null +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/build-scripts/esp-idf/wamr/Kconfig @@ -0,0 +1,88 @@ +menu "WASM Micro Runtime" + choice WAMR_BUILD_TYPE + prompt "Build type" + default WAMR_BUILD_RELEASE + + config WAMR_BUILD_RELEASE + bool "Release" + + config WAMR_BUILD_DEBUG + bool "Debug" + endchoice + + config WAMR_ENABLE_AOT + bool "AOT" + default y + + menuconfig WAMR_ENABLE_INTERP + bool "Interpreter" + default y + + if WAMR_ENABLE_INTERP + + choice WAMR_INTERP_MODE + prompt "Interpreter mode" + default WAMR_INTERP_FAST + + config WAMR_INTERP_CLASSIC + bool "Classic" + + config WAMR_INTERP_FAST + bool "Fast" + endchoice + + choice WAMR_INTERP_LOADER_MODE + prompt "Loader mode" + default WAMR_INTERP_LOADER_NORMAL + + config WAMR_INTERP_LOADER_NORMAL + bool "Normal" + + config WAMR_INTERP_LOADER_MINI + bool "Mini" + endchoice + endif + + config WAMR_ENABLE_LIB_PTHREAD + bool "Lib pthread" + default y + + config WAMR_ENABLE_LIBC_BUILTIN + bool "Libc builtin" + default y + + config WAMR_ENABLE_LIBC_WASI + bool "Libc WASI" + default y + + config WAMR_ENABLE_MEMORY_PROFILING + bool "Memory profiling" + default n + + config WAMR_ENABLE_MULTI_MODULE + bool "Multi module" + default n + + config WAMR_ENABLE_PERF_PROFILING + bool "Performance profiling" + default n + + config WAMR_ENABLE_REF_TYPES + bool "Reference types" + default n + + config WAMR_ENABLE_SHARED_MEMORY + bool "Shared memory" + default n + + menuconfig WAMR_ENABLE_APP_FRAMEWORK + bool "App framework" + default y + + if WAMR_ENABLE_APP_FRAMEWORK + + config WAMR_APP_THREAD_STACK_SIZE_MAX + int "Application thread max stack size" + default 131072 + endif +endmenu diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/build-scripts/involve_boringssl.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/build-scripts/involve_boringssl.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/build-scripts/involve_boringssl.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/build-scripts/involve_boringssl.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/build-scripts/lldb_wasm.patch b/lib/wasm-micro-runtime-WAMR-1.3.3/build-scripts/lldb_wasm.patch similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/build-scripts/lldb_wasm.patch rename to lib/wasm-micro-runtime-WAMR-1.3.3/build-scripts/lldb_wasm.patch diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/build-scripts/requirements.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/build-scripts/requirements.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/build-scripts/requirements.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/build-scripts/requirements.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/build-scripts/runtime_lib.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/build-scripts/runtime_lib.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/build-scripts/runtime_lib.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/build-scripts/runtime_lib.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/ci/build_wamr.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/ci/build_wamr.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/ci/build_wamr.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/ci/build_wamr.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/ci/coding_guidelines_check.py b/lib/wasm-micro-runtime-WAMR-1.3.3/ci/coding_guidelines_check.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/ci/coding_guidelines_check.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/ci/coding_guidelines_check.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/ci/pre_commit_hook_sample b/lib/wasm-micro-runtime-WAMR-1.3.3/ci/pre_commit_hook_sample similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/ci/pre_commit_hook_sample rename to lib/wasm-micro-runtime-WAMR-1.3.3/ci/pre_commit_hook_sample diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/ci/setup.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/ci/setup.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/ci/setup.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/ci/setup.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/ci/validate_lldb.py b/lib/wasm-micro-runtime-WAMR-1.3.3/ci/validate_lldb.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/ci/validate_lldb.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/ci/validate_lldb.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/app-native-shared/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/app-native-shared/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/app-native-shared/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/app-native-shared/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/app-native-shared/attr_container.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/app-native-shared/attr_container.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/app-native-shared/attr_container.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/app-native-shared/attr_container.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/app-native-shared/bi-inc/attr_container.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/app-native-shared/bi-inc/attr_container.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/app-native-shared/bi-inc/attr_container.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/app-native-shared/bi-inc/attr_container.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/app-native-shared/bi-inc/shared_utils.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/app-native-shared/bi-inc/shared_utils.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/app-native-shared/bi-inc/shared_utils.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/app-native-shared/bi-inc/shared_utils.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/app-native-shared/bi-inc/wgl_shared_utils.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/app-native-shared/bi-inc/wgl_shared_utils.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/app-native-shared/bi-inc/wgl_shared_utils.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/app-native-shared/bi-inc/wgl_shared_utils.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/app-native-shared/native_interface.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/app-native-shared/native_interface.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/app-native-shared/native_interface.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/app-native-shared/native_interface.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/app-native-shared/native_interface.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/app-native-shared/native_interface.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/app-native-shared/native_interface.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/app-native-shared/native_interface.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/app-native-shared/restful_utils.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/app-native-shared/restful_utils.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/app-native-shared/restful_utils.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/app-native-shared/restful_utils.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/app_ext_lib_export.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/app_ext_lib_export.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/app_ext_lib_export.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/app_ext_lib_export.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/app_framework.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/app_framework.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/app_framework.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/app_framework.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/app/bh_platform.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/app/bh_platform.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/app/bh_platform.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/app/bh_platform.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/app/bh_platform.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/app/bh_platform.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/app/bh_platform.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/app/bh_platform.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/app/req_resp_api.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/app/req_resp_api.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/app/req_resp_api.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/app/req_resp_api.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/app/request.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/app/request.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/app/request.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/app/request.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/app/timer.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/app/timer.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/app/timer.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/app/timer.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/app/timer_api.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/app/timer_api.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/app/timer_api.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/app/timer_api.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/app/wa-inc/request.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/app/wa-inc/request.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/app/wa-inc/request.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/app/wa-inc/request.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/app/wa-inc/timer_wasm_app.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/app/wa-inc/timer_wasm_app.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/app/wa-inc/timer_wasm_app.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/app/wa-inc/timer_wasm_app.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/app/wasm_app.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/app/wasm_app.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/app/wasm_app.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/app/wasm_app.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/app/wasm_app.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/app/wasm_app.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/app/wasm_app.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/app/wasm_app.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/native/base_lib.inl b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/native/base_lib.inl similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/native/base_lib.inl rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/native/base_lib.inl diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/native/base_lib_export.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/native/base_lib_export.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/native/base_lib_export.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/native/base_lib_export.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/native/req_resp_native_api.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/native/req_resp_native_api.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/native/req_resp_native_api.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/native/req_resp_native_api.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/native/request_response.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/native/request_response.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/native/request_response.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/native/request_response.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/native/runtime_lib.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/native/runtime_lib.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/native/runtime_lib.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/native/runtime_lib.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/native/timer_native_api.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/native/timer_native_api.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/native/timer_native_api.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/native/timer_native_api.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/native/timer_wrapper.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/native/timer_wrapper.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/native/timer_wrapper.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/native/timer_wrapper.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/native/wasm_lib.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/native/wasm_lib.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/base/native/wasm_lib.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/base/native/wasm_lib.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/app/connection.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/app/connection.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/app/connection.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/app/connection.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/app/connection_api.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/app/connection_api.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/app/connection_api.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/app/connection_api.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/app/wa-inc/connection.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/app/wa-inc/connection.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/app/wa-inc/connection.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/app/wa-inc/connection.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/app/wasm_app.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/app/wasm_app.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/app/wasm_app.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/app/wasm_app.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/native/connection.inl b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/native/connection.inl similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/native/connection.inl rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/native/connection.inl diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/native/connection_lib.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/native/connection_lib.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/native/connection_lib.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/native/connection_lib.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/native/connection_native_api.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/native/connection_native_api.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/native/connection_native_api.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/native/connection_native_api.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/native/connection_wrapper.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/native/connection_wrapper.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/native/connection_wrapper.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/native/connection_wrapper.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/native/linux/conn_tcp.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/native/linux/conn_tcp.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/native/linux/conn_tcp.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/native/linux/conn_tcp.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/native/linux/conn_tcp.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/native/linux/conn_tcp.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/native/linux/conn_tcp.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/native/linux/conn_tcp.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/native/linux/conn_uart.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/native/linux/conn_uart.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/native/linux/conn_uart.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/native/linux/conn_uart.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/native/linux/conn_uart.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/native/linux/conn_uart.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/native/linux/conn_uart.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/native/linux/conn_uart.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/native/linux/conn_udp.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/native/linux/conn_udp.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/native/linux/conn_udp.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/native/linux/conn_udp.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/native/linux/conn_udp.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/native/linux/conn_udp.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/native/linux/conn_udp.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/native/linux/conn_udp.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/native/linux/connection_mgr.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/native/linux/connection_mgr.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/native/linux/connection_mgr.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/native/linux/connection_mgr.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/native/linux/connection_mgr.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/native/linux/connection_mgr.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/native/linux/connection_mgr.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/native/linux/connection_mgr.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/native/wasm_lib.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/native/wasm_lib.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/native/wasm_lib.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/native/wasm_lib.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/native/zephyr/connection_lib_impl.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/native/zephyr/connection_lib_impl.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/native/zephyr/connection_lib_impl.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/native/zephyr/connection_lib_impl.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/native/zephyr/connection_mgr.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/native/zephyr/connection_mgr.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/connection/native/zephyr/connection_mgr.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/connection/native/zephyr/connection_mgr.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/sensor/app/sensor.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/sensor/app/sensor.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/sensor/app/sensor.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/sensor/app/sensor.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/sensor/app/sensor_api.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/sensor/app/sensor_api.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/sensor/app/sensor_api.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/sensor/app/sensor_api.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/sensor/app/wa-inc/sensor.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/sensor/app/wa-inc/sensor.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/sensor/app/wa-inc/sensor.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/sensor/app/wa-inc/sensor.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/sensor/app/wasm_app.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/sensor/app/wasm_app.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/sensor/app/wasm_app.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/sensor/app/wasm_app.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/sensor/native/runtime_sensor.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/sensor/native/runtime_sensor.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/sensor/native/runtime_sensor.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/sensor/native/runtime_sensor.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/sensor/native/runtime_sensor.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/sensor/native/runtime_sensor.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/sensor/native/runtime_sensor.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/sensor/native/runtime_sensor.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/sensor/native/runtime_sensor.inl b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/sensor/native/runtime_sensor.inl similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/sensor/native/runtime_sensor.inl rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/sensor/native/runtime_sensor.inl diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/sensor/native/sensor_mgr_ref.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/sensor/native/sensor_mgr_ref.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/sensor/native/sensor_mgr_ref.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/sensor/native/sensor_mgr_ref.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/sensor/native/sensor_native_api.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/sensor/native/sensor_native_api.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/sensor/native/sensor_native_api.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/sensor/native/sensor_native_api.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/sensor/native/wasm_lib.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/sensor/native/wasm_lib.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/sensor/native/wasm_lib.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/sensor/native/wasm_lib.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/template/app/wa-inc/app_xxx.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/template/app/wa-inc/app_xxx.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/template/app/wa-inc/app_xxx.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/template/app/wa-inc/app_xxx.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/template/app/wasm_app.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/template/app/wasm_app.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/template/app/wasm_app.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/template/app/wasm_app.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/template/native/app_xxx.inl b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/template/native/app_xxx.inl similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/template/native/app_xxx.inl rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/template/native/app_xxx.inl diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/template/native/wasm_lib.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/template/native/wasm_lib.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-framework/template/native/wasm_lib.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-framework/template/native/wasm_lib.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/app_manager.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/app_manager.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/app_manager.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/app_manager.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/app_manager.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/app_manager.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/app_manager.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/app_manager.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/app_manager_host.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/app_manager_host.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/app_manager_host.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/app_manager_host.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/app_manager_host.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/app_manager_host.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/app_manager_host.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/app_manager_host.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/app_mgr.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/app_mgr.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/app_mgr.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/app_mgr.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/ble_msg.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/ble_msg.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/ble_msg.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/ble_msg.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/coding_rule.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/coding_rule.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/coding_rule.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/coding_rule.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/event.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/event.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/event.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/event.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/event.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/event.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/event.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/event.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/message.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/message.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/message.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/message.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/module_config.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/module_config.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/module_config.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/module_config.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/module_jeff.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/module_jeff.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/module_jeff.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/module_jeff.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/module_jeff.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/module_jeff.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/module_jeff.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/module_jeff.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/module_utils.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/module_utils.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/module_utils.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/module_utils.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/module_wasm_app.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/module_wasm_app.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/module_wasm_app.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/module_wasm_app.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/module_wasm_app.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/module_wasm_app.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/module_wasm_app.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/module_wasm_app.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/module_wasm_lib.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/module_wasm_lib.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/module_wasm_lib.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/module_wasm_lib.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/module_wasm_lib.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/module_wasm_lib.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/module_wasm_lib.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/module_wasm_lib.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/platform/darwin/app_mgr_darwin.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/platform/darwin/app_mgr_darwin.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/platform/darwin/app_mgr_darwin.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/platform/darwin/app_mgr_darwin.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/platform/linux/app_mgr_linux.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/platform/linux/app_mgr_linux.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/platform/linux/app_mgr_linux.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/platform/linux/app_mgr_linux.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/platform/zephyr/app_mgr_zephyr.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/platform/zephyr/app_mgr_zephyr.c similarity index 93% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/platform/zephyr/app_mgr_zephyr.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/platform/zephyr/app_mgr_zephyr.c index 650e536f11c..68147c0622b 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/platform/zephyr/app_mgr_zephyr.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/platform/zephyr/app_mgr_zephyr.c @@ -6,8 +6,14 @@ #include "app_manager.h" #include "bh_platform.h" #include + +#if KERNEL_VERSION_NUMBER < 0x030200 /* version 3.2.0 */ #include #include +#else +#include +#endif + #if 0 #include #endif diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/resource_reg.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/resource_reg.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/resource_reg.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/resource_reg.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/watchdog.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/watchdog.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/watchdog.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/watchdog.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/watchdog.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/watchdog.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-manager/watchdog.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-manager/watchdog.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-mgr-shared/app_manager_export.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-mgr-shared/app_manager_export.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-mgr-shared/app_manager_export.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-mgr-shared/app_manager_export.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-mgr-shared/app_mgr_shared.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-mgr-shared/app_mgr_shared.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-mgr-shared/app_mgr_shared.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-mgr-shared/app_mgr_shared.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-mgr-shared/host_link.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-mgr-shared/host_link.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/app-mgr-shared/host_link.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/app-mgr-shared/host_link.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/module.json b/lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/module.json similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/app-mgr/module.json rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/app-mgr/module.json diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/config.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/config.h similarity index 91% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/config.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/config.h index acf70ff081b..0ed8723d336 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/config.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/config.h @@ -231,6 +231,17 @@ #define WASM_ENABLE_LOG 1 #endif +/* When this flag is set, WAMR will not automatically + * initialize sockets on Windows platforms. The host + * application is responsible for calling WSAStartup() + * before executing WAMR code that uses sockets, and + * calling WSACleanup() after. + * This flag passes control of socket initialization from + * WAMR to the host application. */ +#ifndef WASM_ENABLE_HOST_SOCKET_INIT +#define WASM_ENABLE_HOST_SOCKET_INIT 0 +#endif + #ifndef WASM_CPU_SUPPORTS_UNALIGNED_ADDR_ACCESS #if defined(BUILD_TARGET_X86_32) || defined(BUILD_TARGET_X86_64) \ || defined(BUILD_TARGET_AARCH64) @@ -379,7 +390,7 @@ #else #define DEFAULT_WASM_STACK_SIZE (12 * 1024) #endif -/* Min auxilliary stack size of each wasm thread */ +/* Min auxiliary stack size of each wasm thread */ #define WASM_THREAD_AUX_STACK_SIZE_MIN (256) /* Default/min native stack size of each app thread */ @@ -397,7 +408,7 @@ #define APP_THREAD_STACK_SIZE_DEFAULT (64 * 1024) #define APP_THREAD_STACK_SIZE_MIN (48 * 1024) #else -#define APP_THREAD_STACK_SIZE_DEFAULT (64 * 1024) +#define APP_THREAD_STACK_SIZE_DEFAULT (128 * 1024) #define APP_THREAD_STACK_SIZE_MIN (24 * 1024) #endif #endif /* end of !(defined(APP_THREAD_STACK_SIZE_DEFAULT) \ @@ -446,6 +457,14 @@ #define WASM_ENABLE_REF_TYPES 0 #endif +#ifndef WASM_ENABLE_EXCE_HANDLING +#define WASM_ENABLE_EXCE_HANDLING 0 +#endif + +#ifndef WASM_ENABLE_TAGS +#define WASM_ENABLE_TAGS 0 +#endif + #ifndef WASM_ENABLE_SGX_IPFS #define WASM_ENABLE_SGX_IPFS 0 #endif @@ -490,4 +509,21 @@ #define WASM_MAX_INSTANCE_CONTEXTS 8 #endif +/* linux perf support */ +#ifndef WASM_ENABLE_LINUX_PERF +#define WASM_ENABLE_LINUX_PERF 0 +#endif + +/* Support registering quick AOT/JIT function entries of some func types + to speed up the calling process of invoking the AOT/JIT functions of + these types from the host embedder */ +#ifndef WASM_ENABLE_QUICK_AOT_ENTRY +#define WASM_ENABLE_QUICK_AOT_ENTRY 1 +#endif + +/* Disable mmap based shared memory by default */ +#ifndef WASM_ENABLE_SHARED_MEMORY_MMAP +#define WASM_ENABLE_SHARED_MEMORY_MMAP 0 +#endif + #endif /* end of _CONFIG_H_ */ diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/SConscript b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/SConscript similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/SConscript rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/SConscript diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/aot_intrinsic.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/aot_intrinsic.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/aot_intrinsic.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/aot_intrinsic.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/aot_intrinsic.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/aot_intrinsic.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/aot_intrinsic.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/aot_intrinsic.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/aot_loader.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/aot_loader.c similarity index 96% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/aot_loader.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/aot_loader.c index abffd6438a7..6983601c427 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/aot_loader.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/aot_loader.c @@ -66,15 +66,15 @@ exchange_uint32(uint8 *p_data) } static void -exchange_uint64(uint8 *pData) +exchange_uint64(uint8 *p_data) { uint32 value; - value = *(uint32 *)pData; - *(uint32 *)pData = *(uint32 *)(pData + 4); - *(uint32 *)(pData + 4) = value; - exchange_uint32(pData); - exchange_uint32(pData + 4); + value = *(uint32 *)p_data; + *(uint32 *)p_data = *(uint32 *)(p_data + 4); + *(uint32 *)(p_data + 4) = value; + exchange_uint32(p_data); + exchange_uint32(p_data + 4); } static union { @@ -214,6 +214,8 @@ GET_U16_FROM_ADDR(const uint8 *p) p += sizeof(type); \ } while (0) +/* NOLINTBEGIN, disable lint for this region with clang-tidy */ + #define read_byte_array(p, p_end, addr, len) \ do { \ CHECK_BUF(p, p_end, len); \ @@ -236,6 +238,8 @@ GET_U16_FROM_ADDR(const uint8 *p) #define read_uint32(p, p_end, res) TEMPLATE_READ(p, p_end, res, uint32) #define read_uint64(p, p_end, res) TEMPLATE_READ(p, p_end, res, uint64) +/* NOLINTEND */ + /* Legal values for bin_type */ #define BIN_TYPE_ELF32L 0 /* 32-bit little endian */ #define BIN_TYPE_ELF32B 1 /* 32-bit big endian */ @@ -822,7 +826,9 @@ load_custom_section(const uint8 *buf, const uint8 *buf_end, AOTModule *module, case AOT_CUSTOM_SECTION_NAME: if (!load_name_section(buf, buf_end, module, is_load_from_file_buf, error_buf, error_buf_size)) - goto fail; + LOG_VERBOSE("Load name section failed."); + else + LOG_VERBOSE("Load name section success."); break; #if WASM_ENABLE_LOAD_CUSTOM_SECTION != 0 case AOT_CUSTOM_SECTION_RAW: @@ -1202,6 +1208,11 @@ load_func_types(const uint8 **p_buf, const uint8 *buf_end, AOTModule *module, func_types[i]->param_cell_num = (uint16)param_cell_num; func_types[i]->ret_cell_num = (uint16)ret_cell_num; + +#if WASM_ENABLE_QUICK_AOT_ENTRY != 0 + func_types[i]->quick_aot_entry = + wasm_native_lookup_quick_aot_entry(func_types[i]); +#endif } *p_buf = buf; @@ -1968,6 +1979,12 @@ str2uint64(const char *buf, uint64 *p_res) #define R_X86_64_GOTPCREL 9 /* 32 bit signed PC relative offset to GOT */ +static bool +is_text_section(const char *section_name) +{ + return !strcmp(section_name, ".text") || !strcmp(section_name, ".ltext"); +} + static bool do_text_relocation(AOTModule *module, AOTRelocationGroup *group, char *error_buf, uint32 error_buf_size) @@ -2055,8 +2072,19 @@ do_text_relocation(AOTModule *module, AOTRelocationGroup *group, } symbol_addr = module->func_ptrs[func_index]; } + else if (!strncmp(symbol, "_" AOT_FUNC_INTERNAL_PREFIX, + strlen("_" AOT_FUNC_INTERNAL_PREFIX))) { + p = symbol + strlen("_" AOT_FUNC_INTERNAL_PREFIX); + if (*p == '\0' + || (func_index = (uint32)atoi(p)) > module->func_count) { + set_error_buf_v(error_buf, error_buf_size, "invalid symbol %s", + symbol); + goto check_symbol_fail; + } + symbol_addr = module->func_ptrs[func_index]; + } #endif - else if (!strcmp(symbol, ".text")) { + else if (is_text_section(symbol)) { symbol_addr = module->code; } else if (!strcmp(symbol, ".data") || !strcmp(symbol, ".sdata") @@ -2228,7 +2256,7 @@ do_data_relocation(AOTModule *module, AOTRelocationGroup *group, for (i = 0; i < group->relocation_count; i++, relocation++) { symbol = relocation->symbol_name; - if (!strcmp(symbol, ".text")) { + if (is_text_section(symbol)) { symbol_addr = module->code; } #if WASM_ENABLE_STATIC_PGO != 0 @@ -2689,6 +2717,8 @@ load_relocation_section(const uint8 *buf, const uint8 *buf_end, if (!strcmp(group->section_name, ".rel.text") || !strcmp(group->section_name, ".rela.text") + || !strcmp(group->section_name, ".rel.ltext") + || !strcmp(group->section_name, ".rela.ltext") || !strcmp(group->section_name, ".rela.literal") #ifdef BH_PLATFORM_WINDOWS || !strcmp(group->section_name, ".text") @@ -2764,6 +2794,104 @@ load_relocation_section(const uint8 *buf, const uint8 *buf_end, return ret; } +#if WASM_ENABLE_LINUX_PERF != 0 +struct func_info { + uint32 idx; + void *ptr; +}; + +static uint32 +get_func_size(const AOTModule *module, struct func_info *sorted_func_ptrs, + uint32 idx) +{ + uint32 func_sz; + + if (idx == module->func_count - 1) + func_sz = (uintptr_t)module->code + module->code_size + - (uintptr_t)(sorted_func_ptrs[idx].ptr); + else + func_sz = (uintptr_t)(sorted_func_ptrs[idx + 1].ptr) + - (uintptr_t)(sorted_func_ptrs[idx].ptr); + + return func_sz; +} + +static int +compare_func_ptrs(const void *f1, const void *f2) +{ + return (intptr_t)((struct func_info *)f1)->ptr + - (intptr_t)((struct func_info *)f2)->ptr; +} + +static struct func_info * +sort_func_ptrs(const AOTModule *module, char *error_buf, uint32 error_buf_size) +{ + uint64 content_len; + struct func_info *sorted_func_ptrs; + unsigned i; + + content_len = (uint64)sizeof(struct func_info) * module->func_count; + sorted_func_ptrs = loader_malloc(content_len, error_buf, error_buf_size); + if (!sorted_func_ptrs) + return NULL; + + for (i = 0; i < module->func_count; i++) { + sorted_func_ptrs[i].idx = i; + sorted_func_ptrs[i].ptr = module->func_ptrs[i]; + } + + qsort(sorted_func_ptrs, module->func_count, sizeof(struct func_info), + compare_func_ptrs); + + return sorted_func_ptrs; +} + +static bool +create_perf_map(const AOTModule *module, char *error_buf, uint32 error_buf_size) +{ + struct func_info *sorted_func_ptrs = NULL; + char perf_map_info[128] = { 0 }; + FILE *perf_map = NULL; + uint32 i; + pid_t pid = getpid(); + bool ret = false; + + sorted_func_ptrs = sort_func_ptrs(module, error_buf, error_buf_size); + if (!sorted_func_ptrs) + goto quit; + + snprintf(perf_map_info, 128, "/tmp/perf-%d.map", pid); + perf_map = fopen(perf_map_info, "w"); + if (!perf_map) { + LOG_WARNING("warning: can't create /tmp/perf-%d.map, because %s", pid, + strerror(errno)); + goto quit; + } + + for (i = 0; i < module->func_count; i++) { + memset(perf_map_info, 0, 128); + snprintf(perf_map_info, 128, "%lx %x aot_func#%u\n", + (uintptr_t)sorted_func_ptrs[i].ptr, + get_func_size(module, sorted_func_ptrs, i), + sorted_func_ptrs[i].idx); + + fwrite(perf_map_info, 1, strlen(perf_map_info), perf_map); + } + + LOG_VERBOSE("generate /tmp/perf-%d.map", pid); + ret = true; + +quit: + if (sorted_func_ptrs) + free(sorted_func_ptrs); + + if (perf_map) + fclose(perf_map); + + return ret; +} +#endif /* WASM_ENABLE_LINUX_PERF != 0*/ + static bool load_from_sections(AOTModule *module, AOTSection *sections, bool is_load_from_file_buf, char *error_buf, @@ -3021,8 +3149,7 @@ resolve_execute_mode(const uint8 *buf, uint32 size, bool *p_mode, p += 8; while (p < p_end) { read_uint32(p, p_end, section_type); - if (section_type <= AOT_SECTION_TYPE_SIGANATURE - || section_type == AOT_SECTION_TYPE_TARGET_INFO) { + if (section_type <= AOT_SECTION_TYPE_SIGANATURE) { read_uint32(p, p_end, section_size); CHECK_BUF(p, p_end, section_size); if (section_type == AOT_SECTION_TYPE_TARGET_INFO) { @@ -3037,7 +3164,7 @@ resolve_execute_mode(const uint8 *buf, uint32 size, bool *p_mode, break; } } - else if (section_type > AOT_SECTION_TYPE_SIGANATURE) { + else { /* section_type > AOT_SECTION_TYPE_SIGANATURE */ set_error_buf(error_buf, error_buf_size, "resolve execute mode failed"); break; @@ -3224,6 +3351,12 @@ load(const uint8 *buf, uint32 size, AOTModule *module, char *error_buf, } #endif +#if WASM_ENABLE_LINUX_PERF != 0 + if (wasm_runtime_get_linux_perf()) + if (!create_perf_map(module, error_buf, error_buf_size)) + goto fail; +#endif + return ret; fail: return false; diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/aot_reloc.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/aot_reloc.h similarity index 99% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/aot_reloc.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/aot_reloc.h index 98df09cb4f2..797eacc1143 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/aot_reloc.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/aot_reloc.h @@ -136,6 +136,7 @@ typedef struct { REG_SYM(aot_enlarge_memory), \ REG_SYM(aot_set_exception), \ REG_SYM(aot_check_app_addr_and_convert),\ + REG_SYM(wasm_runtime_quick_invoke_c_api_native),\ { "memset", (void*)aot_memset }, \ { "memmove", (void*)aot_memmove }, \ { "memcpy", (void*)aot_memmove }, \ diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/aot_runtime.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/aot_runtime.c similarity index 94% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/aot_runtime.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/aot_runtime.c index 076574cb737..731cacbeaae 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/aot_runtime.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/aot_runtime.c @@ -47,6 +47,13 @@ bh_static_assert(sizeof(AOTMemoryInstance) == 104); bh_static_assert(offsetof(AOTTableInstance, elems) == 8); bh_static_assert(offsetof(AOTModuleInstanceExtra, stack_sizes) == 0); +bh_static_assert(offsetof(AOTModuleInstanceExtra, common.c_api_func_imports) + == sizeof(uint64)); + +bh_static_assert(sizeof(CApiFuncImport) == sizeof(uintptr_t) * 3); + +bh_static_assert(sizeof(wasm_val_t) == 16); +bh_static_assert(offsetof(wasm_val_t, of) == 8); static void set_error_buf(char *error_buf, uint32 error_buf_size, const char *string) @@ -333,6 +340,9 @@ tables_instantiate(AOTModuleInstance *module_inst, AOTModule *module, static void memories_deinstantiate(AOTModuleInstance *module_inst) { +#ifdef WASM_LINEAR_MEMORY_MMAP + uint64 map_size; +#endif uint32 i; AOTMemoryInstance *memory_inst; @@ -355,14 +365,21 @@ memories_deinstantiate(AOTModuleInstance *module_inst) if (memory_inst->memory_data) { #ifndef OS_ENABLE_HW_BOUND_CHECK - wasm_runtime_free(memory_inst->memory_data); -#else -#ifdef BH_PLATFORM_WINDOWS - os_mem_decommit(memory_inst->memory_data, - memory_inst->num_bytes_per_page - * memory_inst->cur_page_count); +#ifdef WASM_LINEAR_MEMORY_MMAP + if (shared_memory_is_shared(memory_inst)) { + map_size = (uint64)memory_inst->num_bytes_per_page + * memory_inst->max_page_count; + wasm_munmap_linear_memory(memory_inst->memory_data, + map_size, map_size); + } + else #endif - os_munmap(memory_inst->memory_data, 8 * (uint64)BH_GB); + wasm_runtime_free(memory_inst->memory_data); +#else + map_size = (uint64)memory_inst->num_bytes_per_page + * memory_inst->cur_page_count; + wasm_munmap_linear_memory(memory_inst->memory_data, map_size, + 8 * (uint64)BH_GB); #endif } } @@ -385,10 +402,9 @@ memory_instantiate(AOTModuleInstance *module_inst, AOTModuleInstance *parent, uint32 heap_offset = num_bytes_per_page * init_page_count; uint64 memory_data_size, max_memory_data_size; uint8 *p = NULL, *global_addr; -#ifdef OS_ENABLE_HW_BOUND_CHECK - uint8 *mapped_mem; - uint64 map_size = 8 * (uint64)BH_GB; - uint64 page_size = os_getpagesize(); +#ifdef WASM_LINEAR_MEMORY_MMAP + uint8 *mapped_mem = NULL; + uint64 map_size; #endif #if WASM_ENABLE_SHARED_MEMORY != 0 @@ -512,15 +528,25 @@ memory_instantiate(AOTModuleInstance *module_inst, AOTModuleInstance *parent, #ifndef OS_ENABLE_HW_BOUND_CHECK #if WASM_ENABLE_SHARED_MEMORY != 0 if (is_shared_memory) { +#if WASM_ENABLE_SHARED_MEMORY_MMAP != 0 + map_size = max_memory_data_size; + if (max_memory_data_size > 0 + && !(p = mapped_mem = + wasm_mmap_linear_memory(map_size, &max_memory_data_size, + error_buf, error_buf_size))) { + return NULL; + } +#else /* Allocate maximum memory size when memory is shared */ if (max_memory_data_size > 0 && !(p = runtime_malloc(max_memory_data_size, error_buf, error_buf_size))) { return NULL; } +#endif } else -#endif +#endif /* end of WASM_ENABLE_SHARED_MEMORY != 0 */ { /* Allocate initial memory size when memory is not shared */ if (memory_data_size > 0 @@ -529,43 +555,18 @@ memory_instantiate(AOTModuleInstance *module_inst, AOTModuleInstance *parent, return NULL; } } -#else /* else of OS_ENABLE_HW_BOUND_CHECK */ - memory_data_size = (memory_data_size + page_size - 1) & ~(page_size - 1); - +#else /* else of OS_ENABLE_HW_BOUND_CHECK */ /* Totally 8G is mapped, the opcode load/store address range is 0 to 8G: * ea = i + memarg.offset * both i and memarg.offset are u32 in range 0 to 4G * so the range of ea is 0 to 8G */ - if (!(p = mapped_mem = os_mmap(NULL, map_size, MMAP_PROT_NONE, - MMAP_MAP_NONE, os_get_invalid_handle()))) { + map_size = 8 * (uint64)BH_GB; + if (!(p = mapped_mem = wasm_mmap_linear_memory( + map_size, &memory_data_size, error_buf, error_buf_size))) { set_error_buf(error_buf, error_buf_size, "mmap memory failed"); return NULL; } - -#ifdef BH_PLATFORM_WINDOWS - if (!os_mem_commit(p, memory_data_size, MMAP_PROT_READ | MMAP_PROT_WRITE)) { - set_error_buf(error_buf, error_buf_size, "commit memory failed"); - os_munmap(mapped_mem, map_size); - return NULL; - } -#endif - - if (os_mprotect(p, memory_data_size, MMAP_PROT_READ | MMAP_PROT_WRITE) - != 0) { - set_error_buf(error_buf, error_buf_size, "mprotect memory failed"); -#ifdef BH_PLATFORM_WINDOWS - os_mem_decommit(p, memory_data_size); -#endif - os_munmap(mapped_mem, map_size); - return NULL; - } - - /* Newly allocated pages are filled with zero by the OS, we don't fill it - * again here */ - - if (memory_data_size > UINT32_MAX) - memory_data_size = UINT32_MAX; #endif /* end of OS_ENABLE_HW_BOUND_CHECK */ memory_inst->module_type = Wasm_Module_AoT; @@ -616,16 +617,15 @@ memory_instantiate(AOTModuleInstance *module_inst, AOTModuleInstance *parent, if (heap_size > 0) wasm_runtime_free(memory_inst->heap_handle); fail1: -#ifndef OS_ENABLE_HW_BOUND_CHECK - if (memory_inst->memory_data) - wasm_runtime_free(memory_inst->memory_data); -#else -#ifdef BH_PLATFORM_WINDOWS - if (memory_inst->memory_data) - os_mem_decommit(p, memory_data_size); -#endif - os_munmap(mapped_mem, map_size); +#ifdef WASM_LINEAR_MEMORY_MMAP + if (mapped_mem) + wasm_munmap_linear_memory(mapped_mem, memory_data_size, map_size); + else #endif + { + if (memory_inst->memory_data) + wasm_runtime_free(memory_inst->memory_data); + } memory_inst->memory_data = NULL; return NULL; } @@ -1179,6 +1179,10 @@ aot_instantiate(AOTModule *module, AOTModuleInstance *parent, "failed to allocate bitmaps"); goto fail; } + for (i = 0; i < module->mem_init_data_count; i++) { + if (!module->mem_init_data_list[i]->is_passive) + bh_bitmap_set_bit(common->data_dropped, i); + } } #endif #if WASM_ENABLE_REF_TYPES != 0 @@ -1190,6 +1194,10 @@ aot_instantiate(AOTModule *module, AOTModuleInstance *parent, "failed to allocate bitmaps"); goto fail; } + for (i = 0; i < module->table_init_data_count; i++) { + if (wasm_elem_is_active(module->table_init_data_list[i]->mode)) + bh_bitmap_set_bit(common->elem_dropped, i); + } } #endif @@ -1374,7 +1382,6 @@ aot_lookup_function(const AOTModuleInstance *module_inst, const char *name, } #ifdef OS_ENABLE_HW_BOUND_CHECK - static bool invoke_native_with_hw_bound_check(WASMExecEnv *exec_env, void *func_ptr, const WASMType *func_type, @@ -1386,9 +1393,6 @@ invoke_native_with_hw_bound_check(WASMExecEnv *exec_env, void *func_ptr, WASMJmpBuf jmpbuf_node = { 0 }, *jmpbuf_node_pop; uint32 page_size = os_getpagesize(); uint32 guard_page_count = STACK_OVERFLOW_CHECK_GUARD_PAGE_COUNT; - uint16 param_count = func_type->param_count; - uint16 result_count = func_type->result_count; - const uint8 *types = func_type->types; #ifdef BH_PLATFORM_WINDOWS int result; bool has_exception; @@ -1406,42 +1410,39 @@ invoke_native_with_hw_bound_check(WASMExecEnv *exec_env, void *func_ptr, return false; } - if (exec_env_tls && (exec_env_tls != exec_env)) { - aot_set_exception(module_inst, "invalid exec env"); - return false; - } + if (!exec_env_tls) { + if (!os_thread_signal_inited()) { + aot_set_exception(module_inst, "thread signal env not inited"); + return false; + } - if (!os_thread_signal_inited()) { - aot_set_exception(module_inst, "thread signal env not inited"); - return false; + /* Set thread handle and stack boundary if they haven't been set */ + wasm_exec_env_set_thread_info(exec_env); + + wasm_runtime_set_exec_env_tls(exec_env); + } + else { + if (exec_env_tls != exec_env) { + aot_set_exception(module_inst, "invalid exec env"); + return false; + } } wasm_exec_env_push_jmpbuf(exec_env, &jmpbuf_node); - wasm_runtime_set_exec_env_tls(exec_env); if (os_setjmp(jmpbuf_node.jmpbuf) == 0) { - /* Quick call with func_ptr if the function signature is simple */ - if (!signature && param_count == 1 && types[0] == VALUE_TYPE_I32) { - if (result_count == 0) { - void (*NativeFunc)(WASMExecEnv *, uint32) = - (void (*)(WASMExecEnv *, uint32))func_ptr; - NativeFunc(exec_env, argv[0]); - ret = aot_copy_exception(module_inst, NULL) ? false : true; - } - else if (result_count == 1 - && types[param_count] == VALUE_TYPE_I32) { - uint32 (*NativeFunc)(WASMExecEnv *, uint32) = - (uint32(*)(WASMExecEnv *, uint32))func_ptr; - argv_ret[0] = NativeFunc(exec_env, argv[0]); - ret = aot_copy_exception(module_inst, NULL) ? false : true; - } - else { - ret = wasm_runtime_invoke_native(exec_env, func_ptr, func_type, - signature, attachment, argv, - argc, argv_ret); - } +#if WASM_ENABLE_QUICK_AOT_ENTRY != 0 + /* Quick call if the quick aot entry is registered */ + if (!signature && func_type->quick_aot_entry) { + void (*invoke_native)(void *func_ptr, void *exec_env, uint32 *argv, + uint32 *argv_ret) = + func_type->quick_aot_entry; + invoke_native(func_ptr, exec_env, argv, argv_ret); + ret = !aot_copy_exception(module_inst, NULL); } - else { + else +#endif + { ret = wasm_runtime_invoke_native(exec_env, func_ptr, func_type, signature, attachment, argv, argc, argv_ret); @@ -1473,10 +1474,28 @@ invoke_native_with_hw_bound_check(WASMExecEnv *exec_env, void *func_ptr, (void)jmpbuf_node_pop; return ret; } - -#define invoke_native_internal invoke_native_with_hw_bound_check +#define invoke_native_internal invoke_native_with_hw_bound_check /* NOLINT */ #else /* else of OS_ENABLE_HW_BOUND_CHECK */ -#define invoke_native_internal wasm_runtime_invoke_native +static inline bool +invoke_native_internal(WASMExecEnv *exec_env, void *func_ptr, + const WASMType *func_type, const char *signature, + void *attachment, uint32 *argv, uint32 argc, + uint32 *argv_ret) +{ +#if WASM_ENABLE_QUICK_AOT_ENTRY != 0 + /* Quick call if the quick aot entry is registered */ + if (!signature && func_type->quick_aot_entry) { + AOTModuleInstance *module_inst = + (AOTModuleInstance *)exec_env->module_inst; + void (*invoke_native)(void *func_ptr, void *exec_env, uint32 *argv, + uint32 *argv_ret) = func_type->quick_aot_entry; + invoke_native(func_ptr, exec_env, argv, argv_ret); + return !aot_copy_exception(module_inst, NULL); + } +#endif + return wasm_runtime_invoke_native(exec_env, func_ptr, func_type, signature, + attachment, argv, argc, argv_ret); +} #endif /* end of OS_ENABLE_HW_BOUND_CHECK */ bool @@ -1543,10 +1562,16 @@ aot_call_function(WASMExecEnv *exec_env, AOTFunctionInstance *function, /* func pointer was looked up previously */ bh_assert(func_ptr != NULL); - /* set thread handle and stack boundary */ + +#ifndef OS_ENABLE_HW_BOUND_CHECK + /* Set thread handle and stack boundary */ wasm_exec_env_set_thread_info(exec_env); +#else + /* Set thread info in invoke_native_with_hw_bound_check when + hw bound check is enabled */ +#endif - /* set exec env so it can be later retrieved from instance */ + /* Set exec env so it can be later retrieved from instance */ ((AOTModuleInstanceExtra *)module_inst->e)->common.cur_exec_env = exec_env; if (ext_ret_count > 0) { @@ -2604,6 +2629,7 @@ aot_table_init(AOTModuleInstance *module_inst, uint32 tbl_idx, { AOTTableInstance *tbl_inst; AOTTableInitData *tbl_seg; + uint32 *tbl_seg_elems = NULL, tbl_seg_len = 0; const AOTModule *module = (AOTModule *)module_inst->module; tbl_inst = module_inst->tables[tbl_idx]; @@ -2612,32 +2638,28 @@ aot_table_init(AOTModuleInstance *module_inst, uint32 tbl_idx, tbl_seg = module->table_init_data_list[tbl_seg_idx]; bh_assert(tbl_seg); - if (offset_len_out_of_bounds(src_offset, length, tbl_seg->func_index_count) - || offset_len_out_of_bounds(dst_offset, length, tbl_inst->cur_size)) { - aot_set_exception_with_id(module_inst, EXCE_OUT_OF_BOUNDS_TABLE_ACCESS); - return; - } - - if (!length) { - return; - } - - if (bh_bitmap_get_bit( + if (!bh_bitmap_get_bit( ((AOTModuleInstanceExtra *)module_inst->e)->common.elem_dropped, tbl_seg_idx)) { + /* table segment isn't dropped */ + tbl_seg_elems = tbl_seg->func_indexes; + tbl_seg_len = tbl_seg->func_index_count; + } + + if (offset_len_out_of_bounds(src_offset, length, tbl_seg_len) + || offset_len_out_of_bounds(dst_offset, length, tbl_inst->cur_size)) { aot_set_exception_with_id(module_inst, EXCE_OUT_OF_BOUNDS_TABLE_ACCESS); return; } - if (!wasm_elem_is_passive(tbl_seg->mode)) { - aot_set_exception_with_id(module_inst, EXCE_OUT_OF_BOUNDS_TABLE_ACCESS); + if (!length) { return; } bh_memcpy_s((uint8 *)tbl_inst + offsetof(AOTTableInstance, elems) + dst_offset * sizeof(uint32), (tbl_inst->cur_size - dst_offset) * sizeof(uint32), - tbl_seg->func_indexes + src_offset, length * sizeof(uint32)); + tbl_seg_elems + src_offset, length * sizeof(uint32)); } void @@ -2805,7 +2827,7 @@ aot_alloc_frame(WASMExecEnv *exec_env, uint32 func_index) } #if WASM_ENABLE_PERF_PROFILING != 0 - frame->time_started = os_time_get_boot_microsecond(); + frame->time_started = os_time_thread_cputime_us(); frame->func_perf_prof_info = func_perf_prof; #endif @@ -2823,9 +2845,13 @@ aot_free_frame(WASMExecEnv *exec_env) AOTFrame *prev_frame = cur_frame->prev_frame; #if WASM_ENABLE_PERF_PROFILING != 0 - cur_frame->func_perf_prof_info->total_exec_time += - os_time_get_boot_microsecond() - cur_frame->time_started; + uint64 elapsed = os_time_thread_cputime_us() - cur_frame->time_started; + cur_frame->func_perf_prof_info->total_exec_time += elapsed; cur_frame->func_perf_prof_info->total_exec_cnt++; + + /* parent function */ + if (prev_frame) + prev_frame->func_perf_prof_info->children_exec_time += elapsed; #endif wasm_exec_env_free_wasm_frame(exec_env, cur_frame); @@ -2962,21 +2988,64 @@ aot_dump_perf_profiling(const AOTModuleInstance *module_inst) os_printf("Performance profiler data:\n"); for (i = 0; i < total_func_count; i++, perf_prof++) { + if (perf_prof->total_exec_cnt == 0) + continue; + func_name = get_func_name_from_index(module_inst, i); if (func_name) os_printf( " func %s, execution time: %.3f ms, execution count: %" PRIu32 - " times\n", + " times, children execution time: %.3f ms\n", func_name, perf_prof->total_exec_time / 1000.0f, - perf_prof->total_exec_cnt); + perf_prof->total_exec_cnt, + perf_prof->children_exec_time / 1000.0f); else os_printf(" func %" PRIu32 ", execution time: %.3f ms, execution count: %" PRIu32 - " times\n", + " times, children execution time: %.3f ms\n", i, perf_prof->total_exec_time / 1000.0f, - perf_prof->total_exec_cnt); + perf_prof->total_exec_cnt, + perf_prof->children_exec_time / 1000.0f); + } +} + +double +aot_summarize_wasm_execute_time(const AOTModuleInstance *inst) +{ + double ret = 0; + + AOTModule *module = (AOTModule *)inst->module; + uint32 total_func_count = module->import_func_count + module->func_count, i; + + for (i = 0; i < total_func_count; i++) { + AOTFuncPerfProfInfo *perf_prof = + (AOTFuncPerfProfInfo *)inst->func_perf_profilings + i; + ret += (perf_prof->total_exec_time - perf_prof->children_exec_time) + / 1000.0f; + } + + return ret; +} + +double +aot_get_wasm_func_exec_time(const AOTModuleInstance *inst, + const char *func_name) +{ + AOTModule *module = (AOTModule *)inst->module; + uint32 total_func_count = module->import_func_count + module->func_count, i; + + for (i = 0; i < total_func_count; i++) { + const char *name_in_wasm = get_func_name_from_index(inst, i); + if (name_in_wasm && strcmp(func_name, name_in_wasm) == 0) { + AOTFuncPerfProfInfo *perf_prof = + (AOTFuncPerfProfInfo *)inst->func_perf_profilings + i; + return (perf_prof->total_exec_time - perf_prof->children_exec_time) + / 1000.0f; + } } + + return -1.0; } #endif /* end of WASM_ENABLE_PERF_PROFILING */ diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/aot_runtime.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/aot_runtime.h similarity index 98% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/aot_runtime.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/aot_runtime.h index 35c78bfa082..47d8a2021a2 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/aot_runtime.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/aot_runtime.h @@ -286,6 +286,8 @@ typedef struct AOTFuncPerfProfInfo { uint64 total_exec_time; /* total execution count */ uint32 total_exec_cnt; + /* children execution time */ + uint64 children_exec_time; } AOTFuncPerfProfInfo; /* AOT auxiliary call stack */ @@ -613,6 +615,13 @@ aot_dump_call_stack(WASMExecEnv *exec_env, bool print, char *buf, uint32 len); void aot_dump_perf_profiling(const AOTModuleInstance *module_inst); +double +aot_summarize_wasm_execute_time(const AOTModuleInstance *inst); + +double +aot_get_wasm_func_exec_time(const AOTModuleInstance *inst, + const char *func_name); + const uint8 * aot_get_custom_section(const AOTModule *module, const char *name, uint32 *len); diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/arch/aot_reloc_aarch64.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/arch/aot_reloc_aarch64.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/arch/aot_reloc_aarch64.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/arch/aot_reloc_aarch64.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/arch/aot_reloc_arc.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/arch/aot_reloc_arc.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/arch/aot_reloc_arc.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/arch/aot_reloc_arc.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/arch/aot_reloc_arm.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/arch/aot_reloc_arm.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/arch/aot_reloc_arm.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/arch/aot_reloc_arm.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/arch/aot_reloc_mips.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/arch/aot_reloc_mips.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/arch/aot_reloc_mips.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/arch/aot_reloc_mips.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/arch/aot_reloc_riscv.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/arch/aot_reloc_riscv.c similarity index 91% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/arch/aot_reloc_riscv.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/arch/aot_reloc_riscv.c index 045cab6412c..31830f780f5 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/arch/aot_reloc_riscv.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/arch/aot_reloc_riscv.c @@ -18,15 +18,45 @@ #define RV_OPCODE_SW 0x23 +#undef NEED_SOFT_FP +#undef NEED_SOFT_DP +#undef NEED_SOFT_I32_MUL +#undef NEED_SOFT_I32_DIV +#undef NEED_SOFT_I64_MUL +#undef NEED_SOFT_I64_DIV + +#ifdef __riscv_flen +#if __riscv_flen == 32 +#define NEED_SOFT_DP +#endif +#else +#define NEED_SOFT_FP +#define NEED_SOFT_DP +#endif + +#ifndef __riscv_mul +#define NEED_SOFT_I32_MUL +#define NEED_SOFT_I64_MUL +#elif __riscv_xlen == 32 +#define NEED_SOFT_I64_MUL +#endif + +#ifndef __riscv_div +#define NEED_SOFT_I32_DIV +#define NEED_SOFT_I64_DIV +#elif __riscv_xlen == 32 +#define NEED_SOFT_I64_DIV +#endif + /* clang-format off */ void __adddf3(); void __addsf3(); -void __divdi3(); -void __divsi3(); void __divdf3(); +void __divdi3(); void __divsf3(); -void __eqsf2(); +void __divsi3(); void __eqdf2(); +void __eqsf2(); void __extendsfdf2(); void __fixdfdi(); void __fixdfsi(); @@ -38,12 +68,12 @@ void __fixunssfdi(); void __fixunssfsi(); void __floatdidf(); void __floatdisf(); -void __floatsisf(); void __floatsidf(); +void __floatsisf(); void __floatundidf(); void __floatundisf(); -void __floatunsisf(); void __floatunsidf(); +void __floatunsisf(); void __gedf2(); void __gesf2(); void __gtdf2(); @@ -59,6 +89,8 @@ void __muldi3(); void __mulsf3(); void __mulsi3(); void __nedf2(); +void __negdf2(); +void __negsf2(); void __nesf2(); void __subdf3(); void __subsf3(); @@ -74,60 +106,74 @@ void __unordsf2(); static SymbolMap target_sym_map[] = { /* clang-format off */ REG_COMMON_SYMBOLS -#ifndef __riscv_flen - REG_SYM(__adddf3), +#ifdef NEED_SOFT_FP REG_SYM(__addsf3), - REG_SYM(__divdf3), REG_SYM(__divsf3), - REG_SYM(__eqdf2), REG_SYM(__eqsf2), + REG_SYM(__fixsfdi), + REG_SYM(__fixunssfdi), + REG_SYM(__fixunssfsi), + REG_SYM(__floatsidf), + REG_SYM(__gesf2), + REG_SYM(__gtsf2), + REG_SYM(__lesf2), + REG_SYM(__mulsf3), + REG_SYM(__negsf2), + REG_SYM(__nesf2), + REG_SYM(__subsf3), + REG_SYM(__unordsf2), +#elif __riscv_xlen == 32 + /* rv32f, support FP instruction but need soft routines + * to convert float and long long + */ + REG_SYM(__floatundisf), +#endif +#ifdef NEED_SOFT_DP + REG_SYM(__adddf3), + REG_SYM(__divdf3), + REG_SYM(__eqdf2), REG_SYM(__extendsfdf2), + REG_SYM(__fixdfdi), REG_SYM(__fixunsdfdi), REG_SYM(__fixunsdfsi), - REG_SYM(__fixunssfdi), - REG_SYM(__fixunssfsi), + REG_SYM(__floatdidf), + REG_SYM(__floatsidf), + REG_SYM(__floatundidf), + REG_SYM(__floatunsidf), REG_SYM(__gedf2), - REG_SYM(__gesf2), REG_SYM(__gtdf2), - REG_SYM(__gtsf2), REG_SYM(__ledf2), - REG_SYM(__lesf2), - REG_SYM(__ltdf2), - REG_SYM(__ltsf2), REG_SYM(__muldf3), REG_SYM(__nedf2), - REG_SYM(__nesf2), + REG_SYM(__negdf2), REG_SYM(__subdf3), - REG_SYM(__subsf3), REG_SYM(__truncdfsf2), REG_SYM(__unorddf2), - REG_SYM(__unordsf2), - REG_SYM(__mulsf3), - REG_SYM(__floatundidf), +#elif __riscv_xlen == 32 + /* rv32d, support DP instruction but need soft routines + * to convert double and long long + */ REG_SYM(__fixdfdi), - REG_SYM(__floatsidf), - REG_SYM(__floatunsidf), -#if __riscv_xlen == 32 - REG_SYM(__fixdfsi), - REG_SYM(__fixsfdi), - REG_SYM(__fixsfsi), - REG_SYM(__floatdidf), - REG_SYM(__floatdisf), - REG_SYM(__floatsisf), - REG_SYM(__floatundisf), - REG_SYM(__floatunsisf), - REG_SYM(__mulsi3), + REG_SYM(__floatundidf), #endif +#ifdef NEED_SOFT_I32_MUL + REG_SYM(__mulsi3), #endif - REG_SYM(__divdi3), +#ifdef NEED_SOFT_I32_DIV REG_SYM(__divsi3), - REG_SYM(__moddi3), REG_SYM(__modsi3), + REG_SYM(__udivsi3), + REG_SYM(__umodsi3), +#endif +#ifdef NEED_SOFT_I64_MUL REG_SYM(__muldi3), +#endif +#ifdef NEED_SOFT_I64_DIV + REG_SYM(__divdi3), + REG_SYM(__moddi3), REG_SYM(__udivdi3), - REG_SYM(__udivsi3), REG_SYM(__umoddi3), - REG_SYM(__umodsi3), +#endif /* clang-format on */ }; diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/arch/aot_reloc_thumb.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/arch/aot_reloc_thumb.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/arch/aot_reloc_thumb.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/arch/aot_reloc_thumb.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/arch/aot_reloc_x86_32.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/arch/aot_reloc_x86_32.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/arch/aot_reloc_x86_32.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/arch/aot_reloc_x86_32.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/arch/aot_reloc_x86_64.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/arch/aot_reloc_x86_64.c similarity index 94% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/arch/aot_reloc_x86_64.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/arch/aot_reloc_x86_64.c index b5be2459322..d1f5cb5acc0 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/arch/aot_reloc_x86_64.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/arch/aot_reloc_x86_64.c @@ -163,7 +163,7 @@ apply_relocation(AOTModule *module, uint8 *target_section_addr, error_buf, error_buf_size, "AOT module load failed: " "relocation truncated to fit R_X86_64_PC32 failed. " - "Try using wamrc with --size-level=1 option."); + "Try using wamrc with --size-level=1 or 0 option."); return false; } @@ -196,7 +196,7 @@ apply_relocation(AOTModule *module, uint8 *target_section_addr, snprintf(buf, sizeof(buf), "AOT module load failed: " "relocation truncated to fit %s failed. " - "Try using wamrc with --size-level=1 option.", + "Try using wamrc with --size-level=1 or 0 option.", reloc_type == R_X86_64_32 ? "R_X86_64_32" : "R_X86_64_32S"); set_error_buf(error_buf, error_buf_size, buf); @@ -236,15 +236,16 @@ apply_relocation(AOTModule *module, uint8 *target_section_addr, target_addr -= sizeof(int32); #endif if ((int32)target_addr != target_addr) { - set_error_buf(error_buf, error_buf_size, - "AOT module load failed: " - "relocation truncated to fit " + set_error_buf( + error_buf, error_buf_size, + "AOT module load failed: " + "relocation truncated to fit " #if !defined(BH_PLATFORM_WINDOWS) - "R_X86_64_PLT32 failed. " + "R_X86_64_PLT32 failed. " #else - "IMAGE_REL_AMD64_32 failed." + "IMAGE_REL_AMD64_32 failed." #endif - "Try using wamrc with --size-level=1 option."); + "Try using wamrc with --size-level=1 or 0 option."); return false; } *(int32 *)(target_section_addr + reloc_offset) = (int32)target_addr; diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/arch/aot_reloc_xtensa.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/arch/aot_reloc_xtensa.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/arch/aot_reloc_xtensa.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/arch/aot_reloc_xtensa.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/debug/LICENSE_NUTTX b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/debug/LICENSE_NUTTX similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/debug/LICENSE_NUTTX rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/debug/LICENSE_NUTTX diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/debug/NOTICE_NUTTX b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/debug/NOTICE_NUTTX similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/debug/NOTICE_NUTTX rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/debug/NOTICE_NUTTX diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/debug/elf.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/debug/elf.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/debug/elf.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/debug/elf.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/debug/elf32.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/debug/elf32.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/debug/elf32.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/debug/elf32.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/debug/elf64.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/debug/elf64.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/debug/elf64.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/debug/elf64.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/debug/elf_parser.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/debug/elf_parser.c similarity index 87% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/debug/elf_parser.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/debug/elf_parser.c index 9fec281d32c..657f9530c27 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/debug/elf_parser.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/debug/elf_parser.c @@ -100,6 +100,12 @@ get_section64(Elf64_Ehdr *eh, Elf64_Shdr *section_header) return buf + section_header->sh_offset; } +static bool +is_text_section(const char *section_name) +{ + return !strcmp(section_name, ".text") || !strcmp(section_name, ".ltext"); +} + bool get_text_section(void *buf, uint64_t *offset, uint64_t *size) { @@ -107,6 +113,7 @@ get_text_section(void *buf, uint64_t *offset, uint64_t *size) uint32 i; char *sh_str; + /* Assumption: Only one of .text or .ltext is non-empty. */ if (is64Bit(buf)) { Elf64_Ehdr *eh = (Elf64_Ehdr *)buf; Elf64_Shdr **sh_table = @@ -115,14 +122,16 @@ get_text_section(void *buf, uint64_t *offset, uint64_t *size) read_section_header_table64(eh, sh_table); sh_str = get_section64(eh, sh_table[eh->e_shstrndx]); for (i = 0; i < eh->e_shnum; i++) { - if (!strcmp(sh_str + sh_table[i]->sh_name, ".text")) { + if (is_text_section(sh_str + sh_table[i]->sh_name)) { *offset = sh_table[i]->sh_offset; *size = sh_table[i]->sh_size; sh_table[i]->sh_addr = (Elf64_Addr)(uintptr_t)((char *)buf + sh_table[i]->sh_offset); ret = true; - break; + if (*size > 0) { + break; + } } } wasm_runtime_free(sh_table); @@ -136,14 +145,16 @@ get_text_section(void *buf, uint64_t *offset, uint64_t *size) read_section_header_table(eh, sh_table); sh_str = get_section(eh, sh_table[eh->e_shstrndx]); for (i = 0; i < eh->e_shnum; i++) { - if (!strcmp(sh_str + sh_table[i]->sh_name, ".text")) { + if (is_text_section(sh_str + sh_table[i]->sh_name)) { *offset = sh_table[i]->sh_offset; *size = sh_table[i]->sh_size; sh_table[i]->sh_addr = (Elf32_Addr)(uintptr_t)((char *)buf + sh_table[i]->sh_offset); ret = true; - break; + if (*size > 0) { + break; + } } } wasm_runtime_free(sh_table); diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/debug/elf_parser.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/debug/elf_parser.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/debug/elf_parser.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/debug/elf_parser.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/debug/jit_debug.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/debug/jit_debug.c similarity index 99% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/debug/jit_debug.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/debug/jit_debug.c index 310662f559f..4b0e46f1d5c 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/debug/jit_debug.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/debug/jit_debug.c @@ -23,7 +23,6 @@ #include #include -#include #include #include #include diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/debug/jit_debug.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/debug/jit_debug.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/debug/jit_debug.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/debug/jit_debug.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/iwasm_aot.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/iwasm_aot.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/aot/iwasm_aot.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/aot/iwasm_aot.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/SConscript b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/SConscript similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/SConscript rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/SConscript diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_aarch64.s b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_aarch64.s similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_aarch64.s rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_aarch64.s diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_aarch64_simd.s b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_aarch64_simd.s similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_aarch64_simd.s rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_aarch64_simd.s diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_arc.s b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_arc.s similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_arc.s rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_arc.s diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_arm.s b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_arm.s similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_arm.s rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_arm.s diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_arm_vfp.s b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_arm_vfp.s similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_arm_vfp.s rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_arm_vfp.s diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_em64.asm b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_em64.asm similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_em64.asm rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_em64.asm diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_em64.s b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_em64.s similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_em64.s rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_em64.s diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_em64_simd.asm b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_em64_simd.asm similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_em64_simd.asm rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_em64_simd.asm diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_em64_simd.s b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_em64_simd.s similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_em64_simd.s rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_em64_simd.s diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_general.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_general.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_general.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_general.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_ia32.asm b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_ia32.asm similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_ia32.asm rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_ia32.asm diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_ia32.s b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_ia32.s similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_ia32.s rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_ia32.s diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_mingw_x64.s b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_mingw_x64.s similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_mingw_x64.s rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_mingw_x64.s diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_mingw_x64_simd.s b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_mingw_x64_simd.s similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_mingw_x64_simd.s rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_mingw_x64_simd.s diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_mips.s b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_mips.s similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_mips.s rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_mips.s diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_osx_universal.s b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_osx_universal.s similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_osx_universal.s rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_osx_universal.s diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_riscv.S b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_riscv.S similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_riscv.S rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_riscv.S diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_thumb.s b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_thumb.s similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_thumb.s rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_thumb.s diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_thumb_vfp.s b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_thumb_vfp.s similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_thumb_vfp.s rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_thumb_vfp.s diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_xtensa.s b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_xtensa.s similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/arch/invokeNative_xtensa.s rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/arch/invokeNative_xtensa.s diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/iwasm_common.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/iwasm_common.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/iwasm_common.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/iwasm_common.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_application.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_application.c similarity index 99% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_application.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_application.c index 93c9342dace..e13f7f843d0 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_application.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_application.c @@ -46,7 +46,7 @@ static union { char b; } __ue = { .a = 1 }; -#define is_little_endian() (__ue.b == 1) +#define is_little_endian() (__ue.b == 1) /* NOLINT */ /** * Implementation of wasm_application_execute_main() diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_blocking_op.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_blocking_op.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_blocking_op.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_blocking_op.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_c_api.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_c_api.c similarity index 97% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_c_api.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_c_api.c index 57c3ebd0d0c..a9fac87ba4b 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_c_api.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_c_api.c @@ -299,6 +299,7 @@ wasm_config_new(void) memset(config, 0, sizeof(wasm_config_t)); config->mem_alloc_type = Alloc_With_System_Allocator; + return config; } @@ -330,7 +331,17 @@ wasm_config_set_linux_perf_opt(wasm_config_t *config, bool enable) if (!config) return NULL; - config->linux_perf_support = enable; + config->enable_linux_perf = enable; + return config; +} + +wasm_config_t * +wasm_config_set_segue_flags(wasm_config_t *config, uint32 segue_flags) +{ + if (!config) + return NULL; + + config->segue_flags = segue_flags; return config; } @@ -367,6 +378,9 @@ wasm_engine_new_internal(wasm_config_t *config) wasm_engine_t *engine = NULL; /* init runtime */ RuntimeInitArgs init_args = { 0 }; +#if WASM_ENABLE_JIT != 0 + LLVMJITOptions *jit_options = wasm_runtime_get_llvm_jit_options(); +#endif #ifndef NDEBUG bh_log_set_verbose_level(BH_LOG_LEVEL_VERBOSE); @@ -380,7 +394,12 @@ wasm_engine_new_internal(wasm_config_t *config) init_args.mem_alloc_type = config->mem_alloc_type; memcpy(&init_args.mem_alloc_option, &config->mem_alloc_option, sizeof(MemAllocOption)); - init_args.linux_perf_support = config->linux_perf_support; + init_args.enable_linux_perf = config->enable_linux_perf; + init_args.segue_flags = config->segue_flags; + +#if WASM_ENABLE_JIT != 0 + jit_options->quick_invoke_c_api_import = true; +#endif if (!wasm_runtime_full_init(&init_args)) { LOG_DEBUG("wasm_runtime_full_init failed"); @@ -1902,10 +1921,28 @@ wasm_frame_func_offset(const wasm_frame_t *frame) return frame ? frame->func_offset : 0; } +void +wasm_frame_vec_clone_internal(Vector *src, Vector *out) +{ + if (src->num_elems == 0) { + bh_vector_destroy(out); + return; + } + + if (!bh_vector_destroy(out) + || !bh_vector_init(out, src->num_elems, sizeof(WASMCApiFrame), false)) { + return; + } + + bh_memcpy_s(out->data, (uint32)(src->num_elems * sizeof(WASMCApiFrame)), + src->data, (uint32)(src->num_elems * sizeof(WASMCApiFrame))); + out->num_elems = src->num_elems; +} + static wasm_trap_t * wasm_trap_new_internal(wasm_store_t *store, WASMModuleInstanceCommon *inst_comm_rt, - const char *error_info) + const char *error_info, Vector *cluster_frames) { wasm_trap_t *trap; #if WASM_ENABLE_DUMP_CALL_STACK != 0 @@ -1935,7 +1972,9 @@ wasm_trap_new_internal(wasm_store_t *store, /* fill in frames */ #if WASM_ENABLE_DUMP_CALL_STACK != 0 - trap->frames = ((WASMModuleInstance *)inst_comm_rt)->frames; + trap->frames = cluster_frames + ? cluster_frames + : ((WASMModuleInstance *)inst_comm_rt)->frames; if (trap->frames) { /* fill in instances */ @@ -2046,10 +2085,7 @@ wasm_trap_trace(const wasm_trap_t *trap, own wasm_frame_vec_t *out) } for (i = 0; i < trap->frames->num_elems; i++) { - wasm_frame_t *frame; - - frame = ((wasm_frame_t *)trap->frames->data) + i; - + wasm_frame_t *frame = ((wasm_frame_t *)trap->frames->data) + i; if (!(out->data[i] = wasm_frame_new(frame->instance, frame->module_offset, frame->func_index, frame->func_offset))) { @@ -2258,7 +2294,7 @@ wasm_module_new(wasm_store_t *store, const wasm_byte_vec_t *binary) (uint8 *)module_ex->binary->data, (uint32)module_ex->binary->size, error_buf, (uint32)sizeof(error_buf)); if (!(module_ex->module_comm_rt)) { - LOG_ERROR(error_buf); + LOG_ERROR("%s", error_buf); goto free_vec; } @@ -2331,7 +2367,7 @@ wasm_module_validate(wasm_store_t *store, const wasm_byte_vec_t *binary) } else { ret = false; - LOG_VERBOSE(error_buf); + LOG_VERBOSE("%s", error_buf); } return ret; @@ -2926,6 +2962,10 @@ wasm_func_new_basic(wasm_store_t *store, const wasm_functype_t *type, if (!(func->type = wasm_functype_copy(type))) { goto failed; } + /* func type's param_count and result_count were checked in + loader and are no larger than UINT16_MAX */ + func->param_count = (uint16)func->type->params->num_elems; + func->result_count = (uint16)func->type->results->num_elems; RETURN_OBJ(func, wasm_func_delete) } @@ -2956,6 +2996,10 @@ wasm_func_new_with_env_basic(wasm_store_t *store, const wasm_functype_t *type, if (!(func->type = wasm_functype_copy(type))) { goto failed; } + /* func type's param_count and result_count were checked in + loader and are no larger than UINT16_MAX */ + func->param_count = (uint16)func->type->params->num_elems; + func->result_count = (uint16)func->type->results->num_elems; RETURN_OBJ(func, wasm_func_delete) } @@ -3045,6 +3089,10 @@ wasm_func_new_internal(wasm_store_t *store, uint16 func_idx_rt, if (!func->type) { goto failed; } + /* func type's param_count and result_count were checked in + loader and are no larger than UINT16_MAX */ + func->param_count = (uint16)func->type->params->num_elems; + func->result_count = (uint16)func->type->results->num_elems; /* will add name information when processing "exports" */ func->store = store; @@ -3136,48 +3184,31 @@ params_to_argv(const wasm_val_vec_t *params, const wasm_valtype_vec_t *param_defs, uint32 *argv, uint32 *ptr_argc) { - size_t i = 0; - - if (!param_defs->num_elems) { - return true; - } + uint32 *argv_org = argv; + const wasm_val_t *param, *param_end; - if (!params || !params->num_elems || !params->size || !params->data) { - LOG_ERROR("the parameter params is invalid"); - return false; - } + bh_assert(params && params->num_elems && params->size && params->data); - *ptr_argc = 0; - for (i = 0; i < param_defs->num_elems; ++i) { - const wasm_val_t *param = params->data + i; - bh_assert((*(param_defs->data + i))->kind == param->kind); + param = params->data; + param_end = param + param_defs->num_elems; + for (; param < param_end; param++) { switch (param->kind) { case WASM_I32: + case WASM_F32: *(int32 *)argv = param->of.i32; argv += 1; - *ptr_argc += 1; break; case WASM_I64: + case WASM_F64: *(int64 *)argv = param->of.i64; argv += 2; - *ptr_argc += 2; break; - case WASM_F32: - *(float32 *)argv = param->of.f32; - argv += 1; - *ptr_argc += 1; - break; - case WASM_F64: - *(float64 *)argv = param->of.f64; - argv += 2; - *ptr_argc += 2; break; #if WASM_ENABLE_REF_TYPES != 0 case WASM_ANYREF: *(uintptr_t *)argv = (uintptr_t)param->of.ref; argv += sizeof(uintptr_t) / sizeof(uint32); - *ptr_argc += 1; break; #endif default: @@ -3186,6 +3217,7 @@ params_to_argv(const wasm_val_vec_t *params, } } + *ptr_argc = (uint32)(argv - argv_org); return true; } @@ -3193,62 +3225,37 @@ static bool argv_to_results(const uint32 *argv, const wasm_valtype_vec_t *result_defs, wasm_val_vec_t *results) { - size_t i = 0, argv_i = 0; + wasm_valtype_t **result_def, **result_def_end; wasm_val_t *result; - if (!result_defs->num_elems) { - return true; - } + bh_assert(results && results->size && results->data); - if (!results || !results->size || !results->data) { - LOG_ERROR("the parameter results is invalid"); - return false; - } + result_def = result_defs->data; + result_def_end = result_def + result_defs->num_elems; + result = results->data; - for (i = 0, result = results->data, argv_i = 0; i < result_defs->num_elems; - i++, result++) { - switch (result_defs->data[i]->kind) { + for (; result_def < result_def_end; result_def++, result++) { + result->kind = result_def[0]->kind; + switch (result->kind) { case WASM_I32: - { - result->kind = WASM_I32; - result->of.i32 = *(int32 *)(argv + argv_i); - argv_i += 1; - break; - } - case WASM_I64: - { - result->kind = WASM_I64; - result->of.i64 = *(int64 *)(argv + argv_i); - argv_i += 2; - break; - } case WASM_F32: - { - result->kind = WASM_F32; - result->of.f32 = *(float32 *)(argv + argv_i); - argv_i += 1; + result->of.i32 = *(int32 *)argv; + argv += 1; break; - } + case WASM_I64: case WASM_F64: - { - result->kind = WASM_F64; - result->of.f64 = *(float64 *)(argv + argv_i); - argv_i += 2; + result->of.i64 = *(int64 *)argv; + argv += 2; break; - } #if WASM_ENABLE_REF_TYPES != 0 case WASM_ANYREF: - { - result->kind = WASM_ANYREF; - result->of.ref = - (struct wasm_ref_t *)(*(uintptr_t *)(argv + argv_i)); - argv_i += sizeof(uintptr_t) / sizeof(uint32); + result->of.ref = (struct wasm_ref_t *)(*(uintptr_t *)argv); + argv += sizeof(uintptr_t) / sizeof(uint32); break; - } #endif default: LOG_WARNING("%s meets unsupported type: %d", __FUNCTION__, - result_defs->data[i]->kind); + result->kind); return false; } } @@ -3268,10 +3275,9 @@ wasm_func_call(const wasm_func_t *func, const wasm_val_vec_t *params, WASMFunctionInstanceCommon *func_comm_rt = NULL; WASMExecEnv *exec_env = NULL; size_t param_count, result_count, alloc_count; + Vector *cluster_frames = NULL; - if (!func) { - return NULL; - } + bh_assert(func && func->type); if (!func->inst_comm_rt) { wasm_name_t message = { 0 }; @@ -3285,17 +3291,14 @@ wasm_func_call(const wasm_func_t *func, const wasm_val_vec_t *params, return trap; } - bh_assert(func->type); - -#if WASM_ENABLE_INTERP != 0 if (func->inst_comm_rt->module_type == Wasm_Module_Bytecode) { +#if WASM_ENABLE_INTERP != 0 func_comm_rt = ((WASMModuleInstance *)func->inst_comm_rt)->e->functions + func->func_idx_rt; - } #endif - + } + else if (func->inst_comm_rt->module_type == Wasm_Module_AoT) { #if WASM_ENABLE_AOT != 0 - if (func->inst_comm_rt->module_type == Wasm_Module_AoT) { if (!(func_comm_rt = func->func_comm_rt)) { AOTModuleInstance *inst_aot = (AOTModuleInstance *)func->inst_comm_rt; @@ -3316,8 +3319,8 @@ wasm_func_call(const wasm_func_t *func, const wasm_val_vec_t *params, } } } - } #endif + } /* * a wrong combination of module filetype and compilation flags @@ -3362,7 +3365,7 @@ wasm_func_call(const wasm_func_t *func, const wasm_val_vec_t *params, wasm_runtime_set_exception(func->inst_comm_rt, NULL); if (!wasm_runtime_call_wasm(exec_env, func_comm_rt, argc, argv)) { if (wasm_runtime_get_exception(func->inst_comm_rt)) { - LOG_DEBUG(wasm_runtime_get_exception(func->inst_comm_rt)); + LOG_DEBUG("%s", wasm_runtime_get_exception(func->inst_comm_rt)); goto failed; } } @@ -3385,27 +3388,32 @@ wasm_func_call(const wasm_func_t *func, const wasm_val_vec_t *params, if (argv != argv_buf) wasm_runtime_free(argv); - return wasm_trap_new_internal( +#if WASM_ENABLE_DUMP_CALL_STACK != 0 && WASM_ENABLE_THREAD_MGR != 0 + WASMCluster *cluster = wasm_exec_env_get_cluster(exec_env); + cluster_frames = &cluster->exception_frames; + wasm_cluster_traverse_lock(exec_env); +#endif + + wasm_trap_t *trap = wasm_trap_new_internal( func->store, func->inst_comm_rt, - wasm_runtime_get_exception(func->inst_comm_rt)); + wasm_runtime_get_exception(func->inst_comm_rt), cluster_frames); + +#if WASM_ENABLE_DUMP_CALL_STACK != 0 && WASM_ENABLE_THREAD_MGR != 0 + wasm_cluster_traverse_unlock(exec_env); +#endif + return trap; } size_t wasm_func_param_arity(const wasm_func_t *func) { - if (!func || !func->type || !func->type->params) { - return 0; - } - return func->type->params->num_elems; + return func->param_count; } size_t wasm_func_result_arity(const wasm_func_t *func) { - if (!func || !func->type || !func->type->results) { - return 0; - } - return func->type->results->num_elems; + return func->result_count; } wasm_global_t * @@ -5042,7 +5050,7 @@ wasm_instance_new_with_args(wasm_store_t *store, const wasm_module_t *module, *trap = wasm_trap_new(store, &message); wasm_byte_vec_delete(&message); } - LOG_DEBUG(error_buf); + LOG_DEBUG("%s", error_buf); wasm_instance_delete_internal(instance); return NULL; } diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_c_api_internal.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_c_api_internal.h similarity index 98% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_c_api_internal.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_c_api_internal.h index 6e05eea748c..3967bb274f0 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_c_api_internal.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_c_api_internal.h @@ -130,6 +130,8 @@ struct wasm_func_t { struct wasm_host_info host_info; wasm_functype_t *type; + uint16 param_count; + uint16 result_count; bool with_env; union { @@ -238,4 +240,7 @@ wasm_memory_new_internal(wasm_store_t *store, uint16 memory_idx_rt, wasm_table_t * wasm_table_new_internal(wasm_store_t *store, uint16 table_idx_rt, WASMModuleInstanceCommon *inst_comm_rt); + +void +wasm_frame_vec_clone_internal(Vector *src, Vector *out); #endif /* _WASM_C_API_INTERNAL_H */ diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_exec_env.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_exec_env.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_exec_env.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_exec_env.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_exec_env.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_exec_env.h similarity index 99% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_exec_env.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_exec_env.h index 132642ea8eb..39b782f05a8 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_exec_env.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_exec_env.h @@ -114,6 +114,9 @@ typedef struct WASMExecEnv { /* whether current thread is detached */ bool thread_is_detached; + + /* whether the aux stack is allocated */ + bool is_aux_stack_allocated; #endif #if WASM_ENABLE_DEBUG_INTERP != 0 diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_memory.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_memory.c similarity index 97% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_memory.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_memory.c index 3941c224aa2..2f78b332789 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_memory.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_memory.c @@ -6,7 +6,6 @@ #include "wasm_runtime_common.h" #include "../interpreter/wasm_runtime.h" #include "../aot/aot_runtime.h" -#include "bh_platform.h" #include "mem_alloc.h" #include "wasm_memory.h" @@ -45,11 +44,11 @@ static unsigned int global_pool_size; static bool wasm_memory_init_with_pool(void *mem, unsigned int bytes) { - mem_allocator_t _allocator = mem_allocator_create(mem, bytes); + mem_allocator_t allocator = mem_allocator_create(mem, bytes); - if (_allocator) { + if (allocator) { memory_mode = MEMORY_MODE_POOL; - pool_allocator = _allocator; + pool_allocator = allocator; global_pool_size = bytes; return true; } @@ -76,18 +75,18 @@ wasm_memory_init_with_allocator(void *_user_data, void *_malloc_func, } #else static bool -wasm_memory_init_with_allocator(void *_malloc_func, void *_realloc_func, - void *_free_func) +wasm_memory_init_with_allocator(void *malloc_func_ptr, void *realloc_func_ptr, + void *free_func_ptr) { - if (_malloc_func && _free_func && _malloc_func != _free_func) { + if (malloc_func_ptr && free_func_ptr && malloc_func_ptr != free_func_ptr) { memory_mode = MEMORY_MODE_ALLOCATOR; - malloc_func = _malloc_func; - realloc_func = _realloc_func; - free_func = _free_func; + malloc_func = malloc_func_ptr; + realloc_func = realloc_func_ptr; + free_func = free_func_ptr; return true; } - LOG_ERROR("Init memory with allocator (%p, %p, %p) failed.\n", _malloc_func, - _realloc_func, _free_func); + LOG_ERROR("Init memory with allocator (%p, %p, %p) failed.\n", + malloc_func_ptr, realloc_func_ptr, free_func_ptr); return false; } #endif @@ -96,6 +95,10 @@ static inline bool is_bounds_checks_enabled(WASMModuleInstanceCommon *module_inst) { #if WASM_CONFIGURABLE_BOUNDS_CHECKS != 0 + if (!module_inst) { + return true; + } + return wasm_runtime_is_bounds_checks_enabled(module_inst); #else return true; @@ -111,18 +114,13 @@ wasm_runtime_memory_init(mem_alloc_type_t mem_alloc_type, alloc_option->pool.heap_size); } else if (mem_alloc_type == Alloc_With_Allocator) { -#if WASM_MEM_ALLOC_WITH_USER_DATA != 0 return wasm_memory_init_with_allocator( +#if WASM_MEM_ALLOC_WITH_USER_DATA != 0 alloc_option->allocator.user_data, +#endif alloc_option->allocator.malloc_func, alloc_option->allocator.realloc_func, alloc_option->allocator.free_func); -#else - return wasm_memory_init_with_allocator( - alloc_option->allocator.malloc_func, - alloc_option->allocator.realloc_func, - alloc_option->allocator.free_func); -#endif } else if (mem_alloc_type == Alloc_With_System_Allocator) { memory_mode = MEMORY_MODE_SYSTEM_ALLOCATOR; diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_memory.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_memory.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_memory.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_memory.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_native.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_native.c new file mode 100644 index 00000000000..d2492bc49f3 --- /dev/null +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_native.c @@ -0,0 +1,1491 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + */ + +#include "wasm_native.h" +#include "wasm_runtime_common.h" +#include "bh_log.h" +#if WASM_ENABLE_INTERP != 0 +#include "../interpreter/wasm_runtime.h" +#endif +#if WASM_ENABLE_AOT != 0 +#include "../aot/aot_runtime.h" +#endif +#if WASM_ENABLE_THREAD_MGR != 0 +#include "../libraries/thread-mgr/thread_manager.h" +#endif + +static NativeSymbolsList g_native_symbols_list = NULL; + +#if WASM_ENABLE_LIBC_WASI != 0 +static void *g_wasi_context_key; +#endif /* WASM_ENABLE_LIBC_WASI */ + +uint32 +get_libc_builtin_export_apis(NativeSymbol **p_libc_builtin_apis); + +#if WASM_ENABLE_SPEC_TEST != 0 +uint32 +get_spectest_export_apis(NativeSymbol **p_libc_builtin_apis); +#endif + +uint32 +get_libc_wasi_export_apis(NativeSymbol **p_libc_wasi_apis); + +uint32_t +get_wasi_nn_export_apis(NativeSymbol **p_libc_wasi_apis); + +uint32 +get_base_lib_export_apis(NativeSymbol **p_base_lib_apis); + +uint32 +get_ext_lib_export_apis(NativeSymbol **p_ext_lib_apis); + +#if WASM_ENABLE_LIB_PTHREAD != 0 +bool +lib_pthread_init(); + +void +lib_pthread_destroy(); + +uint32 +get_lib_pthread_export_apis(NativeSymbol **p_lib_pthread_apis); +#endif + +#if WASM_ENABLE_LIB_WASI_THREADS != 0 +bool +lib_wasi_threads_init(void); + +void +lib_wasi_threads_destroy(void); + +uint32 +get_lib_wasi_threads_export_apis(NativeSymbol **p_lib_wasi_threads_apis); +#endif + +uint32 +get_libc_emcc_export_apis(NativeSymbol **p_libc_emcc_apis); + +uint32 +get_lib_rats_export_apis(NativeSymbol **p_lib_rats_apis); + +static bool +compare_type_with_signautre(uint8 type, const char signature) +{ + const char num_sig_map[] = { 'F', 'f', 'I', 'i' }; + + if (VALUE_TYPE_F64 <= type && type <= VALUE_TYPE_I32 + && signature == num_sig_map[type - VALUE_TYPE_F64]) { + return true; + } + +#if WASM_ENABLE_REF_TYPES != 0 + if ('r' == signature && type == VALUE_TYPE_EXTERNREF) + return true; +#endif + + /* TODO: a v128 parameter */ + return false; +} + +static bool +check_symbol_signature(const WASMType *type, const char *signature) +{ + const char *p = signature, *p_end; + char sig; + uint32 i = 0; + + if (!p || strlen(p) < 2) + return false; + + p_end = p + strlen(signature); + + if (*p++ != '(') + return false; + + if ((uint32)(p_end - p) < (uint32)(type->param_count + 1)) + /* signatures of parameters, and ')' */ + return false; + + for (i = 0; i < type->param_count; i++) { + sig = *p++; + + /* a f64/f32/i64/i32/externref parameter */ + if (compare_type_with_signautre(type->types[i], sig)) + continue; + + /* a pointer/string paramter */ + if (type->types[i] != VALUE_TYPE_I32) + /* pointer and string must be i32 type */ + return false; + + if (sig == '*') { + /* it is a pointer */ + if (i + 1 < type->param_count + && type->types[i + 1] == VALUE_TYPE_I32 && *p == '~') { + /* pointer length followed */ + i++; + p++; + } + } + else if (sig == '$') { + /* it is a string */ + } + else { + /* invalid signature */ + return false; + } + } + + if (*p++ != ')') + return false; + + if (type->result_count) { + if (p >= p_end) + return false; + + /* result types includes: f64,f32,i64,i32,externref */ + if (!compare_type_with_signautre(type->types[i], *p)) + return false; + + p++; + } + + if (*p != '\0') + return false; + + return true; +} + +static int +native_symbol_cmp(const void *native_symbol1, const void *native_symbol2) +{ + return strcmp(((const NativeSymbol *)native_symbol1)->symbol, + ((const NativeSymbol *)native_symbol2)->symbol); +} + +static void * +lookup_symbol(NativeSymbol *native_symbols, uint32 n_native_symbols, + const char *symbol, const char **p_signature, void **p_attachment) +{ + NativeSymbol *native_symbol, key = { 0 }; + + key.symbol = symbol; + + if ((native_symbol = bsearch(&key, native_symbols, n_native_symbols, + sizeof(NativeSymbol), native_symbol_cmp))) { + *p_signature = native_symbol->signature; + *p_attachment = native_symbol->attachment; + return native_symbol->func_ptr; + } + + return NULL; +} + +/** + * allow func_type and all outputs, like p_signature, p_attachment and + * p_call_conv_raw to be NULL + */ +void * +wasm_native_resolve_symbol(const char *module_name, const char *field_name, + const WASMType *func_type, const char **p_signature, + void **p_attachment, bool *p_call_conv_raw) +{ + NativeSymbolsNode *node, *node_next; + const char *signature = NULL; + void *func_ptr = NULL, *attachment = NULL; + + node = g_native_symbols_list; + while (node) { + node_next = node->next; + if (!strcmp(node->module_name, module_name)) { + if ((func_ptr = + lookup_symbol(node->native_symbols, node->n_native_symbols, + field_name, &signature, &attachment)) + || (field_name[0] == '_' + && (func_ptr = lookup_symbol( + node->native_symbols, node->n_native_symbols, + field_name + 1, &signature, &attachment)))) + break; + } + node = node_next; + } + + if (!p_signature || !p_attachment || !p_call_conv_raw) + return func_ptr; + + if (func_ptr) { + if (signature && signature[0] != '\0') { + /* signature is not empty, check its format */ + if (!func_type || !check_symbol_signature(func_type, signature)) { +#if WASM_ENABLE_WAMR_COMPILER == 0 + /* Output warning except running aot compiler */ + LOG_WARNING("failed to check signature '%s' and resolve " + "pointer params for import function (%s %s)\n", + signature, module_name, field_name); +#endif + return NULL; + } + else + /* Save signature for runtime to do pointer check and + address conversion */ + *p_signature = signature; + } + else + /* signature is empty */ + *p_signature = NULL; + + *p_attachment = attachment; + *p_call_conv_raw = node->call_conv_raw; + } + + return func_ptr; +} + +static bool +register_natives(const char *module_name, NativeSymbol *native_symbols, + uint32 n_native_symbols, bool call_conv_raw) +{ + NativeSymbolsNode *node; + + if (!(node = wasm_runtime_malloc(sizeof(NativeSymbolsNode)))) + return false; +#if WASM_ENABLE_MEMORY_TRACING != 0 + os_printf("Register native, size: %u\n", sizeof(NativeSymbolsNode)); +#endif + + node->module_name = module_name; + node->native_symbols = native_symbols; + node->n_native_symbols = n_native_symbols; + node->call_conv_raw = call_conv_raw; + + /* Add to list head */ + node->next = g_native_symbols_list; + g_native_symbols_list = node; + + qsort(native_symbols, n_native_symbols, sizeof(NativeSymbol), + native_symbol_cmp); + + return true; +} + +bool +wasm_native_register_natives(const char *module_name, + NativeSymbol *native_symbols, + uint32 n_native_symbols) +{ + return register_natives(module_name, native_symbols, n_native_symbols, + false); +} + +bool +wasm_native_register_natives_raw(const char *module_name, + NativeSymbol *native_symbols, + uint32 n_native_symbols) +{ + return register_natives(module_name, native_symbols, n_native_symbols, + true); +} + +bool +wasm_native_unregister_natives(const char *module_name, + NativeSymbol *native_symbols) +{ + NativeSymbolsNode **prevp; + NativeSymbolsNode *node; + + prevp = &g_native_symbols_list; + while ((node = *prevp) != NULL) { + if (node->native_symbols == native_symbols + && !strcmp(node->module_name, module_name)) { + *prevp = node->next; + wasm_runtime_free(node); + return true; + } + prevp = &node->next; + } + return false; +} + +#if WASM_ENABLE_MODULE_INST_CONTEXT != 0 +static uint32 +context_key_to_idx(void *key) +{ + bh_assert(key != NULL); + uint32 idx = (uint32)(uintptr_t)key; + bh_assert(idx > 0); + bh_assert(idx <= WASM_MAX_INSTANCE_CONTEXTS); + return idx - 1; +} + +static void * +context_idx_to_key(uint32 idx) +{ + bh_assert(idx < WASM_MAX_INSTANCE_CONTEXTS); + return (void *)(uintptr_t)(idx + 1); +} + +typedef void (*dtor_t)(WASMModuleInstanceCommon *, void *); +static dtor_t g_context_dtors[WASM_MAX_INSTANCE_CONTEXTS]; + +static void +dtor_noop(WASMModuleInstanceCommon *inst, void *ctx) +{} + +void * +wasm_native_create_context_key(void (*dtor)(WASMModuleInstanceCommon *inst, + void *ctx)) +{ + uint32 i; + for (i = 0; i < WASM_MAX_INSTANCE_CONTEXTS; i++) { + if (g_context_dtors[i] == NULL) { + if (dtor == NULL) { + dtor = dtor_noop; + } + g_context_dtors[i] = dtor; + return context_idx_to_key(i); + } + } + LOG_ERROR("failed to allocate instance context key"); + return NULL; +} + +void +wasm_native_destroy_context_key(void *key) +{ + uint32 idx = context_key_to_idx(key); + bh_assert(g_context_dtors[idx] != NULL); + g_context_dtors[idx] = NULL; +} + +static WASMModuleInstanceExtraCommon * +wasm_module_inst_extra_common(WASMModuleInstanceCommon *inst) +{ +#if WASM_ENABLE_INTERP != 0 + if (inst->module_type == Wasm_Module_Bytecode) { + return &((WASMModuleInstance *)inst)->e->common; + } +#endif +#if WASM_ENABLE_AOT != 0 + if (inst->module_type == Wasm_Module_AoT) { + return &((AOTModuleInstanceExtra *)((AOTModuleInstance *)inst)->e) + ->common; + } +#endif + bh_assert(false); + return NULL; +} + +void +wasm_native_set_context(WASMModuleInstanceCommon *inst, void *key, void *ctx) +{ + uint32 idx = context_key_to_idx(key); + WASMModuleInstanceExtraCommon *common = wasm_module_inst_extra_common(inst); + common->contexts[idx] = ctx; +} + +void +wasm_native_set_context_spread(WASMModuleInstanceCommon *inst, void *key, + void *ctx) +{ +#if WASM_ENABLE_THREAD_MGR != 0 + wasm_cluster_set_context(inst, key, ctx); +#else + wasm_native_set_context(inst, key, ctx); +#endif +} + +void * +wasm_native_get_context(WASMModuleInstanceCommon *inst, void *key) +{ + uint32 idx = context_key_to_idx(key); + WASMModuleInstanceExtraCommon *common = wasm_module_inst_extra_common(inst); + return common->contexts[idx]; +} + +void +wasm_native_call_context_dtors(WASMModuleInstanceCommon *inst) +{ + WASMModuleInstanceExtraCommon *common = wasm_module_inst_extra_common(inst); + uint32 i; + for (i = 0; i < WASM_MAX_INSTANCE_CONTEXTS; i++) { + dtor_t dtor = g_context_dtors[i]; + if (dtor != NULL) { + dtor(inst, common->contexts[i]); + } + } +} + +void +wasm_native_inherit_contexts(WASMModuleInstanceCommon *child, + WASMModuleInstanceCommon *parent) +{ + WASMModuleInstanceExtraCommon *parent_common = + wasm_module_inst_extra_common(parent); + WASMModuleInstanceExtraCommon *child_common = + wasm_module_inst_extra_common(child); + bh_memcpy_s(child_common->contexts, + sizeof(*child_common->contexts) * WASM_MAX_INSTANCE_CONTEXTS, + parent_common->contexts, + sizeof(*parent_common->contexts) * WASM_MAX_INSTANCE_CONTEXTS); +} +#endif /* WASM_ENABLE_MODULE_INST_CONTEXT != 0 */ + +#if WASM_ENABLE_LIBC_WASI != 0 +WASIContext * +wasm_runtime_get_wasi_ctx(WASMModuleInstanceCommon *module_inst_comm) +{ + return wasm_native_get_context(module_inst_comm, g_wasi_context_key); +} + +void +wasm_runtime_set_wasi_ctx(WASMModuleInstanceCommon *module_inst_comm, + WASIContext *wasi_ctx) +{ + wasm_native_set_context(module_inst_comm, g_wasi_context_key, wasi_ctx); +} + +static void +wasi_context_dtor(WASMModuleInstanceCommon *inst, void *ctx) +{ + if (ctx == NULL) { + return; + } + wasm_runtime_destroy_wasi(inst); +} +#endif /* end of WASM_ENABLE_LIBC_WASI */ + +#if WASM_ENABLE_QUICK_AOT_ENTRY != 0 +static bool +quick_aot_entry_init(); +#endif + +bool +wasm_native_init() +{ +#if WASM_ENABLE_SPEC_TEST != 0 || WASM_ENABLE_LIBC_BUILTIN != 0 \ + || WASM_ENABLE_BASE_LIB != 0 || WASM_ENABLE_LIBC_EMCC != 0 \ + || WASM_ENABLE_LIB_RATS != 0 || WASM_ENABLE_WASI_NN != 0 \ + || WASM_ENABLE_APP_FRAMEWORK != 0 || WASM_ENABLE_LIBC_WASI != 0 \ + || WASM_ENABLE_LIB_PTHREAD != 0 || WASM_ENABLE_LIB_WASI_THREADS != 0 + NativeSymbol *native_symbols; + uint32 n_native_symbols; +#endif + +#if WASM_ENABLE_LIBC_BUILTIN != 0 + n_native_symbols = get_libc_builtin_export_apis(&native_symbols); + if (!wasm_native_register_natives("env", native_symbols, n_native_symbols)) + goto fail; +#endif /* WASM_ENABLE_LIBC_BUILTIN */ + +#if WASM_ENABLE_SPEC_TEST + n_native_symbols = get_spectest_export_apis(&native_symbols); + if (!wasm_native_register_natives("spectest", native_symbols, + n_native_symbols)) + goto fail; +#endif /* WASM_ENABLE_SPEC_TEST */ + +#if WASM_ENABLE_LIBC_WASI != 0 + g_wasi_context_key = wasm_native_create_context_key(wasi_context_dtor); + if (g_wasi_context_key == NULL) { + goto fail; + } + n_native_symbols = get_libc_wasi_export_apis(&native_symbols); + if (!wasm_native_register_natives("wasi_unstable", native_symbols, + n_native_symbols)) + goto fail; + if (!wasm_native_register_natives("wasi_snapshot_preview1", native_symbols, + n_native_symbols)) + goto fail; +#endif + +#if WASM_ENABLE_BASE_LIB != 0 + n_native_symbols = get_base_lib_export_apis(&native_symbols); + if (n_native_symbols > 0 + && !wasm_native_register_natives("env", native_symbols, + n_native_symbols)) + goto fail; +#endif + +#if WASM_ENABLE_APP_FRAMEWORK != 0 + n_native_symbols = get_ext_lib_export_apis(&native_symbols); + if (n_native_symbols > 0 + && !wasm_native_register_natives("env", native_symbols, + n_native_symbols)) + goto fail; +#endif + +#if WASM_ENABLE_LIB_PTHREAD != 0 + if (!lib_pthread_init()) + goto fail; + + n_native_symbols = get_lib_pthread_export_apis(&native_symbols); + if (n_native_symbols > 0 + && !wasm_native_register_natives("env", native_symbols, + n_native_symbols)) + goto fail; +#endif + +#if WASM_ENABLE_LIB_WASI_THREADS != 0 + if (!lib_wasi_threads_init()) + goto fail; + + n_native_symbols = get_lib_wasi_threads_export_apis(&native_symbols); + if (n_native_symbols > 0 + && !wasm_native_register_natives("wasi", native_symbols, + n_native_symbols)) + goto fail; +#endif + +#if WASM_ENABLE_LIBC_EMCC != 0 + n_native_symbols = get_libc_emcc_export_apis(&native_symbols); + if (n_native_symbols > 0 + && !wasm_native_register_natives("env", native_symbols, + n_native_symbols)) + goto fail; +#endif /* WASM_ENABLE_LIBC_EMCC */ + +#if WASM_ENABLE_LIB_RATS != 0 + n_native_symbols = get_lib_rats_export_apis(&native_symbols); + if (n_native_symbols > 0 + && !wasm_native_register_natives("env", native_symbols, + n_native_symbols)) + goto fail; +#endif /* WASM_ENABLE_LIB_RATS */ + +#if WASM_ENABLE_WASI_NN != 0 + n_native_symbols = get_wasi_nn_export_apis(&native_symbols); + if (!wasm_native_register_natives("wasi_nn", native_symbols, + n_native_symbols)) + goto fail; +#endif + +#if WASM_ENABLE_QUICK_AOT_ENTRY != 0 + if (!quick_aot_entry_init()) { +#if WASM_ENABLE_SPEC_TEST != 0 || WASM_ENABLE_LIBC_BUILTIN != 0 \ + || WASM_ENABLE_BASE_LIB != 0 || WASM_ENABLE_LIBC_EMCC != 0 \ + || WASM_ENABLE_LIB_RATS != 0 || WASM_ENABLE_WASI_NN != 0 \ + || WASM_ENABLE_APP_FRAMEWORK != 0 || WASM_ENABLE_LIBC_WASI != 0 \ + || WASM_ENABLE_LIB_PTHREAD != 0 || WASM_ENABLE_LIB_WASI_THREADS != 0 + goto fail; +#else + return false; +#endif + } +#endif + + return true; +#if WASM_ENABLE_SPEC_TEST != 0 || WASM_ENABLE_LIBC_BUILTIN != 0 \ + || WASM_ENABLE_BASE_LIB != 0 || WASM_ENABLE_LIBC_EMCC != 0 \ + || WASM_ENABLE_LIB_RATS != 0 || WASM_ENABLE_WASI_NN != 0 \ + || WASM_ENABLE_APP_FRAMEWORK != 0 || WASM_ENABLE_LIBC_WASI != 0 \ + || WASM_ENABLE_LIB_PTHREAD != 0 || WASM_ENABLE_LIB_WASI_THREADS != 0 +fail: + wasm_native_destroy(); + return false; +#endif +} + +void +wasm_native_destroy() +{ + NativeSymbolsNode *node, *node_next; + +#if WASM_ENABLE_LIBC_WASI != 0 + if (g_wasi_context_key != NULL) { + wasm_native_destroy_context_key(g_wasi_context_key); + g_wasi_context_key = NULL; + } +#endif +#if WASM_ENABLE_LIB_PTHREAD != 0 + lib_pthread_destroy(); +#endif + +#if WASM_ENABLE_LIB_WASI_THREADS != 0 + lib_wasi_threads_destroy(); +#endif + + node = g_native_symbols_list; + while (node) { + node_next = node->next; + wasm_runtime_free(node); + node = node_next; + } + + g_native_symbols_list = NULL; +} + +#if WASM_ENABLE_QUICK_AOT_ENTRY != 0 +static void +invoke_no_args_v(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + void (*native_code)(WASMExecEnv *) = func_ptr; + native_code(exec_env); +} +static void +invoke_no_args_i(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int32 (*native_code)(WASMExecEnv *) = func_ptr; + argv_ret[0] = native_code(exec_env); +} +static void +invoke_no_args_I(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int64 (*native_code)(WASMExecEnv *) = func_ptr; + int64 ret = native_code(exec_env); + PUT_I64_TO_ADDR(argv_ret, ret); +} + +static void +invoke_i_v(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + void (*native_code)(WASMExecEnv *, int32) = func_ptr; + native_code(exec_env, argv[0]); +} +static void +invoke_i_i(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int32 (*native_code)(WASMExecEnv *, int32) = func_ptr; + argv_ret[0] = native_code(exec_env, argv[0]); +} +static void +invoke_i_I(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int64 (*native_code)(WASMExecEnv *, int32) = func_ptr; + int64 ret = native_code(exec_env, argv[0]); + PUT_I64_TO_ADDR(argv_ret, ret); +} + +static void +invoke_I_v(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + void (*native_code)(WASMExecEnv *, int64) = func_ptr; + native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv)); +} +static void +invoke_I_i(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int32 (*native_code)(WASMExecEnv *, int64) = func_ptr; + argv_ret[0] = native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv)); +} +static void +invoke_I_I(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int64 (*native_code)(WASMExecEnv *, int64) = func_ptr; + int64 ret = native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv)); + PUT_I64_TO_ADDR(argv_ret, ret); +} + +static void +invoke_ii_v(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + void (*native_code)(WASMExecEnv *, int32, int32) = func_ptr; + native_code(exec_env, argv[0], argv[1]); +} +static void +invoke_ii_i(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int32 (*native_code)(WASMExecEnv *, int32, int32) = func_ptr; + argv_ret[0] = native_code(exec_env, argv[0], argv[1]); +} +static void +invoke_ii_I(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int64 (*native_code)(WASMExecEnv *, int32, int32) = func_ptr; + int64 ret = native_code(exec_env, argv[0], argv[1]); + PUT_I64_TO_ADDR(argv_ret, ret); +} + +static void +invoke_iI_v(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + void (*native_code)(WASMExecEnv *, int32, int64) = func_ptr; + native_code(exec_env, argv[0], GET_I64_FROM_ADDR((uint32 *)argv + 1)); +} +static void +invoke_iI_i(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int32 (*native_code)(WASMExecEnv *, int32, int64) = func_ptr; + argv_ret[0] = + native_code(exec_env, argv[0], GET_I64_FROM_ADDR((uint32 *)argv + 1)); +} +static void +invoke_iI_I(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int64 (*native_code)(WASMExecEnv *, int32, int64) = func_ptr; + int64 ret = + native_code(exec_env, argv[0], GET_I64_FROM_ADDR((uint32 *)argv + 1)); + PUT_I64_TO_ADDR(argv_ret, ret); +} + +static void +invoke_Ii_v(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + void (*native_code)(WASMExecEnv *, int64, int32) = func_ptr; + native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), argv[2]); +} +static void +invoke_Ii_i(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int32 (*native_code)(WASMExecEnv *, int64, int32) = func_ptr; + argv_ret[0] = + native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), argv[2]); +} +static void +invoke_Ii_I(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int64 (*native_code)(WASMExecEnv *, int64, int32) = func_ptr; + int64 ret = + native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), argv[2]); + PUT_I64_TO_ADDR(argv_ret, ret); +} + +static void +invoke_II_v(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + void (*native_code)(WASMExecEnv *, int64, int64) = func_ptr; + native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), + GET_I64_FROM_ADDR((uint32 *)argv + 2)); +} +static void +invoke_II_i(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int32 (*native_code)(WASMExecEnv *, int64, int64) = func_ptr; + argv_ret[0] = native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), + GET_I64_FROM_ADDR((uint32 *)argv + 2)); +} +static void +invoke_II_I(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int64 (*native_code)(WASMExecEnv *, int64, int64) = func_ptr; + int64 ret = native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), + GET_I64_FROM_ADDR((uint32 *)argv + 2)); + PUT_I64_TO_ADDR(argv_ret, ret); +} + +static void +invoke_iii_v(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + void (*native_code)(WASMExecEnv *, int32, int32, int32) = func_ptr; + native_code(exec_env, argv[0], argv[1], argv[2]); +} +static void +invoke_iii_i(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int32 (*native_code)(WASMExecEnv *, int32, int32, int32) = func_ptr; + argv_ret[0] = native_code(exec_env, argv[0], argv[1], argv[2]); +} +static void +invoke_iii_I(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int64 (*native_code)(WASMExecEnv *, int32, int32, int32) = func_ptr; + int64 ret = native_code(exec_env, argv[0], argv[1], argv[2]); + PUT_I64_TO_ADDR(argv_ret, ret); +} + +static void +invoke_iiI_v(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + void (*native_code)(WASMExecEnv *, int32, int32, int64) = func_ptr; + native_code(exec_env, argv[0], argv[1], + GET_I64_FROM_ADDR((uint32 *)argv + 2)); +} +static void +invoke_iiI_i(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int32 (*native_code)(WASMExecEnv *, int32, int32, int64) = func_ptr; + argv_ret[0] = native_code(exec_env, argv[0], argv[1], + GET_I64_FROM_ADDR((uint32 *)argv + 2)); +} +static void +invoke_iiI_I(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int64 (*native_code)(WASMExecEnv *, int32, int32, int64) = func_ptr; + int64 ret = native_code(exec_env, argv[0], argv[1], + GET_I64_FROM_ADDR((uint32 *)argv + 2)); + PUT_I64_TO_ADDR(argv_ret, ret); +} + +static void +invoke_iIi_v(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + void (*native_code)(WASMExecEnv *, int32, int64, int32) = func_ptr; + native_code(exec_env, argv[0], GET_I64_FROM_ADDR((uint32 *)argv + 1), + argv[3]); +} +static void +invoke_iIi_i(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int32 (*native_code)(WASMExecEnv *, int32, int64, int32) = func_ptr; + argv_ret[0] = native_code(exec_env, argv[0], + GET_I64_FROM_ADDR((uint32 *)argv + 1), argv[3]); +} +static void +invoke_iIi_I(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int64 (*native_code)(WASMExecEnv *, int32, int64, int32) = func_ptr; + int64 ret = native_code(exec_env, argv[0], + GET_I64_FROM_ADDR((uint32 *)argv + 1), argv[3]); + PUT_I64_TO_ADDR(argv_ret, ret); +} + +static void +invoke_iII_v(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + void (*native_code)(WASMExecEnv *, int32, int64, int64) = func_ptr; + native_code(exec_env, argv[0], GET_I64_FROM_ADDR((uint32 *)argv + 1), + GET_I64_FROM_ADDR((uint32 *)argv + 3)); +} +static void +invoke_iII_i(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int32 (*native_code)(WASMExecEnv *, int32, int64, int64) = func_ptr; + argv_ret[0] = + native_code(exec_env, argv[0], GET_I64_FROM_ADDR((uint32 *)argv + 1), + GET_I64_FROM_ADDR((uint32 *)argv + 3)); +} +static void +invoke_iII_I(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int64 (*native_code)(WASMExecEnv *, int32, int64, int64) = func_ptr; + int64 ret = + native_code(exec_env, argv[0], GET_I64_FROM_ADDR((uint32 *)argv + 1), + GET_I64_FROM_ADDR((uint32 *)argv + 3)); + PUT_I64_TO_ADDR(argv_ret, ret); +} + +static void +invoke_Iii_v(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + void (*native_code)(WASMExecEnv *, int64, int32, int32) = func_ptr; + native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), argv[2], argv[3]); +} +static void +invoke_Iii_i(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int32 (*native_code)(WASMExecEnv *, int64, int32, int32) = func_ptr; + argv_ret[0] = native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), + argv[2], argv[3]); +} +static void +invoke_Iii_I(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int64 (*native_code)(WASMExecEnv *, int64, int32, int32) = func_ptr; + int64 ret = native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), + argv[2], argv[3]); + PUT_I64_TO_ADDR(argv_ret, ret); +} + +static void +invoke_IiI_v(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + void (*native_code)(WASMExecEnv *, int64, int32, int64) = func_ptr; + native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), argv[2], + GET_I64_FROM_ADDR((uint32 *)argv + 3)); +} +static void +invoke_IiI_i(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int32 (*native_code)(WASMExecEnv *, int64, int32, int64) = func_ptr; + argv_ret[0] = native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), + argv[2], GET_I64_FROM_ADDR((uint32 *)argv + 3)); +} +static void +invoke_IiI_I(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int64 (*native_code)(WASMExecEnv *, int64, int32, int64) = func_ptr; + int64 ret = native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), + argv[2], GET_I64_FROM_ADDR((uint32 *)argv + 3)); + PUT_I64_TO_ADDR(argv_ret, ret); +} + +static void +invoke_IIi_v(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + void (*native_code)(WASMExecEnv *, int64, int64, int32) = func_ptr; + native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), + GET_I64_FROM_ADDR((uint32 *)argv + 2), argv[4]); +} +static void +invoke_IIi_i(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int32 (*native_code)(WASMExecEnv *, int64, int64, int32) = func_ptr; + argv_ret[0] = native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), + GET_I64_FROM_ADDR((uint32 *)argv + 2), argv[4]); +} +static void +invoke_IIi_I(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int64 (*native_code)(WASMExecEnv *, int64, int64, int32) = func_ptr; + int64 ret = native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), + GET_I64_FROM_ADDR((uint32 *)argv + 2), argv[4]); + PUT_I64_TO_ADDR(argv_ret, ret); +} + +static void +invoke_III_v(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + void (*native_code)(WASMExecEnv *, int64, int64, int64) = func_ptr; + native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), + GET_I64_FROM_ADDR((uint32 *)argv + 2), + GET_I64_FROM_ADDR((uint32 *)argv + 4)); +} +static void +invoke_III_i(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int32 (*native_code)(WASMExecEnv *, int64, int64, int64) = func_ptr; + argv_ret[0] = native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), + GET_I64_FROM_ADDR((uint32 *)argv + 2), + GET_I64_FROM_ADDR((uint32 *)argv + 4)); +} +static void +invoke_III_I(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int64 (*native_code)(WASMExecEnv *, int64, int64, int64) = func_ptr; + int64 ret = native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), + GET_I64_FROM_ADDR((uint32 *)argv + 2), + GET_I64_FROM_ADDR((uint32 *)argv + 4)); + PUT_I64_TO_ADDR(argv_ret, ret); +} + +static void +invoke_iiii_v(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + void (*native_code)(WASMExecEnv *, int32, int32, int32, int32) = func_ptr; + native_code(exec_env, argv[0], argv[1], argv[2], argv[3]); +} +static void +invoke_iiii_i(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int32 (*native_code)(WASMExecEnv *, int32, int32, int32, int32) = func_ptr; + argv_ret[0] = native_code(exec_env, argv[0], argv[1], argv[2], argv[3]); +} +static void +invoke_iiii_I(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int64 (*native_code)(WASMExecEnv *, int32, int32, int32, int32) = func_ptr; + int64 ret = native_code(exec_env, argv[0], argv[1], argv[2], argv[3]); + PUT_I64_TO_ADDR(argv_ret, ret); +} + +static void +invoke_iiiI_v(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + void (*native_code)(WASMExecEnv *, int32, int32, int32, int64) = func_ptr; + native_code(exec_env, argv[0], argv[1], argv[2], + GET_I64_FROM_ADDR((uint32 *)argv + 3)); +} +static void +invoke_iiiI_i(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int32 (*native_code)(WASMExecEnv *, int32, int32, int32, int64) = func_ptr; + argv_ret[0] = native_code(exec_env, argv[0], argv[1], argv[2], + GET_I64_FROM_ADDR((uint32 *)argv + 3)); +} +static void +invoke_iiiI_I(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int64 (*native_code)(WASMExecEnv *, int32, int32, int32, int64) = func_ptr; + int64 ret = native_code(exec_env, argv[0], argv[1], argv[2], + GET_I64_FROM_ADDR((uint32 *)argv + 3)); + PUT_I64_TO_ADDR(argv_ret, ret); +} + +static void +invoke_iiIi_v(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + void (*native_code)(WASMExecEnv *, int32, int32, int64, int32) = func_ptr; + native_code(exec_env, argv[0], argv[1], + GET_I64_FROM_ADDR((uint32 *)argv + 2), argv[4]); +} +static void +invoke_iiIi_i(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int32 (*native_code)(WASMExecEnv *, int32, int32, int64, int32) = func_ptr; + argv_ret[0] = native_code(exec_env, argv[0], argv[1], + GET_I64_FROM_ADDR((uint32 *)argv + 2), argv[4]); +} +static void +invoke_iiIi_I(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int64 (*native_code)(WASMExecEnv *, int32, int32, int64, int32) = func_ptr; + int64 ret = native_code(exec_env, argv[0], argv[1], + GET_I64_FROM_ADDR((uint32 *)argv + 2), argv[4]); + PUT_I64_TO_ADDR(argv_ret, ret); +} + +static void +invoke_iiII_v(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + void (*native_code)(WASMExecEnv *, int32, int32, int64, int64) = func_ptr; + native_code(exec_env, argv[0], argv[1], + GET_I64_FROM_ADDR((uint32 *)argv + 2), + GET_I64_FROM_ADDR((uint32 *)argv + 4)); +} +static void +invoke_iiII_i(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int32 (*native_code)(WASMExecEnv *, int32, int32, int64, int64) = func_ptr; + argv_ret[0] = native_code(exec_env, argv[0], argv[1], + GET_I64_FROM_ADDR((uint32 *)argv + 2), + GET_I64_FROM_ADDR((uint32 *)argv + 4)); +} +static void +invoke_iiII_I(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int64 (*native_code)(WASMExecEnv *, int32, int32, int64, int64) = func_ptr; + int64 ret = native_code(exec_env, argv[0], argv[1], + GET_I64_FROM_ADDR((uint32 *)argv + 2), + GET_I64_FROM_ADDR((uint32 *)argv + 4)); + PUT_I64_TO_ADDR(argv_ret, ret); +} + +static void +invoke_iIii_v(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + void (*native_code)(WASMExecEnv *, int32, int64, int32, int32) = func_ptr; + native_code(exec_env, argv[0], GET_I64_FROM_ADDR((uint32 *)argv + 1), + argv[3], argv[4]); +} +static void +invoke_iIii_i(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int32 (*native_code)(WASMExecEnv *, int32, int64, int32, int32) = func_ptr; + argv_ret[0] = + native_code(exec_env, argv[0], GET_I64_FROM_ADDR((uint32 *)argv + 1), + argv[3], argv[4]); +} +static void +invoke_iIii_I(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int64 (*native_code)(WASMExecEnv *, int32, int64, int32, int32) = func_ptr; + int64 ret = + native_code(exec_env, argv[0], GET_I64_FROM_ADDR((uint32 *)argv + 1), + argv[3], argv[4]); + PUT_I64_TO_ADDR(argv_ret, ret); +} + +static void +invoke_iIiI_v(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + void (*native_code)(WASMExecEnv *, int32, int64, int32, int64) = func_ptr; + native_code(exec_env, argv[0], GET_I64_FROM_ADDR((uint32 *)argv + 1), + argv[3], GET_I64_FROM_ADDR((uint32 *)argv + 4)); +} +static void +invoke_iIiI_i(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int32 (*native_code)(WASMExecEnv *, int32, int64, int32, int64) = func_ptr; + argv_ret[0] = + native_code(exec_env, argv[0], GET_I64_FROM_ADDR((uint32 *)argv + 1), + argv[3], GET_I64_FROM_ADDR((uint32 *)argv + 4)); +} +static void +invoke_iIiI_I(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int64 (*native_code)(WASMExecEnv *, int32, int64, int32, int64) = func_ptr; + int64 ret = + native_code(exec_env, argv[0], GET_I64_FROM_ADDR((uint32 *)argv + 1), + argv[3], GET_I64_FROM_ADDR((uint32 *)argv + 4)); + PUT_I64_TO_ADDR(argv_ret, ret); +} + +static void +invoke_iIIi_v(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + void (*native_code)(WASMExecEnv *, int32, int64, int64, int32) = func_ptr; + native_code(exec_env, argv[0], GET_I64_FROM_ADDR((uint32 *)argv + 1), + GET_I64_FROM_ADDR((uint32 *)argv + 3), argv[5]); +} +static void +invoke_iIIi_i(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int32 (*native_code)(WASMExecEnv *, int32, int64, int64, int32) = func_ptr; + argv_ret[0] = + native_code(exec_env, argv[0], GET_I64_FROM_ADDR((uint32 *)argv + 1), + GET_I64_FROM_ADDR((uint32 *)argv + 3), argv[5]); +} +static void +invoke_iIIi_I(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int64 (*native_code)(WASMExecEnv *, int32, int64, int64, int32) = func_ptr; + int64 ret = + native_code(exec_env, argv[0], GET_I64_FROM_ADDR((uint32 *)argv + 1), + GET_I64_FROM_ADDR((uint32 *)argv + 3), argv[5]); + PUT_I64_TO_ADDR(argv_ret, ret); +} + +static void +invoke_iIII_v(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + void (*native_code)(WASMExecEnv *, int32, int64, int64, int64) = func_ptr; + native_code(exec_env, argv[0], GET_I64_FROM_ADDR((uint32 *)argv + 1), + GET_I64_FROM_ADDR((uint32 *)argv + 3), + GET_I64_FROM_ADDR((uint32 *)argv + 5)); +} +static void +invoke_iIII_i(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int32 (*native_code)(WASMExecEnv *, int32, int64, int64, int64) = func_ptr; + argv_ret[0] = + native_code(exec_env, argv[0], GET_I64_FROM_ADDR((uint32 *)argv + 1), + GET_I64_FROM_ADDR((uint32 *)argv + 3), + GET_I64_FROM_ADDR((uint32 *)argv + 5)); +} +static void +invoke_iIII_I(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int64 (*native_code)(WASMExecEnv *, int32, int64, int64, int64) = func_ptr; + int64 ret = + native_code(exec_env, argv[0], GET_I64_FROM_ADDR((uint32 *)argv + 1), + GET_I64_FROM_ADDR((uint32 *)argv + 3), + GET_I64_FROM_ADDR((uint32 *)argv + 5)); + PUT_I64_TO_ADDR(argv_ret, ret); +} + +static void +invoke_Iiii_v(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + void (*native_code)(WASMExecEnv *, int64, int32, int32, int32) = func_ptr; + native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), argv[2], argv[3], + argv[4]); +} +static void +invoke_Iiii_i(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int32 (*native_code)(WASMExecEnv *, int64, int32, int32, int32) = func_ptr; + argv_ret[0] = native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), + argv[2], argv[3], argv[4]); +} +static void +invoke_Iiii_I(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int64 (*native_code)(WASMExecEnv *, int64, int32, int32, int32) = func_ptr; + int64 ret = native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), + argv[2], argv[3], argv[4]); + PUT_I64_TO_ADDR(argv_ret, ret); +} + +static void +invoke_IiiI_v(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + void (*native_code)(WASMExecEnv *, int64, int32, int32, int64) = func_ptr; + native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), argv[2], argv[3], + GET_I64_FROM_ADDR((uint32 *)argv + 4)); +} + +static void +invoke_IiiI_i(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int32 (*native_code)(WASMExecEnv *, int64, int32, int32, int64) = func_ptr; + argv_ret[0] = + native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), argv[2], + argv[3], GET_I64_FROM_ADDR((uint32 *)argv + 4)); +} + +static void +invoke_IiiI_I(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int64 (*native_code)(WASMExecEnv *, int64, int32, int32, int64) = func_ptr; + int64 ret = + native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), argv[2], + argv[3], GET_I64_FROM_ADDR((uint32 *)argv + 4)); + PUT_I64_TO_ADDR(argv_ret, ret); +} + +static void +invoke_IiIi_v(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + void (*native_code)(WASMExecEnv *, int64, int32, int64, int32) = func_ptr; + native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), argv[2], + GET_I64_FROM_ADDR((uint32 *)argv + 3), argv[5]); +} +static void +invoke_IiIi_i(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int32 (*native_code)(WASMExecEnv *, int64, int32, int64, int32) = func_ptr; + argv_ret[0] = + native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), argv[2], + GET_I64_FROM_ADDR((uint32 *)argv + 3), argv[5]); +} +static void +invoke_IiIi_I(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int64 (*native_code)(WASMExecEnv *, int64, int32, int64, int32) = func_ptr; + int64 ret = + native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), argv[2], + GET_I64_FROM_ADDR((uint32 *)argv + 3), argv[5]); + PUT_I64_TO_ADDR(argv_ret, ret); +} + +static void +invoke_IiII_v(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + void (*native_code)(WASMExecEnv *, int64, int32, int64, int64) = func_ptr; + native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), argv[2], + GET_I64_FROM_ADDR((uint32 *)argv + 3), + GET_I64_FROM_ADDR((uint32 *)argv + 5)); +} +static void +invoke_IiII_i(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int32 (*native_code)(WASMExecEnv *, int64, int32, int64, int64) = func_ptr; + argv_ret[0] = native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), + argv[2], GET_I64_FROM_ADDR((uint32 *)argv + 3), + GET_I64_FROM_ADDR((uint32 *)argv + 5)); +} +static void +invoke_IiII_I(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int64 (*native_code)(WASMExecEnv *, int64, int32, int64, int64) = func_ptr; + int64 ret = native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), + argv[2], GET_I64_FROM_ADDR((uint32 *)argv + 3), + GET_I64_FROM_ADDR((uint32 *)argv + 5)); + PUT_I64_TO_ADDR(argv_ret, ret); +} + +static void +invoke_IIii_v(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + void (*native_code)(WASMExecEnv *, int64, int64, int32, int32) = func_ptr; + native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), + GET_I64_FROM_ADDR((uint32 *)argv + 2), argv[4], argv[5]); +} +static void +invoke_IIii_i(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int32 (*native_code)(WASMExecEnv *, int64, int64, int32, int32) = func_ptr; + argv_ret[0] = + native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), + GET_I64_FROM_ADDR((uint32 *)argv + 2), argv[4], argv[5]); +} +static void +invoke_IIii_I(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int64 (*native_code)(WASMExecEnv *, int64, int64, int32, int32) = func_ptr; + int64 ret = + native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), + GET_I64_FROM_ADDR((uint32 *)argv + 2), argv[4], argv[5]); + PUT_I64_TO_ADDR(argv_ret, ret); +} + +static void +invoke_IIiI_v(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + void (*native_code)(WASMExecEnv *, int64, int64, int32, int64) = func_ptr; + native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), + GET_I64_FROM_ADDR((uint32 *)argv + 2), argv[4], + GET_I64_FROM_ADDR((uint32 *)argv + 5)); +} +static void +invoke_IIiI_i(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int32 (*native_code)(WASMExecEnv *, int64, int64, int32, int64) = func_ptr; + argv_ret[0] = native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), + GET_I64_FROM_ADDR((uint32 *)argv + 2), argv[4], + GET_I64_FROM_ADDR((uint32 *)argv + 5)); +} +static void +invoke_IIiI_I(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int64 (*native_code)(WASMExecEnv *, int64, int64, int32, int64) = func_ptr; + int64 ret = native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), + GET_I64_FROM_ADDR((uint32 *)argv + 2), argv[4], + GET_I64_FROM_ADDR((uint32 *)argv + 5)); + PUT_I64_TO_ADDR(argv_ret, ret); +} + +static void +invoke_IIIi_v(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + void (*native_code)(WASMExecEnv *, int64, int64, int64, int32) = func_ptr; + native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), + GET_I64_FROM_ADDR((uint32 *)argv + 2), + GET_I64_FROM_ADDR((uint32 *)argv + 4), argv[6]); +} +static void +invoke_IIIi_i(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int32 (*native_code)(WASMExecEnv *, int64, int64, int64, int32) = func_ptr; + argv_ret[0] = native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), + GET_I64_FROM_ADDR((uint32 *)argv + 2), + GET_I64_FROM_ADDR((uint32 *)argv + 4), argv[6]); +} +static void +invoke_IIIi_I(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int64 (*native_code)(WASMExecEnv *, int64, int64, int64, int32) = func_ptr; + int64 ret = native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), + GET_I64_FROM_ADDR((uint32 *)argv + 2), + GET_I64_FROM_ADDR((uint32 *)argv + 4), argv[6]); + PUT_I64_TO_ADDR(argv_ret, ret); +} + +static void +invoke_IIII_v(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + void (*native_code)(WASMExecEnv *, int64, int64, int64, int64) = func_ptr; + native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), + GET_I64_FROM_ADDR((uint32 *)argv + 2), + GET_I64_FROM_ADDR((uint32 *)argv + 4), + GET_I64_FROM_ADDR((uint32 *)argv + 6)); +} +static void +invoke_IIII_i(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int32 (*native_code)(WASMExecEnv *, int64, int64, int64, int64) = func_ptr; + argv_ret[0] = native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), + GET_I64_FROM_ADDR((uint32 *)argv + 2), + GET_I64_FROM_ADDR((uint32 *)argv + 4), + GET_I64_FROM_ADDR((uint32 *)argv + 6)); +} +static void +invoke_IIII_I(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int64 (*native_code)(WASMExecEnv *, int64, int64, int64, int64) = func_ptr; + int64 ret = native_code(exec_env, GET_I64_FROM_ADDR((uint32 *)argv), + GET_I64_FROM_ADDR((uint32 *)argv + 2), + GET_I64_FROM_ADDR((uint32 *)argv + 4), + GET_I64_FROM_ADDR((uint32 *)argv + 6)); + PUT_I64_TO_ADDR(argv_ret, ret); +} + +static void +invoke_iiiii_v(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + void (*native_code)(WASMExecEnv *, int32, int32, int32, int32, int32) = + func_ptr; + native_code(exec_env, argv[0], argv[1], argv[2], argv[3], argv[4]); +} +static void +invoke_iiiii_i(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int32 (*native_code)(WASMExecEnv *, int32, int32, int32, int32, int32) = + func_ptr; + argv_ret[0] = + native_code(exec_env, argv[0], argv[1], argv[2], argv[3], argv[4]); +} +static void +invoke_iiiii_I(void *func_ptr, void *exec_env, int32 *argv, int32 *argv_ret) +{ + int64 (*native_code)(WASMExecEnv *, int32, int32, int32, int32, int32) = + func_ptr; + int64 ret = + native_code(exec_env, argv[0], argv[1], argv[2], argv[3], argv[4]); + PUT_I64_TO_ADDR(argv_ret, ret); +} + +typedef struct QuickAOTEntry { + const char *signature; + void *func_ptr; +} QuickAOTEntry; + +/* clang-format off */ +static QuickAOTEntry quick_aot_entries[] = { + { "()v", invoke_no_args_v }, + { "()i", invoke_no_args_i }, + { "()I", invoke_no_args_I }, + + { "(i)v", invoke_i_v }, { "(i)i", invoke_i_i }, { "(i)I", invoke_i_I }, + { "(I)v", invoke_I_v }, { "(I)i", invoke_I_i }, { "(I)I", invoke_I_I }, + + { "(ii)v", invoke_ii_v }, { "(ii)i", invoke_ii_i }, { "(ii)I", invoke_ii_I }, + { "(iI)v", invoke_iI_v }, { "(iI)i", invoke_iI_i }, { "(iI)I", invoke_iI_I }, + { "(Ii)v", invoke_Ii_v }, { "(Ii)i", invoke_Ii_i }, { "(Ii)I", invoke_Ii_I }, + { "(II)v", invoke_II_v }, { "(II)i", invoke_II_i }, { "(II)I", invoke_II_I }, + + { "(iii)v", invoke_iii_v }, { "(iii)i", invoke_iii_i }, { "(iii)I", invoke_iii_I }, + { "(iiI)v", invoke_iiI_v }, { "(iiI)i", invoke_iiI_i }, { "(iiI)I", invoke_iiI_I }, + { "(iIi)v", invoke_iIi_v }, { "(iIi)i", invoke_iIi_i }, { "(iIi)I", invoke_iIi_I }, + { "(iII)v", invoke_iII_v }, { "(iII)i", invoke_iII_i }, { "(iII)I", invoke_iII_I }, + { "(Iii)v", invoke_Iii_v }, { "(Iii)i", invoke_Iii_i }, { "(Iii)I", invoke_Iii_I }, + { "(IiI)v", invoke_IiI_v }, { "(IiI)i", invoke_IiI_i }, { "(IiI)I", invoke_IiI_I }, + { "(IIi)v", invoke_IIi_v }, { "(IIi)i", invoke_IIi_i }, { "(IIi)I", invoke_IIi_I }, + { "(III)v", invoke_III_v }, { "(III)i", invoke_III_i }, { "(III)I", invoke_III_I }, + + { "(iiii)v", invoke_iiii_v }, { "(iiii)i", invoke_iiii_i }, { "(iiii)I", invoke_iiii_I }, + { "(iiiI)v", invoke_iiiI_v }, { "(iiiI)i", invoke_iiiI_i }, { "(iiiI)I", invoke_iiiI_I }, + { "(iiIi)v", invoke_iiIi_v }, { "(iiIi)i", invoke_iiIi_i }, { "(iiIi)I", invoke_iiIi_I }, + { "(iiII)v", invoke_iiII_v }, { "(iiII)i", invoke_iiII_i }, { "(iiII)I", invoke_iiII_I }, + { "(iIii)v", invoke_iIii_v }, { "(iIii)i", invoke_iIii_i }, { "(iIii)I", invoke_iIii_I }, + { "(iIiI)v", invoke_iIiI_v }, { "(iIiI)i", invoke_iIiI_i }, { "(iIiI)I", invoke_iIiI_I }, + { "(iIIi)v", invoke_iIIi_v }, { "(iIIi)i", invoke_iIIi_i }, { "(iIIi)I", invoke_iIIi_I }, + { "(iIII)v", invoke_iIII_v }, { "(iIII)i", invoke_iIII_i }, { "(iIII)I", invoke_iIII_I }, + { "(Iiii)v", invoke_Iiii_v }, { "(Iiii)i", invoke_Iiii_i }, { "(Iiii)I", invoke_Iiii_I }, + { "(IiiI)v", invoke_IiiI_v }, { "(IiiI)i", invoke_IiiI_i }, { "(IiiI)I", invoke_IiiI_I }, + { "(IiIi)v", invoke_IiIi_v }, { "(IiIi)i", invoke_IiIi_i }, { "(IiIi)I", invoke_IiIi_I }, + { "(IiII)v", invoke_IiII_v }, { "(IiII)i", invoke_IiII_i }, { "(IiII)I", invoke_IiII_I }, + { "(IIii)v", invoke_IIii_v }, { "(IIii)i", invoke_IIii_i }, { "(IIii)I", invoke_IIii_I }, + { "(IIiI)v", invoke_IIiI_v }, { "(IIiI)i", invoke_IIiI_i }, { "(IIiI)I", invoke_IIiI_I }, + { "(IIIi)v", invoke_IIIi_v }, { "(IIIi)i", invoke_IIIi_i }, { "(IIIi)I", invoke_IIIi_I }, + { "(IIII)v", invoke_IIII_v }, { "(IIII)i", invoke_IIII_i }, { "(IIII)I", invoke_IIII_I }, + + { "(iiiii)v", invoke_iiiii_v }, { "(iiiii)i", invoke_iiiii_i }, { "(iiiii)I", invoke_iiiii_I }, +}; +/* clang-format on */ + +static int +quick_aot_entry_cmp(const void *quick_aot_entry1, const void *quick_aot_entry2) +{ + return strcmp(((const QuickAOTEntry *)quick_aot_entry1)->signature, + ((const QuickAOTEntry *)quick_aot_entry2)->signature); +} + +static bool +quick_aot_entry_init() +{ + qsort(quick_aot_entries, sizeof(quick_aot_entries) / sizeof(QuickAOTEntry), + sizeof(QuickAOTEntry), quick_aot_entry_cmp); + + return true; +} + +void * +wasm_native_lookup_quick_aot_entry(const WASMType *func_type) +{ + char signature[16] = { 0 }; + uint32 param_count = func_type->param_count; + uint32 result_count = func_type->result_count, i, j = 0; + const uint8 *types = func_type->types; + QuickAOTEntry *quick_aot_entry, key = { 0 }; + + if (param_count > 5 || result_count > 1) + return NULL; + + signature[j++] = '('; + + for (i = 0; i < param_count; i++) { + if (types[i] == VALUE_TYPE_I32) + signature[j++] = 'i'; + else if (types[i] == VALUE_TYPE_I64) + signature[j++] = 'I'; + else + return NULL; + } + + signature[j++] = ')'; + + if (result_count == 0) { + signature[j++] = 'v'; + } + else { + if (types[i] == VALUE_TYPE_I32) + signature[j++] = 'i'; + else if (types[i] == VALUE_TYPE_I64) + signature[j++] = 'I'; + else + return NULL; + } + + key.signature = signature; + if ((quick_aot_entry = + bsearch(&key, quick_aot_entries, + sizeof(quick_aot_entries) / sizeof(QuickAOTEntry), + sizeof(QuickAOTEntry), quick_aot_entry_cmp))) { + return quick_aot_entry->func_ptr; + } + + return NULL; +} +#endif /* end of WASM_ENABLE_QUICK_AOT_ENTRY != 0 */ diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_native.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_native.h similarity index 96% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_native.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_native.h index 9ca5265c3ba..591bbe2ff3e 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_native.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_native.h @@ -104,6 +104,11 @@ wasm_native_init(); void wasm_native_destroy(); +#if WASM_ENABLE_QUICK_AOT_ENTRY != 0 +void * +wasm_native_lookup_quick_aot_entry(const WASMType *func_type); +#endif + #ifdef __cplusplus } #endif diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_runtime_common.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_runtime_common.c similarity index 96% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_runtime_common.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_runtime_common.c index 567e77bec40..c8b0d0d3cf4 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_runtime_common.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_runtime_common.c @@ -158,6 +158,8 @@ static JitCompOptions jit_options = { 0 }; #endif #if WASM_ENABLE_JIT != 0 +/* opt_level: 3, size_level: 3, segue-flags: 0, + quick_invoke_c_api_import: false */ static LLVMJITOptions llvm_jit_options = { 3, 3, 0, false }; #endif @@ -267,10 +269,10 @@ decode_insn(uint8 *insn) runtime_address); /* Print current instruction */ - /* +#if 0 os_printf("%012" PRIX64 " ", runtime_address); puts(buffer); - */ +#endif return instruction.length; } @@ -638,10 +640,10 @@ wasm_runtime_get_default_running_mode(void) } #if WASM_ENABLE_JIT != 0 -LLVMJITOptions +LLVMJITOptions * wasm_runtime_get_llvm_jit_options(void) { - return llvm_jit_options; + return &llvm_jit_options; } #endif @@ -662,14 +664,17 @@ wasm_runtime_full_init(RuntimeInitArgs *init_args) #endif #if WASM_ENABLE_JIT != 0 - LOG_DEBUG("Start LLVM_JIT, opt_sz=%u, opt_lvl=%u, segue=%s, linux_perf=%s", - init_args->llvm_jit_size_level, init_args->llvm_jit_opt_level, - init_args->segue_flags ? "Yes" : "No", - init_args->linux_perf_support ? "Yes" : "No"); llvm_jit_options.size_level = init_args->llvm_jit_size_level; llvm_jit_options.opt_level = init_args->llvm_jit_opt_level; llvm_jit_options.segue_flags = init_args->segue_flags; - llvm_jit_options.linux_perf_support = init_args->linux_perf_support; +#endif + +#if WASM_ENABLE_LINUX_PERF != 0 + wasm_runtime_set_linux_perf(init_args->enable_linux_perf); +#else + if (init_args->enable_linux_perf) + LOG_WARNING("warning: to enable linux perf support, please recompile " + "with -DWAMR_BUILD_LINUX_PERF=1"); #endif if (!wasm_runtime_env_init()) { @@ -701,6 +706,12 @@ wasm_runtime_full_init(RuntimeInitArgs *init_args) return true; } +void +wasm_runtime_set_log_level(log_level_t level) +{ + bh_log_set_verbose_level(level); +} + bool wasm_runtime_is_running_mode_supported(RunningMode running_mode) { @@ -774,6 +785,7 @@ align_ptr(const uint8 *p, uint32 b) return false; \ } while (0) +/* NOLINTNEXTLINE */ #define read_uint16(p, p_end, res) \ do { \ p = (uint8 *)align_ptr(p, sizeof(uint16)); \ @@ -782,6 +794,7 @@ align_ptr(const uint8 *p, uint32 b) p += sizeof(uint16); \ } while (0) +/* NOLINTNEXTLINE */ #define read_uint32(p, p_end, res) \ do { \ p = (uint8 *)align_ptr(p, sizeof(uint32)); \ @@ -933,7 +946,7 @@ wasm_runtime_register_module_internal(const char *module_name, /* module hasn't been registered */ node = runtime_malloc(sizeof(WASMRegisteredModule), NULL, NULL, 0); if (!node) { - LOG_DEBUG("malloc WASMRegisteredModule failed. SZ=%d", + LOG_DEBUG("malloc WASMRegisteredModule failed. SZ=%zu", sizeof(WASMRegisteredModule)); return false; } @@ -1679,8 +1692,43 @@ wasm_runtime_dump_perf_profiling(WASMModuleInstanceCommon *module_inst) } #endif } + +double +wasm_runtime_sum_wasm_exec_time(WASMModuleInstanceCommon *inst) +{ +#if WASM_ENABLE_INTERP != 0 + if (inst->module_type == Wasm_Module_Bytecode) + return wasm_summarize_wasm_execute_time((WASMModuleInstance *)inst); +#endif + +#if WASM_ENABLE_AOT != 0 + if (inst->module_type == Wasm_Module_AoT) + return aot_summarize_wasm_execute_time((AOTModuleInstance *)inst); #endif + return 0.0; +} + +double +wasm_runtime_get_wasm_func_exec_time(WASMModuleInstanceCommon *inst, + const char *func_name) +{ +#if WASM_ENABLE_INTERP != 0 + if (inst->module_type == Wasm_Module_Bytecode) + return wasm_get_wasm_func_exec_time((WASMModuleInstance *)inst, + func_name); +#endif + +#if WASM_ENABLE_AOT != 0 + if (inst->module_type == Wasm_Module_AoT) + return aot_get_wasm_func_exec_time((AOTModuleInstance *)inst, + func_name); +#endif + + return 0.0; +} +#endif /* WASM_ENABLE_PERF_PROFILING != 0 */ + WASMModuleInstanceCommon * wasm_runtime_get_module_inst(WASMExecEnv *exec_env) { @@ -2542,7 +2590,6 @@ wasm_runtime_clear_exception(WASMModuleInstanceCommon *module_inst_comm) wasm_runtime_set_exception(module_inst_comm, NULL); } -#if WASM_ENABLE_THREAD_MGR != 0 void wasm_runtime_terminate(WASMModuleInstanceCommon *module_inst_comm) { @@ -2552,7 +2599,6 @@ wasm_runtime_terminate(WASMModuleInstanceCommon *module_inst_comm) || module_inst_comm->module_type == Wasm_Module_AoT); wasm_set_exception(module_inst, "terminated by user"); } -#endif void wasm_runtime_set_custom_data_internal( @@ -2861,7 +2907,8 @@ copy_string_array(const char *array[], uint32 array_size, char **buf_ptr, /* We add +1 to generate null-terminated array of strings */ total_size = sizeof(char *) * ((uint64)array_size + 1); if (total_size >= UINT32_MAX - || (total_size > 0 && !(list = wasm_runtime_malloc((uint32)total_size))) + /* total_size must be larger than 0, don' check it again */ + || !(list = wasm_runtime_malloc((uint32)total_size)) || buf_size >= UINT32_MAX || (buf_size > 0 && !(buf = wasm_runtime_malloc((uint32)buf_size)))) { @@ -3492,7 +3539,7 @@ static union { char b; } __ue = { .a = 1 }; -#define is_little_endian() (__ue.b == 1) +#define is_little_endian() (__ue.b == 1) /* NOLINT */ bool wasm_runtime_register_natives(const char *module_name, @@ -3527,7 +3574,7 @@ wasm_runtime_invoke_native_raw(WASMExecEnv *exec_env, void *func_ptr, { WASMModuleInstanceCommon *module = wasm_runtime_get_module_inst(exec_env); typedef void (*NativeRawFuncPtr)(WASMExecEnv *, uint64 *); - NativeRawFuncPtr invokeNativeRaw = (NativeRawFuncPtr)func_ptr; + NativeRawFuncPtr invoke_native_raw = (NativeRawFuncPtr)func_ptr; uint64 argv_buf[16] = { 0 }, *argv1 = argv_buf, *argv_dst, size; uint32 *argv_src = argv, i, argc1, ptr_len; uint32 arg_i32; @@ -3615,7 +3662,7 @@ wasm_runtime_invoke_native_raw(WASMExecEnv *exec_env, void *func_ptr, } exec_env->attachment = attachment; - invokeNativeRaw(exec_env, argv1); + invoke_native_raw(exec_env, argv1); exec_env->attachment = NULL; if (func_type->result_count > 0) { @@ -4401,6 +4448,7 @@ typedef int64 (*Int64FuncPtr)(GenericFunctionPointer, uint64 *, uint64); typedef int32 (*Int32FuncPtr)(GenericFunctionPointer, uint64 *, uint64); typedef void (*VoidFuncPtr)(GenericFunctionPointer, uint64 *, uint64); +/* NOLINTBEGIN */ static volatile Float64FuncPtr invokeNative_Float64 = (Float64FuncPtr)(uintptr_t)invokeNative; static volatile Float32FuncPtr invokeNative_Float32 = @@ -4416,6 +4464,7 @@ static volatile VoidFuncPtr invokeNative_Void = typedef v128 (*V128FuncPtr)(GenericFunctionPointer, uint64 *, uint64); static V128FuncPtr invokeNative_V128 = (V128FuncPtr)(uintptr_t)invokeNative; #endif +/* NOLINTEND */ #if defined(_WIN32) || defined(_WIN32_) #define MAX_REG_FLOATS 4 @@ -4984,6 +5033,7 @@ wasm_externref_set_cleanup(WASMModuleInstanceCommon *module_inst, if (lookup_user_data.found) { void *key = (void *)(uintptr_t)lookup_user_data.externref_idx; ExternRefMapNode *node = bh_hash_map_find(externref_map, key); + bh_assert(node); node->cleanup = extern_obj_cleanup; ok = true; } @@ -5668,7 +5718,7 @@ wasm_runtime_invoke_c_api_native(WASMModuleInstanceCommon *module_inst, wasm_val_t *params = params_buf, *results = results_buf; wasm_trap_t *trap = NULL; bool ret = false; - wasm_val_vec_t params_vec, results_vec; + wasm_val_vec_t params_vec = { 0 }, results_vec = { 0 }; if (func_type->param_count > 16) { if (!(params = @@ -5696,12 +5746,10 @@ wasm_runtime_invoke_c_api_native(WASMModuleInstanceCommon *module_inst, params_vec.data = params; params_vec.num_elems = func_type->param_count; params_vec.size = func_type->param_count; - params_vec.size_of_elem = sizeof(wasm_val_t); results_vec.data = results; results_vec.num_elems = 0; results_vec.size = func_type->result_count; - results_vec.size_of_elem = sizeof(wasm_val_t); if (!with_env) { wasm_func_callback_t callback = (wasm_func_callback_t)func_ptr; @@ -5737,7 +5785,6 @@ wasm_runtime_invoke_c_api_native(WASMModuleInstanceCommon *module_inst, wasm_runtime_set_exception(module_inst, "unsupported result type"); goto fail; } - results_vec.num_elems = func_type->result_count; ret = true; fail: @@ -5748,6 +5795,71 @@ wasm_runtime_invoke_c_api_native(WASMModuleInstanceCommon *module_inst, return ret; } +bool +wasm_runtime_quick_invoke_c_api_native(WASMModuleInstanceCommon *inst_comm, + CApiFuncImport *c_api_import, + wasm_val_t *params, uint32 param_count, + wasm_val_t *results, uint32 result_count) +{ + WASMModuleInstance *module_inst = (WASMModuleInstance *)inst_comm; + void *func_ptr = c_api_import->func_ptr_linked; + bool with_env_arg = c_api_import->with_env_arg, ret = true; + wasm_val_vec_t params_vec = { 0 }, results_vec = { 0 }; + wasm_trap_t *trap = NULL; + + params_vec.data = params; + params_vec.num_elems = param_count; + params_vec.size = param_count; + + results_vec.data = results; + results_vec.num_elems = 0; + results_vec.size = result_count; + + if (!func_ptr) { + wasm_set_exception_with_id(module_inst, EXCE_CALL_UNLINKED_IMPORT_FUNC); + ret = false; + goto fail; + } + + if (!with_env_arg) { + wasm_func_callback_t callback = (wasm_func_callback_t)func_ptr; + trap = callback(¶ms_vec, &results_vec); + } + else { + void *wasm_c_api_env = c_api_import->env_arg; + wasm_func_callback_with_env_t callback = + (wasm_func_callback_with_env_t)func_ptr; + trap = callback(wasm_c_api_env, ¶ms_vec, &results_vec); + } + + if (trap) { + if (trap->message->data) { + /* since trap->message->data does not end with '\0' */ + char trap_message[108] = { 0 }; + uint32 max_size_to_copy = (uint32)sizeof(trap_message) - 1; + uint32 size_to_copy = (trap->message->size < max_size_to_copy) + ? (uint32)trap->message->size + : max_size_to_copy; + bh_memcpy_s(trap_message, (uint32)sizeof(trap_message), + trap->message->data, size_to_copy); + wasm_set_exception(module_inst, trap_message); + } + else { + wasm_set_exception(module_inst, + "native function throw unknown exception"); + } + wasm_trap_delete(trap); + ret = false; + } + +fail: +#ifdef OS_ENABLE_HW_BOUND_CHECK + if (!ret) + wasm_runtime_access_exce_check_guard_page(); +#endif + return ret; +} + void wasm_runtime_show_app_heap_corrupted_prompt() { @@ -5950,12 +6062,12 @@ wasm_runtime_load_depended_module(const WASMModuleCommon *parent_module, if (!ret) { LOG_DEBUG("read the file of %s failed", sub_module_name); set_error_buf_v(parent_module, error_buf, error_buf_size, - "unknown import", sub_module_name); + "unknown import %s", sub_module_name); goto delete_loading_module; } if (get_package_type(buffer, buffer_size) != parent_module->module_type) { LOG_DEBUG("moudle %s type error", sub_module_name); - goto delete_loading_module; + goto destroy_file_buffer; } if (get_package_type(buffer, buffer_size) == Wasm_Module_Bytecode) { #if WASM_ENABLE_INTERP != 0 @@ -6060,7 +6172,7 @@ wasm_runtime_sub_module_instantiate(WASMModuleCommon *module, sub_module_inst_list_node = loader_malloc(sizeof(WASMSubModInstNode), error_buf, error_buf_size); if (!sub_module_inst_list_node) { - LOG_DEBUG("Malloc WASMSubModInstNode failed, SZ:%d", + LOG_DEBUG("Malloc WASMSubModInstNode failed, SZ: %zu", sizeof(WASMSubModInstNode)); if (sub_module_inst) wasm_runtime_deinstantiate_internal(sub_module_inst, false); @@ -6142,3 +6254,83 @@ wasm_runtime_get_context(WASMModuleInstanceCommon *inst, void *key) return wasm_native_get_context(inst, key); } #endif /* WASM_ENABLE_MODULE_INST_CONTEXT != 0 */ + +#if WASM_ENABLE_LINUX_PERF != 0 +static bool enable_linux_perf = false; + +bool +wasm_runtime_get_linux_perf(void) +{ + return enable_linux_perf; +} + +void +wasm_runtime_set_linux_perf(bool flag) +{ + enable_linux_perf = flag; +} +#endif + +#ifdef WASM_LINEAR_MEMORY_MMAP +void +wasm_munmap_linear_memory(void *mapped_mem, uint64 commit_size, uint64 map_size) +{ +#ifdef BH_PLATFORM_WINDOWS + os_mem_decommit(mapped_mem, commit_size); +#else + (void)commit_size; +#endif + os_munmap(mapped_mem, map_size); +} + +void * +wasm_mmap_linear_memory(uint64_t map_size, uint64 *io_memory_data_size, + char *error_buf, uint32 error_buf_size) +{ + uint64 page_size = os_getpagesize(); + void *mapped_mem = NULL; + uint64 memory_data_size; + + bh_assert(io_memory_data_size); + + memory_data_size = + (*io_memory_data_size + page_size - 1) & ~(page_size - 1); + + if (memory_data_size > UINT32_MAX) + memory_data_size = UINT32_MAX; + + if (!(mapped_mem = os_mmap(NULL, map_size, MMAP_PROT_NONE, MMAP_MAP_NONE, + os_get_invalid_handle()))) { + set_error_buf(error_buf, error_buf_size, "mmap memory failed"); + goto fail1; + } + +#ifdef BH_PLATFORM_WINDOWS + if (memory_data_size > 0 + && !os_mem_commit(mapped_mem, memory_data_size, + MMAP_PROT_READ | MMAP_PROT_WRITE)) { + set_error_buf(error_buf, error_buf_size, "commit memory failed"); + os_munmap(mapped_mem, map_size); + goto fail1; + } +#endif + + if (os_mprotect(mapped_mem, memory_data_size, + MMAP_PROT_READ | MMAP_PROT_WRITE) + != 0) { + set_error_buf(error_buf, error_buf_size, "mprotect memory failed"); + goto fail2; + } + + /* Newly allocated pages are filled with zero by the OS, we don't fill it + * again here */ + + *io_memory_data_size = memory_data_size; + + return mapped_mem; +fail2: + wasm_munmap_linear_memory(mapped_mem, memory_data_size, map_size); +fail1: + return NULL; +} +#endif diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_runtime_common.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_runtime_common.h similarity index 96% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_runtime_common.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_runtime_common.h index 2908cafb5f8..070c44d4e1b 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_runtime_common.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_runtime_common.h @@ -54,6 +54,12 @@ STORE_U16(void *addr, uint16_t value) { *(uint16_t *)(addr) = (uint16_t)(value); } +static inline void +STORE_U8(void *addr, uint8_t value) +{ + *(uint8 *)addr = value; +} + /* For LOAD opcodes */ #define LOAD_I64(addr) (*(int64 *)(addr)) #define LOAD_F64(addr) (*(float64 *)(addr)) @@ -173,6 +179,13 @@ STORE_U32(void *addr, uint32_t value) } } } + +static inline void +STORE_U8(void *addr, uint8_t value) +{ + *(uint8 *)addr = value; +} + static inline void STORE_U16(void *addr, uint16_t value) { @@ -307,6 +320,11 @@ LOAD_I16(void *addr) #define SHARED_MEMORY_UNLOCK(memory) (void)0 #endif +#if defined(OS_ENABLE_HW_BOUND_CHECK) \ + || (WASM_ENABLE_SHARED_MEMORY != 0 && WASM_ENABLE_SHARED_MEMORY_MMAP != 0) +#define WASM_LINEAR_MEMORY_MMAP +#endif + typedef struct WASMModuleCommon { /* Module type, for module loaded from WASM bytecode binary, this field is Wasm_Module_Bytecode, and this structure should @@ -318,7 +336,7 @@ typedef struct WASMModuleCommon { /* The following uint8[1] member is a dummy just to indicate some module_type dependent members follow. - Typically it should be accessed by casting to the corresponding + Typically, it should be accessed by casting to the corresponding actual module_type dependent structure, not via this member. */ uint8 module_data[1]; } WASMModuleCommon; @@ -334,7 +352,7 @@ typedef struct WASMModuleInstanceCommon { /* The following uint8[1] member is a dummy just to indicate some module_type dependent members follow. - Typically it should be accessed by casting to the corresponding + Typically, it should be accessed by casting to the corresponding actual module_type dependent structure, not via this member. */ uint8 module_inst_data[1]; } WASMModuleInstanceCommon; @@ -425,12 +443,12 @@ typedef struct wasm_frame_t { const char *func_name_wp; } WASMCApiFrame; -#ifdef WASM_ENABLE_JIT +#if WASM_ENABLE_JIT != 0 typedef struct LLVMJITOptions { uint32 opt_level; uint32 size_level; uint32 segue_flags; - bool linux_perf_support; + bool quick_invoke_c_api_import; } LLVMJITOptions; #endif @@ -464,7 +482,7 @@ wasm_runtime_get_default_running_mode(void); #if WASM_ENABLE_JIT != 0 /* Internal API */ -LLVMJITOptions +LLVMJITOptions * wasm_runtime_get_llvm_jit_options(void); #endif @@ -1067,9 +1085,27 @@ wasm_runtime_invoke_c_api_native(WASMModuleInstanceCommon *module_inst, uint32 argc, uint32 *argv, bool with_env, void *wasm_c_api_env); +struct CApiFuncImport; +/* A quick version of wasm_runtime_invoke_c_api_native to directly invoke + wasm-c-api import function from jitted code to improve performance */ +bool +wasm_runtime_quick_invoke_c_api_native(WASMModuleInstanceCommon *module_inst, + struct CApiFuncImport *c_api_import, + wasm_val_t *params, uint32 param_count, + wasm_val_t *results, + uint32 result_count); + void wasm_runtime_show_app_heap_corrupted_prompt(); +void +wasm_munmap_linear_memory(void *mapped_mem, uint64 commit_size, + uint64 map_size); + +void * +wasm_mmap_linear_memory(uint64_t map_size, uint64 *io_memory_data_size, + char *error_buf, uint32 error_buf_size); + #if WASM_ENABLE_LOAD_CUSTOM_SECTION != 0 void wasm_runtime_destroy_custom_sections(WASMCustomSection *section_list); @@ -1092,6 +1128,14 @@ wasm_runtime_end_blocking_op(WASMExecEnv *exec_env); void wasm_runtime_interrupt_blocking_op(WASMExecEnv *exec_env); +#if WASM_ENABLE_LINUX_PERF != 0 +bool +wasm_runtime_get_linux_perf(void); + +void +wasm_runtime_set_linux_perf(bool flag); +#endif + #ifdef __cplusplus } #endif diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_shared_memory.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_shared_memory.c similarity index 97% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_shared_memory.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_shared_memory.c index 70e84a37504..3856b7d19c6 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_shared_memory.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_shared_memory.c @@ -176,8 +176,9 @@ acquire_wait_info(void *address, AtomicWaitNode *wait_node) AtomicWaitInfo *wait_info = NULL; bh_list_status ret; - if (address) - wait_info = (AtomicWaitInfo *)bh_hash_map_find(wait_map, address); + bh_assert(address != NULL); + + wait_info = (AtomicWaitInfo *)bh_hash_map_find(wait_map, address); if (!wait_node) { return wait_info; @@ -231,14 +232,14 @@ destroy_wait_info(void *wait_info) } static void -map_try_release_wait_info(HashMap *wait_map_, AtomicWaitInfo *wait_info, +map_try_release_wait_info(HashMap *wait_hash_map, AtomicWaitInfo *wait_info, void *address) { if (wait_info->wait_list->len > 0) { return; } - bh_hash_map_remove(wait_map_, address, NULL, NULL); + bh_hash_map_remove(wait_hash_map, address, NULL, NULL); destroy_wait_info(wait_info); } diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_shared_memory.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_shared_memory.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_shared_memory.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_shared_memory.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_suspend_flags.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_suspend_flags.h similarity index 95% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_suspend_flags.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_suspend_flags.h index b182b2b5f00..92661b7bdee 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/common/wasm_suspend_flags.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/common/wasm_suspend_flags.h @@ -35,6 +35,8 @@ typedef union WASMSuspendFlags { #define WASM_SUSPEND_FLAGS_FETCH_AND(s_flags, val) \ BH_ATOMIC_32_FETCH_AND(s_flags.flags, val) +#define WASM_SUSPEND_FLAG_INHERIT_MASK (~WASM_SUSPEND_FLAG_BLOCKING) + #if WASM_SUSPEND_FLAGS_IS_ATOMIC != 0 #define WASM_SUSPEND_FLAGS_LOCK(lock) (void)0 #define WASM_SUSPEND_FLAGS_UNLOCK(lock) (void)0 diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_compiler.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_compiler.c similarity index 98% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_compiler.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_compiler.c index 464ca61f321..6703a0e536a 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_compiler.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_compiler.c @@ -196,7 +196,9 @@ aot_compile_func(AOTCompContext *comp_ctx, uint32 func_index) location = dwarf_gen_location( comp_ctx, func_ctx, (frame_ip - 1) - comp_ctx->comp_data->wasm_module->buf_code); - LLVMSetCurrentDebugLocation2(comp_ctx->builder, location); + if (location != NULL) { + LLVMSetCurrentDebugLocation2(comp_ctx->builder, location); + } #endif switch (opcode) { @@ -1050,7 +1052,9 @@ aot_compile_func(AOTCompContext *comp_ctx, uint32 func_index) uint32 opcode1; read_leb_uint32(frame_ip, frame_ip_end, opcode1); - opcode = (uint32)opcode1; + /* opcode1 was checked in loader and is no larger than + UINT8_MAX */ + opcode = (uint8)opcode1; #if WASM_ENABLE_BULK_MEMORY != 0 if (WASM_OP_MEMORY_INIT <= opcode @@ -1211,10 +1215,13 @@ aot_compile_func(AOTCompContext *comp_ctx, uint32 func_index) case WASM_OP_ATOMIC_PREFIX: { uint8 bin_op, op_type; + uint32 opcode1; + + read_leb_uint32(frame_ip, frame_ip_end, opcode1); + /* opcode1 was checked in loader and is no larger than + UINT8_MAX */ + opcode = (uint8)opcode1; - if (frame_ip < frame_ip_end) { - opcode = *frame_ip++; - } if (opcode != WASM_OP_ATOMIC_FENCE) { read_leb_uint32(frame_ip, frame_ip_end, align); read_leb_uint32(frame_ip, frame_ip_end, offset); @@ -1364,11 +1371,17 @@ aot_compile_func(AOTCompContext *comp_ctx, uint32 func_index) #if WASM_ENABLE_SIMD != 0 case WASM_OP_SIMD_PREFIX: { + uint32 opcode1; + if (!comp_ctx->enable_simd) { goto unsupport_simd; } - opcode = *frame_ip++; + read_leb_uint32(frame_ip, frame_ip_end, opcode1); + /* opcode1 was checked in loader and is no larger than + UINT8_MAX */ + opcode = (uint8)opcode1; + /* follow the order of enum WASMSimdEXTOpcode in wasm_opcode.h */ switch (opcode) { @@ -2123,16 +2136,6 @@ aot_compile_func(AOTCompContext *comp_ctx, uint32 func_index) break; } - case SIMD_i32x4_narrow_i64x2_s: - case SIMD_i32x4_narrow_i64x2_u: - { - if (!aot_compile_simd_i32x4_narrow_i64x2( - comp_ctx, func_ctx, - SIMD_i32x4_narrow_i64x2_s == opcode)) - return false; - break; - } - case SIMD_i32x4_extend_low_i16x8_s: case SIMD_i32x4_extend_high_i16x8_s: { @@ -2172,16 +2175,6 @@ aot_compile_func(AOTCompContext *comp_ctx, uint32 func_index) break; } - case SIMD_i32x4_add_sat_s: - case SIMD_i32x4_add_sat_u: - { - if (!aot_compile_simd_i32x4_saturate( - comp_ctx, func_ctx, V128_ADD, - opcode == SIMD_i32x4_add_sat_s)) - return false; - break; - } - case SIMD_i32x4_sub: { if (!aot_compile_simd_i32x4_arith(comp_ctx, func_ctx, @@ -2190,16 +2183,6 @@ aot_compile_func(AOTCompContext *comp_ctx, uint32 func_index) break; } - case SIMD_i32x4_sub_sat_s: - case SIMD_i32x4_sub_sat_u: - { - if (!aot_compile_simd_i32x4_saturate( - comp_ctx, func_ctx, V128_SUB, - opcode == SIMD_i32x4_add_sat_s)) - return false; - break; - } - case SIMD_i32x4_mul: { if (!aot_compile_simd_i32x4_arith(comp_ctx, func_ctx, @@ -2236,13 +2219,6 @@ aot_compile_func(AOTCompContext *comp_ctx, uint32 func_index) break; } - case SIMD_i32x4_avgr_u: - { - if (!aot_compile_simd_i32x4_avgr_u(comp_ctx, func_ctx)) - return false; - break; - } - case SIMD_i32x4_extmul_low_i16x8_s: case SIMD_i32x4_extmul_high_i16x8_s: { @@ -2399,13 +2375,6 @@ aot_compile_func(AOTCompContext *comp_ctx, uint32 func_index) break; } - case SIMD_f32x4_round: - { - if (!aot_compile_simd_f32x4_round(comp_ctx, func_ctx)) - return false; - break; - } - case SIMD_f32x4_sqrt: { if (!aot_compile_simd_f32x4_sqrt(comp_ctx, func_ctx)) @@ -2459,13 +2428,6 @@ aot_compile_func(AOTCompContext *comp_ctx, uint32 func_index) break; } - case SIMD_f64x2_round: - { - if (!aot_compile_simd_f64x2_round(comp_ctx, func_ctx)) - return false; - break; - } - case SIMD_f64x2_sqrt: { if (!aot_compile_simd_f64x2_sqrt(comp_ctx, func_ctx)) diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_compiler.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_compiler.h similarity index 97% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_compiler.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_compiler.h index b6347c89d78..22f95ccfe32 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_compiler.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_compiler.h @@ -203,7 +203,12 @@ check_type_compatible(uint8 src_type, uint8 dst_type) goto fail; \ } \ memset(aot_value, 0, sizeof(AOTValue)); \ - aot_value->type = value_type; \ + if (comp_ctx->enable_ref_types \ + && (value_type == VALUE_TYPE_FUNCREF \ + || value_type == VALUE_TYPE_EXTERNREF)) \ + aot_value->type = VALUE_TYPE_I32; \ + else \ + aot_value->type = value_type; \ aot_value->value = llvm_value; \ aot_value_stack_push( \ &func_ctx->block_stack.block_list_end->value_stack, aot_value); \ diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_aot_file.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_aot_file.c similarity index 96% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_aot_file.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_aot_file.c index 80bcdc7db48..e43c8939c3b 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_aot_file.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_aot_file.c @@ -25,6 +25,7 @@ } \ } while (0) +#if WASM_ENABLE_LOAD_CUSTOM_SECTION != 0 static bool check_utf8_str(const uint8 *str, uint32 len) { @@ -89,6 +90,7 @@ check_utf8_str(const uint8 *str, uint32 len) } return (p == p_end); } +#endif /* end of WASM_ENABLE_LOAD_CUSTOM_SECTION != 0 */ /* Internal function in object file */ typedef struct AOTObjectFunc { @@ -652,7 +654,8 @@ get_relocations_size(AOTObjectData *obj_data, /* ignore the relocations to aot_func_internal#n in text section for windows platform since they will be applied in aot_emit_text_section */ - if (!strcmp(relocation_group->section_name, ".text") + if ((!strcmp(relocation_group->section_name, ".text") + || !strcmp(relocation_group->section_name, ".ltext")) && !strncmp(relocation->symbol_name, AOT_FUNC_INTERNAL_PREFIX, strlen(AOT_FUNC_INTERNAL_PREFIX)) && ((!strncmp(obj_data->comp_ctx->target_arch, "x86_64", 6) @@ -912,9 +915,6 @@ get_native_symbol_list_size(AOTCompContext *comp_ctx) return len; } -static uint32 -get_name_section_size(AOTCompData *comp_data); - static uint32 get_custom_sections_size(AOTCompContext *comp_ctx, AOTCompData *comp_data); @@ -972,15 +972,6 @@ get_aot_file_size(AOTCompContext *comp_ctx, AOTCompData *comp_data, size += get_native_symbol_list_size(comp_ctx); } - if (comp_ctx->enable_aux_stack_frame) { - /* custom name section */ - size = align_uint(size, 4); - /* section id + section size + sub section id */ - size += (uint32)sizeof(uint32) * 3; - size += (comp_data->aot_name_section_size = - get_name_section_size(comp_data)); - } - size_custom_section = get_custom_sections_size(comp_ctx, comp_data); if (size_custom_section > 0) { size = align_uint(size, 4); @@ -1013,28 +1004,28 @@ exchange_uint32(uint8 *p_data) } static void -exchange_uint64(uint8 *pData) +exchange_uint64(uint8 *p_data) { uint32 value; - value = *(uint32 *)pData; - *(uint32 *)pData = *(uint32 *)(pData + 4); - *(uint32 *)(pData + 4) = value; - exchange_uint32(pData); - exchange_uint32(pData + 4); + value = *(uint32 *)p_data; + *(uint32 *)p_data = *(uint32 *)(p_data + 4); + *(uint32 *)(p_data + 4) = value; + exchange_uint32(p_data); + exchange_uint32(p_data + 4); } static void -exchange_uint128(uint8 *pData) +exchange_uint128(uint8 *p_data) { /* swap high 64bit and low 64bit */ - uint64 value = *(uint64 *)pData; - *(uint64 *)pData = *(uint64 *)(pData + 8); - *(uint64 *)(pData + 8) = value; + uint64 value = *(uint64 *)p_data; + *(uint64 *)p_data = *(uint64 *)(p_data + 8); + *(uint64 *)(p_data + 8) = value; /* exchange high 64bit */ - exchange_uint64(pData); + exchange_uint64(p_data); /* exchange low 64bit */ - exchange_uint64(pData + 8); + exchange_uint64(p_data + 8); } static union { @@ -1123,6 +1114,7 @@ static union { EMIT_BUF(s, str_len); \ } while (0) +#if WASM_ENABLE_LOAD_CUSTOM_SECTION != 0 static bool read_leb(uint8 **p_buf, const uint8 *buf_end, uint32 maxbits, bool sign, uint64 *p_result) @@ -1321,6 +1313,7 @@ get_name_section_size(AOTCompData *comp_data) fail: return 0; } +#endif /* end of WASM_ENABLE_LOAD_CUSTOM_SECTION != 0 */ static uint32 get_custom_sections_size(AOTCompContext *comp_ctx, AOTCompData *comp_data) @@ -1333,6 +1326,21 @@ get_custom_sections_size(AOTCompContext *comp_ctx, AOTCompData *comp_data) const uint8 *content = NULL; uint32 length = 0; + if (strcmp(section_name, "name") == 0) { + /* custom name section */ + comp_data->aot_name_section_size = get_name_section_size(comp_data); + if (comp_data->aot_name_section_size == 0) { + LOG_WARNING("Can't find custom section [name], ignore it"); + continue; + } + + size = align_uint(size, 4); + /* section id + section size + sub section id */ + size += (uint32)sizeof(uint32) * 3; + size += comp_data->aot_name_section_size; + continue; + } + content = wasm_loader_get_custom_section(comp_data->wasm_module, section_name, &length); if (!content) { @@ -1812,7 +1820,8 @@ aot_emit_text_section(uint8 *buf, uint8 *buf_end, uint32 *p_offset, for (i = 0; i < obj_data->relocation_group_count; i++, relocation_group++) { /* relocation in text section */ - if (!strcmp(relocation_group->section_name, ".text")) { + if ((!strcmp(relocation_group->section_name, ".text") + || !strcmp(relocation_group->section_name, ".ltext"))) { relocation = relocation_group->relocations; relocation_count = relocation_group->relocation_count; for (j = 0; j < relocation_count; j++) { @@ -2062,29 +2071,33 @@ aot_emit_native_symbol(uint8 *buf, uint8 *buf_end, uint32 *p_offset, return true; } +#if WASM_ENABLE_LOAD_CUSTOM_SECTION != 0 static bool aot_emit_name_section(uint8 *buf, uint8 *buf_end, uint32 *p_offset, AOTCompData *comp_data, AOTCompContext *comp_ctx) { - if (comp_ctx->enable_aux_stack_frame) { - uint32 offset = *p_offset; + uint32 offset = *p_offset; - *p_offset = offset = align_uint(offset, 4); + if (comp_data->aot_name_section_size == 0) + return true; - EMIT_U32(AOT_SECTION_TYPE_CUSTOM); - /* sub section id + name section size */ - EMIT_U32(sizeof(uint32) * 1 + comp_data->aot_name_section_size); - EMIT_U32(AOT_CUSTOM_SECTION_NAME); - bh_memcpy_s((uint8 *)(buf + offset), (uint32)(buf_end - buf), - comp_data->aot_name_section_buf, - (uint32)comp_data->aot_name_section_size); - offset += comp_data->aot_name_section_size; + offset = align_uint(offset, 4); - *p_offset = offset; - } + EMIT_U32(AOT_SECTION_TYPE_CUSTOM); + /* sub section id + name section size */ + EMIT_U32(sizeof(uint32) * 1 + comp_data->aot_name_section_size); + EMIT_U32(AOT_CUSTOM_SECTION_NAME); + bh_memcpy_s((uint8 *)(buf + offset), (uint32)(buf_end - buf), + comp_data->aot_name_section_buf, + (uint32)comp_data->aot_name_section_size); + offset += comp_data->aot_name_section_size; + *p_offset = offset; + + LOG_DEBUG("emit name section"); return true; } +#endif static bool aot_emit_custom_sections(uint8 *buf, uint8 *buf_end, uint32 *p_offset, @@ -2098,6 +2111,16 @@ aot_emit_custom_sections(uint8 *buf, uint8 *buf_end, uint32 *p_offset, const uint8 *content = NULL; uint32 length = 0; + if (strcmp(section_name, "name") == 0) { + *p_offset = offset; + if (!aot_emit_name_section(buf, buf_end, p_offset, comp_data, + comp_ctx)) + return false; + + offset = *p_offset; + continue; + } + content = wasm_loader_get_custom_section(comp_data->wasm_module, section_name, &length); if (!content) { @@ -2359,17 +2382,19 @@ aot_resolve_text(AOTObjectData *obj_data) while ( !LLVMObjectFileIsSectionIteratorAtEnd(obj_data->binary, sec_itr)) { if ((name = (char *)LLVMGetSectionName(sec_itr))) { - if (!strcmp(name, ".text")) { + if (!strcmp(name, ".text") || !strcmp(name, ".ltext")) { obj_data->text = (char *)LLVMGetSectionContents(sec_itr); obj_data->text_size = (uint32)LLVMGetSectionSize(sec_itr); } - else if (!strcmp(name, ".text.unlikely.")) { + else if (!strcmp(name, ".text.unlikely.") + || !strcmp(name, ".ltext.unlikely.")) { obj_data->text_unlikely = (char *)LLVMGetSectionContents(sec_itr); obj_data->text_unlikely_size = (uint32)LLVMGetSectionSize(sec_itr); } - else if (!strcmp(name, ".text.hot.")) { + else if (!strcmp(name, ".text.hot.") + || !strcmp(name, ".ltext.hot.")) { obj_data->text_hot = (char *)LLVMGetSectionContents(sec_itr); obj_data->text_hot_size = @@ -2888,11 +2913,13 @@ aot_resolve_functions(AOTCompContext *comp_ctx, AOTObjectData *obj_data) (char *)LLVMGetSectionName(contain_section); LLVMDisposeSectionIterator(contain_section); - if (!strcmp(contain_section_name, ".text.unlikely.")) { + if (!strcmp(contain_section_name, ".text.unlikely.") + || !strcmp(contain_section_name, ".ltext.unlikely.")) { func->text_offset = align_uint(obj_data->text_size, 4) + LLVMGetSymbolAddress(sym_itr); } - else if (!strcmp(contain_section_name, ".text.hot.")) { + else if (!strcmp(contain_section_name, ".text.hot.") + || !strcmp(contain_section_name, ".ltext.hot.")) { func->text_offset = align_uint(obj_data->text_size, 4) + align_uint(obj_data->text_unlikely_size, 4) @@ -2924,12 +2951,14 @@ aot_resolve_functions(AOTCompContext *comp_ctx, AOTObjectData *obj_data) (char *)LLVMGetSectionName(contain_section); LLVMDisposeSectionIterator(contain_section); - if (!strcmp(contain_section_name, ".text.unlikely.")) { + if (!strcmp(contain_section_name, ".text.unlikely.") + || !strcmp(contain_section_name, ".ltext.unlikely.")) { func->text_offset_of_aot_func_internal = align_uint(obj_data->text_size, 4) + LLVMGetSymbolAddress(sym_itr); } - else if (!strcmp(contain_section_name, ".text.hot.")) { + else if (!strcmp(contain_section_name, ".text.hot.") + || !strcmp(contain_section_name, ".ltext.hot.")) { func->text_offset_of_aot_func_internal = align_uint(obj_data->text_size, 4) + align_uint(obj_data->text_unlikely_size, 4) @@ -3077,7 +3106,12 @@ aot_resolve_object_relocation_group(AOTObjectData *obj_data, * Note: aot_stack_sizes_section_name section only contains * stack_sizes table. */ - if (!strcmp(relocation->symbol_name, aot_stack_sizes_name)) { + if (!strcmp(relocation->symbol_name, aot_stack_sizes_name) + /* in windows 32, the symbol name may start with '_' */ + || (strlen(relocation->symbol_name) > 0 + && relocation->symbol_name[0] == '_' + && !strcmp(relocation->symbol_name + 1, + aot_stack_sizes_name))) { /* discard const */ relocation->symbol_name = (char *)aot_stack_sizes_section_name; } @@ -3190,6 +3224,12 @@ is_relocation_section_name(AOTObjectData *obj_data, char *section_name) || !strcmp(section_name, ".rel.text.unlikely.") || !strcmp(section_name, ".rela.text.hot.") || !strcmp(section_name, ".rel.text.hot.") + || !strcmp(section_name, ".rela.ltext") + || !strcmp(section_name, ".rel.ltext") + || !strcmp(section_name, ".rela.ltext.unlikely.") + || !strcmp(section_name, ".rel.ltext.unlikely.") + || !strcmp(section_name, ".rela.ltext.hot.") + || !strcmp(section_name, ".rel.ltext.hot.") || !strcmp(section_name, ".rela.literal") || !strcmp(section_name, ".rela.data") || !strcmp(section_name, ".rel.data") @@ -3228,7 +3268,9 @@ static bool is_readonly_section(const char *name) { return !strcmp(name, ".rel.text") || !strcmp(name, ".rela.text") - || !strcmp(name, ".rela.literal") || !strcmp(name, ".text"); + || !strcmp(name, ".rel.ltext") || !strcmp(name, ".rela.ltext") + || !strcmp(name, ".rela.literal") || !strcmp(name, ".text") + || !strcmp(name, ".ltext"); } static bool @@ -3321,12 +3363,24 @@ aot_resolve_object_relocation_groups(AOTObjectData *obj_data) || !strcmp(relocation_group->section_name, ".rela.text.hot.")) { relocation_group->section_name = ".rela.text"; } + else if (!strcmp(relocation_group->section_name, + ".rela.ltext.unlikely.") + || !strcmp(relocation_group->section_name, + ".rela.ltext.hot.")) { + relocation_group->section_name = ".rela.ltext"; + } else if (!strcmp(relocation_group->section_name, ".rel.text.unlikely.") || !strcmp(relocation_group->section_name, ".rel.text.hot.")) { relocation_group->section_name = ".rel.text"; } + else if (!strcmp(relocation_group->section_name, + ".rel.ltext.unlikely.") + || !strcmp(relocation_group->section_name, + ".rel.ltext.hot.")) { + relocation_group->section_name = ".rel.ltext"; + } /* * Relocations in read-only sections are problematic, @@ -3589,6 +3643,10 @@ aot_emit_aot_file_buf(AOTCompContext *comp_ctx, AOTCompData *comp_data, return NULL; aot_file_size = get_aot_file_size(comp_ctx, comp_data, obj_data); + if (aot_file_size == 0) { + aot_set_last_error("get aot file size failed"); + goto fail1; + } if (!(buf = aot_file_buf = wasm_runtime_malloc(aot_file_size))) { aot_set_last_error("allocate memory failed."); @@ -3610,7 +3668,6 @@ aot_emit_aot_file_buf(AOTCompContext *comp_ctx, AOTCompData *comp_data, || !aot_emit_relocation_section(buf, buf_end, &offset, comp_ctx, comp_data, obj_data) || !aot_emit_native_symbol(buf, buf_end, &offset, comp_ctx) - || !aot_emit_name_section(buf, buf_end, &offset, comp_data, comp_ctx) || !aot_emit_custom_sections(buf, buf_end, &offset, comp_data, comp_ctx)) goto fail2; diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_compare.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_compare.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_compare.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_compare.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_compare.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_compare.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_compare.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_compare.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_const.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_const.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_const.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_const.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_const.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_const.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_const.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_const.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_control.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_control.c similarity index 99% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_control.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_control.c index a8ee938f253..fc7d72f7dca 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_control.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_control.c @@ -272,7 +272,9 @@ handle_next_reachable_block(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx, goto fail; } #if WASM_ENABLE_DEBUG_AOT != 0 - LLVMInstructionSetDebugLoc(ret, return_location); + if (return_location != NULL) { + LLVMInstructionSetDebugLoc(ret, return_location); + } #endif } else { @@ -281,7 +283,9 @@ handle_next_reachable_block(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx, goto fail; } #if WASM_ENABLE_DEBUG_AOT != 0 - LLVMInstructionSetDebugLoc(ret, return_location); + if (return_location != NULL) { + LLVMInstructionSetDebugLoc(ret, return_location); + } #endif } } @@ -1048,6 +1052,7 @@ aot_compile_op_br_table(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx, PUSH(values[j], target_block->result_types[j]); } wasm_runtime_free(values); + values = NULL; } target_block->is_reachable = true; if (i == br_count) @@ -1073,6 +1078,7 @@ aot_compile_op_br_table(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx, PUSH(values[j], target_block->param_types[j]); } wasm_runtime_free(values); + values = NULL; } if (i == br_count) default_llvm_block = target_block->llvm_entry_block; diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_control.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_control.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_control.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_control.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_conversion.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_conversion.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_conversion.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_conversion.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_conversion.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_conversion.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_conversion.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_conversion.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_exception.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_exception.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_exception.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_exception.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_exception.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_exception.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_exception.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_exception.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_function.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_function.c similarity index 85% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_function.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_function.c index bc8cb0a55a6..ef85941ab31 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_function.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_function.c @@ -288,6 +288,213 @@ call_aot_invoke_native_func(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx, return true; } +static bool +call_aot_invoke_c_api_native(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx, + uint32 import_func_idx, AOTFuncType *aot_func_type, + LLVMValueRef *params) +{ + LLVMTypeRef int8_ptr_type, param_types[6], ret_type; + LLVMTypeRef value_ptr_type = NULL, value_type = NULL; + LLVMTypeRef func_type, func_ptr_type; + LLVMValueRef param_values[6], res, func, value = NULL, offset; + LLVMValueRef c_api_func_imports, c_api_func_import; + LLVMValueRef c_api_params, c_api_results, value_ret; + LLVMValueRef c_api_param_kind, c_api_param_value; + LLVMValueRef c_api_result_value; + uint32 offset_c_api_func_imports, i; + uint32 offset_param_kind, offset_param_value; + char buf[16]; + + /* `int8 **` type */ + int8_ptr_type = LLVMPointerType(INT8_PTR_TYPE, 0); + if (!int8_ptr_type) { + aot_set_last_error("create llvm pointer type failed"); + return false; + } + + param_types[0] = INT8_PTR_TYPE; /* module_inst */ + param_types[1] = INT8_PTR_TYPE; /* CApiFuncImport *c_api_import */ + param_types[2] = INT8_PTR_TYPE; /* wasm_val_t *params */ + param_types[3] = I32_TYPE; /* uint32 param_count */ + param_types[4] = INT8_PTR_TYPE; /* wasm_val_t *results */ + param_types[5] = I32_TYPE; /* uint32 result_count */ + + ret_type = INT8_TYPE; + + GET_AOT_FUNCTION(wasm_runtime_quick_invoke_c_api_native, 6); + + param_values[0] = func_ctx->aot_inst; + + /* Get module_inst->e->common.c_api_func_imports */ + offset_c_api_func_imports = + get_module_inst_extra_offset(comp_ctx) + + (comp_ctx->is_jit_mode + ? offsetof(WASMModuleInstanceExtra, common.c_api_func_imports) + /* offsetof(AOTModuleInstanceExtra, common.c_api_func_imports) */ + : sizeof(uint64)); + offset = I32_CONST(offset_c_api_func_imports); + CHECK_LLVM_CONST(offset); + c_api_func_imports = + LLVMBuildInBoundsGEP2(comp_ctx->builder, INT8_TYPE, func_ctx->aot_inst, + &offset, 1, "c_api_func_imports_addr"); + c_api_func_imports = + LLVMBuildBitCast(comp_ctx->builder, c_api_func_imports, int8_ptr_type, + "c_api_func_imports_ptr"); + c_api_func_imports = + LLVMBuildLoad2(comp_ctx->builder, INT8_PTR_TYPE, c_api_func_imports, + "c_api_func_imports"); + + /* Get &c_api_func_imports[func_idx], note size of CApiFuncImport + is pointer_size * 3 */ + offset = I32_CONST((comp_ctx->pointer_size * 3) * import_func_idx); + CHECK_LLVM_CONST(offset); + c_api_func_import = + LLVMBuildInBoundsGEP2(comp_ctx->builder, INT8_TYPE, c_api_func_imports, + &offset, 1, "c_api_func_import"); + + param_values[1] = c_api_func_import; + param_values[2] = c_api_params = func_ctx->argv_buf; + param_values[3] = I32_CONST(aot_func_type->param_count); + CHECK_LLVM_CONST(param_values[3]); + + /* Ensure sizeof(wasm_val_t) is 16 bytes */ + offset = I32_CONST(sizeof(wasm_val_t) * aot_func_type->param_count); + c_api_results = + LLVMBuildInBoundsGEP2(comp_ctx->builder, INT8_TYPE, func_ctx->argv_buf, + &offset, 1, "results"); + param_values[4] = c_api_results; + + param_values[5] = I32_CONST(aot_func_type->result_count); + CHECK_LLVM_CONST(param_values[5]); + + /* Set each c api param */ + for (i = 0; i < aot_func_type->param_count; i++) { + /* Ensure sizeof(wasm_val_t) is 16 bytes */ + offset_param_kind = sizeof(wasm_val_t) * i; + offset = I32_CONST(offset_param_kind); + CHECK_LLVM_CONST(offset); + c_api_param_kind = + LLVMBuildInBoundsGEP2(comp_ctx->builder, INT8_TYPE, c_api_params, + &offset, 1, "c_api_param_kind_addr"); + c_api_param_kind = + LLVMBuildBitCast(comp_ctx->builder, c_api_param_kind, INT8_PTR_TYPE, + "c_api_param_kind_ptr"); + + switch (aot_func_type->types[i]) { + case VALUE_TYPE_I32: + value = I8_CONST(WASM_I32); + break; + case VALUE_TYPE_F32: + value = I8_CONST(WASM_F32); + break; + case VALUE_TYPE_I64: + value = I8_CONST(WASM_I64); + break; + case VALUE_TYPE_F64: + value = I8_CONST(WASM_F64); + break; + default: + bh_assert(0); + break; + } + CHECK_LLVM_CONST(value); + + LLVMBuildStore(comp_ctx->builder, value, c_api_param_kind); + + /* Ensure offsetof(wasm_val_t, of) is 8 bytes */ + offset_param_value = offset_param_kind + offsetof(wasm_val_t, of); + offset = I32_CONST(offset_param_value); + CHECK_LLVM_CONST(offset); + c_api_param_value = + LLVMBuildInBoundsGEP2(comp_ctx->builder, INT8_TYPE, c_api_params, + &offset, 1, "c_api_param_value_addr"); + + switch (aot_func_type->types[i]) { + case VALUE_TYPE_I32: + value_ptr_type = INT32_PTR_TYPE; + break; + case VALUE_TYPE_F32: + value_ptr_type = F32_PTR_TYPE; + break; + case VALUE_TYPE_I64: + value_ptr_type = INT64_PTR_TYPE; + break; + case VALUE_TYPE_F64: + value_ptr_type = F64_PTR_TYPE; + break; + default: + bh_assert(0); + break; + } + + c_api_param_value = + LLVMBuildBitCast(comp_ctx->builder, c_api_param_value, + value_ptr_type, "c_api_param_value_ptr"); + LLVMBuildStore(comp_ctx->builder, params[i], c_api_param_value); + } + + /* Call the function */ + if (!(res = LLVMBuildCall2(comp_ctx->builder, func_type, func, param_values, + 6, "call"))) { + aot_set_last_error("LLVM build call failed."); + goto fail; + } + + /* Check whether exception was thrown when executing the function */ + if (comp_ctx->enable_bound_check + && !check_call_return(comp_ctx, func_ctx, res)) { + goto fail; + } + + for (i = 0; i < aot_func_type->result_count; i++) { + /* Ensure sizeof(wasm_val_t) is 16 bytes and + offsetof(wasm_val_t, of) is 8 bytes */ + uint32 offset_result_value = + sizeof(wasm_val_t) * i + offsetof(wasm_val_t, of); + + offset = I32_CONST(offset_result_value); + CHECK_LLVM_CONST(offset); + c_api_result_value = + LLVMBuildInBoundsGEP2(comp_ctx->builder, INT8_TYPE, c_api_results, + &offset, 1, "c_api_result_value_addr"); + + switch (aot_func_type->types[aot_func_type->param_count + i]) { + case VALUE_TYPE_I32: + value_type = I32_TYPE; + value_ptr_type = INT32_PTR_TYPE; + break; + case VALUE_TYPE_F32: + value_type = F32_TYPE; + value_ptr_type = F32_PTR_TYPE; + break; + case VALUE_TYPE_I64: + value_type = I64_TYPE; + value_ptr_type = INT64_PTR_TYPE; + break; + case VALUE_TYPE_F64: + value_type = F64_TYPE; + value_ptr_type = F64_PTR_TYPE; + break; + default: + bh_assert(0); + break; + } + + c_api_result_value = + LLVMBuildBitCast(comp_ctx->builder, c_api_result_value, + value_ptr_type, "c_api_result_value_ptr"); + snprintf(buf, sizeof(buf), "%s%u", "ret", i); + value_ret = LLVMBuildLoad2(comp_ctx->builder, value_type, + c_api_result_value, buf); + + PUSH(value_ret, aot_func_type->types[aot_func_type->param_count + i]); + } + + return true; +fail: + return false; +} + #if (WASM_ENABLE_DUMP_CALL_STACK != 0) || (WASM_ENABLE_PERF_PROFILING != 0) static bool call_aot_alloc_frame_func(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx, @@ -533,6 +740,7 @@ aot_compile_op_call(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx, const char *signature = NULL; bool ret = false; char buf[32]; + bool quick_invoke_c_api_import = false; #if WASM_ENABLE_THREAD_MGR != 0 /* Insert suspend check point */ @@ -702,17 +910,43 @@ aot_compile_op_call(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx, } if (!signature) { - /* call aot_invoke_native() */ - if (!call_aot_invoke_native_func( - comp_ctx, func_ctx, import_func_idx, func_type, - param_types + 1, param_values + 1, param_count, - param_cell_num, ret_type, wasm_ret_type, &value_ret, &res)) - goto fail; - /* Check whether there was exception thrown when executing - the function */ - if ((comp_ctx->enable_bound_check || is_win_platform(comp_ctx)) - && !check_call_return(comp_ctx, func_ctx, res)) - goto fail; + if (comp_ctx->quick_invoke_c_api_import) { + uint32 buf_size_needed = + sizeof(wasm_val_t) * (param_count + result_count); + + /* length of exec_env->argv_buf is 64 */ + if (buf_size_needed < sizeof(uint32) * 64) { + for (i = 0; i < param_count + result_count; i++) { + /* Only support i32/i64/f32/f64 now */ + if (!(func_type->types[i] == VALUE_TYPE_I32 + || func_type->types[i] == VALUE_TYPE_I64 + || func_type->types[i] == VALUE_TYPE_F32 + || func_type->types[i] == VALUE_TYPE_F64)) + break; + } + if (i == param_count + result_count) + quick_invoke_c_api_import = true; + } + } + if (quick_invoke_c_api_import) { + if (!call_aot_invoke_c_api_native(comp_ctx, func_ctx, func_idx, + func_type, param_values + 1)) + goto fail; + } + else { + /* call aot_invoke_native() */ + if (!call_aot_invoke_native_func( + comp_ctx, func_ctx, import_func_idx, func_type, + param_types + 1, param_values + 1, param_count, + param_cell_num, ret_type, wasm_ret_type, &value_ret, + &res)) + goto fail; + /* Check whether there was exception thrown when executing + the function */ + if ((comp_ctx->enable_bound_check || is_win_platform(comp_ctx)) + && !check_call_return(comp_ctx, func_ctx, res)) + goto fail; + } } else { /* call native func directly */ LLVMTypeRef native_func_type, func_ptr_type; @@ -854,10 +1088,6 @@ aot_compile_op_call(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx, goto fail; } - /* Set calling convention for the call with the func's calling - convention */ - LLVMSetInstructionCallConv(value_ret, LLVMGetFunctionCallConv(func)); - if (tail_call) LLVMSetTailCall(value_ret, true); @@ -869,7 +1099,7 @@ aot_compile_op_call(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx, goto fail; } - if (func_type->result_count > 0) { + if (func_type->result_count > 0 && !quick_invoke_c_api_import) { /* Push the first result to stack */ PUSH(value_ret, func_type->types[func_type->param_count]); /* Load extra result from its address and push to stack */ diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_function.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_function.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_function.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_function.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_memory.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_memory.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_memory.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_memory.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_memory.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_memory.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_memory.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_memory.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_numberic.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_numberic.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_numberic.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_numberic.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_numberic.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_numberic.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_numberic.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_numberic.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_parametric.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_parametric.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_parametric.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_parametric.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_parametric.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_parametric.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_parametric.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_parametric.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_table.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_table.c similarity index 97% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_table.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_table.c index d8a5efd9137..34e7d97006f 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_table.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_table.c @@ -46,6 +46,18 @@ get_tbl_inst_offset(const AOTCompContext *comp_ctx, return offset; } +uint32 +get_module_inst_extra_offset(AOTCompContext *comp_ctx) +{ + const AOTCompData *comp_data = comp_ctx->comp_data; + uint32 table_count = comp_data->import_table_count + comp_data->table_count; + uint64 offset = get_tbl_inst_offset(comp_ctx, NULL, table_count); + uint32 offset_32 = (uint32)offset; + bh_assert(offset <= UINT32_MAX); + offset_32 = align_uint(offset_32, 8); + return offset_32; +} + #if WASM_ENABLE_REF_TYPES != 0 LLVMValueRef diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_table.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_table.h similarity index 95% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_table.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_table.h index e5ab0ed48b3..f294cca9aea 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_table.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_table.h @@ -49,6 +49,9 @@ uint64 get_tbl_inst_offset(const AOTCompContext *comp_ctx, const AOTFuncContext *func_ctx, uint32 tbl_idx); +uint32 +get_module_inst_extra_offset(AOTCompContext *comp_ctx); + LLVMValueRef aot_compile_get_tbl_inst(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx, uint32 tbl_idx); @@ -56,4 +59,4 @@ aot_compile_get_tbl_inst(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx, #ifdef __cplusplus } /* end of extern "C" */ #endif -#endif \ No newline at end of file +#endif diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_variable.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_variable.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_variable.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_variable.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_variable.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_variable.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_emit_variable.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_emit_variable.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_llvm.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_llvm.c similarity index 99% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_llvm.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_llvm.c index bbf16f55c49..b6dfcf6f2df 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_llvm.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_llvm.c @@ -263,12 +263,11 @@ get_inst_extra_offset(AOTCompContext *comp_ctx) * - update native_stack_top_min if necessary * - stack overflow check (if it does, trap) */ -static LLVMValueRef -aot_add_precheck_function(AOTCompContext *comp_ctx, LLVMModuleRef module, - uint32 func_index, uint32 orig_param_count, - LLVMTypeRef func_type, LLVMValueRef wrapped_func) +static bool +aot_build_precheck_function(AOTCompContext *comp_ctx, LLVMModuleRef module, + LLVMValueRef precheck_func, uint32 func_index, + LLVMTypeRef func_type, LLVMValueRef wrapped_func) { - LLVMValueRef precheck_func; LLVMBasicBlockRef begin = NULL; LLVMBasicBlockRef check_top_block = NULL; LLVMBasicBlockRef update_top_block = NULL; @@ -276,12 +275,6 @@ aot_add_precheck_function(AOTCompContext *comp_ctx, LLVMModuleRef module, LLVMBasicBlockRef call_wrapped_func_block = NULL; LLVMValueRef *params = NULL; - precheck_func = - aot_add_llvm_func1(comp_ctx, module, func_index, orig_param_count, - func_type, AOT_FUNC_PREFIX); - if (!precheck_func) { - goto fail; - } begin = LLVMAppendBasicBlockInContext(comp_ctx->context, precheck_func, "begin"); check_top_block = LLVMAppendBasicBlockInContext( @@ -533,18 +526,12 @@ aot_add_precheck_function(AOTCompContext *comp_ctx, LLVMModuleRef module, } wasm_runtime_free(params); params = NULL; - -#if LLVM_VERSION_MAJOR < 17 if (aot_target_precheck_can_use_musttail(comp_ctx)) { LLVMSetTailCallKind(retval, LLVMTailCallKindMustTail); } else { LLVMSetTailCallKind(retval, LLVMTailCallKindTail); } -#else - LLVMSetTailCall(retval, true); -#endif - if (ret_type == VOID_TYPE) { if (!LLVMBuildRetVoid(b)) { goto fail; @@ -556,13 +543,13 @@ aot_add_precheck_function(AOTCompContext *comp_ctx, LLVMModuleRef module, } } - return precheck_func; + return true; fail: if (params != NULL) { wasm_runtime_free(params); } aot_set_last_error("failed to build precheck wrapper function."); - return NULL; + return false; } /** @@ -632,7 +619,14 @@ aot_add_llvm_func(AOTCompContext *comp_ctx, LLVMModuleRef module, const char *prefix = AOT_FUNC_PREFIX; const bool need_precheck = comp_ctx->enable_stack_bound_check || comp_ctx->enable_stack_estimation; + LLVMValueRef precheck_func = NULL; if (need_precheck) { + precheck_func = aot_add_llvm_func1(comp_ctx, module, func_index, + aot_func_type->param_count, + func_type, AOT_FUNC_PREFIX); + if (!precheck_func) { + goto fail; + } /* * REVISIT: probably this breaks windows hw bound check * (the RtlAddFunctionTable stuff) @@ -677,10 +671,8 @@ aot_add_llvm_func(AOTCompContext *comp_ctx, LLVMModuleRef module, LLVMAddAttributeAtIndex(func, LLVMAttributeFunctionIndex, attr_noinline); - LLVMValueRef precheck_func = aot_add_precheck_function( - comp_ctx, module, func_index, aot_func_type->param_count, func_type, - func); - if (!precheck_func) + if (!aot_build_precheck_function(comp_ctx, module, precheck_func, + func_index, func_type, func)) goto fail; LLVMAddAttributeAtIndex(precheck_func, LLVMAttributeFunctionIndex, attr_noinline); @@ -2174,7 +2166,7 @@ jit_stack_size_callback(void *user_data, const char *name, size_t namelen, } static bool -orc_jit_create(AOTCompContext *comp_ctx, bool linux_perf_support) +orc_jit_create(AOTCompContext *comp_ctx) { LLVMErrorRef err; LLVMOrcLLLazyJITRef orc_jit = NULL; @@ -2214,13 +2206,15 @@ orc_jit_create(AOTCompContext *comp_ctx, bool linux_perf_support) /* Ownership transfer: LLVMOrcLLJITBuilderRef -> LLVMOrcLLJITRef */ builder = NULL; - if (linux_perf_support) { - LOG_DEBUG("Enable linux perf support"); +#if WASM_ENABLE_LINUX_PERF != 0 + if (wasm_runtime_get_linux_perf()) { + LOG_DEBUG("Enable linux perf support in JIT"); LLVMOrcObjectLayerRef obj_linking_layer = (LLVMOrcObjectLayerRef)LLVMOrcLLLazyJITGetObjLinkingLayer(orc_jit); LLVMOrcRTDyldObjectLinkingLayerRegisterJITEventListener( obj_linking_layer, LLVMCreatePerfJITEventListener()); } +#endif /* Ownership transfer: local -> AOTCompContext */ comp_ctx->orc_jit = orc_jit; @@ -2320,7 +2314,8 @@ aot_create_comp_context(const AOTCompData *comp_data, aot_comp_option_t option) goto fail; } - if (option->linux_perf_support) { +#if WASM_ENABLE_LINUX_PERF != 0 + if (wasm_runtime_get_linux_perf()) { /* FramePointerKind.All */ LLVMMetadataRef val = LLVMValueAsMetadata(LLVMConstInt(LLVMInt32Type(), 2, false)); @@ -2330,6 +2325,7 @@ aot_create_comp_context(const AOTCompData *comp_data, aot_comp_option_t option) comp_ctx->emit_frame_pointer = true; } +#endif if (BH_LIST_ERROR == bh_list_init(&comp_ctx->native_symbols)) { goto fail; @@ -2394,6 +2390,9 @@ aot_create_comp_context(const AOTCompData *comp_data, aot_comp_option_t option) if (option->enable_stack_estimation) comp_ctx->enable_stack_estimation = true; + if (option->quick_invoke_c_api_import) + comp_ctx->quick_invoke_c_api_import = true; + if (option->llvm_passes) comp_ctx->llvm_passes = option->llvm_passes; @@ -2434,7 +2433,7 @@ aot_create_comp_context(const AOTCompData *comp_data, aot_comp_option_t option) goto fail; /* Create LLJIT Instance */ - if (!orc_jit_create(comp_ctx, option->linux_perf_support)) + if (!orc_jit_create(comp_ctx)) goto fail; } else { diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_llvm.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_llvm.h similarity index 98% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_llvm.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_llvm.h index 32d7bbebacd..bb7534e5c9b 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_llvm.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_llvm.h @@ -321,10 +321,10 @@ typedef struct AOTCompContext { /* Bulk memory feature */ bool enable_bulk_memory; - /* Bounday Check */ + /* Boundary Check */ bool enable_bound_check; - /* Native stack bounday Check */ + /* Native stack boundary Check */ bool enable_stack_bound_check; /* Native stack usage estimation */ @@ -357,6 +357,10 @@ typedef struct AOTCompContext { /* Enable LLVM PGO (Profile-Guided Optimization) */ bool enable_llvm_pgo; + /* Treat unknown import function as wasm-c-api import function + and allow to directly invoke it from AOT/JIT code */ + bool quick_invoke_c_api_import; + /* Use profile file collected by LLVM PGO */ char *use_prof_file; @@ -454,6 +458,7 @@ typedef struct AOTCompOption { bool disable_llvm_lto; bool enable_llvm_pgo; bool enable_stack_estimation; + bool quick_invoke_c_api_import; char *use_prof_file; uint32 opt_level; uint32 size_level; @@ -461,7 +466,6 @@ typedef struct AOTCompOption { uint32 bounds_checks; uint32 stack_bounds_checks; uint32 segue_flags; - bool linux_perf_support; char **custom_sections; uint32 custom_sections_count; const char *stack_usage_file; diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_llvm_extra.cpp b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_llvm_extra.cpp similarity index 97% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_llvm_extra.cpp rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_llvm_extra.cpp index ed0205c3c93..ed9447afc41 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_llvm_extra.cpp +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_llvm_extra.cpp @@ -45,6 +45,7 @@ #include #include #include +#include #include #include #include @@ -315,8 +316,11 @@ aot_apply_llvm_new_pass_manager(AOTCompContext *comp_ctx, LLVMModuleRef module) } ModulePassManager MPM; + if (comp_ctx->is_jit_mode) { const char *Passes = + "loop-vectorize,slp-vectorizer," + "load-store-vectorizer,vector-combine," "mem2reg,instcombine,simplifycfg,jump-threading,indvars"; ExitOnErr(PB.parsePassPipeline(MPM, Passes)); } @@ -327,6 +331,7 @@ aot_apply_llvm_new_pass_manager(AOTCompContext *comp_ctx, LLVMModuleRef module) FPM.addPass(LoopVectorizePass()); FPM.addPass(SLPVectorizerPass()); FPM.addPass(LoadStoreVectorizerPass()); + FPM.addPass(VectorCombinePass()); if (comp_ctx->enable_llvm_pgo || comp_ctx->use_prof_file) { /* LICM pass: loop invariant code motion, attempting to remove @@ -404,7 +409,10 @@ aot_compress_aot_func_names(AOTCompContext *comp_ctx, uint32 *p_size) NameStrs.push_back(str); } - if (collectPGOFuncNameStrings(NameStrs, true, Result)) { +#if LLVM_VERSION_MAJOR < 18 +#define collectGlobalObjectNameStrings collectPGOFuncNameStrings +#endif + if (collectGlobalObjectNameStrings(NameStrs, true, Result)) { aot_set_last_error("collect pgo func name strings failed"); return NULL; } diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_llvm_extra2.cpp b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_llvm_extra2.cpp similarity index 88% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_llvm_extra2.cpp rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_llvm_extra2.cpp index 8364e5ebf42..ccbccd1e003 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_llvm_extra2.cpp +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_llvm_extra2.cpp @@ -58,6 +58,7 @@ convert(LLVMRelocMode reloc_mode) #endif } +#if LLVM_VERSION_MAJOR < 18 static llvm::CodeGenOpt::Level convert(LLVMCodeGenOptLevel opt_level) { @@ -74,6 +75,24 @@ convert(LLVMCodeGenOptLevel opt_level) bh_assert(0); return llvm::CodeGenOpt::None; } +#else +static llvm::CodeGenOptLevel +convert(LLVMCodeGenOptLevel opt_level) +{ + switch (opt_level) { + case LLVMCodeGenLevelNone: + return llvm::CodeGenOptLevel::None; + case LLVMCodeGenLevelLess: + return llvm::CodeGenOptLevel::Less; + case LLVMCodeGenLevelDefault: + return llvm::CodeGenOptLevel::Default; + case LLVMCodeGenLevelAggressive: + return llvm::CodeGenOptLevel::Aggressive; + } + bh_assert(0); + return llvm::CodeGenOptLevel::None; +} +#endif static llvm::Optional convert(LLVMCodeModel code_model, bool *jit) @@ -144,7 +163,7 @@ LLVMCreateTargetMachineWithOpts(LLVMTargetRef ctarget, const char *triple, } /* https://reviews.llvm.org/D153107 */ -#if LLVM_VERSION_MAJOR < 17 +#if LLVM_VERSION_MAJOR < 18 using namespace llvm; LLVMTailCallKind diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_llvm_extra2.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_llvm_extra2.h similarity index 97% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_llvm_extra2.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_llvm_extra2.h index f3f89799436..be89faae085 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_llvm_extra2.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_llvm_extra2.h @@ -17,7 +17,7 @@ LLVMCreateTargetMachineWithOpts(LLVMTargetRef ctarget, const char *triple, const char *StackUsageOutput); /* https://reviews.llvm.org/D153107 */ -#if LLVM_VERSION_MAJOR < 17 +#if LLVM_VERSION_MAJOR < 18 typedef enum { LLVMTailCallKindNone = 0, LLVMTailCallKindTail = 1, diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_orc_extra.cpp b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_orc_extra.cpp similarity index 92% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_orc_extra.cpp rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_orc_extra.cpp index ad8c41c3fdd..90dafe09755 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_orc_extra.cpp +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_orc_extra.cpp @@ -3,6 +3,10 @@ * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception */ +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + #include "llvm-c/LLJIT.h" #include "llvm-c/Orc.h" #include "llvm-c/OrcEE.h" @@ -44,6 +48,7 @@ class InProgressLookupState; class OrcV2CAPIHelper { public: +#if LLVM_VERSION_MAJOR < 18 using PoolEntry = SymbolStringPtr::PoolEntry; using PoolEntryPtr = SymbolStringPtr::PoolEntryPtr; @@ -86,6 +91,7 @@ class OrcV2CAPIHelper S.S = P; } +#endif static InProgressLookupState *extractLookupState(LookupState &LS) { return LS.IPLS.release(); @@ -101,6 +107,20 @@ class OrcV2CAPIHelper } // namespace llvm // ORC.h +#if LLVM_VERSION_MAJOR >= 18 +inline LLVMOrcSymbolStringPoolEntryRef +wrap(SymbolStringPoolEntryUnsafe E) +{ + return reinterpret_cast(E.rawPtr()); +} + +inline SymbolStringPoolEntryUnsafe +unwrap(LLVMOrcSymbolStringPoolEntryRef E) +{ + return reinterpret_cast(E); +} +#endif + DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ExecutionSession, LLVMOrcExecutionSessionRef) DEFINE_SIMPLE_CONVERSION_FUNCTIONS(IRTransformLayer, LLVMOrcIRTransformLayerRef) DEFINE_SIMPLE_CONVERSION_FUNCTIONS(JITDylib, LLVMOrcJITDylibRef) @@ -108,8 +128,10 @@ DEFINE_SIMPLE_CONVERSION_FUNCTIONS(JITTargetMachineBuilder, LLVMOrcJITTargetMachineBuilderRef) DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ObjectTransformLayer, LLVMOrcObjectTransformLayerRef) +#if LLVM_VERSION_MAJOR < 18 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(OrcV2CAPIHelper::PoolEntry, LLVMOrcSymbolStringPoolEntryRef) +#endif DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ObjectLayer, LLVMOrcObjectLayerRef) DEFINE_SIMPLE_CONVERSION_FUNCTIONS(SymbolStringPool, LLVMOrcSymbolStringPoolRef) DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ThreadSafeModule, LLVMOrcThreadSafeModuleRef) @@ -292,8 +314,13 @@ LLVMOrcSymbolStringPoolEntryRef LLVMOrcLLLazyJITMangleAndIntern(LLVMOrcLLLazyJITRef J, const char *UnmangledName) { +#if LLVM_VERSION_MAJOR < 18 return wrap(OrcV2CAPIHelper::moveFromSymbolStringPtr( unwrap(J)->mangleAndIntern(UnmangledName))); +#else + return wrap(SymbolStringPoolEntryUnsafe::take( + unwrap(J)->mangleAndIntern(UnmangledName))); +#endif } LLVMOrcJITDylibRef diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_orc_extra.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_orc_extra.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_orc_extra.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_orc_extra.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_orc_extra2.cpp b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_orc_extra2.cpp similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/aot_orc_extra2.cpp rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/aot_orc_extra2.cpp diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/debug/dwarf_extractor.cpp b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/debug/dwarf_extractor.cpp similarity index 86% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/debug/dwarf_extractor.cpp rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/debug/dwarf_extractor.cpp index 99182f82f99..e2e515ba0a1 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/debug/dwarf_extractor.cpp +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/debug/dwarf_extractor.cpp @@ -133,9 +133,10 @@ dwarf_gen_file_info(const AOTCompContext *comp_ctx) file_name = filespec.GetFilename(); dir_name = filespec.GetDirectory(); if (file_name || dir_name) { - file_info = LLVMDIBuilderCreateFile(comp_ctx->debug_builder, - file_name, strlen(file_name), - dir_name, strlen(dir_name)); + file_info = LLVMDIBuilderCreateFile( + comp_ctx->debug_builder, file_name, + file_name ? strlen(file_name) : 0, dir_name, + dir_name ? strlen(dir_name) : 0); } } return file_info; @@ -152,7 +153,7 @@ dwarf_gen_mock_vm_info(AOTCompContext *comp_ctx) comp_unit = LLVMDIBuilderCreateCompileUnit( comp_ctx->debug_builder, LLVMDWARFSourceLanguageC, file_info, - "ant compiler", 12, 0, NULL, 0, 1, NULL, 0, LLVMDWARFEmissionFull, 0, 0, + "WAMR AoT compiler", 12, 0, NULL, 0, 1, NULL, 0, LLVMDWARFEmissionFull, 0, 0, 0, "/", 1, "", 0); LLVMTypeRef ParamTys[] = { @@ -208,8 +209,8 @@ dwarf_gen_comp_unit_info(const AOTCompContext *comp_ctx) comp_unit = LLVMDIBuilderCreateCompileUnit( comp_ctx->debug_builder, LLDB_TO_LLVM_LANG_TYPE(lang_type), - comp_ctx->debug_file, "ant compiler", 12, 0, NULL, 0, 1, NULL, 0, - LLVMDWARFEmissionFull, 0, 0, 0, "/", 1, "", 0); + comp_ctx->debug_file, "WAMR AoT compiler", 12, 0, NULL, 0, 1, NULL, + 0, LLVMDWARFEmissionFull, 0, 0, 0, "/", 1, "", 0); } return comp_unit; } @@ -294,11 +295,33 @@ lldb_function_to_function_dbi(const AOTCompContext *comp_ctx, const size_t num_function_args = function_args.GetSize(); dwarf_extractor *extractor; + /* + * Process only known languages. + * We have a few assumptions which might not be true for non-C functions. + * + * At least it's known broken for C++ and Rust: + * https://github.com/bytecodealliance/wasm-micro-runtime/issues/3187 + * https://github.com/bytecodealliance/wasm-micro-runtime/issues/3163 + */ + LanguageType language_type = function.GetLanguage(); + switch (language_type) { + case eLanguageTypeC89: + case eLanguageTypeC: + case eLanguageTypeC99: + case eLanguageTypeC11: + case eLanguageTypeC17: + break; + default: + LOG_WARNING("func %s has unsuppoted language_type 0x%x", + function_name, (int)language_type); + return NULL; + } + if (!(extractor = TO_EXTACTOR(comp_ctx->comp_data->extractor))) return NULL; LLVMDIBuilderRef DIB = comp_ctx->debug_builder; - LLVMMetadataRef File = comp_ctx->debug_file; + LLVMMetadataRef File = comp_ctx->debug_file; /* a fallback */ LLVMMetadataRef ParamTypes[num_function_args + 1]; @@ -312,9 +335,35 @@ lldb_function_to_function_dbi(const AOTCompContext *comp_ctx, if (function_arg_type.IsValid()) { ParamTypes[function_arg_idx + 1] = lldb_type_to_type_dbi(comp_ctx, function_arg_type); + if (ParamTypes[function_arg_idx + 1] == NULL) { + LOG_WARNING( + "func %s arg %" PRIu32 + " has a type not implemented by lldb_type_to_type_dbi", + function_name, function_arg_idx); + } + } + else { + LOG_WARNING("func %s arg %" PRIu32 ": GetTypeAtIndex failed", + function_name, function_arg_idx); + ParamTypes[function_arg_idx + 1] = NULL; } } + auto compile_unit = sc.GetCompileUnit(); + auto file_spec = compile_unit.GetFileSpec(); + const char *file_name = file_spec.GetFilename(); + const char *dir_name = file_spec.GetDirectory(); + LLVMMetadataRef file_info = NULL; + if (file_name || dir_name) { + file_info = + LLVMDIBuilderCreateFile(comp_ctx->debug_builder, file_name, + file_name ? strlen(file_name) : 0, dir_name, + dir_name ? strlen(dir_name) : 0); + } + if (file_info) { + File = file_info; + } + LLVMMetadataRef FunctionTy = LLVMDIBuilderCreateSubroutineType( DIB, File, ParamTypes, num_function_args + 1, LLVMDIFlagZero); @@ -365,15 +414,16 @@ lldb_function_to_function_dbi(const AOTCompContext *comp_ctx, for (uint32_t function_arg_idx = 0; function_arg_idx < variable_list.GetSize(); ++function_arg_idx) { SBValue variable(variable_list.GetValueAtIndex(function_arg_idx)); - if (variable.IsValid()) { + if (variable.IsValid() && ParamTypes[function_arg_idx + 1] != NULL) { SBDeclaration dec(variable.GetDeclaration()); auto valtype = variable.GetType(); LLVMMetadataRef ParamLocation = LLVMDIBuilderCreateDebugLocation( comp_ctx->context, dec.GetLine(), dec.GetColumn(), FunctionMetadata, NULL); + const char *varname = variable.GetName(); LLVMMetadataRef ParamVar = LLVMDIBuilderCreateParameterVariable( - DIB, FunctionMetadata, variable.GetName(), - strlen(variable.GetName()), function_arg_idx + 1 + 1, + DIB, FunctionMetadata, varname, varname ? strlen(varname) : 0, + function_arg_idx + 1 + 1, File, // starts form 1, and 1 is exenv, dec.GetLine(), ParamTypes[function_arg_idx + 1], true, LLVMDIFlagZero); @@ -457,6 +507,8 @@ dwarf_gen_location(const AOTCompContext *comp_ctx, dwarf_extractor *extractor; AOTFunc *func = func_ctx->aot_func; + if (func_ctx->debug_func == NULL) + return NULL; if (!(extractor = TO_EXTACTOR(comp_ctx->comp_data->extractor))) return NULL; diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/debug/dwarf_extractor.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/debug/dwarf_extractor.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/debug/dwarf_extractor.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/debug/dwarf_extractor.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/iwasm_compl.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/iwasm_compl.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/iwasm_compl.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/iwasm_compl.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_access_lanes.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_access_lanes.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_access_lanes.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_access_lanes.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_access_lanes.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_access_lanes.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_access_lanes.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_access_lanes.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_bit_shifts.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_bit_shifts.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_bit_shifts.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_bit_shifts.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_bit_shifts.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_bit_shifts.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_bit_shifts.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_bit_shifts.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_bitmask_extracts.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_bitmask_extracts.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_bitmask_extracts.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_bitmask_extracts.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_bitmask_extracts.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_bitmask_extracts.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_bitmask_extracts.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_bitmask_extracts.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_bitwise_ops.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_bitwise_ops.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_bitwise_ops.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_bitwise_ops.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_bitwise_ops.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_bitwise_ops.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_bitwise_ops.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_bitwise_ops.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_bool_reductions.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_bool_reductions.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_bool_reductions.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_bool_reductions.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_bool_reductions.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_bool_reductions.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_bool_reductions.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_bool_reductions.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_common.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_common.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_common.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_common.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_common.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_common.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_common.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_common.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_comparisons.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_comparisons.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_comparisons.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_comparisons.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_comparisons.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_comparisons.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_comparisons.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_comparisons.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_construct_values.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_construct_values.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_construct_values.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_construct_values.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_construct_values.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_construct_values.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_construct_values.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_construct_values.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_conversions.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_conversions.c similarity index 98% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_conversions.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_conversions.c index e9d30bfcb29..042e28089df 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_conversions.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_conversions.c @@ -158,11 +158,15 @@ simd_integer_narrow_common(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx, return false; } - /* sat */ + /* Refer to: + * https://github.com/WebAssembly/spec/blob/main/proposals/simd/SIMD.md#integer-to-integer-narrowing + * Regardless of the whether the operation is signed or unsigned, the input + * lanes are interpreted as signed integers. + */ if (!(vec1 = simd_saturate(comp_ctx, func_ctx, e_sat_i16x8, vec1, min, max, - is_signed)) + true)) || !(vec2 = simd_saturate(comp_ctx, func_ctx, e_sat_i16x8, vec2, min, - max, is_signed))) { + max, true))) { return false; } @@ -222,15 +226,6 @@ aot_compile_simd_i16x8_narrow_i32x4(AOTCompContext *comp_ctx, } } -bool -aot_compile_simd_i32x4_narrow_i64x2(AOTCompContext *comp_ctx, - AOTFuncContext *func_ctx, bool is_signed) -{ - /* TODO: x86 intrinsics */ - return simd_integer_narrow_common(comp_ctx, func_ctx, e_sat_i64x2, - is_signed); -} - enum integer_extend_type { e_ext_i8x16, e_ext_i16x8, @@ -740,4 +735,4 @@ aot_compile_simd_i64x2_extmul_i32x4(AOTCompContext *comp_ctx, { return simd_integer_extmul(comp_ctx, func_ctx, lower_half, is_signed, e_i64x2_extmul_i32x4); -} \ No newline at end of file +} diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_conversions.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_conversions.h similarity index 95% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_conversions.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_conversions.h index 87b8bd684e9..e3a1a3521c5 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_conversions.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_conversions.h @@ -20,10 +20,6 @@ bool aot_compile_simd_i16x8_narrow_i32x4(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx, bool is_signed); -bool -aot_compile_simd_i32x4_narrow_i64x2(AOTCompContext *comp_ctx, - AOTFuncContext *func_ctx, bool is_signed); - bool aot_compile_simd_i16x8_extend_i8x16(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx, bool is_low, diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_floating_point.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_floating_point.c similarity index 97% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_floating_point.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_floating_point.c index 7fcc1ab655d..536ef5b289d 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_floating_point.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_floating_point.c @@ -129,20 +129,6 @@ aot_compile_simd_f64x2_abs(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx) "llvm.fabs.v2f64"); } -bool -aot_compile_simd_f32x4_round(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx) -{ - return simd_float_intrinsic(comp_ctx, func_ctx, V128_f32x4_TYPE, - "llvm.round.v4f32"); -} - -bool -aot_compile_simd_f64x2_round(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx) -{ - return simd_float_intrinsic(comp_ctx, func_ctx, V128_f64x2_TYPE, - "llvm.round.v2f64"); -} - bool aot_compile_simd_f32x4_sqrt(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx) { diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_floating_point.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_floating_point.h similarity index 92% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_floating_point.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_floating_point.h index 213b4391f84..39e37c872e8 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_floating_point.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_floating_point.h @@ -32,14 +32,6 @@ aot_compile_simd_f32x4_abs(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx); bool aot_compile_simd_f64x2_abs(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx); -bool -aot_compile_simd_f32x4_round(AOTCompContext *comp_ctx, - AOTFuncContext *func_ctx); - -bool -aot_compile_simd_f64x2_round(AOTCompContext *comp_ctx, - AOTFuncContext *func_ctx); - bool aot_compile_simd_f32x4_sqrt(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx); diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_int_arith.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_int_arith.c similarity index 97% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_int_arith.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_int_arith.c index 1d0e6967b6c..6a1902d1fd8 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_int_arith.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_int_arith.c @@ -243,7 +243,6 @@ aot_compile_simd_i64x2_abs(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx) enum integer_avgr_u { e_avgr_u_i8x16, e_avgr_u_i16x8, - e_avgr_u_i32x4, }; /* TODO: try int_x86_mmx_pavg_b and int_x86_mmx_pavg_w */ @@ -257,9 +256,8 @@ simd_v128_avg(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx, LLVMTypeRef vector_type[] = { V128_i8x16_TYPE, V128_i16x8_TYPE, - V128_i32x4_TYPE, }; - unsigned lanes[] = { 16, 8, 4 }; + unsigned lanes[] = { 16, 8 }; if (!(rhs = simd_pop_v128_and_bitcast(comp_ctx, func_ctx, vector_type[itype], "rhs")) @@ -325,13 +323,6 @@ aot_compile_simd_i16x8_avgr_u(AOTCompContext *comp_ctx, return simd_v128_avg(comp_ctx, func_ctx, e_avgr_u_i16x8); } -bool -aot_compile_simd_i32x4_avgr_u(AOTCompContext *comp_ctx, - AOTFuncContext *func_ctx) -{ - return simd_v128_avg(comp_ctx, func_ctx, e_avgr_u_i32x4); -} - bool aot_compile_simd_i32x4_dot_i16x8(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx) diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_int_arith.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_int_arith.h similarity index 95% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_int_arith.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_int_arith.h index a7a21170aec..49827d51d05 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_int_arith.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_int_arith.h @@ -76,10 +76,6 @@ bool aot_compile_simd_i16x8_avgr_u(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx); -bool -aot_compile_simd_i32x4_avgr_u(AOTCompContext *comp_ctx, - AOTFuncContext *func_ctx); - bool aot_compile_simd_i32x4_dot_i16x8(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx); diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_load_store.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_load_store.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_load_store.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_load_store.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_load_store.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_load_store.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_load_store.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_load_store.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_sat_int_arith.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_sat_int_arith.c similarity index 80% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_sat_int_arith.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_sat_int_arith.c index 1de4520a706..ea250b7e085 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_sat_int_arith.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_sat_int_arith.c @@ -64,18 +64,3 @@ aot_compile_simd_i16x8_saturate(AOTCompContext *comp_ctx, is_signed ? intrinsics[arith_op][0] : intrinsics[arith_op][1]); } - -bool -aot_compile_simd_i32x4_saturate(AOTCompContext *comp_ctx, - AOTFuncContext *func_ctx, - V128Arithmetic arith_op, bool is_signed) -{ - char *intrinsics[][2] = { - { "llvm.sadd.sat.v4i32", "llvm.uadd.sat.v4i32" }, - { "llvm.ssub.sat.v4i32", "llvm.usub.sat.v4i32" }, - }; - - return simd_sat_int_arith(comp_ctx, func_ctx, V128_i16x8_TYPE, - is_signed ? intrinsics[arith_op][0] - : intrinsics[arith_op][1]); -} diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_sat_int_arith.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_sat_int_arith.h similarity index 79% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_sat_int_arith.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_sat_int_arith.h index e30acaaf44f..67c602fc55e 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/compilation/simd/simd_sat_int_arith.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/compilation/simd/simd_sat_int_arith.h @@ -22,10 +22,6 @@ aot_compile_simd_i16x8_saturate(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx, V128Arithmetic arith_op, bool is_signed); -bool -aot_compile_simd_i32x4_saturate(AOTCompContext *comp_ctx, - AOTFuncContext *func_ctx, - V128Arithmetic arith_op, bool is_signed); #ifdef __cplusplus } /* end of extern "C" */ #endif diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/doc/classic_interpreter.MD b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/doc/classic_interpreter.MD similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/doc/classic_interpreter.MD rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/doc/classic_interpreter.MD diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/doc/images/export_function.excalidraw b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/doc/images/export_function.excalidraw similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/doc/images/export_function.excalidraw rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/doc/images/export_function.excalidraw diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/doc/images/stack_format_ci.excalidraw b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/doc/images/stack_format_ci.excalidraw similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/doc/images/stack_format_ci.excalidraw rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/doc/images/stack_format_ci.excalidraw diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/doc/images/stack_format_ci.svg b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/doc/images/stack_format_ci.svg similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/doc/images/stack_format_ci.svg rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/doc/images/stack_format_ci.svg diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/doc/images/wasm_exports.svg b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/doc/images/wasm_exports.svg similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/doc/images/wasm_exports.svg rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/doc/images/wasm_exports.svg diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/doc/images/wasm_function.excalidraw b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/doc/images/wasm_function.excalidraw similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/doc/images/wasm_function.excalidraw rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/doc/images/wasm_function.excalidraw diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/doc/images/wasm_function.svg b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/doc/images/wasm_function.svg similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/doc/images/wasm_function.svg rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/doc/images/wasm_function.svg diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/doc/images/wasm_globals.excalidraw b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/doc/images/wasm_globals.excalidraw similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/doc/images/wasm_globals.excalidraw rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/doc/images/wasm_globals.excalidraw diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/doc/images/wasm_globals.svg b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/doc/images/wasm_globals.svg similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/doc/images/wasm_globals.svg rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/doc/images/wasm_globals.svg diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/doc/wasm_exports.MD b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/doc/wasm_exports.MD similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/doc/wasm_exports.MD rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/doc/wasm_exports.MD diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/doc/wasm_function.MD b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/doc/wasm_function.MD similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/doc/wasm_function.MD rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/doc/wasm_function.MD diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/doc/wasm_globals.MD b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/doc/wasm_globals.MD similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/doc/wasm_globals.MD rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/doc/wasm_globals.MD diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/asmjit_sgx_patch.diff b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/asmjit_sgx_patch.diff similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/asmjit_sgx_patch.diff rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/asmjit_sgx_patch.diff diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/cg/LICENSE_ASMJIT b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/cg/LICENSE_ASMJIT similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/cg/LICENSE_ASMJIT rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/cg/LICENSE_ASMJIT diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/cg/LICENSE_ZYDIS b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/cg/LICENSE_ZYDIS similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/cg/LICENSE_ZYDIS rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/cg/LICENSE_ZYDIS diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/cg/x86-64/jit_codegen_x86_64.cpp b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/cg/x86-64/jit_codegen_x86_64.cpp similarity index 99% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/cg/x86-64/jit_codegen_x86_64.cpp rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/cg/x86-64/jit_codegen_x86_64.cpp index e28acf98a62..020f4f35f43 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/cg/x86-64/jit_codegen_x86_64.cpp +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/cg/x86-64/jit_codegen_x86_64.cpp @@ -4379,13 +4379,18 @@ cmp_r_r_to_r_i32(x86::Assembler &a, int32 reg_no_dst, int32 reg_no1_src, * @return true if success, false otherwise */ static bool -cmp_imm_imm_to_r_i64(x86::Assembler &a, int32 reg_no_dst, int32 data1_src, - int32 data2_src) +cmp_imm_imm_to_r_i64(x86::Assembler &a, int32 reg_no_dst, int64 data1_src, + int64 data2_src) { - Imm imm(data1_src); - a.mov(regs_i64[REG_I64_FREE_IDX], imm); - imm.setValue(data2_src); - a.cmp(regs_i64[REG_I64_FREE_IDX], imm); + /* imm -> m64 */ + const JitHardRegInfo *hreg_info = jit_codegen_get_hreg_info(); + x86::Mem mem = x86::qword_ptr(regs_i64[hreg_info->exec_env_hreg_index], + offsetof(WASMExecEnv, jit_cache)); + Imm imm(data2_src); + mov_imm_to_m(a, mem, imm, 8); + + a.mov(regs_i64[REG_I64_FREE_IDX], data1_src); + a.cmp(regs_i64[REG_I64_FREE_IDX], mem); (void)reg_no_dst; return true; } @@ -7506,7 +7511,7 @@ at_rmw_xor_r_base_r_offset_r(x86::Assembler &a, uint32 bytes_dst, CHECK_KIND(r3, JIT_REG_KIND_I64); \ } \ /* r0: read/return value r2: memory base addr can't be const */ \ - /* already check it's not const in LOAD_4ARGS(); */ \ + /* already check it's not const in LOAD_4ARGS() */ \ reg_no_dst = jit_reg_no(r0); \ CHECK_REG_NO(reg_no_dst, jit_reg_kind(r0)); \ /* mem_data base address has to be non-const */ \ @@ -9288,8 +9293,8 @@ jit_codegen_init() imm.setValue(INT32_MAX); a.jne(imm); - char *stream = (char *)a.code()->sectionById(0)->buffer().data() - + a.code()->sectionById(0)->buffer().size(); + char *stream_old = (char *)a.code()->sectionById(0)->buffer().data() + + a.code()->sectionById(0)->buffer().size(); /* If yes, call jit_set_exception_with_id to throw exception, and then set eax to JIT_INTERP_ACTION_THROWN, and jump to @@ -9314,7 +9319,7 @@ jit_codegen_init() /* Patch the offset of jne instruction */ char *stream_new = (char *)a.code()->sectionById(0)->buffer().data() + a.code()->sectionById(0)->buffer().size(); - *(int32 *)(stream - 4) = (int32)(stream_new - stream); + *(int32 *)(stream_old - 4) = (int32)(stream_new - stream_old); } /* Load compiled func ptr and call it */ @@ -9414,7 +9419,7 @@ static uint8 hreg_info_F64[3][16] = { 1, 1, 1, 1, 1, 1, 1, 0 }, /* caller_saved_jitted */ }; -static const JitHardRegInfo hreg_info = { +static const JitHardRegInfo g_hreg_info = { { { 0, NULL, NULL, NULL }, /* VOID */ @@ -9454,7 +9459,7 @@ static const JitHardRegInfo hreg_info = { const JitHardRegInfo * jit_codegen_get_hreg_info() { - return &hreg_info; + return &g_hreg_info; } static const char *reg_names_i32[] = { diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_compare.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_compare.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_compare.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_compare.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_compare.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_compare.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_compare.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_compare.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_const.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_const.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_const.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_const.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_const.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_const.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_const.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_const.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_control.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_control.c similarity index 99% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_control.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_control.c index 5438bc62cfe..fc6b9737e5d 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_control.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_control.c @@ -396,9 +396,8 @@ handle_func_return(JitCompContext *cc, JitBlock *block) #endif #if WASM_ENABLE_PERF_PROFILING != 0 - /* time_end = os_time_get_boot_microsecond() */ - if (!jit_emit_callnative(cc, os_time_get_boot_microsecond, time_end, NULL, - 0)) { + /* time_end = os_time_get_boot_us() */ + if (!jit_emit_callnative(cc, os_time_get_boot_us, time_end, NULL, 0)) { return false; } /* time_start = cur_frame->time_started */ @@ -1102,7 +1101,7 @@ jit_compile_op_br_if(JitCompContext *cc, uint32 br_depth, } } - /* Only opy parameters or results when their count > 0 and + /* Only copy parameters or results when their count > 0 and the src/dst addr are different */ copy_arities = check_copy_arities(block_dst, jit_frame); diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_control.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_control.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_control.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_control.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_conversion.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_conversion.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_conversion.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_conversion.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_conversion.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_conversion.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_conversion.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_conversion.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_exception.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_exception.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_exception.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_exception.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_exception.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_exception.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_exception.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_exception.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_function.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_function.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_function.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_function.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_function.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_function.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_function.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_function.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_memory.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_memory.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_memory.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_memory.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_memory.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_memory.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_memory.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_memory.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_numberic.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_numberic.c similarity index 99% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_numberic.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_numberic.c index 6a1e93edeee..00f608f84d1 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_numberic.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_numberic.c @@ -1066,13 +1066,15 @@ DEF_UNI_INT_CONST_OPS(shru) static int32 do_i32_const_shl(int32 lhs, int32 rhs) { + rhs &= 31; return (int32)((uint32)lhs << (uint32)rhs); } static int64 do_i64_const_shl(int64 lhs, int64 rhs) { - return (int32)((uint64)lhs << (uint64)rhs); + rhs &= 63LL; + return (uint64)lhs << (uint64)rhs; } DEF_BI_INT_CONST_OPS(shrs, >>) @@ -1080,12 +1082,14 @@ DEF_BI_INT_CONST_OPS(shrs, >>) static int32 do_i32_const_shru(int32 lhs, int32 rhs) { + rhs &= 31; return (uint32)lhs >> rhs; } static int64 do_i64_const_shru(int64 lhs, int64 rhs) { + rhs &= 63LL; return (uint64)lhs >> rhs; } diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_numberic.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_numberic.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_numberic.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_numberic.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_parametric.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_parametric.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_parametric.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_parametric.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_parametric.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_parametric.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_parametric.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_parametric.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_table.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_table.c similarity index 94% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_table.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_table.c index b8ed6a1d502..26bc35394b9 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_table.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_table.c @@ -88,17 +88,21 @@ jit_compile_op_table_set(JitCompContext *cc, uint32 tbl_idx) } static int -wasm_init_table(WASMModuleInstance *inst, uint32 tbl_idx, uint32 elem_idx, +wasm_init_table(WASMModuleInstance *inst, uint32 tbl_idx, uint32 seg_idx, uint32 dst_offset, uint32 len, uint32 src_offset) { WASMTableInstance *tbl; uint32 tbl_sz; - WASMTableSeg *elem; - uint32 elem_len; + WASMTableSeg *tbl_seg = inst->module->table_segments + seg_idx; + uint32 *tbl_seg_elems = NULL, tbl_seg_len = 0; - elem = inst->module->table_segments + elem_idx; - elem_len = elem->function_count; - if (offset_len_out_of_bounds(src_offset, len, elem_len)) + if (!bh_bitmap_get_bit(inst->e->common.elem_dropped, seg_idx)) { + /* table segment isn't dropped */ + tbl_seg_elems = tbl_seg->func_indexes; + tbl_seg_len = tbl_seg->function_count; + } + + if (offset_len_out_of_bounds(src_offset, len, tbl_seg_len)) goto out_of_bounds; tbl = inst->tables[tbl_idx]; @@ -109,14 +113,10 @@ wasm_init_table(WASMModuleInstance *inst, uint32 tbl_idx, uint32 elem_idx, if (!len) return 0; - if (bh_bitmap_get_bit(inst->e->common.elem_dropped, elem_idx)) - goto out_of_bounds; - bh_memcpy_s((uint8 *)tbl + offsetof(WASMTableInstance, elems) + dst_offset * sizeof(uint32), (uint32)((tbl_sz - dst_offset) * sizeof(uint32)), - elem->func_indexes + src_offset, - (uint32)(len * sizeof(uint32))); + tbl_seg_elems + src_offset, (uint32)(len * sizeof(uint32))); return 0; out_of_bounds: diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_table.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_table.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_table.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_table.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_variable.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_variable.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_variable.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_variable.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_variable.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_variable.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/fe/jit_emit_variable.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/fe/jit_emit_variable.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/iwasm_fast_jit.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/iwasm_fast_jit.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/iwasm_fast_jit.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/iwasm_fast_jit.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/jit_codecache.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/jit_codecache.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/jit_codecache.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/jit_codecache.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/jit_codecache.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/jit_codecache.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/jit_codecache.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/jit_codecache.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/jit_codegen.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/jit_codegen.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/jit_codegen.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/jit_codegen.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/jit_codegen.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/jit_codegen.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/jit_codegen.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/jit_codegen.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/jit_compiler.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/jit_compiler.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/jit_compiler.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/jit_compiler.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/jit_compiler.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/jit_compiler.h similarity index 99% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/jit_compiler.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/jit_compiler.h index dee2631d14a..9a49cffdd1a 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/jit_compiler.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/jit_compiler.h @@ -70,7 +70,6 @@ typedef struct JitInterpSwitchInfo { typedef struct JitCompOptions { uint32 code_cache_size; uint32 opt_level; - bool linux_perf_support; } JitCompOptions; bool diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/jit_dump.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/jit_dump.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/jit_dump.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/jit_dump.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/jit_dump.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/jit_dump.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/jit_dump.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/jit_dump.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/jit_frontend.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/jit_frontend.c similarity index 99% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/jit_frontend.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/jit_frontend.c index c9c22e0adf3..e9d7a3ff348 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/jit_frontend.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/jit_frontend.c @@ -1157,11 +1157,10 @@ init_func_translation(JitCompContext *cc) func_inst = jit_cc_new_reg_ptr(cc); #if WASM_ENABLE_PERF_PROFILING != 0 time_started = jit_cc_new_reg_I64(cc); - /* Call os_time_get_boot_microsecond() to get time_started firstly + /* Call os_time_get_boot_us() to get time_started firstly as there is stack frame switching below, calling native in them may cause register spilling work inproperly */ - if (!jit_emit_callnative(cc, os_time_get_boot_microsecond, time_started, - NULL, 0)) { + if (!jit_emit_callnative(cc, os_time_get_boot_us, time_started, NULL, 0)) { return NULL; } #endif @@ -2258,7 +2257,9 @@ jit_compile_func(JitCompContext *cc) uint32 opcode1; read_leb_uint32(frame_ip, frame_ip_end, opcode1); - opcode = (uint32)opcode1; + /* opcode1 was checked in loader and is no larger than + UINT8_MAX */ + opcode = (uint8)opcode1; switch (opcode) { case WASM_OP_I32_TRUNC_SAT_S_F32: @@ -2397,10 +2398,13 @@ jit_compile_func(JitCompContext *cc) case WASM_OP_ATOMIC_PREFIX: { uint8 bin_op, op_type; + uint32 opcode1; + + read_leb_uint32(frame_ip, frame_ip_end, opcode1); + /* opcode1 was checked in loader and is no larger than + UINT8_MAX */ + opcode = (uint8)opcode1; - if (frame_ip < frame_ip_end) { - opcode = *frame_ip++; - } if (opcode != WASM_OP_ATOMIC_FENCE) { read_leb_uint32(frame_ip, frame_ip_end, align); read_leb_uint32(frame_ip, frame_ip_end, offset); diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/jit_frontend.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/jit_frontend.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/jit_frontend.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/jit_frontend.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/jit_ir.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/jit_ir.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/jit_ir.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/jit_ir.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/jit_ir.def b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/jit_ir.def similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/jit_ir.def rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/jit_ir.def diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/jit_ir.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/jit_ir.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/jit_ir.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/jit_ir.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/jit_regalloc.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/jit_regalloc.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/jit_regalloc.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/jit_regalloc.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/jit_utils.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/jit_utils.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/fast-jit/jit_utils.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/fast-jit/jit_utils.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/include/aot_export.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/include/aot_export.h similarity index 98% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/include/aot_export.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/include/aot_export.h index f2184033a54..e1837e64f85 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/include/aot_export.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/include/aot_export.h @@ -58,6 +58,7 @@ typedef struct AOTCompOption { bool disable_llvm_lto; bool enable_llvm_pgo; bool enable_stack_estimation; + bool quick_invoke_c_api_import; char *use_prof_file; uint32_t opt_level; uint32_t size_level; @@ -65,7 +66,6 @@ typedef struct AOTCompOption { uint32_t bounds_checks; uint32_t stack_bounds_checks; uint32_t segue_flags; - bool linux_perf_support; char **custom_sections; uint32_t custom_sections_count; const char *stack_usage_file; diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/include/lib_export.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/include/lib_export.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/include/lib_export.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/include/lib_export.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/include/wasm_c_api.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/include/wasm_c_api.h similarity index 95% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/include/wasm_c_api.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/include/wasm_c_api.h index eaad941e45f..304b3a4ee85 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/include/wasm_c_api.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/include/wasm_c_api.h @@ -22,12 +22,12 @@ #endif #if defined(__GNUC__) || defined(__clang__) -#define DEPRECATED __attribute__((deprecated)) +#define WASM_API_DEPRECATED __attribute__((deprecated)) #elif defined(_MSC_VER) -#define DEPRECATED __declspec(deprecated) +#define WASM_API_DEPRECATED __declspec(deprecated) #else #pragma message("WARNING: You need to implement DEPRECATED for this compiler") -#define DEPRECATED +#define WASM_API_DEPRECATED #endif #ifdef __cplusplus @@ -181,7 +181,8 @@ typedef union MemAllocOption { struct wasm_config_t { mem_alloc_type_t mem_alloc_type; MemAllocOption mem_alloc_option; - bool linux_perf_support; + uint32_t segue_flags; + bool enable_linux_perf; /*TODO: wasi args*/ }; @@ -189,7 +190,7 @@ struct wasm_config_t { * by default: * - mem_alloc_type is Alloc_With_System_Allocator * - mem_alloc_option is all 0 - * - linux_perf_support is false + * - enable_linux_perf is false */ WASM_API_EXTERN own wasm_config_t* wasm_config_new(void); @@ -200,6 +201,17 @@ wasm_config_set_mem_alloc_opt(wasm_config_t *, mem_alloc_type_t, MemAllocOption WASM_API_EXTERN own wasm_config_t* wasm_config_set_linux_perf_opt(wasm_config_t *, bool); +/** + * Enable using GS register as the base address of linear memory in linux x86_64, + * which may speedup the linear memory access for LLVM AOT/JIT: + * bit0 to bit4 denotes i32.load, i64.load, f32.load, f64.load, v128.load + * bit8 to bit12 denotes i32.store, i64.store, f32.store, f64.store, v128.store + * For example, 0x01 enables i32.load, 0x0100 enables i32.store. + * To enable all load/store operations, use 0x1F1F + */ +WASM_API_EXTERN wasm_config_t* +wasm_config_set_segue_flags(wasm_config_t *config, uint32_t segue_flags); + // Engine WASM_DECLARE_OWN(engine) @@ -219,7 +231,7 @@ WASM_DECLARE_OWN(engine) */ WASM_API_EXTERN own wasm_engine_t* wasm_engine_new(void); WASM_API_EXTERN own wasm_engine_t* wasm_engine_new_with_config(wasm_config_t*); -DEPRECATED WASM_API_EXTERN own wasm_engine_t * +WASM_API_DEPRECATED WASM_API_EXTERN own wasm_engine_t * wasm_engine_new_with_args(mem_alloc_type_t type, const MemAllocOption *opts); // Store @@ -405,6 +417,7 @@ struct wasm_ref_t; typedef struct wasm_val_t { wasm_valkind_t kind; + uint8_t __paddings[7]; union { int32_t i32; int64_t i64; @@ -815,12 +828,12 @@ static inline void* wasm_val_ptr(const wasm_val_t* val) { #endif } -#define WASM_I32_VAL(i) {.kind = WASM_I32, .of = {.i32 = i}} -#define WASM_I64_VAL(i) {.kind = WASM_I64, .of = {.i64 = i}} -#define WASM_F32_VAL(z) {.kind = WASM_F32, .of = {.f32 = z}} -#define WASM_F64_VAL(z) {.kind = WASM_F64, .of = {.f64 = z}} -#define WASM_REF_VAL(r) {.kind = WASM_ANYREF, .of = {.ref = r}} -#define WASM_INIT_VAL {.kind = WASM_ANYREF, .of = {.ref = NULL}} +#define WASM_I32_VAL(i) {.kind = WASM_I32, .__paddings = {0}, .of = {.i32 = i}} +#define WASM_I64_VAL(i) {.kind = WASM_I64, .__paddings = {0}, .of = {.i64 = i}} +#define WASM_F32_VAL(z) {.kind = WASM_F32, .__paddings = {0}, .of = {.f32 = z}} +#define WASM_F64_VAL(z) {.kind = WASM_F64, .__paddings = {0}, .of = {.f64 = z}} +#define WASM_REF_VAL(r) {.kind = WASM_ANYREF, .__paddings = {0}, .of = {.ref = r}} +#define WASM_INIT_VAL {.kind = WASM_ANYREF, .__paddings = {0}, .of = {.ref = NULL}} #define KILOBYTE(n) ((n) * 1024) diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/include/wasm_export.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/include/wasm_export.h similarity index 97% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/include/wasm_export.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/include/wasm_export.h index d8e761e83e5..dda058d084a 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/include/wasm_export.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/include/wasm_export.h @@ -172,12 +172,12 @@ typedef struct RuntimeInitArgs { /** * If enabled * - llvm-jit will output a jitdump file for `perf inject` - * - aot. TBD + * - aot will output a perf-${pid}.map for `perf record` * - fast-jit. TBD * - multi-tier-jit. TBD * - interpreter. TBD */ - bool linux_perf_support; + bool enable_linux_perf; } RuntimeInitArgs; #ifndef WASM_VALKIND_T_DEFINED @@ -199,6 +199,7 @@ struct wasm_ref_t; typedef struct wasm_val_t { wasm_valkind_t kind; + uint8_t __paddings[7]; union { /* also represent a function index */ int32_t i32; @@ -212,6 +213,14 @@ typedef struct wasm_val_t { } wasm_val_t; #endif +typedef enum { + WASM_LOG_LEVEL_FATAL = 0, + WASM_LOG_LEVEL_ERROR = 1, + WASM_LOG_LEVEL_WARNING = 2, + WASM_LOG_LEVEL_DEBUG = 3, + WASM_LOG_LEVEL_VERBOSE = 4 +} log_level_t; + /** * Initialize the WASM runtime environment, and also initialize * the memory allocator with system allocator, which calls os_malloc @@ -234,6 +243,14 @@ wasm_runtime_init(void); WASM_RUNTIME_API_EXTERN bool wasm_runtime_full_init(RuntimeInitArgs *init_args); +/** + * Set the log level. To be called after the runtime is initialized. + * + * @param level the log level to set + */ +WASM_RUNTIME_API_EXTERN void +wasm_runtime_set_log_level(log_level_t level); + /** * Query whether a certain running mode is supported for the runtime * @@ -924,9 +941,6 @@ wasm_runtime_clear_exception(wasm_module_inst_t module_inst); * - Another thread has a copy of `wasm_module_inst_t` of * the module instance and wants to terminate it asynchronously. * - * This function is provided only when WAMR is built with threading enabled. - * (`WASM_ENABLE_THREAD_MGR=1`) - * * @param module_inst the WASM module instance */ WASM_RUNTIME_API_EXTERN void @@ -1260,6 +1274,26 @@ wasm_runtime_dump_mem_consumption(wasm_exec_env_t exec_env); WASM_RUNTIME_API_EXTERN void wasm_runtime_dump_perf_profiling(wasm_module_inst_t module_inst); +/** + * Return total wasm functions' execution time in ms + * + * @param module_inst the WASM module instance to profile + */ +WASM_RUNTIME_API_EXTERN double +wasm_runtime_sum_wasm_exec_time(wasm_module_inst_t module_inst); + +/** + * Return execution time in ms of a given wasm funciton with +* func_name. If the function is not found, return 0. + * + * @param module_inst the WASM module instance to profile + * @param func_name could be an export name or a name in the + * name section + */ +WASM_RUNTIME_API_EXTERN double +wasm_runtime_get_wasm_func_exec_time(wasm_module_inst_t inst, + const char *func_name); + /* wasm thread callback function type */ typedef void *(*wasm_thread_callback_t)(wasm_exec_env_t, void *); /* wasm thread type */ @@ -1573,6 +1607,9 @@ wasm_runtime_get_context(wasm_module_inst_t inst, void *key); * host functions. It wraps an operation which possibly blocks for long * to prepare for async termination. * + * For simplicity, we recommend to wrap only the very minimum piece of + * the code with this. Ideally, just a single system call. + * * eg. * * if (!wasm_runtime_begin_blocking_op(exec_env)) { diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/interpreter/SConscript b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/interpreter/SConscript similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/interpreter/SConscript rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/interpreter/SConscript diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/interpreter/iwasm_interp.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/interpreter/iwasm_interp.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/interpreter/iwasm_interp.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/interpreter/iwasm_interp.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/interpreter/wasm.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/interpreter/wasm.h similarity index 92% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/interpreter/wasm.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/interpreter/wasm.h index ee537aa63b2..60e1238ad3e 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/interpreter/wasm.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/interpreter/wasm.h @@ -65,6 +65,9 @@ extern "C" { #if WASM_ENABLE_BULK_MEMORY != 0 #define SECTION_TYPE_DATACOUNT 12 #endif +#if WASM_ENABLE_TAGS != 0 +#define SECTION_TYPE_TAG 13 +#endif #define SUB_SECTION_TYPE_MODULE 0 #define SUB_SECTION_TYPE_FUNC 1 @@ -74,20 +77,34 @@ extern "C" { #define IMPORT_KIND_TABLE 1 #define IMPORT_KIND_MEMORY 2 #define IMPORT_KIND_GLOBAL 3 +#if WASM_ENABLE_TAGS != 0 +#define IMPORT_KIND_TAG 4 +#endif #define EXPORT_KIND_FUNC 0 #define EXPORT_KIND_TABLE 1 #define EXPORT_KIND_MEMORY 2 #define EXPORT_KIND_GLOBAL 3 +#if WASM_ENABLE_TAGS != 0 +#define EXPORT_KIND_TAG 4 +#endif #define LABEL_TYPE_BLOCK 0 #define LABEL_TYPE_LOOP 1 #define LABEL_TYPE_IF 2 #define LABEL_TYPE_FUNCTION 3 +#if WASM_ENABLE_EXCE_HANDLING != 0 +#define LABEL_TYPE_TRY 4 +#define LABEL_TYPE_CATCH 5 +#define LABEL_TYPE_CATCH_ALL 6 +#endif typedef struct WASMModule WASMModule; typedef struct WASMFunction WASMFunction; typedef struct WASMGlobal WASMGlobal; +#if WASM_ENABLE_TAGS != 0 +typedef struct WASMTag WASMTag; +#endif typedef union V128 { int8 i8x16[16]; @@ -129,6 +146,10 @@ typedef struct WASMType { /* Code block to call llvm jit functions of this kind of function type from fast jit jitted code */ void *call_to_llvm_jit_from_fast_jit; +#endif +#if WASM_ENABLE_QUICK_AOT_ENTRY != 0 + /* Quick AOT/JIT entry of this func type */ + void *quick_aot_entry; #endif /* types of params and results */ uint8 types[1]; @@ -197,6 +218,24 @@ typedef struct WASMFunctionImport { bool call_conv_wasm_c_api; } WASMFunctionImport; +#if WASM_ENABLE_TAGS != 0 +typedef struct WASMTagImport { + char *module_name; + char *field_name; + uint8 attribute; /* the type of the tag (numerical) */ + uint32 type; /* the type of the catch function (numerical)*/ + WASMType *tag_type; + void *tag_ptr_linked; + +#if WASM_ENABLE_MULTI_MODULE != 0 + /* imported tag pointer after linked */ + WASMModule *import_module; + WASMTag *import_tag_linked; + uint32 import_tag_index_linked; +#endif +} WASMTagImport; +#endif + typedef struct WASMGlobalImport { char *module_name; char *field_name; @@ -223,6 +262,9 @@ typedef struct WASMImport { WASMFunctionImport function; WASMTableImport table; WASMMemoryImport memory; +#if WASM_ENABLE_TAGS != 0 + WASMTagImport tag; +#endif WASMGlobalImport global; struct { char *module_name; @@ -261,6 +303,10 @@ struct WASMFunction { uint32 const_cell_num; #endif +#if WASM_ENABLE_EXCE_HANDLING != 0 + uint32 exception_handler_count; +#endif + #if WASM_ENABLE_FAST_JIT != 0 || WASM_ENABLE_JIT != 0 \ || WASM_ENABLE_WAMR_COMPILER != 0 /* Whether function has opcode memory.grow */ @@ -290,6 +336,14 @@ struct WASMFunction { #endif }; +#if WASM_ENABLE_TAGS != 0 +struct WASMTag { + uint8 attribute; /* the attribute property of the tag (expected to be 0) */ + uint32 type; /* the type of the tag (expected valid inden in type table) */ + WASMType *tag_type; +}; +#endif + struct WASMGlobal { uint8 type; bool is_mutable; @@ -416,6 +470,9 @@ struct WASMModule { uint32 function_count; uint32 table_count; uint32 memory_count; +#if WASM_ENABLE_TAGS != 0 + uint32 tag_count; +#endif uint32 global_count; uint32 export_count; uint32 table_seg_count; @@ -429,11 +486,17 @@ struct WASMModule { uint32 import_function_count; uint32 import_table_count; uint32 import_memory_count; +#if WASM_ENABLE_TAGS != 0 + uint32 import_tag_count; +#endif uint32 import_global_count; WASMImport *import_functions; WASMImport *import_tables; WASMImport *import_memories; +#if WASM_ENABLE_TAGS != 0 + WASMImport *import_tags; +#endif WASMImport *import_globals; WASMType **types; @@ -441,6 +504,9 @@ struct WASMModule { WASMFunction **functions; WASMTable *tables; WASMMemory *memories; +#if WASM_ENABLE_TAGS != 0 + WASMTag **tags; +#endif WASMGlobal *globals; WASMExport *exports; WASMTableSeg *table_segments; @@ -624,6 +690,11 @@ typedef struct WASMBranchBlock { uint8 *target_addr; uint32 *frame_sp; uint32 cell_num; +#if WASM_ENABLE_EXCE_HANDLING != 0 + /* in exception handling, label_type needs to be stored to lookup exception + * handlers */ + uint8 label_type; +#endif } WASMBranchBlock; /** diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/interpreter/wasm_interp.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/interpreter/wasm_interp.h similarity index 92% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/interpreter/wasm_interp.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/interpreter/wasm_interp.h index d3692ff21b0..2b5a51ea8e7 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/interpreter/wasm_interp.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/interpreter/wasm_interp.h @@ -34,6 +34,14 @@ typedef struct WASMInterpFrame { uint64 time_started; #endif +#if WASM_ENABLE_EXCE_HANDLING != 0 + /* set to true if the callee returns an exception rather than + * result values on the stack + */ + bool exception_raised; + uint32 tag_index; +#endif + #if WASM_ENABLE_FAST_INTERP != 0 /* Return offset of the first return value of current frame, the callee will put return values here continuously */ diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/interpreter/wasm_interp_classic.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/interpreter/wasm_interp_classic.c similarity index 82% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/interpreter/wasm_interp_classic.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/interpreter/wasm_interp_classic.c index e27b16544f2..31dc5930c25 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/interpreter/wasm_interp_classic.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/interpreter/wasm_interp_classic.c @@ -338,10 +338,19 @@ read_leb(const uint8 *buf, uint32 *p_offset, uint32 maxbits, bool sign) frame_sp += 2; \ } while (0) +/* in exception handling, label_type needs to be stored to lookup exception + * handlers */ + +#if WASM_ENABLE_EXCE_HANDLING != 0 +#define SET_LABEL_TYPE(_label_type) frame_csp->label_type = _label_type +#else +#define SET_LABEL_TYPE(_label_type) (void)0 +#endif + #define PUSH_CSP(_label_type, param_cell_num, cell_num, _target_addr) \ do { \ bh_assert(frame_csp < frame->csp_boundary); \ - /* frame_csp->label_type = _label_type; */ \ + SET_LABEL_TYPE(_label_type); \ frame_csp->cell_num = cell_num; \ frame_csp->begin_addr = frame_ip; \ frame_csp->target_addr = _target_addr; \ @@ -392,6 +401,18 @@ read_leb(const uint8 *buf, uint32 *p_offset, uint32 maxbits, bool sign) frame_sp -= n; \ } while (0) +#if WASM_ENABLE_EXCE_HANDLING != 0 +/* unwind the CSP to a given label and optionally modify the labeltype */ +#define UNWIND_CSP(N, T) \ + do { \ + /* unwind to function frame */ \ + frame_csp -= N; \ + /* drop handlers and values pushd in try block */ \ + frame_sp = (frame_csp - 1)->frame_sp; \ + (frame_csp - 1)->label_type = T ? T : (frame_csp - 1)->label_type; \ + } while (0) +#endif + #define SYNC_ALL_TO_FRAME() \ do { \ frame->sp = frame_sp; \ @@ -707,7 +728,7 @@ trunc_f64_to_int(WASMModuleInstance *module, uint32 *frame_sp, float64 src_min, addr = POP_I32(); \ \ if (opcode == WASM_OP_ATOMIC_RMW_I32_##OP_NAME##8_U) { \ - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 1, maddr); \ + CHECK_MEMORY_OVERFLOW(1); \ CHECK_ATOMIC_MEMORY_ACCESS(); \ \ shared_memory_lock(memory); \ @@ -716,7 +737,7 @@ trunc_f64_to_int(WASMModuleInstance *module, uint32 *frame_sp, float64 src_min, shared_memory_unlock(memory); \ } \ else if (opcode == WASM_OP_ATOMIC_RMW_I32_##OP_NAME##16_U) { \ - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 2, maddr); \ + CHECK_MEMORY_OVERFLOW(2); \ CHECK_ATOMIC_MEMORY_ACCESS(); \ \ shared_memory_lock(memory); \ @@ -725,7 +746,7 @@ trunc_f64_to_int(WASMModuleInstance *module, uint32 *frame_sp, float64 src_min, shared_memory_unlock(memory); \ } \ else { \ - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 4, maddr); \ + CHECK_MEMORY_OVERFLOW(4); \ CHECK_ATOMIC_MEMORY_ACCESS(); \ \ shared_memory_lock(memory); \ @@ -747,7 +768,7 @@ trunc_f64_to_int(WASMModuleInstance *module, uint32 *frame_sp, float64 src_min, addr = POP_I32(); \ \ if (opcode == WASM_OP_ATOMIC_RMW_I64_##OP_NAME##8_U) { \ - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 1, maddr); \ + CHECK_MEMORY_OVERFLOW(1); \ CHECK_ATOMIC_MEMORY_ACCESS(); \ \ shared_memory_lock(memory); \ @@ -756,7 +777,7 @@ trunc_f64_to_int(WASMModuleInstance *module, uint32 *frame_sp, float64 src_min, shared_memory_unlock(memory); \ } \ else if (opcode == WASM_OP_ATOMIC_RMW_I64_##OP_NAME##16_U) { \ - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 2, maddr); \ + CHECK_MEMORY_OVERFLOW(2); \ CHECK_ATOMIC_MEMORY_ACCESS(); \ \ shared_memory_lock(memory); \ @@ -765,7 +786,7 @@ trunc_f64_to_int(WASMModuleInstance *module, uint32 *frame_sp, float64 src_min, shared_memory_unlock(memory); \ } \ else if (opcode == WASM_OP_ATOMIC_RMW_I64_##OP_NAME##32_U) { \ - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 4, maddr); \ + CHECK_MEMORY_OVERFLOW(4); \ CHECK_ATOMIC_MEMORY_ACCESS(); \ \ shared_memory_lock(memory); \ @@ -775,7 +796,7 @@ trunc_f64_to_int(WASMModuleInstance *module, uint32 *frame_sp, float64 src_min, } \ else { \ uint64 op_result; \ - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 8, maddr); \ + CHECK_MEMORY_OVERFLOW(8); \ CHECK_ATOMIC_MEMORY_ACCESS(); \ \ shared_memory_lock(memory); \ @@ -850,7 +871,7 @@ ALLOC_FRAME(WASMExecEnv *exec_env, uint32 size, WASMInterpFrame *prev_frame) if (frame) { frame->prev_frame = prev_frame; #if WASM_ENABLE_PERF_PROFILING != 0 - frame->time_started = os_time_get_boot_microsecond(); + frame->time_started = os_time_thread_cputime_us(); #endif } else { @@ -866,9 +887,13 @@ FREE_FRAME(WASMExecEnv *exec_env, WASMInterpFrame *frame) { #if WASM_ENABLE_PERF_PROFILING != 0 if (frame->function) { - frame->function->total_exec_time += - os_time_get_boot_microsecond() - frame->time_started; + WASMInterpFrame *prev_frame = frame->prev_frame; + uint64 elapsed = os_time_thread_cputime_us() - frame->time_started; + frame->function->total_exec_time += elapsed; frame->function->total_exec_cnt++; + + if (prev_frame && prev_frame->function) + prev_frame->function->children_exec_time += elapsed; } #endif wasm_exec_env_free_wasm_frame(exec_env, frame); @@ -1184,6 +1209,9 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, uint32 local_idx, local_offset, global_idx; uint8 local_type, *global_addr; uint32 cache_index, type_index, param_cell_num, cell_num; +#if WASM_ENABLE_EXCE_HANDLING != 0 + int32_t exception_tag_index; +#endif uint8 value_type; #if !defined(OS_ENABLE_HW_BOUND_CHECK) \ || WASM_CPU_SUPPORTS_UNALIGNED_ADDR_ACCESS == 0 @@ -1194,6 +1222,9 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, bool disable_bounds_checks = false; #endif #endif +#if WASM_ENABLE_TAIL_CALL != 0 + bool is_return_call = false; +#endif #if WASM_ENABLE_DEBUG_INTERP != 0 uint8 *frame_ip_orig = NULL; @@ -1226,6 +1257,390 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, HANDLE_OP(WASM_OP_NOP) { HANDLE_OP_END(); } +#if WASM_ENABLE_EXCE_HANDLING != 0 + + HANDLE_OP(WASM_OP_RETHROW) + { + int32_t relative_depth; + read_leb_int32(frame_ip, frame_ip_end, relative_depth); + + /* No frame found with exception handler; validation should + * catch it */ + bh_assert(frame_csp >= frame->csp_bottom + relative_depth); + + /* go up the frame stack */ + WASMBranchBlock *tgtframe = (frame_csp - 1) - relative_depth; + + bh_assert(tgtframe->label_type == LABEL_TYPE_CATCH + || tgtframe->label_type == LABEL_TYPE_CATCH_ALL); + + /* tgtframe points to the frame containing a thrown + * exception */ + + uint32 *tgtframe_sp = tgtframe->frame_sp; + + /* frame sp of tgtframe points to catched exception */ + exception_tag_index = *((uint32 *)tgtframe_sp); + tgtframe_sp++; + + /* get tag type */ + uint8 tag_type_index = + module->module->tags[exception_tag_index]->type; + uint32 cell_num_to_copy = + wasm_types[tag_type_index]->param_cell_num; + + /* move exception parameters (if there are any) onto top + * of stack */ + if (cell_num_to_copy > 0) { + word_copy(frame_sp, tgtframe_sp - cell_num_to_copy, + cell_num_to_copy); + } + + frame_sp += cell_num_to_copy; + goto find_a_catch_handler; + } + + HANDLE_OP(WASM_OP_THROW) + { + read_leb_int32(frame_ip, frame_ip_end, exception_tag_index); + + /* landing pad for the rethrow ? */ + find_a_catch_handler: + { + WASMType *tag_type = NULL; + uint32 cell_num_to_copy = 0; + if (IS_INVALID_TAGINDEX(exception_tag_index)) { + /* + * invalid exception index, + * generated if a submodule throws an exception + * that has not been imported here + * + * This should result in a branch to the CATCH_ALL block, + * if there is one + */ + tag_type = NULL; + cell_num_to_copy = 0; + } + else { + if (module->e->tags[exception_tag_index].is_import_tag) { + tag_type = module->e->tags[exception_tag_index] + .u.tag_import->tag_type; + } + else { + tag_type = module->e->tags[exception_tag_index] + .u.tag->tag_type; + } + cell_num_to_copy = tag_type->param_cell_num; + } + + /* browse through frame stack */ + uint32 relative_depth = 0; + do { + POP_CSP_CHECK_OVERFLOW(relative_depth - 1); + WASMBranchBlock *tgtframe = frame_csp - relative_depth - 1; + + switch (tgtframe->label_type) { + case LABEL_TYPE_BLOCK: + case LABEL_TYPE_IF: + case LABEL_TYPE_LOOP: + case LABEL_TYPE_CATCH: + case LABEL_TYPE_CATCH_ALL: + /* + * skip that blocks in search + * BLOCK, IF and LOOP do not contain handlers and + * cannot catch exceptions. + * blocks marked as CATCH or + * CATCH_ALL did already caugth an exception and can + * only be a target for RETHROW, but cannot catch an + * exception again + */ + break; + case LABEL_TYPE_TRY: + { + uint32 handler_number = 0; + uint8 **handlers = (uint8 **)tgtframe->frame_sp; + uint8 *handler = NULL; + while ((handler = handlers[handler_number]) != 0) { + uint8 handler_opcode = *handler; + uint8 *target_addr = + handler + + 1; /* first instruction or leb-immediate + behind the handler opcode */ + switch (handler_opcode) { + case WASM_OP_CATCH: + { + int32 lookup_index = 0; + /* read the tag_index and advance + * target_addr to the first instruction + * in the block */ + read_leb_int32(target_addr, 0, + lookup_index); + + if (exception_tag_index + == lookup_index) { + /* set ip */ + frame_ip = target_addr; + /* save frame_sp (points to + * exception values) */ + uint32 *frame_sp_old = frame_sp; + + UNWIND_CSP(relative_depth, + LABEL_TYPE_CATCH); + + /* push exception_tag_index and + * exception values for rethrow */ + PUSH_I32(exception_tag_index); + if (cell_num_to_copy > 0) { + word_copy( + frame_sp, + frame_sp_old + - cell_num_to_copy, + cell_num_to_copy); + frame_sp += cell_num_to_copy; + /* push exception values for + * catch + */ + word_copy( + frame_sp, + frame_sp_old + - cell_num_to_copy, + cell_num_to_copy); + frame_sp += cell_num_to_copy; + } + + /* advance to handler */ + HANDLE_OP_END(); + } + break; + } + case WASM_OP_DELEGATE: + { + int32 lookup_depth = 0; + /* read the depth */ + read_leb_int32(target_addr, 0, + lookup_depth); + + /* save frame_sp (points to exception + * values) */ + uint32 *frame_sp_old = frame_sp; + + UNWIND_CSP(relative_depth, + LABEL_TYPE_CATCH); + + /* leave the block (the delegate is + * technically not inside the frame) */ + frame_csp--; + + /* unwind to delegated frame */ + frame_csp -= lookup_depth; + + /* push exception values for catch */ + if (cell_num_to_copy > 0) { + word_copy(frame_sp, + frame_sp_old + - cell_num_to_copy, + cell_num_to_copy); + frame_sp += cell_num_to_copy; + } + + /* tag_index is already stored in + * exception_tag_index */ + goto find_a_catch_handler; + } + case WASM_OP_CATCH_ALL: + { + /* no immediate */ + /* save frame_sp (points to exception + * values) */ + uint32 *frame_sp_old = frame_sp; + /* set ip */ + frame_ip = target_addr; + + UNWIND_CSP(relative_depth, + LABEL_TYPE_CATCH_ALL); + + /* push exception_tag_index and + * exception values for rethrow */ + PUSH_I32(exception_tag_index); + if (cell_num_to_copy > 0) { + word_copy(frame_sp, + frame_sp_old + - cell_num_to_copy, + cell_num_to_copy); + frame_sp += cell_num_to_copy; + } + /* catch_all has no exception values */ + + /* advance to handler */ + HANDLE_OP_END(); + } + default: + wasm_set_exception( + module, "WASM_OP_THROW found " + "unexpected handler type"); + goto got_exception; + } + handler_number++; + } + /* exception not catched in this frame */ + break; + } + case LABEL_TYPE_FUNCTION: + { + /* save frame_sp (points to exception values) */ + uint32 *frame_sp_old = frame_sp; + + UNWIND_CSP(relative_depth, LABEL_TYPE_FUNCTION); + /* push exception values for catch + * The values are copied to the CALLER FRAME + * (prev_frame->sp) same behvior ad WASM_OP_RETURN + */ + if (cell_num_to_copy > 0) { + word_copy(prev_frame->sp, + frame_sp_old - cell_num_to_copy, + cell_num_to_copy); + prev_frame->sp += cell_num_to_copy; + } + *((int32 *)(prev_frame->sp)) = exception_tag_index; + prev_frame->sp++; + + /* mark frame as raised exception */ + wasm_set_exception(module, + "uncaught wasm exception"); + + /* end of function, treat as WASM_OP_RETURN */ + goto return_func; + } + default: + wasm_set_exception( + module, + "unexpected or invalid label in THROW or " + "RETHROW when searching a catch handler"); + goto got_exception; + } + + relative_depth++; + + } while (1); + } + + /* something went wrong. normally, we should always find the + * func label. if not, stop the interpreter */ + wasm_set_exception( + module, "WASM_OP_THROW hit the bottom of the frame stack"); + goto got_exception; + } + + HANDLE_OP(EXT_OP_TRY) + { + /* read the blocktype */ + read_leb_uint32(frame_ip, frame_ip_end, type_index); + param_cell_num = wasm_types[type_index]->param_cell_num; + cell_num = wasm_types[type_index]->ret_cell_num; + goto handle_op_try; + } + + HANDLE_OP(WASM_OP_TRY) + { + value_type = *frame_ip++; + param_cell_num = 0; + cell_num = wasm_value_type_cell_num(value_type); + + handle_op_try: + + cache_index = ((uintptr_t)frame_ip) + & (uintptr_t)(BLOCK_ADDR_CACHE_SIZE - 1); + cache_items = exec_env->block_addr_cache[cache_index]; + if (cache_items[0].start_addr == frame_ip) { + cache_items[0].start_addr = 0; + } + if (cache_items[1].start_addr == frame_ip) { + cache_items[1].start_addr = 0; + } + + /* start at the first opcode following the try and its blocktype + */ + uint8 *lookup_cursor = frame_ip; + uint8 handler_opcode = WASM_OP_UNREACHABLE; + + /* target_addr filled in when END or DELEGATE is found */ + PUSH_CSP(LABEL_TYPE_TRY, param_cell_num, cell_num, 0); + + /* reset to begin of block */ + lookup_cursor = frame_ip; + do { + /* lookup the next CATCH, CATCH_ALL or END for this TRY */ + if (!wasm_loader_find_block_addr( + exec_env, (BlockAddr *)exec_env->block_addr_cache, + lookup_cursor, (uint8 *)-1, LABEL_TYPE_TRY, + &else_addr, &end_addr)) { + /* something went wrong */ + wasm_set_exception(module, "find block address failed"); + goto got_exception; + } + + /* place cursor for continuation past opcode */ + lookup_cursor = end_addr + 1; + + /* end_addr points to CATCH, CATCH_ALL, DELEGATE or END */ + handler_opcode = *end_addr; + switch (handler_opcode) { + case WASM_OP_CATCH: + skip_leb(lookup_cursor); /* skip tag_index */ + PUSH_I64(end_addr); + break; + case WASM_OP_CATCH_ALL: + PUSH_I64(end_addr); + break; + case WASM_OP_DELEGATE: + skip_leb(lookup_cursor); /* skip depth */ + PUSH_I64(end_addr); + /* patch target_addr */ + (frame_csp - 1)->target_addr = lookup_cursor; + break; + case WASM_OP_END: + PUSH_I64(0); + /* patch target_addr */ + (frame_csp - 1)->target_addr = end_addr; + break; + default: + /* something went wrong */ + wasm_set_exception(module, + "find block address returned an " + "unexpected opcode"); + goto got_exception; + } + /* ... search until the returned address is the END of the + * TRY block */ + } while (handler_opcode != WASM_OP_END + && handler_opcode != WASM_OP_DELEGATE); + /* handler setup on stack complete */ + + HANDLE_OP_END(); + } + HANDLE_OP(WASM_OP_CATCH) + { + /* skip the tag_index */ + skip_leb(frame_ip); + /* leave the frame */ + POP_CSP_N(0); + HANDLE_OP_END(); + } + HANDLE_OP(WASM_OP_CATCH_ALL) + { + /* leave the frame */ + POP_CSP_N(0); + HANDLE_OP_END(); + } + HANDLE_OP(WASM_OP_DELEGATE) + { + /* skip the delegate depth */ + skip_leb(frame_ip); + /* leave the frame like WASM_OP_END */ + POP_CSP(); + HANDLE_OP_END(); + } +#endif HANDLE_OP(EXT_OP_BLOCK) { read_leb_uint32(frame_ip, frame_ip_end, type_index); @@ -2149,7 +2564,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, #if !defined(OS_ENABLE_HW_BOUND_CHECK) \ || WASM_CPU_SUPPORTS_UNALIGNED_ADDR_ACCESS == 0 \ || WASM_ENABLE_BULK_MEMORY != 0 - linear_mem_size = get_linear_mem_size(); + linear_mem_size = GET_LINEAR_MEMORY_SIZE(memory); #endif } @@ -3099,6 +3514,8 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, uint32 opcode1; read_leb_uint32(frame_ip, frame_ip_end, opcode1); + /* opcode1 was checked in loader and is no larger than + UINT8_MAX */ opcode = (uint8)opcode1; switch (opcode) { @@ -3257,6 +3674,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, uint32 tbl_idx, elem_idx; uint32 n, s, d; WASMTableInstance *tbl_inst; + uint32 *tbl_seg_elems = NULL, tbl_seg_len = 0; read_leb_uint32(frame_ip, frame_ip_end, elem_idx); bh_assert(elem_idx < module->module->table_seg_count); @@ -3270,10 +3688,18 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, s = (uint32)POP_I32(); d = (uint32)POP_I32(); - if (offset_len_out_of_bounds( - s, n, + if (!bh_bitmap_get_bit(module->e->common.elem_dropped, + elem_idx)) { + /* table segment isn't dropped */ + tbl_seg_elems = + module->module->table_segments[elem_idx] + .func_indexes; + tbl_seg_len = module->module->table_segments[elem_idx] - .function_count) + .function_count; + } + + if (offset_len_out_of_bounds(s, n, tbl_seg_len) || offset_len_out_of_bounds(d, n, tbl_inst->cur_size)) { wasm_set_exception(module, @@ -3285,30 +3711,12 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, break; } - if (bh_bitmap_get_bit(module->e->common.elem_dropped, - elem_idx)) { - wasm_set_exception(module, - "out of bounds table access"); - goto got_exception; - } - - if (!wasm_elem_is_passive( - module->module->table_segments[elem_idx] - .mode)) { - wasm_set_exception(module, - "out of bounds table access"); - goto got_exception; - } - bh_memcpy_s( (uint8 *)tbl_inst + offsetof(WASMTableInstance, elems) + d * sizeof(uint32), (uint32)((tbl_inst->cur_size - d) * sizeof(uint32)), - module->module->table_segments[elem_idx] - .func_indexes - + s, - (uint32)(n * sizeof(uint32))); + tbl_seg_elems + s, (uint32)(n * sizeof(uint32))); break; } @@ -3439,9 +3847,13 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, #if WASM_ENABLE_SHARED_MEMORY != 0 HANDLE_OP(WASM_OP_ATOMIC_PREFIX) { - uint32 offset = 0, align, addr; + uint32 offset = 0, align = 0, addr; + uint32 opcode1; - opcode = *frame_ip++; + read_leb_uint32(frame_ip, frame_ip_end, opcode1); + /* opcode1 was checked in loader and is no larger than + UINT8_MAX */ + opcode = (uint8)opcode1; if (opcode != WASM_OP_ATOMIC_FENCE) { read_leb_uint32(frame_ip, frame_ip_end, align); @@ -3455,7 +3867,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, notify_count = POP_I32(); addr = POP_I32(); - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 4, maddr); + CHECK_MEMORY_OVERFLOW(4); CHECK_ATOMIC_MEMORY_ACCESS(); ret = wasm_runtime_atomic_notify( @@ -3475,7 +3887,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, timeout = POP_I64(); expect = POP_I32(); addr = POP_I32(); - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 4, maddr); + CHECK_MEMORY_OVERFLOW(4); CHECK_ATOMIC_MEMORY_ACCESS(); ret = wasm_runtime_atomic_wait( @@ -3499,7 +3911,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, timeout = POP_I64(); expect = POP_I64(); addr = POP_I32(); - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 8, maddr); + CHECK_MEMORY_OVERFLOW(8); CHECK_ATOMIC_MEMORY_ACCESS(); ret = wasm_runtime_atomic_wait( @@ -3532,21 +3944,21 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, addr = POP_I32(); if (opcode == WASM_OP_ATOMIC_I32_LOAD8_U) { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 1, maddr); + CHECK_MEMORY_OVERFLOW(1); CHECK_ATOMIC_MEMORY_ACCESS(); shared_memory_lock(memory); readv = (uint32)(*(uint8 *)maddr); shared_memory_unlock(memory); } else if (opcode == WASM_OP_ATOMIC_I32_LOAD16_U) { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 2, maddr); + CHECK_MEMORY_OVERFLOW(2); CHECK_ATOMIC_MEMORY_ACCESS(); shared_memory_lock(memory); readv = (uint32)LOAD_U16(maddr); shared_memory_unlock(memory); } else { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 4, maddr); + CHECK_MEMORY_OVERFLOW(4); CHECK_ATOMIC_MEMORY_ACCESS(); shared_memory_lock(memory); readv = LOAD_I32(maddr); @@ -3567,28 +3979,28 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, addr = POP_I32(); if (opcode == WASM_OP_ATOMIC_I64_LOAD8_U) { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 1, maddr); + CHECK_MEMORY_OVERFLOW(1); CHECK_ATOMIC_MEMORY_ACCESS(); shared_memory_lock(memory); readv = (uint64)(*(uint8 *)maddr); shared_memory_unlock(memory); } else if (opcode == WASM_OP_ATOMIC_I64_LOAD16_U) { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 2, maddr); + CHECK_MEMORY_OVERFLOW(2); CHECK_ATOMIC_MEMORY_ACCESS(); shared_memory_lock(memory); readv = (uint64)LOAD_U16(maddr); shared_memory_unlock(memory); } else if (opcode == WASM_OP_ATOMIC_I64_LOAD32_U) { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 4, maddr); + CHECK_MEMORY_OVERFLOW(4); CHECK_ATOMIC_MEMORY_ACCESS(); shared_memory_lock(memory); readv = (uint64)LOAD_U32(maddr); shared_memory_unlock(memory); } else { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 8, maddr); + CHECK_MEMORY_OVERFLOW(8); CHECK_ATOMIC_MEMORY_ACCESS(); shared_memory_lock(memory); readv = LOAD_I64(maddr); @@ -3609,21 +4021,21 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, addr = POP_I32(); if (opcode == WASM_OP_ATOMIC_I32_STORE8) { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 1, maddr); + CHECK_MEMORY_OVERFLOW(1); CHECK_ATOMIC_MEMORY_ACCESS(); shared_memory_lock(memory); *(uint8 *)maddr = (uint8)sval; shared_memory_unlock(memory); } else if (opcode == WASM_OP_ATOMIC_I32_STORE16) { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 2, maddr); + CHECK_MEMORY_OVERFLOW(2); CHECK_ATOMIC_MEMORY_ACCESS(); shared_memory_lock(memory); STORE_U16(maddr, (uint16)sval); shared_memory_unlock(memory); } else { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 4, maddr); + CHECK_MEMORY_OVERFLOW(4); CHECK_ATOMIC_MEMORY_ACCESS(); shared_memory_lock(memory); STORE_U32(maddr, sval); @@ -3643,28 +4055,28 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, addr = POP_I32(); if (opcode == WASM_OP_ATOMIC_I64_STORE8) { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 1, maddr); + CHECK_MEMORY_OVERFLOW(1); CHECK_ATOMIC_MEMORY_ACCESS(); shared_memory_lock(memory); *(uint8 *)maddr = (uint8)sval; shared_memory_unlock(memory); } else if (opcode == WASM_OP_ATOMIC_I64_STORE16) { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 2, maddr); + CHECK_MEMORY_OVERFLOW(2); CHECK_ATOMIC_MEMORY_ACCESS(); shared_memory_lock(memory); STORE_U16(maddr, (uint16)sval); shared_memory_unlock(memory); } else if (opcode == WASM_OP_ATOMIC_I64_STORE32) { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 4, maddr); + CHECK_MEMORY_OVERFLOW(4); CHECK_ATOMIC_MEMORY_ACCESS(); shared_memory_lock(memory); STORE_U32(maddr, (uint32)sval); shared_memory_unlock(memory); } else { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 8, maddr); + CHECK_MEMORY_OVERFLOW(8); CHECK_ATOMIC_MEMORY_ACCESS(); shared_memory_lock(memory); PUT_I64_TO_ADDR((uint32 *)maddr, sval); @@ -3684,7 +4096,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, addr = POP_I32(); if (opcode == WASM_OP_ATOMIC_RMW_I32_CMPXCHG8_U) { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 1, maddr); + CHECK_MEMORY_OVERFLOW(1); CHECK_ATOMIC_MEMORY_ACCESS(); expect = (uint8)expect; @@ -3695,7 +4107,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, shared_memory_unlock(memory); } else if (opcode == WASM_OP_ATOMIC_RMW_I32_CMPXCHG16_U) { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 2, maddr); + CHECK_MEMORY_OVERFLOW(2); CHECK_ATOMIC_MEMORY_ACCESS(); expect = (uint16)expect; @@ -3706,7 +4118,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, shared_memory_unlock(memory); } else { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 4, maddr); + CHECK_MEMORY_OVERFLOW(4); CHECK_ATOMIC_MEMORY_ACCESS(); shared_memory_lock(memory); @@ -3730,7 +4142,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, addr = POP_I32(); if (opcode == WASM_OP_ATOMIC_RMW_I64_CMPXCHG8_U) { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 1, maddr); + CHECK_MEMORY_OVERFLOW(1); CHECK_ATOMIC_MEMORY_ACCESS(); expect = (uint8)expect; @@ -3741,7 +4153,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, shared_memory_unlock(memory); } else if (opcode == WASM_OP_ATOMIC_RMW_I64_CMPXCHG16_U) { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 2, maddr); + CHECK_MEMORY_OVERFLOW(2); CHECK_ATOMIC_MEMORY_ACCESS(); expect = (uint16)expect; @@ -3752,7 +4164,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, shared_memory_unlock(memory); } else if (opcode == WASM_OP_ATOMIC_RMW_I64_CMPXCHG32_U) { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 4, maddr); + CHECK_MEMORY_OVERFLOW(4); CHECK_ATOMIC_MEMORY_ACCESS(); expect = (uint32)expect; @@ -3763,7 +4175,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, shared_memory_unlock(memory); } else { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 8, maddr); + CHECK_MEMORY_OVERFLOW(8); CHECK_ATOMIC_MEMORY_ACCESS(); shared_memory_lock(memory); @@ -3796,6 +4208,9 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, frame_ip = frame->ip; frame_sp = frame->sp; frame_csp = frame->csp; +#if WASM_ENABLE_TAIL_CALL != 0 + is_return_call = false; +#endif goto call_func_from_entry; } @@ -3819,10 +4234,6 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, #endif #if WASM_ENABLE_LABELS_AS_VALUES != 0 - HANDLE_OP(WASM_OP_UNUSED_0x06) - HANDLE_OP(WASM_OP_UNUSED_0x07) - HANDLE_OP(WASM_OP_UNUSED_0x08) - HANDLE_OP(WASM_OP_UNUSED_0x09) HANDLE_OP(WASM_OP_UNUSED_0x0a) #if WASM_ENABLE_TAIL_CALL == 0 HANDLE_OP(WASM_OP_RETURN_CALL) @@ -3838,13 +4249,26 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, HANDLE_OP(WASM_OP_REF_NULL) HANDLE_OP(WASM_OP_REF_IS_NULL) HANDLE_OP(WASM_OP_REF_FUNC) +#endif +#if WASM_ENABLE_EXCE_HANDLING == 0 + HANDLE_OP(WASM_OP_TRY) + HANDLE_OP(WASM_OP_CATCH) + HANDLE_OP(WASM_OP_THROW) + HANDLE_OP(WASM_OP_RETHROW) + HANDLE_OP(WASM_OP_DELEGATE) + HANDLE_OP(WASM_OP_CATCH_ALL) + HANDLE_OP(EXT_OP_TRY) +#endif +#if WASM_ENABLE_JIT != 0 && WASM_ENABLE_SIMD != 0 + /* SIMD isn't supported by interpreter, but when JIT is + enabled, `iwasm --interp ` may be run to + trigger the SIMD opcode in interpreter */ + HANDLE_OP(WASM_OP_SIMD_PREFIX) #endif HANDLE_OP(WASM_OP_UNUSED_0x14) HANDLE_OP(WASM_OP_UNUSED_0x15) HANDLE_OP(WASM_OP_UNUSED_0x16) HANDLE_OP(WASM_OP_UNUSED_0x17) - HANDLE_OP(WASM_OP_UNUSED_0x18) - HANDLE_OP(WASM_OP_UNUSED_0x19) HANDLE_OP(WASM_OP_UNUSED_0x27) /* Used by fast interpreter */ HANDLE_OP(EXT_OP_SET_LOCAL_FAST_I64) @@ -3873,6 +4297,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, } FREE_FRAME(exec_env, frame); wasm_exec_env_set_cur_frame(exec_env, prev_frame); + is_return_call = true; goto call_func_from_entry; } #endif @@ -3886,6 +4311,9 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, word_copy(outs_area->lp, frame_sp, cur_func->param_cell_num); } prev_frame = frame; +#if WASM_ENABLE_TAIL_CALL != 0 + is_return_call = false; +#endif } call_func_from_entry: @@ -3895,18 +4323,84 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, if (cur_func->import_func_inst) { wasm_interp_call_func_import(module, exec_env, cur_func, prev_frame); +#if WASM_ENABLE_TAIL_CALL != 0 + if (is_return_call) { + /* the frame was freed before tail calling and + the prev_frame was set as exec_env's cur_frame, + so here we recover context from prev_frame */ + RECOVER_CONTEXT(prev_frame); + } + else +#endif + { + prev_frame = frame->prev_frame; + cur_func = frame->function; + UPDATE_ALL_FROM_FRAME(); + } + +#if WASM_ENABLE_EXCE_HANDLING != 0 + char uncaught_exception[128] = { 0 }; + bool has_exception = + wasm_copy_exception(module, uncaught_exception); + if (has_exception + && strstr(uncaught_exception, "uncaught wasm exception")) { + uint32 import_exception; + /* initialize imported exception index to be invalid */ + SET_INVALID_TAGINDEX(import_exception); + + /* pull external exception */ + uint32 ext_exception = POP_I32(); + + /* external function came back with an exception or trap */ + /* lookup exception in import tags */ + WASMTagInstance *tag = module->e->tags; + for (uint32 t = 0; t < module->module->import_tag_count; + tag++, t++) { + + /* compare the module and the external index with the + * imort tag data */ + if ((cur_func->u.func_import->import_module + == tag->u.tag_import->import_module) + && (ext_exception + == tag->u.tag_import + ->import_tag_index_linked)) { + /* set the import_exception to the import tag */ + import_exception = t; + break; + } + } + /* + * excange the thrown exception (index valid in submodule) + * with the imported exception index (valid in this module) + * if the module did not import the exception, + * that results in a "INVALID_TAGINDEX", that triggers + * an CATCH_ALL block, if there is one. + */ + PUSH_I32(import_exception); + } +#endif } else #endif { wasm_interp_call_func_native(module, exec_env, cur_func, prev_frame); +#if WASM_ENABLE_TAIL_CALL != 0 + if (is_return_call) { + /* the frame was freed before tail calling and + the prev_frame was set as exec_env's cur_frame, + so here we recover context from prev_frame */ + RECOVER_CONTEXT(prev_frame); + } + else +#endif + { + prev_frame = frame->prev_frame; + cur_func = frame->function; + UPDATE_ALL_FROM_FRAME(); + } } - prev_frame = frame->prev_frame; - cur_func = frame->function; - UPDATE_ALL_FROM_FRAME(); - /* update memory size, no need to update memory ptr as it isn't changed in wasm_enlarge_memory */ #if !defined(OS_ENABLE_HW_BOUND_CHECK) \ @@ -3915,19 +4409,57 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, if (memory) linear_mem_size = get_linear_mem_size(); #endif - if (wasm_copy_exception(module, NULL)) + if (wasm_copy_exception(module, NULL)) { +#if WASM_ENABLE_EXCE_HANDLING != 0 + /* the caller raised an exception */ + char uncaught_exception[128] = { 0 }; + bool has_exception = + wasm_copy_exception(module, uncaught_exception); + + /* libc_builtin signaled a "exception thrown by stdc++" trap */ + if (has_exception + && strstr(uncaught_exception, + "exception thrown by stdc++")) { + wasm_set_exception(module, NULL); + + /* setup internal c++ rethrow */ + exception_tag_index = 0; + goto find_a_catch_handler; + } + + /* when throw hits the end of a function it signalles with a + * "uncaught wasm exception" trap */ + if (has_exception + && strstr(uncaught_exception, "uncaught wasm exception")) { + wasm_set_exception(module, NULL); + exception_tag_index = POP_I32(); + + /* rethrow the exception into that frame */ + goto find_a_catch_handler; + } +#endif goto got_exception; + } } else { WASMFunction *cur_wasm_func = cur_func->u.func; WASMType *func_type; +#if WASM_ENABLE_EXCE_HANDLING != 0 + /* account for exception handlers */ + /* bundle them here */ + uint32 eh_size = + cur_wasm_func->exception_handler_count * sizeof(uint8 *); + cur_wasm_func->max_stack_cell_num += eh_size; +#endif + func_type = cur_wasm_func->func_type; all_cell_num = cur_func->param_cell_num + cur_func->local_cell_num + cur_wasm_func->max_stack_cell_num + cur_wasm_func->max_block_num * (uint32)sizeof(WASMBranchBlock) / 4; + /* param_cell_num, local_cell_num, max_stack_cell_num and max_block_num are all no larger than UINT16_MAX (checked in loader), all_cell_num must be smaller than 1MB */ @@ -3976,11 +4508,19 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, FREE_FRAME(exec_env, frame); wasm_exec_env_set_cur_frame(exec_env, prev_frame); - if (!prev_frame->ip) + if (!prev_frame->ip) { /* Called from native. */ return; + } RECOVER_CONTEXT(prev_frame); +#if WASM_ENABLE_EXCE_HANDLING != 0 + if (wasm_get_exception(module)) { + wasm_set_exception(module, NULL); + exception_tag_index = POP_I32(); + goto find_a_catch_handler; + } +#endif HANDLE_OP_END(); } @@ -4109,7 +4649,7 @@ llvm_jit_call_func_bytecode(WASMModuleInstance *module_inst, uint32 result_count = func_type->result_count; uint32 ext_ret_count = result_count > 1 ? result_count - 1 : 0; uint32 func_idx = (uint32)(function - module_inst->e->functions); - bool ret; + bool ret = false; #if (WASM_ENABLE_DUMP_CALL_STACK != 0) || (WASM_ENABLE_PERF_PROFILING != 0) if (!llvm_jit_alloc_frame(exec_env, function - module_inst->e->functions)) { @@ -4137,7 +4677,8 @@ llvm_jit_call_func_bytecode(WASMModuleInstance *module_inst, if (size > UINT32_MAX || !(argv1 = wasm_runtime_malloc((uint32)size))) { wasm_set_exception(module_inst, "allocate memory failed"); - return false; + ret = false; + goto fail; } } @@ -4161,7 +4702,7 @@ llvm_jit_call_func_bytecode(WASMModuleInstance *module_inst, if (!ret) { if (argv1 != argv1_buf) wasm_runtime_free(argv1); - return ret; + goto fail; } /* Get extra result values */ @@ -4195,15 +4736,38 @@ llvm_jit_call_func_bytecode(WASMModuleInstance *module_inst, if (argv1 != argv1_buf) wasm_runtime_free(argv1); - return true; + ret = true; } else { - ret = wasm_runtime_invoke_native( - exec_env, module_inst->func_ptrs[func_idx], func_type, NULL, NULL, - argv, argc, argv); +#if WASM_ENABLE_QUICK_AOT_ENTRY != 0 + /* Quick call if the quick jit entry is registered */ + if (func_type->quick_aot_entry) { + void (*invoke_native)(void *func_ptr, void *exec_env, uint32 *argv, + uint32 *argv_ret) = + func_type->quick_aot_entry; + invoke_native(module_inst->func_ptrs[func_idx], exec_env, argv, + argv); + ret = !wasm_copy_exception(module_inst, NULL); + } + else +#endif + { + ret = wasm_runtime_invoke_native( + exec_env, module_inst->func_ptrs[func_idx], func_type, NULL, + NULL, argv, argc, argv); - return ret && !wasm_copy_exception(module_inst, NULL) ? true : false; + if (ret) + ret = !wasm_copy_exception(module_inst, NULL); + } } + +fail: + +#if (WASM_ENABLE_DUMP_CALL_STACK != 0) || (WASM_ENABLE_PERF_PROFILING != 0) + llvm_jit_free_frame(exec_env); +#endif + + return ret; } #endif /* end of WASM_ENABLE_JIT != 0 */ @@ -4212,16 +4776,11 @@ wasm_interp_call_wasm(WASMModuleInstance *module_inst, WASMExecEnv *exec_env, WASMFunctionInstance *function, uint32 argc, uint32 argv[]) { - WASMRuntimeFrame *prev_frame = wasm_exec_env_get_cur_frame(exec_env); - WASMInterpFrame *frame, *outs_area; + WASMRuntimeFrame *frame = NULL, *prev_frame, *outs_area; + RunningMode running_mode = + wasm_runtime_get_running_mode((WASMModuleInstanceCommon *)module_inst); /* Allocate sufficient cells for all kinds of return values. */ - unsigned all_cell_num = - function->ret_cell_num > 2 ? function->ret_cell_num : 2; - /* This frame won't be used by JITed code, so only allocate interp - frame here. */ - unsigned frame_size = wasm_interp_interp_frame_size(all_cell_num); - unsigned i; - bool copy_argv_from_frame = true; + bool alloc_frame = true; if (argc < function->param_cell_num) { char buf[128]; @@ -4244,25 +4803,56 @@ wasm_interp_call_wasm(WASMModuleInstance *module_inst, WASMExecEnv *exec_env, } #endif - if (!(frame = ALLOC_FRAME(exec_env, frame_size, prev_frame))) - return; + if (!function->is_import_func) { + /* No need to alloc frame when calling LLVM JIT function */ +#if WASM_ENABLE_JIT != 0 + if (running_mode == Mode_LLVM_JIT) { + alloc_frame = false; + } +#if WASM_ENABLE_LAZY_JIT != 0 && WASM_ENABLE_FAST_JIT != 0 + else if (running_mode == Mode_Multi_Tier_JIT) { + /* Tier-up from Fast JIT to LLVM JIT, call llvm jit function + if it is compiled, else call fast jit function */ + uint32 func_idx = (uint32)(function - module_inst->e->functions); + if (module_inst->module->func_ptrs_compiled + [func_idx - module_inst->module->import_function_count]) { + alloc_frame = false; + } + } +#endif +#endif + } - outs_area = wasm_exec_env_wasm_stack_top(exec_env); - frame->function = NULL; - frame->ip = NULL; - /* There is no local variable. */ - frame->sp = frame->lp + 0; + if (alloc_frame) { + unsigned all_cell_num = + function->ret_cell_num > 2 ? function->ret_cell_num : 2; + unsigned frame_size; - if ((uint8 *)(outs_area->lp + function->param_cell_num) - > exec_env->wasm_stack.s.top_boundary) { - wasm_set_exception(module_inst, "wasm operand stack overflow"); - return; - } + prev_frame = wasm_exec_env_get_cur_frame(exec_env); + /* This frame won't be used by JITed code, so only allocate interp + frame here. */ + frame_size = wasm_interp_interp_frame_size(all_cell_num); - if (argc > 0) - word_copy(outs_area->lp, argv, argc); + if (!(frame = ALLOC_FRAME(exec_env, frame_size, prev_frame))) + return; - wasm_exec_env_set_cur_frame(exec_env, frame); + outs_area = wasm_exec_env_wasm_stack_top(exec_env); + frame->function = NULL; + frame->ip = NULL; + /* There is no local variable. */ + frame->sp = frame->lp + 0; + + if ((uint8 *)(outs_area->lp + function->param_cell_num) + > exec_env->wasm_stack.s.top_boundary) { + wasm_set_exception(module_inst, "wasm operand stack overflow"); + return; + } + + if (argc > 0) + word_copy(outs_area->lp, argv, argc); + + wasm_exec_env_set_cur_frame(exec_env, frame); + } #if defined(os_writegsbase) { @@ -4288,9 +4878,6 @@ wasm_interp_call_wasm(WASMModuleInstance *module_inst, WASMExecEnv *exec_env, } } else { - RunningMode running_mode = - wasm_runtime_get_running_mode((wasm_module_inst_t)module_inst); - if (running_mode == Mode_Interp) { wasm_interp_call_func_bytecode(module_inst, exec_env, function, frame); @@ -4304,9 +4891,6 @@ wasm_interp_call_wasm(WASMModuleInstance *module_inst, WASMExecEnv *exec_env, else if (running_mode == Mode_LLVM_JIT) { llvm_jit_call_func_bytecode(module_inst, exec_env, function, argc, argv); - /* For llvm jit, the results have been stored in argv, - no need to copy them from stack frame again */ - copy_argv_from_frame = false; } #endif #if WASM_ENABLE_LAZY_JIT != 0 && WASM_ENABLE_FAST_JIT != 0 \ @@ -4319,9 +4903,6 @@ wasm_interp_call_wasm(WASMModuleInstance *module_inst, WASMExecEnv *exec_env, [func_idx - module_inst->module->import_function_count]) { llvm_jit_call_func_bytecode(module_inst, exec_env, function, argc, argv); - /* For llvm jit, the results have been stored in argv, - no need to copy them from stack frame again */ - copy_argv_from_frame = false; } else { fast_jit_call_func_bytecode(module_inst, exec_env, function, @@ -4342,7 +4923,8 @@ wasm_interp_call_wasm(WASMModuleInstance *module_inst, WASMExecEnv *exec_env, /* Output the return value to the caller */ if (!wasm_copy_exception(module_inst, NULL)) { - if (copy_argv_from_frame) { + if (alloc_frame) { + uint32 i; for (i = 0; i < function->ret_cell_num; i++) { argv[i] = *(frame->sp + i - function->ret_cell_num); } @@ -4356,6 +4938,8 @@ wasm_interp_call_wasm(WASMModuleInstance *module_inst, WASMExecEnv *exec_env, #endif } - wasm_exec_env_set_cur_frame(exec_env, prev_frame); - FREE_FRAME(exec_env, frame); + if (alloc_frame) { + wasm_exec_env_set_cur_frame(exec_env, prev_frame); + FREE_FRAME(exec_env, frame); + } } diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/interpreter/wasm_interp_fast.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/interpreter/wasm_interp_fast.c similarity index 96% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/interpreter/wasm_interp_fast.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/interpreter/wasm_interp_fast.c index d3cebc334b3..eb7d44f5f27 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/interpreter/wasm_interp_fast.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/interpreter/wasm_interp_fast.c @@ -479,7 +479,7 @@ LOAD_PTR(void *addr) addr = POP_I32(); \ \ if (opcode == WASM_OP_ATOMIC_RMW_I32_##OP_NAME##8_U) { \ - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 1, maddr); \ + CHECK_MEMORY_OVERFLOW(1); \ CHECK_ATOMIC_MEMORY_ACCESS(1); \ \ shared_memory_lock(memory); \ @@ -488,7 +488,7 @@ LOAD_PTR(void *addr) shared_memory_unlock(memory); \ } \ else if (opcode == WASM_OP_ATOMIC_RMW_I32_##OP_NAME##16_U) { \ - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 2, maddr); \ + CHECK_MEMORY_OVERFLOW(2); \ CHECK_ATOMIC_MEMORY_ACCESS(2); \ \ shared_memory_lock(memory); \ @@ -497,7 +497,7 @@ LOAD_PTR(void *addr) shared_memory_unlock(memory); \ } \ else { \ - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 4, maddr); \ + CHECK_MEMORY_OVERFLOW(4); \ CHECK_ATOMIC_MEMORY_ACCESS(4); \ \ shared_memory_lock(memory); \ @@ -519,7 +519,7 @@ LOAD_PTR(void *addr) addr = POP_I32(); \ \ if (opcode == WASM_OP_ATOMIC_RMW_I64_##OP_NAME##8_U) { \ - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 1, maddr); \ + CHECK_MEMORY_OVERFLOW(1); \ CHECK_ATOMIC_MEMORY_ACCESS(1); \ \ shared_memory_lock(memory); \ @@ -528,7 +528,7 @@ LOAD_PTR(void *addr) shared_memory_unlock(memory); \ } \ else if (opcode == WASM_OP_ATOMIC_RMW_I64_##OP_NAME##16_U) { \ - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 2, maddr); \ + CHECK_MEMORY_OVERFLOW(2); \ CHECK_ATOMIC_MEMORY_ACCESS(2); \ \ shared_memory_lock(memory); \ @@ -537,7 +537,7 @@ LOAD_PTR(void *addr) shared_memory_unlock(memory); \ } \ else if (opcode == WASM_OP_ATOMIC_RMW_I64_##OP_NAME##32_U) { \ - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 4, maddr); \ + CHECK_MEMORY_OVERFLOW(4); \ CHECK_ATOMIC_MEMORY_ACCESS(4); \ \ shared_memory_lock(memory); \ @@ -547,7 +547,7 @@ LOAD_PTR(void *addr) } \ else { \ uint64 op_result; \ - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 8, maddr); \ + CHECK_MEMORY_OVERFLOW(8); \ CHECK_ATOMIC_MEMORY_ACCESS(8); \ \ shared_memory_lock(memory); \ @@ -884,7 +884,7 @@ ALLOC_FRAME(WASMExecEnv *exec_env, uint32 size, WASMInterpFrame *prev_frame) if (frame) { frame->prev_frame = prev_frame; #if WASM_ENABLE_PERF_PROFILING != 0 - frame->time_started = os_time_get_boot_microsecond(); + frame->time_started = os_time_thread_cputime_us(); #endif } else { @@ -900,9 +900,13 @@ FREE_FRAME(WASMExecEnv *exec_env, WASMInterpFrame *frame) { #if WASM_ENABLE_PERF_PROFILING != 0 if (frame->function) { - frame->function->total_exec_time += - os_time_get_boot_microsecond() - frame->time_started; + WASMInterpFrame *prev_frame = frame->prev_frame; + uint64 elapsed = os_time_thread_cputime_us() - frame->time_started; + frame->function->total_exec_time += elapsed; frame->function->total_exec_cnt++; + + if (prev_frame && prev_frame->function) + prev_frame->function->children_exec_time += elapsed; } #endif wasm_exec_env_free_wasm_frame(exec_env, frame); @@ -1220,6 +1224,9 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, bool disable_bounds_checks = false; #endif #endif +#if WASM_ENABLE_TAIL_CALL != 0 + bool is_return_call = false; +#endif #if WASM_ENABLE_LABELS_AS_VALUES != 0 #define HANDLE_OPCODE(op) &&HANDLE_##op @@ -1433,6 +1440,20 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, goto call_func_from_interp; } +#if WASM_ENABLE_EXCE_HANDLING != 0 + HANDLE_OP(WASM_OP_TRY) + HANDLE_OP(WASM_OP_CATCH) + HANDLE_OP(WASM_OP_THROW) + HANDLE_OP(WASM_OP_RETHROW) + HANDLE_OP(WASM_OP_DELEGATE) + HANDLE_OP(WASM_OP_CATCH_ALL) + HANDLE_OP(EXT_OP_TRY) + { + wasm_set_exception(module, "unsupported opcode"); + goto got_exception; + } +#endif + /* parametric instructions */ HANDLE_OP(WASM_OP_SELECT) { @@ -1692,7 +1713,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, frame_ip += 2; addr_ret = GET_OFFSET(); CHECK_MEMORY_OVERFLOW(1); - frame_lp[addr_ret] = (uint32)(*(uint8 *)maddr); + frame_lp[addr_ret] = (uint32)(*(uint8 *)(maddr)); HANDLE_OP_END(); } @@ -1817,7 +1838,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, addr = GET_OPERAND(uint32, I32, 2); frame_ip += 4; CHECK_MEMORY_OVERFLOW(1); - *(uint8 *)maddr = (uint8)sval; + STORE_U8(maddr, (uint8_t)sval); HANDLE_OP_END(); } @@ -1917,7 +1938,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, #if !defined(OS_ENABLE_HW_BOUND_CHECK) \ || WASM_CPU_SUPPORTS_UNALIGNED_ADDR_ACCESS == 0 \ || WASM_ENABLE_BULK_MEMORY != 0 - linear_mem_size = get_linear_mem_size(); + linear_mem_size = GET_LINEAR_MEMORY_SIZE(memory); #endif } @@ -2863,8 +2884,8 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, { addr1 = GET_OFFSET(); addr2 = GET_OFFSET(); - frame_lp[addr2] = frame_lp[addr1]; - frame_lp[addr2 + 1] = frame_lp[addr1 + 1]; + PUT_I64_TO_ADDR(frame_lp + addr2, + GET_I64_FROM_ADDR(frame_lp + addr1)); HANDLE_OP_END(); } @@ -2999,7 +3020,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, offset = (uint64)(uint32)POP_I32(); addr = POP_I32(); -#if WASM_ENABLE_THREAD_MGR +#if WASM_ENABLE_THREAD_MGR != 0 linear_mem_size = get_linear_mem_size(); #endif @@ -3017,7 +3038,6 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, data = NULL; } else { - seg_len = (uint64)module->module->data_segments[segment] ->data_length; @@ -3048,7 +3068,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, src = POP_I32(); dst = POP_I32(); -#if WASM_ENABLE_THREAD_MGR +#if WASM_ENABLE_THREAD_MGR != 0 linear_mem_size = get_linear_mem_size(); #endif @@ -3078,7 +3098,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, fill_val = POP_I32(); dst = POP_I32(); -#if WASM_ENABLE_THREAD_MGR +#if WASM_ENABLE_THREAD_MGR != 0 linear_mem_size = get_linear_mem_size(); #endif @@ -3100,6 +3120,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, uint32 tbl_idx, elem_idx; uint32 n, s, d; WASMTableInstance *tbl_inst; + uint32 *tbl_seg_elems = NULL, tbl_seg_len = 0; elem_idx = read_uint32(frame_ip); bh_assert(elem_idx < module->module->table_seg_count); @@ -3113,10 +3134,18 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, s = (uint32)POP_I32(); d = (uint32)POP_I32(); - if (offset_len_out_of_bounds( - s, n, + if (!bh_bitmap_get_bit(module->e->common.elem_dropped, + elem_idx)) { + /* table segment isn't dropped */ + tbl_seg_elems = module->module->table_segments[elem_idx] - .function_count) + .func_indexes; + tbl_seg_len = + module->module->table_segments[elem_idx] + .function_count; + } + + if (offset_len_out_of_bounds(s, n, tbl_seg_len) || offset_len_out_of_bounds(d, n, tbl_inst->cur_size)) { wasm_set_exception(module, @@ -3128,30 +3157,12 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, break; } - if (bh_bitmap_get_bit(module->e->common.elem_dropped, - elem_idx)) { - wasm_set_exception(module, - "out of bounds table access"); - goto got_exception; - } - - if (!wasm_elem_is_passive( - module->module->table_segments[elem_idx] - .mode)) { - wasm_set_exception(module, - "out of bounds table access"); - goto got_exception; - } - bh_memcpy_s( (uint8 *)tbl_inst + offsetof(WASMTableInstance, elems) + d * sizeof(uint32), (uint32)((tbl_inst->cur_size - d) * sizeof(uint32)), - module->module->table_segments[elem_idx] - .func_indexes - + s, - (uint32)(n * sizeof(uint32))); + tbl_seg_elems + s, (uint32)(n * sizeof(uint32))); break; } case WASM_OP_ELEM_DROP: @@ -3295,7 +3306,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, notify_count = POP_I32(); addr = POP_I32(); - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 4, maddr); + CHECK_MEMORY_OVERFLOW(4); CHECK_ATOMIC_MEMORY_ACCESS(4); ret = wasm_runtime_atomic_notify( @@ -3315,7 +3326,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, timeout = POP_I64(); expect = POP_I32(); addr = POP_I32(); - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 4, maddr); + CHECK_MEMORY_OVERFLOW(4); CHECK_ATOMIC_MEMORY_ACCESS(4); ret = wasm_runtime_atomic_wait( @@ -3339,7 +3350,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, timeout = POP_I64(); expect = POP_I64(); addr = POP_I32(); - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 8, maddr); + CHECK_MEMORY_OVERFLOW(8); CHECK_ATOMIC_MEMORY_ACCESS(8); ret = wasm_runtime_atomic_wait( @@ -3370,21 +3381,21 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, addr = POP_I32(); if (opcode == WASM_OP_ATOMIC_I32_LOAD8_U) { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 1, maddr); + CHECK_MEMORY_OVERFLOW(1); CHECK_ATOMIC_MEMORY_ACCESS(1); shared_memory_lock(memory); readv = (uint32)(*(uint8 *)maddr); shared_memory_unlock(memory); } else if (opcode == WASM_OP_ATOMIC_I32_LOAD16_U) { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 2, maddr); + CHECK_MEMORY_OVERFLOW(2); CHECK_ATOMIC_MEMORY_ACCESS(2); shared_memory_lock(memory); readv = (uint32)LOAD_U16(maddr); shared_memory_unlock(memory); } else { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 4, maddr); + CHECK_MEMORY_OVERFLOW(4); CHECK_ATOMIC_MEMORY_ACCESS(4); shared_memory_lock(memory); readv = LOAD_I32(maddr); @@ -3405,28 +3416,28 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, addr = POP_I32(); if (opcode == WASM_OP_ATOMIC_I64_LOAD8_U) { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 1, maddr); + CHECK_MEMORY_OVERFLOW(1); CHECK_ATOMIC_MEMORY_ACCESS(1); shared_memory_lock(memory); readv = (uint64)(*(uint8 *)maddr); shared_memory_unlock(memory); } else if (opcode == WASM_OP_ATOMIC_I64_LOAD16_U) { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 2, maddr); + CHECK_MEMORY_OVERFLOW(2); CHECK_ATOMIC_MEMORY_ACCESS(2); shared_memory_lock(memory); readv = (uint64)LOAD_U16(maddr); shared_memory_unlock(memory); } else if (opcode == WASM_OP_ATOMIC_I64_LOAD32_U) { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 4, maddr); + CHECK_MEMORY_OVERFLOW(4); CHECK_ATOMIC_MEMORY_ACCESS(4); shared_memory_lock(memory); readv = (uint64)LOAD_U32(maddr); shared_memory_unlock(memory); } else { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 8, maddr); + CHECK_MEMORY_OVERFLOW(8); CHECK_ATOMIC_MEMORY_ACCESS(8); shared_memory_lock(memory); readv = LOAD_I64(maddr); @@ -3446,21 +3457,21 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, addr = POP_I32(); if (opcode == WASM_OP_ATOMIC_I32_STORE8) { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 1, maddr); + CHECK_MEMORY_OVERFLOW(1); CHECK_ATOMIC_MEMORY_ACCESS(1); shared_memory_lock(memory); *(uint8 *)maddr = (uint8)sval; shared_memory_unlock(memory); } else if (opcode == WASM_OP_ATOMIC_I32_STORE16) { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 2, maddr); + CHECK_MEMORY_OVERFLOW(2); CHECK_ATOMIC_MEMORY_ACCESS(2); shared_memory_lock(memory); STORE_U16(maddr, (uint16)sval); shared_memory_unlock(memory); } else { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 4, maddr); + CHECK_MEMORY_OVERFLOW(4); CHECK_ATOMIC_MEMORY_ACCESS(4); shared_memory_lock(memory); STORE_U32(maddr, sval); @@ -3480,28 +3491,28 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, addr = POP_I32(); if (opcode == WASM_OP_ATOMIC_I64_STORE8) { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 1, maddr); + CHECK_MEMORY_OVERFLOW(1); CHECK_ATOMIC_MEMORY_ACCESS(1); shared_memory_lock(memory); *(uint8 *)maddr = (uint8)sval; shared_memory_unlock(memory); } else if (opcode == WASM_OP_ATOMIC_I64_STORE16) { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 2, maddr); + CHECK_MEMORY_OVERFLOW(2); CHECK_ATOMIC_MEMORY_ACCESS(2); shared_memory_lock(memory); STORE_U16(maddr, (uint16)sval); shared_memory_unlock(memory); } else if (opcode == WASM_OP_ATOMIC_I64_STORE32) { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 4, maddr); + CHECK_MEMORY_OVERFLOW(4); CHECK_ATOMIC_MEMORY_ACCESS(4); shared_memory_lock(memory); STORE_U32(maddr, (uint32)sval); shared_memory_unlock(memory); } else { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 8, maddr); + CHECK_MEMORY_OVERFLOW(8); CHECK_ATOMIC_MEMORY_ACCESS(8); shared_memory_lock(memory); STORE_I64(maddr, sval); @@ -3521,7 +3532,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, addr = POP_I32(); if (opcode == WASM_OP_ATOMIC_RMW_I32_CMPXCHG8_U) { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 1, maddr); + CHECK_MEMORY_OVERFLOW(1); CHECK_ATOMIC_MEMORY_ACCESS(1); expect = (uint8)expect; @@ -3532,7 +3543,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, shared_memory_unlock(memory); } else if (opcode == WASM_OP_ATOMIC_RMW_I32_CMPXCHG16_U) { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 2, maddr); + CHECK_MEMORY_OVERFLOW(2); CHECK_ATOMIC_MEMORY_ACCESS(2); expect = (uint16)expect; @@ -3543,7 +3554,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, shared_memory_unlock(memory); } else { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 4, maddr); + CHECK_MEMORY_OVERFLOW(4); CHECK_ATOMIC_MEMORY_ACCESS(4); shared_memory_lock(memory); @@ -3567,7 +3578,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, addr = POP_I32(); if (opcode == WASM_OP_ATOMIC_RMW_I64_CMPXCHG8_U) { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 1, maddr); + CHECK_MEMORY_OVERFLOW(1); CHECK_ATOMIC_MEMORY_ACCESS(1); expect = (uint8)expect; @@ -3578,7 +3589,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, shared_memory_unlock(memory); } else if (opcode == WASM_OP_ATOMIC_RMW_I64_CMPXCHG16_U) { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 2, maddr); + CHECK_MEMORY_OVERFLOW(2); CHECK_ATOMIC_MEMORY_ACCESS(2); expect = (uint16)expect; @@ -3589,7 +3600,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, shared_memory_unlock(memory); } else if (opcode == WASM_OP_ATOMIC_RMW_I64_CMPXCHG32_U) { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 4, maddr); + CHECK_MEMORY_OVERFLOW(4); CHECK_ATOMIC_MEMORY_ACCESS(4); expect = (uint32)expect; @@ -3600,7 +3611,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, shared_memory_unlock(memory); } else { - CHECK_BULK_MEMORY_OVERFLOW(addr + offset, 8, maddr); + CHECK_MEMORY_OVERFLOW(8); CHECK_ATOMIC_MEMORY_ACCESS(8); shared_memory_lock(memory); @@ -3631,6 +3642,9 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, { frame = prev_frame; frame_ip = frame->ip; +#if WASM_ENABLE_TAIL_CALL != 0 + is_return_call = false; +#endif goto call_func_from_entry; } @@ -3676,10 +3690,6 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, #endif #if WASM_ENABLE_LABELS_AS_VALUES != 0 - HANDLE_OP(WASM_OP_UNUSED_0x06) - HANDLE_OP(WASM_OP_UNUSED_0x07) - HANDLE_OP(WASM_OP_UNUSED_0x08) - HANDLE_OP(WASM_OP_UNUSED_0x09) HANDLE_OP(WASM_OP_UNUSED_0x0a) #if WASM_ENABLE_TAIL_CALL == 0 HANDLE_OP(WASM_OP_RETURN_CALL) @@ -3694,6 +3704,16 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, HANDLE_OP(WASM_OP_REF_NULL) HANDLE_OP(WASM_OP_REF_IS_NULL) HANDLE_OP(WASM_OP_REF_FUNC) +#endif +#if WASM_ENABLE_EXCE_HANDLING == 0 + /* if exception handling is disabled, these opcodes issue a trap */ + HANDLE_OP(WASM_OP_TRY) + HANDLE_OP(WASM_OP_CATCH) + HANDLE_OP(WASM_OP_THROW) + HANDLE_OP(WASM_OP_RETHROW) + HANDLE_OP(WASM_OP_DELEGATE) + HANDLE_OP(WASM_OP_CATCH_ALL) + HANDLE_OP(EXT_OP_TRY) #endif /* SELECT_T is converted to SELECT or SELECT_64 */ HANDLE_OP(WASM_OP_SELECT_T) @@ -3701,8 +3721,6 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, HANDLE_OP(WASM_OP_UNUSED_0x15) HANDLE_OP(WASM_OP_UNUSED_0x16) HANDLE_OP(WASM_OP_UNUSED_0x17) - HANDLE_OP(WASM_OP_UNUSED_0x18) - HANDLE_OP(WASM_OP_UNUSED_0x19) HANDLE_OP(WASM_OP_UNUSED_0x27) /* optimized op code */ HANDLE_OP(WASM_OP_F32_STORE) @@ -3767,6 +3785,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, FREE_FRAME(exec_env, frame); frame_ip += cur_func->param_count * sizeof(int16); wasm_exec_env_set_cur_frame(exec_env, (WASMRuntimeFrame *)prev_frame); + is_return_call = true; goto call_func_from_entry; } #endif /* WASM_ENABLE_TAIL_CALL */ @@ -3827,6 +3846,9 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, } SYNC_ALL_TO_FRAME(); prev_frame = frame; +#if WASM_ENABLE_TAIL_CALL != 0 + is_return_call = false; +#endif } call_func_from_entry: @@ -3844,9 +3866,20 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module, prev_frame); } - prev_frame = frame->prev_frame; - cur_func = frame->function; - UPDATE_ALL_FROM_FRAME(); +#if WASM_ENABLE_TAIL_CALL != 0 + if (is_return_call) { + /* the frame was freed before tail calling and + the prev_frame was set as exec_env's cur_frame, + so here we recover context from prev_frame */ + RECOVER_CONTEXT(prev_frame); + } + else +#endif + { + prev_frame = frame->prev_frame; + cur_func = frame->function; + UPDATE_ALL_FROM_FRAME(); + } /* update memory size, no need to update memory ptr as it isn't changed in wasm_enlarge_memory */ diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/interpreter/wasm_loader.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/interpreter/wasm_loader.c similarity index 90% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/interpreter/wasm_loader.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/interpreter/wasm_loader.c index 2a06f42e36e..4a35b13b2a2 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/interpreter/wasm_loader.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/interpreter/wasm_loader.c @@ -131,7 +131,7 @@ read_leb(uint8 **p_buf, const uint8 *buf_end, uint32 maxbits, bool sign, } else if (sign && maxbits == 32) { if (shift < maxbits) { - /* Sign extend, second highest bit is the sign bit */ + /* Sign extend, second-highest bit is the sign bit */ if ((uint8)byte & 0x40) result |= (~((uint64)0)) << shift; } @@ -146,7 +146,7 @@ read_leb(uint8 **p_buf, const uint8 *buf_end, uint32 maxbits, bool sign, } else if (sign && maxbits == 64) { if (shift < maxbits) { - /* Sign extend, second highest bit is the sign bit */ + /* Sign extend, second-highest bit is the sign bit */ if ((uint8)byte & 0x40) result |= (~((uint64)0)) << shift; } @@ -219,7 +219,10 @@ type2str(uint8 type) static bool is_32bit_type(uint8 type) { - if (type == VALUE_TYPE_I32 || type == VALUE_TYPE_F32 + if (type == VALUE_TYPE_I32 + || type == VALUE_TYPE_F32 + /* the operand stack is in polymorphic state */ + || type == VALUE_TYPE_ANY #if WASM_ENABLE_REF_TYPES != 0 || type == VALUE_TYPE_FUNCREF || type == VALUE_TYPE_EXTERNREF #endif @@ -327,7 +330,7 @@ check_utf8_str(const uint8 *str, uint32 len) return false; } } - else if (chr >= 0xE1 && chr <= 0xEF) { + else { /* chr >= 0xE1 && chr <= 0xEF */ if (p[1] < 0x80 || p[1] > 0xBF || p[2] < 0x80 || p[2] > 0xBF) { return false; } @@ -341,13 +344,13 @@ check_utf8_str(const uint8 *str, uint32 len) return false; } } - else if (chr >= 0xF1 && chr <= 0xF3) { + else if (chr <= 0xF3) { /* and also chr >= 0xF1 */ if (p[1] < 0x80 || p[1] > 0xBF || p[2] < 0x80 || p[2] > 0xBF || p[3] < 0x80 || p[3] > 0xBF) { return false; } } - else if (chr == 0xF4) { + else { /* chr == 0xF4 */ if (p[1] < 0x80 || p[1] > 0x8F || p[2] < 0x80 || p[2] > 0xBF || p[3] < 0x80 || p[3] > 0xBF) { return false; @@ -641,6 +644,10 @@ load_type_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module, type->param_cell_num = (uint16)param_cell_num; type->ret_cell_num = (uint16)ret_cell_num; +#if WASM_ENABLE_QUICK_AOT_ENTRY != 0 + type->quick_aot_entry = wasm_native_lookup_quick_aot_entry(type); +#endif + /* If there is already a same type created, use it instead */ for (j = 0; j < i; j++) { if (wasm_type_equal(type, module->types[j])) { @@ -703,7 +710,6 @@ wasm_loader_find_export(const WASMModule *module, const char *module_name, WASMExport *export = loader_find_export((WASMModuleCommon *)module, module_name, field_name, export_kind, error_buf, error_buf_size); - ; return export; } #endif @@ -894,6 +900,58 @@ wasm_loader_resolve_global(const char *module_name, const char *global_name, return global; } +#if WASM_ENABLE_TAGS != 0 +static WASMTag * +wasm_loader_resolve_tag(const char *module_name, const char *tag_name, + const WASMType *expected_tag_type, + uint32 *linked_tag_index, char *error_buf, + uint32 error_buf_size) +{ + WASMModuleCommon *module_reg; + WASMTag *tag = NULL; + WASMExport *export = NULL; + WASMModule *module = NULL; + + module_reg = wasm_runtime_find_module_registered(module_name); + if (!module_reg || module_reg->module_type != Wasm_Module_Bytecode) { + LOG_DEBUG("can not find a module named %s for tag %s", module_name, + tag_name); + set_error_buf(error_buf, error_buf_size, "unknown import"); + return NULL; + } + + module = (WASMModule *)module_reg; + export = + wasm_loader_find_export(module, module_name, tag_name, EXPORT_KIND_TAG, + error_buf, error_buf_size); + if (!export) { + return NULL; + } + + /* resolve tag type and tag */ + if (export->index < module->import_tag_count) { + /* importing an imported tag from the submodule */ + tag = module->import_tags[export->index].u.tag.import_tag_linked; + } + else { + /* importing an section tag from the submodule */ + tag = module->tags[export->index - module->import_tag_count]; + } + + /* check function type */ + if (!wasm_type_equal(expected_tag_type, tag->tag_type)) { + LOG_DEBUG("%s.%s failed the type check", module_name, tag_name); + set_error_buf(error_buf, error_buf_size, "incompatible import type"); + return NULL; + } + + if (linked_tag_index != NULL) { + *linked_tag_index = export->index; + } + + return tag; +} +#endif #endif /* end of WASM_ENABLE_MULTI_MODULE */ static bool @@ -1169,23 +1227,31 @@ load_memory_import(const uint8 **p_buf, const uint8 *buf_end, (WASMModuleCommon *)parent_module, sub_module_name, error_buf, error_buf_size); if (!sub_module) { +#if WASM_ENABLE_LIB_WASI_THREADS != 0 + /* Avoid memory import failure when wasi-threads is enabled + and the memory is shared */ + if (!(declare_max_page_count_flag & 2)) + return false; +#else return false; +#endif /* WASM_ENABLE_LIB_WASI_THREADS */ } + else { + linked_memory = wasm_loader_resolve_memory( + sub_module_name, memory_name, declare_init_page_count, + declare_max_page_count, error_buf, error_buf_size); + if (!linked_memory) { + return false; + } - linked_memory = wasm_loader_resolve_memory( - sub_module_name, memory_name, declare_init_page_count, - declare_max_page_count, error_buf, error_buf_size); - if (!linked_memory) { - return false; + /** + * reset with linked memory limit + */ + memory->import_module = sub_module; + memory->import_memory_linked = linked_memory; + declare_init_page_count = linked_memory->init_page_count; + declare_max_page_count = linked_memory->max_page_count; } - - /** - * reset with linked memory limit - */ - memory->import_module = sub_module; - memory->import_memory_linked = linked_memory; - declare_init_page_count = linked_memory->init_page_count; - declare_max_page_count = linked_memory->max_page_count; } #endif @@ -1225,6 +1291,89 @@ load_memory_import(const uint8 **p_buf, const uint8 *buf_end, return false; } +#if WASM_ENABLE_TAGS != 0 +static bool +load_tag_import(const uint8 **p_buf, const uint8 *buf_end, + const WASMModule *parent_module, /* this module ! */ + const char *sub_module_name, const char *tag_name, + WASMTagImport *tag, /* structure to fill */ + char *error_buf, uint32 error_buf_size) +{ + /* attribute and type of the import statement */ + uint8 declare_tag_attribute; + uint32 declare_type_index; + const uint8 *p = *p_buf, *p_end = buf_end; +#if WASM_ENABLE_MULTI_MODULE != 0 + WASMModule *sub_module = NULL; +#endif + + /* get the one byte attribute */ + CHECK_BUF(p, p_end, 1); + declare_tag_attribute = read_uint8(p); + if (declare_tag_attribute != 0) { + set_error_buf(error_buf, error_buf_size, "unknown tag attribute"); + goto fail; + } + + /* get type */ + read_leb_uint32(p, p_end, declare_type_index); + /* compare against module->types */ + if (declare_type_index >= parent_module->type_count) { + set_error_buf(error_buf, error_buf_size, "unknown tag type"); + goto fail; + } + + WASMType *declare_tag_type = parent_module->types[declare_type_index]; + + /* check, that the type of the declared tag returns void */ + if (declare_tag_type->result_count != 0) { + set_error_buf(error_buf, error_buf_size, + "tag type signature does not return void"); + + goto fail; + } + +#if WASM_ENABLE_MULTI_MODULE != 0 + if (!wasm_runtime_is_built_in_module(sub_module_name)) { + sub_module = (WASMModule *)wasm_runtime_load_depended_module( + (WASMModuleCommon *)parent_module, sub_module_name, error_buf, + error_buf_size); + if (!sub_module) { + return false; + } + /* wasm_loader_resolve_tag checks, that the imported tag + * and the declared tag have the same type + */ + uint32 linked_tag_index = 0; + WASMTag *linked_tag = wasm_loader_resolve_tag( + sub_module_name, tag_name, declare_tag_type, + &linked_tag_index /* out */, error_buf, error_buf_size); + if (linked_tag) { + tag->import_module = sub_module; + tag->import_tag_linked = linked_tag; + tag->import_tag_index_linked = linked_tag_index; + } + } +#endif + /* store to module tag declarations */ + tag->attribute = declare_tag_attribute; + tag->type = declare_type_index; + + tag->module_name = (char *)sub_module_name; + tag->field_name = (char *)tag_name; + tag->tag_type = declare_tag_type; + + *p_buf = p; + (void)parent_module; + + LOG_VERBOSE("Load tag import success\n"); + + return true; +fail: + return false; +} +#endif + static bool load_global_import(const uint8 **p_buf, const uint8 *buf_end, const WASMModule *parent_module, char *sub_module_name, @@ -1446,6 +1595,9 @@ load_import_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module, WASMImport *import; WASMImport *import_functions = NULL, *import_tables = NULL; WASMImport *import_memories = NULL, *import_globals = NULL; +#if WASM_ENABLE_TAGS != 0 + WASMImport *import_tags = NULL; +#endif char *sub_module_name, *field_name; uint8 u8, kind; @@ -1474,7 +1626,7 @@ load_import_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module, p += name_len; CHECK_BUF(p, p_end, 1); - /* 0x00/0x01/0x02/0x03 */ + /* 0x00/0x01/0x02/0x03/0x04 */ kind = read_uint8(p); switch (kind) { @@ -1515,6 +1667,16 @@ load_import_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module, } break; +#if WASM_ENABLE_TAGS != 0 + case IMPORT_KIND_TAG: /* import tags */ + /* it only counts the number of tags to import */ + module->import_tag_count++; + CHECK_BUF(p, p_end, 1); + u8 = read_uint8(p); + read_leb_uint32(p, p_end, type_index); + break; +#endif + case IMPORT_KIND_GLOBAL: /* import global */ CHECK_BUF(p, p_end, 2); p += 2; @@ -1537,10 +1699,23 @@ load_import_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module, import_memories = module->import_memories = module->imports + module->import_function_count + module->import_table_count; + +#if WASM_ENABLE_TAGS != 0 + if (module->import_tag_count) + import_tags = module->import_tags = + module->imports + module->import_function_count + + module->import_table_count + module->import_memory_count; + if (module->import_global_count) + import_globals = module->import_globals = + module->imports + module->import_function_count + + module->import_table_count + module->import_memory_count + + module->import_tag_count; +#else if (module->import_global_count) import_globals = module->import_globals = module->imports + module->import_function_count + module->import_table_count + module->import_memory_count; +#endif p = p_old; @@ -1567,7 +1742,7 @@ load_import_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module, p += name_len; CHECK_BUF(p, p_end, 1); - /* 0x00/0x01/0x02/0x03 */ + /* 0x00/0x01/0x02/0x03/0x4 */ kind = read_uint8(p); switch (kind) { @@ -1603,6 +1778,18 @@ load_import_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module, } break; +#if WASM_ENABLE_TAGS != 0 + case IMPORT_KIND_TAG: + bh_assert(import_tags); + import = import_tags++; + if (!load_tag_import(&p, p_end, module, sub_module_name, + field_name, &import->u.tag, error_buf, + error_buf_size)) { + return false; + } + break; +#endif + case IMPORT_KIND_GLOBAL: /* import global */ bh_assert(import_globals); import = import_globals++; @@ -2114,6 +2301,16 @@ load_export_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module, return false; } break; +#if WASM_ENABLE_TAGS != 0 + /* export tag */ + case EXPORT_KIND_TAG: + if (index >= module->tag_count + module->import_tag_count) { + set_error_buf(error_buf, error_buf_size, "unknown tag"); + return false; + } + break; +#endif + /* global index */ case EXPORT_KIND_GLOBAL: if (index @@ -2123,6 +2320,7 @@ load_export_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module, return false; } break; + default: set_error_buf(error_buf, error_buf_size, "invalid export kind"); @@ -2529,6 +2727,83 @@ load_datacount_section(const uint8 *buf, const uint8 *buf_end, } #endif +#if WASM_ENABLE_TAGS != 0 +static bool +load_tag_section(const uint8 *buf, const uint8 *buf_end, const uint8 *buf_code, + const uint8 *buf_code_end, WASMModule *module, char *error_buf, + uint32 error_buf_size) +{ + (void)buf_code; + (void)buf_code_end; + + const uint8 *p = buf, *p_end = buf_end; + size_t total_size = 0; + /* number of tags defined in the section */ + uint32 section_tag_count = 0; + uint8 tag_attribute; + uint32 tag_type; + WASMTag *tag = NULL; + + /* get tag count */ + read_leb_uint32(p, p_end, section_tag_count); + module->tag_count = section_tag_count; + + if (section_tag_count) { + total_size = sizeof(WASMTag *) * module->tag_count; + if (!(module->tags = + loader_malloc(total_size, error_buf, error_buf_size))) { + return false; + } + /* load each tag, imported tags precede the tags */ + uint32 tag_index; + for (tag_index = 0; tag_index < section_tag_count; tag_index++) { + + /* get the one byte attribute */ + CHECK_BUF(p, p_end, 1); + tag_attribute = read_uint8(p); + + /* get type */ + read_leb_uint32(p, p_end, tag_type); + /* compare against module->types */ + if (tag_type >= module->type_count) { + set_error_buf(error_buf, error_buf_size, "unknown type"); + return false; + } + + /* get return type (must be 0) */ + /* check, that the type of the referred tag returns void */ + WASMType *func_type = (WASMType *)module->types[tag_type]; + if (func_type->result_count != 0) { + set_error_buf(error_buf, error_buf_size, + "non-empty tag result type"); + + goto fail; + } + + if (!(tag = module->tags[tag_index] = loader_malloc( + sizeof(WASMTag), error_buf, error_buf_size))) { + return false; + } + + /* store to module tag declarations */ + tag->attribute = tag_attribute; + tag->type = tag_type; + tag->tag_type = func_type; + } + } + + if (p != p_end) { + set_error_buf(error_buf, error_buf_size, "section size mismatch"); + return false; + } + + LOG_VERBOSE("Load tag section success.\n"); + return true; +fail: + return false; +} +#endif + static bool load_code_section(const uint8 *buf, const uint8 *buf_end, const uint8 *buf_func, const uint8 *buf_func_end, WASMModule *module, @@ -2667,8 +2942,12 @@ handle_name_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module, if (!(module->functions[func_index]->field_name = const_str_list_insert( p, func_name_len, module, - is_load_from_file_buf, error_buf, - error_buf_size))) { +#if WASM_ENABLE_WAMR_COMPILER != 0 + false, +#else + is_load_from_file_buf, +#endif + error_buf, error_buf_size))) { return false; } } @@ -2840,7 +3119,7 @@ static bool init_llvm_jit_functions_stage1(WASMModule *module, char *error_buf, uint32 error_buf_size) { - LLVMJITOptions llvm_jit_options = wasm_runtime_get_llvm_jit_options(); + LLVMJITOptions *llvm_jit_options = wasm_runtime_get_llvm_jit_options(); AOTCompOption option = { 0 }; char *aot_last_error; uint64 size; @@ -2880,11 +3159,11 @@ init_llvm_jit_functions_stage1(WASMModule *module, char *error_buf, option.is_jit_mode = true; - llvm_jit_options = wasm_runtime_get_llvm_jit_options(); - option.opt_level = llvm_jit_options.opt_level; - option.size_level = llvm_jit_options.size_level; - option.segue_flags = llvm_jit_options.segue_flags; - option.linux_perf_support = llvm_jit_options.linux_perf_support; + option.opt_level = llvm_jit_options->opt_level; + option.size_level = llvm_jit_options->size_level; + option.segue_flags = llvm_jit_options->segue_flags; + option.quick_invoke_c_api_import = + llvm_jit_options->quick_invoke_c_api_import; #if WASM_ENABLE_BULK_MEMORY != 0 option.enable_bulk_memory = true; @@ -3320,6 +3599,14 @@ load_from_sections(WASMModule *module, WASMSection *sections, error_buf_size)) return false; break; +#if WASM_ENABLE_TAGS != 0 + case SECTION_TYPE_TAG: + /* load tag declaration section */ + if (!load_tag_section(buf, buf_end, buf_code, buf_code_end, + module, error_buf, error_buf_size)) + return false; + break; +#endif case SECTION_TYPE_GLOBAL: if (!load_global_section(buf, buf_end, module, error_buf, error_buf_size)) @@ -3789,6 +4076,9 @@ static uint8 section_ids[] = { SECTION_TYPE_FUNC, SECTION_TYPE_TABLE, SECTION_TYPE_MEMORY, +#if WASM_ENABLE_TAGS != 0 + SECTION_TYPE_TAG, +#endif SECTION_TYPE_GLOBAL, SECTION_TYPE_EXPORT, SECTION_TYPE_START, @@ -3980,33 +4270,51 @@ check_wasi_abi_compatibility(const WASMModule *module, /* clang-format on */ WASMExport *initialize = NULL, *memory = NULL, *start = NULL; + uint32 import_function_count = module->import_function_count; + WASMType *func_type; /* (func (export "_start") (...) */ start = wasm_loader_find_export(module, "", "_start", EXPORT_KIND_FUNC, error_buf, error_buf_size); if (start) { - WASMType *func_type = - module->functions[start->index - module->import_function_count] - ->func_type; + if (start->index < import_function_count) { + set_error_buf( + error_buf, error_buf_size, + "the builtin _start function can not be an import function"); + return false; + } + + func_type = + module->functions[start->index - import_function_count]->func_type; if (func_type->param_count || func_type->result_count) { set_error_buf(error_buf, error_buf_size, "the signature of builtin _start function is wrong"); return false; } } + else { + /* (func (export "_initialize") (...) */ + initialize = + wasm_loader_find_export(module, "", "_initialize", EXPORT_KIND_FUNC, + error_buf, error_buf_size); - /* (func (export "_initialize") (...) */ - initialize = wasm_loader_find_export( - module, "", "_initialize", EXPORT_KIND_FUNC, error_buf, error_buf_size); - if (initialize) { - WASMType *func_type = - module->functions[initialize->index - module->import_function_count] - ->func_type; - if (func_type->param_count || func_type->result_count) { - set_error_buf( - error_buf, error_buf_size, - "the signature of builtin _initialize function is wrong"); - return false; + if (initialize) { + if (initialize->index < import_function_count) { + set_error_buf(error_buf, error_buf_size, + "the builtin _initialize function can not be an " + "import function"); + return false; + } + + func_type = + module->functions[initialize->index - import_function_count] + ->func_type; + if (func_type->param_count || func_type->result_count) { + set_error_buf( + error_buf, error_buf_size, + "the signature of builtin _initialize function is wrong"); + return false; + } } } @@ -4026,15 +4334,6 @@ check_wasi_abi_compatibility(const WASMModule *module, * according to the assumption, they should be all wasi compatiable */ - /* always can not have both at the same time */ - if (start && initialize) { - set_error_buf( - error_buf, error_buf_size, - "neither a command nor a reactor can both have _start function " - "and _initialize function at the same time"); - return false; - } - #if WASM_ENABLE_MULTI_MODULE != 0 /* filter out commands (with `_start`) cases */ if (start && !main_module) { @@ -4199,6 +4498,16 @@ wasm_loader_unload(WASMModule *module) if (module->memories) wasm_runtime_free(module->memories); +#if WASM_ENABLE_TAGS != 0 + if (module->tags) { + for (i = 0; i < module->tag_count; i++) { + if (module->tags[i]) + wasm_runtime_free(module->tags[i]); + } + wasm_runtime_free(module->tags); + } +#endif + if (module->globals) wasm_runtime_free(module->globals); @@ -4339,6 +4648,65 @@ wasm_loader_find_block_addr(WASMExecEnv *exec_env, BlockAddr *block_addr_cache, case WASM_OP_NOP: break; +#if WASM_ENABLE_EXCE_HANDLING != 0 + case WASM_OP_TRY: + u8 = read_uint8(p); + if (block_nested_depth + < sizeof(block_stack) / sizeof(BlockAddr)) { + block_stack[block_nested_depth].start_addr = p; + block_stack[block_nested_depth].else_addr = NULL; + } + block_nested_depth++; + break; + case EXT_OP_TRY: + skip_leb_uint32(p, p_end); + if (block_nested_depth + < sizeof(block_stack) / sizeof(BlockAddr)) { + block_stack[block_nested_depth].start_addr = p; + block_stack[block_nested_depth].else_addr = NULL; + } + block_nested_depth++; + break; + case WASM_OP_CATCH: + if (block_nested_depth == 1) { + *p_end_addr = (uint8 *)(p - 1); + /* stop search and return the address of the catch block */ + return true; + } + break; + case WASM_OP_CATCH_ALL: + if (block_nested_depth == 1) { + *p_end_addr = (uint8 *)(p - 1); + /* stop search and return the address of the catch_all block + */ + return true; + } + break; + case WASM_OP_THROW: + /* skip tag_index */ + skip_leb(p); + break; + case WASM_OP_RETHROW: + /* skip depth */ + skip_leb(p); + break; + case WASM_OP_DELEGATE: + if (block_nested_depth == 1) { + *p_end_addr = (uint8 *)(p - 1); + return true; + } + else { + skip_leb(p); + /* the DELEGATE opcode ends the tryblock, */ + block_nested_depth--; + if (block_nested_depth + < sizeof(block_stack) / sizeof(BlockAddr)) + block_stack[block_nested_depth].end_addr = + (uint8 *)(p - 1); + } + break; +#endif + case WASM_OP_BLOCK: case WASM_OP_LOOP: case WASM_OP_IF: @@ -4741,9 +5109,13 @@ wasm_loader_find_block_addr(WASMExecEnv *exec_env, BlockAddr *block_addr_cache, #if (WASM_ENABLE_WAMR_COMPILER != 0) || (WASM_ENABLE_JIT != 0) case WASM_OP_SIMD_PREFIX: { - /* TODO: shall we ceate a table to be friendly to branch - * prediction */ - opcode = read_uint8(p); + uint32 opcode1; + + read_leb_uint32(p, p_end, opcode1); + /* opcode1 was checked in wasm_loader_prepare_bytecode and + is no larger than UINT8_MAX */ + opcode = (uint8)opcode1; + /* follow the order of enum WASMSimdEXTOpcode in wasm_opcode.h */ switch (opcode) { @@ -4833,8 +5205,14 @@ wasm_loader_find_block_addr(WASMExecEnv *exec_env, BlockAddr *block_addr_cache, #if WASM_ENABLE_SHARED_MEMORY != 0 case WASM_OP_ATOMIC_PREFIX: { - /* atomic_op (1 u8) + memarg (2 u32_leb) */ - opcode = read_uint8(p); + uint32 opcode1; + + /* atomic_op (u32_leb) + memarg (2 u32_leb) */ + read_leb_uint32(p, p_end, opcode1); + /* opcode1 was checked in wasm_loader_prepare_bytecode and + is no larger than UINT8_MAX */ + opcode = (uint8)opcode1; + if (opcode != WASM_OP_ATOMIC_FENCE) { skip_leb_uint32(p, p_end); /* align */ skip_leb_uint32(p, p_end); /* offset */ @@ -4929,6 +5307,8 @@ typedef struct BranchBlock { BranchBlockPatch *patch_list; /* This is used to save params frame_offset of of if block */ int16 *param_frame_offsets; + /* This is used to recover dynamic offset for else branch */ + uint16 start_dynamic_offset; #endif /* Indicate the operand stack is in polymorphic state. @@ -5207,6 +5587,10 @@ wasm_loader_ctx_init(WASMFunction *func, char *error_buf, uint32 error_buf_size) goto fail; loader_ctx->frame_csp_boundary = loader_ctx->frame_csp_bottom + 8; +#if WASM_ENABLE_EXCE_HANDLING != 0 + func->exception_handler_count = 0; +#endif + #if WASM_ENABLE_FAST_INTERP != 0 loader_ctx->frame_offset_size = sizeof(int16) * 32; if (!(loader_ctx->frame_offset_bottom = loader_ctx->frame_offset = @@ -5250,7 +5634,7 @@ wasm_loader_push_frame_ref(WASMLoaderContext *ctx, uint8 type, char *error_buf, *ctx->frame_ref++ = type; ctx->stack_cell_num++; - if (is_32bit_type(type) || type == VALUE_TYPE_ANY) + if (is_32bit_type(type)) goto check_stack_and_return; if (!check_stack_push(ctx, error_buf, error_buf_size)) @@ -5451,11 +5835,11 @@ wasm_loader_pop_frame_csp(WASMLoaderContext *ctx, char *error_buf, wasm_loader_emit_ptr(loader_ctx, NULL); \ } while (0) -#define emit_br_info(frame_csp) \ - do { \ - if (!wasm_loader_emit_br_info(loader_ctx, frame_csp, error_buf, \ - error_buf_size)) \ - goto fail; \ +#define emit_br_info(frame_csp, is_br) \ + do { \ + if (!wasm_loader_emit_br_info(loader_ctx, frame_csp, is_br, error_buf, \ + error_buf_size)) \ + goto fail; \ } while (0) #define LAST_OP_OUTPUT_I32() \ @@ -5842,7 +6226,7 @@ apply_label_patch(WASMLoaderContext *ctx, uint8 depth, uint8 patch_type) static bool wasm_loader_emit_br_info(WASMLoaderContext *ctx, BranchBlock *frame_csp, - char *error_buf, uint32 error_buf_size) + bool is_br, char *error_buf, uint32 error_buf_size) { /* br info layout: * a) arity of target block @@ -5890,6 +6274,8 @@ wasm_loader_emit_br_info(WASMLoaderContext *ctx, BranchBlock *frame_csp, /* Part e */ dynamic_offset = frame_csp->dynamic_offset + wasm_get_cell_num(types, arity); + if (is_br) + ctx->dynamic_offset = dynamic_offset; for (i = (int32)arity - 1; i >= 0; i--) { cell = (uint8)wasm_value_type_cell_num(types[i]); dynamic_offset -= cell; @@ -6491,13 +6877,6 @@ reserve_block_ret(WASMLoaderContext *loader_ctx, uint8 opcode, local_offset = local_offsets[local_idx]; \ } while (0) -#define CHECK_BR(depth) \ - do { \ - if (!wasm_loader_check_br(loader_ctx, depth, error_buf, \ - error_buf_size)) \ - goto fail; \ - } while (0) - static bool check_memory(WASMModule *module, char *error_buf, uint32 error_buf_size) { @@ -6680,7 +7059,7 @@ check_memory_align_equal(uint8 opcode, uint32 align, char *error_buf, #endif /* end of WASM_ENABLE_SHARED_MEMORY */ static bool -wasm_loader_check_br(WASMLoaderContext *loader_ctx, uint32 depth, +wasm_loader_check_br(WASMLoaderContext *loader_ctx, uint32 depth, uint8 opcode, char *error_buf, uint32 error_buf_size) { BranchBlock *target_block, *cur_block; @@ -6690,7 +7069,22 @@ wasm_loader_check_br(WASMLoaderContext *loader_ctx, uint32 depth, int32 i, available_stack_cell; uint16 cell_num; - if (loader_ctx->csp_num < depth + 1) { + uint8 *frame_ref_old = loader_ctx->frame_ref; + uint8 *frame_ref_after_popped = NULL; + uint8 frame_ref_tmp[4] = { 0 }; + uint8 *frame_ref_buf = frame_ref_tmp; + uint32 stack_cell_num_old = loader_ctx->stack_cell_num; +#if WASM_ENABLE_FAST_INTERP != 0 + int16 *frame_offset_old = loader_ctx->frame_offset; + int16 *frame_offset_after_popped = NULL; + int16 frame_offset_tmp[4] = { 0 }; + int16 *frame_offset_buf = frame_offset_tmp; + uint16 dynamic_offset_old = (loader_ctx->frame_csp - 1)->dynamic_offset; +#endif + bool ret = false; + + bh_assert(loader_ctx->csp_num > 0); + if (loader_ctx->csp_num - 1 < depth) { set_error_buf(error_buf, error_buf_size, "unknown label, " "unexpected end of section or function"); @@ -6720,7 +7114,39 @@ wasm_loader_check_br(WASMLoaderContext *loader_ctx, uint32 depth, #endif POP_TYPE(types[i]); } - for (i = 0; i < (int32)arity; i++) { + + /* Backup stack data since it may be changed in the below + push operations, and the stack data may be used when + checking other target blocks of opcode br_table */ + if (opcode == WASM_OP_BR_TABLE) { + uint64 total_size; + + frame_ref_after_popped = loader_ctx->frame_ref; + total_size = (uint64)sizeof(uint8) + * (frame_ref_old - frame_ref_after_popped); + if (total_size > sizeof(frame_ref_tmp) + && !(frame_ref_buf = loader_malloc(total_size, error_buf, + error_buf_size))) { + goto fail; + } + bh_memcpy_s(frame_ref_buf, (uint32)total_size, + frame_ref_after_popped, (uint32)total_size); + +#if WASM_ENABLE_FAST_INTERP != 0 + frame_offset_after_popped = loader_ctx->frame_offset; + total_size = (uint64)sizeof(int16) + * (frame_offset_old - frame_offset_after_popped); + if (total_size > sizeof(frame_offset_tmp) + && !(frame_offset_buf = loader_malloc(total_size, error_buf, + error_buf_size))) { + goto fail; + } + bh_memcpy_s(frame_offset_buf, (uint32)total_size, + frame_offset_after_popped, (uint32)total_size); +#endif + } + + for (i = 0; i < (int32)arity; i++) { #if WASM_ENABLE_FAST_INTERP != 0 bool disable_emit = true; int16 operand_offset = 0; @@ -6728,7 +7154,41 @@ wasm_loader_check_br(WASMLoaderContext *loader_ctx, uint32 depth, #endif PUSH_TYPE(types[i]); } - return true; + +#if WASM_ENABLE_FAST_INTERP != 0 + emit_br_info(target_block, opcode == WASM_OP_BR); +#endif + + /* Restore the stack data, note that frame_ref_bottom, + frame_offset_bottom may be re-allocated in the above + push operations */ + if (opcode == WASM_OP_BR_TABLE) { + uint32 total_size; + + /* The stack operand num should not be smaller than before + after pop and push operations */ + bh_assert(loader_ctx->stack_cell_num >= stack_cell_num_old); + loader_ctx->stack_cell_num = stack_cell_num_old; + loader_ctx->frame_ref = + loader_ctx->frame_ref_bottom + stack_cell_num_old; + total_size = (uint32)sizeof(uint8) + * (frame_ref_old - frame_ref_after_popped); + bh_memcpy_s((uint8 *)loader_ctx->frame_ref - total_size, total_size, + frame_ref_buf, total_size); + +#if WASM_ENABLE_FAST_INTERP != 0 + loader_ctx->frame_offset = + loader_ctx->frame_offset_bottom + stack_cell_num_old; + total_size = (uint32)sizeof(int16) + * (frame_offset_old - frame_offset_after_popped); + bh_memcpy_s((uint8 *)loader_ctx->frame_offset - total_size, + total_size, frame_offset_buf, total_size); + (loader_ctx->frame_csp - 1)->dynamic_offset = dynamic_offset_old; +#endif + } + + ret = true; + goto cleanup_and_return; } available_stack_cell = @@ -6738,31 +7198,78 @@ wasm_loader_check_br(WASMLoaderContext *loader_ctx, uint32 depth, for (i = (int32)arity - 1; i >= 0; i--) { if (!check_stack_top_values(frame_ref, available_stack_cell, types[i], error_buf, error_buf_size)) - return false; + goto fail; cell_num = wasm_value_type_cell_num(types[i]); frame_ref -= cell_num; available_stack_cell -= cell_num; } - return true; +#if WASM_ENABLE_FAST_INTERP != 0 + emit_br_info(target_block, opcode == WASM_OP_BR); +#endif + ret = true; + +cleanup_and_return: fail: - return false; + if (frame_ref_buf && frame_ref_buf != frame_ref_tmp) + wasm_runtime_free(frame_ref_buf); +#if WASM_ENABLE_FAST_INTERP != 0 + if (frame_offset_buf && frame_offset_buf != frame_offset_tmp) + wasm_runtime_free(frame_offset_buf); +#endif + + return ret; } static BranchBlock * check_branch_block(WASMLoaderContext *loader_ctx, uint8 **p_buf, uint8 *buf_end, - char *error_buf, uint32 error_buf_size) + uint8 opcode, char *error_buf, uint32 error_buf_size) { uint8 *p = *p_buf, *p_end = buf_end; BranchBlock *frame_csp_tmp; uint32 depth; read_leb_uint32(p, p_end, depth); - CHECK_BR(depth); + bh_assert(loader_ctx->csp_num > 0); + if (!wasm_loader_check_br(loader_ctx, depth, opcode, error_buf, + error_buf_size)) { + goto fail; + } + frame_csp_tmp = loader_ctx->frame_csp - depth - 1; + + *p_buf = p; + return frame_csp_tmp; +fail: + return NULL; +} + +#if WASM_ENABLE_EXCE_HANDLING != 0 +static BranchBlock * +check_branch_block_for_delegate(WASMLoaderContext *loader_ctx, uint8 **p_buf, + uint8 *buf_end, char *error_buf, + uint32 error_buf_size) +{ + uint8 *p = *p_buf, *p_end = buf_end; + BranchBlock *frame_csp_tmp; + uint32 depth; + + read_leb_uint32(p, p_end, depth); + /* + * Note: "delegate 0" means the surrounding block, not the + * try-delegate block itself. + * + * Note: the caller hasn't popped the try-delegate frame yet. + */ + bh_assert(loader_ctx->csp_num > 0); + if (loader_ctx->csp_num - 1 <= depth) { + set_error_buf(error_buf, error_buf_size, "unknown delegate label"); + goto fail; + } + frame_csp_tmp = loader_ctx->frame_csp - depth - 2; #if WASM_ENABLE_FAST_INTERP != 0 - emit_br_info(frame_csp_tmp); + emit_br_info(frame_csp_tmp, false); #endif *p_buf = p; @@ -6770,6 +7277,7 @@ check_branch_block(WASMLoaderContext *loader_ctx, uint8 **p_buf, uint8 *buf_end, fail: return NULL; } +#endif static bool check_block_stack(WASMLoaderContext *loader_ctx, BranchBlock *block, @@ -6818,11 +7326,26 @@ check_block_stack(WASMLoaderContext *loader_ctx, BranchBlock *block, return true; } - /* Check stack cell num equals return cell num */ if (available_stack_cell != return_cell_num) { +#if WASM_ENABLE_EXCE_HANDLING != 0 + /* testspec: this error message format is expected by try_catch.wast */ + snprintf( + error_buf, error_buf_size, "type mismatch: %s requires [%s]%s[%s]", + block->label_type == LABEL_TYPE_TRY + || (block->label_type == LABEL_TYPE_CATCH + && return_cell_num > 0) + ? "instruction" + : "block", + return_cell_num > 0 ? type2str(return_types[0]) : "", + " but stack has ", + available_stack_cell > 0 ? type2str(*(loader_ctx->frame_ref - 1)) + : ""); + goto fail; +#else set_error_buf(error_buf, error_buf_size, "type mismatch: stack size does not match block type"); goto fail; +#endif } /* Check stack values match return types */ @@ -6871,6 +7394,7 @@ copy_params_to_dynamic_space(WASMLoaderContext *loader_ctx, bool is_if_block, int16 operand_offset = 0; uint64 size = (uint64)param_count * (sizeof(*cells) + sizeof(*src_offsets)); + bh_assert(size > 0); /* For if block, we also need copy the condition operand offset. */ if (is_if_block) @@ -6900,7 +7424,6 @@ copy_params_to_dynamic_space(WASMLoaderContext *loader_ctx, bool is_if_block, src_offsets[i] = *frame_offset; frame_offset += cell; } - /* emit copy instruction */ emit_label(EXT_OP_COPY_STACK_VALUES); /* Part a) */ @@ -7059,7 +7582,7 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, uint8 *func_const_end, *func_const = NULL; int16 operand_offset = 0; uint8 last_op = 0; - bool disable_emit, preserve_local = false; + bool disable_emit, preserve_local = false, if_condition_available = true; float32 f32_const; float64 f64_const; @@ -7129,13 +7652,44 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, break; case WASM_OP_IF: + { #if WASM_ENABLE_FAST_INTERP != 0 + BranchBlock *parent_block = loader_ctx->frame_csp - 1; + int32 available_stack_cell = + (int32)(loader_ctx->stack_cell_num + - parent_block->stack_cell_num); + + if (available_stack_cell <= 0 + && parent_block->is_stack_polymorphic) + if_condition_available = false; + else + if_condition_available = true; + PRESERVE_LOCAL_FOR_BLOCK(); #endif POP_I32(); goto handle_op_block_and_loop; + } case WASM_OP_BLOCK: case WASM_OP_LOOP: +#if WASM_ENABLE_EXCE_HANDLING != 0 + case WASM_OP_TRY: + if (opcode == WASM_OP_TRY) { + /* + * keep track of exception handlers to account for + * memory allocation + */ + func->exception_handler_count++; + + /* + * try is a block + * do nothing special, but execution continues to + * to handle_op_block_and_loop, + * and that be pushes the csp + */ + } + +#endif #if WASM_ENABLE_FAST_INTERP != 0 PRESERVE_LOCAL_FOR_BLOCK(); #endif @@ -7143,6 +7697,9 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, { uint8 value_type; BlockType block_type; +#if WASM_ENABLE_FAST_INTERP != 0 + uint32 available_params = 0; +#endif p_org = p - 1; CHECK_BUF(p, p_end, 1); @@ -7184,35 +7741,95 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, /* Pop block parameters from stack */ if (BLOCK_HAS_PARAM(block_type)) { WASMType *wasm_type = block_type.u.type; - for (i = 0; i < block_type.u.type->param_count; i++) + + BranchBlock *cur_block = loader_ctx->frame_csp - 1; +#if WASM_ENABLE_FAST_INTERP != 0 + uint32 cell_num; + available_params = block_type.u.type->param_count; +#endif + for (i = 0; i < block_type.u.type->param_count; i++) { + + int32 available_stack_cell = + (int32)(loader_ctx->stack_cell_num + - cur_block->stack_cell_num); + if (available_stack_cell <= 0 + && cur_block->is_stack_polymorphic) { +#if WASM_ENABLE_FAST_INTERP != 0 + available_params = i; +#endif + break; + } + POP_TYPE( wasm_type->types[wasm_type->param_count - i - 1]); +#if WASM_ENABLE_FAST_INTERP != 0 + /* decrease the frame_offset pointer accordingly to keep + * consistent with frame_ref stack */ + cell_num = wasm_value_type_cell_num( + wasm_type->types[wasm_type->param_count - i - 1]); + loader_ctx->frame_offset -= cell_num; +#endif + } } - PUSH_CSP(LABEL_TYPE_BLOCK + (opcode - WASM_OP_BLOCK), block_type, p); /* Pass parameters to block */ if (BLOCK_HAS_PARAM(block_type)) { - for (i = 0; i < block_type.u.type->param_count; i++) + for (i = 0; i < block_type.u.type->param_count; i++) { +#if WASM_ENABLE_FAST_INTERP != 0 + uint32 cell_num = wasm_value_type_cell_num( + block_type.u.type->types[i]); + if (i >= available_params) { + /* If there isn't enough data on stack, push a dummy + * offset to keep the stack consistent with + * frame_ref. + * Since the stack is already in polymorphic state, + * the opcode will not be executed, so the dummy + * offset won't cause any error */ + uint32 n; + + for (n = 0; n < cell_num; n++) { + if (loader_ctx->p_code_compiled == NULL) { + if (!check_offset_push(loader_ctx, + error_buf, + error_buf_size)) + goto fail; + } + *loader_ctx->frame_offset++ = 0; + } + } + else { + loader_ctx->frame_offset += cell_num; + } +#endif PUSH_TYPE(block_type.u.type->types[i]); + } } #if WASM_ENABLE_FAST_INTERP != 0 if (opcode == WASM_OP_BLOCK || opcode == WASM_OP_LOOP) { skip_label(); + if (BLOCK_HAS_PARAM(block_type)) { /* Make sure params are in dynamic space */ if (!copy_params_to_dynamic_space( loader_ctx, false, error_buf, error_buf_size)) goto fail; } + if (opcode == WASM_OP_LOOP) { (loader_ctx->frame_csp - 1)->code_compiled = loader_ctx->p_code_compiled; } } +#if WASM_ENABLE_EXCE_HANDLING != 0 + else if (opcode == WASM_OP_TRY) { + skip_label(); + } +#endif else if (opcode == WASM_OP_IF) { + BranchBlock *block = loader_ctx->frame_csp - 1; /* If block has parameters, we should make sure they are in * dynamic space. Otherwise, when else branch is missing, * the later opcode may consume incorrect operand offset. @@ -7231,11 +7848,15 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, * */ if (BLOCK_HAS_PARAM(block_type)) { - BranchBlock *block = loader_ctx->frame_csp - 1; uint64 size; - /* skip the if condition operand offset */ - wasm_loader_emit_backspace(loader_ctx, sizeof(int16)); + /* In polymorphic state, there may be no if condition on + * the stack, so the offset may not emitted */ + if (if_condition_available) { + /* skip the if condition operand offset */ + wasm_loader_emit_backspace(loader_ctx, + sizeof(int16)); + } /* skip the if label */ skip_label(); /* Emit a copy instruction */ @@ -7262,32 +7883,239 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, (uint32)size); } + block->start_dynamic_offset = loader_ctx->dynamic_offset; + emit_empty_label_addr_and_frame_ip(PATCH_ELSE); emit_empty_label_addr_and_frame_ip(PATCH_END); } #endif break; } +#if WASM_ENABLE_EXCE_HANDLING != 0 + case WASM_OP_THROW: + { + SET_CUR_BLOCK_STACK_POLYMORPHIC_STATE(true); + + BranchBlock *cur_block = loader_ctx->frame_csp - 1; + + uint8 label_type = cur_block->label_type; + uint32 tag_index = 0; + read_leb_int32(p, p_end, tag_index); + + /* check validity of tag_index against module->tag_count */ + /* check tag index is within the tag index space */ + if (tag_index >= module->import_tag_count + module->tag_count) { + snprintf(error_buf, error_buf_size, "unknown tag %d", + tag_index); + goto fail; + } + + /* the tag_type is stored in either the WASMTag (section tags) + * or WASMTagImport (import tag) */ + WASMType *tag_type = NULL; + if (tag_index < module->import_tag_count) { + tag_type = module->import_tags[tag_index].u.tag.tag_type; + } + else { + tag_type = + module->tags[tag_index - module->import_tag_count] + ->tag_type; + } + + if (tag_type->result_count != 0) { + set_error_buf(error_buf, error_buf_size, + "tag type signature does not return void"); + goto fail; + } + + int32 available_stack_cell = + (int32)(loader_ctx->stack_cell_num + - cur_block->stack_cell_num); + /* Check stack values match return types by comparing tag param + * types with stack cells */ + uint8 *frame_ref = loader_ctx->frame_ref; + for (int tti = (int32)tag_type->param_count - 1; tti >= 0; + tti--) { + if (!check_stack_top_values(frame_ref, available_stack_cell, + tag_type->types[tti], error_buf, + error_buf_size)) { + snprintf(error_buf, error_buf_size, + "type mismatch: instruction requires [%s] but " + "stack has [%s]", + tag_type->param_count > 0 + ? type2str(tag_type->types[tti]) + : "", + available_stack_cell > 0 + ? type2str(*(loader_ctx->frame_ref - 1)) + : ""); + goto fail; + } + frame_ref -= wasm_value_type_cell_num(tag_type->types[tti]); + available_stack_cell -= + wasm_value_type_cell_num(tag_type->types[tti]); + } + + /* throw is stack polymorphic */ + (void)label_type; + RESET_STACK(); + + break; + } + case WASM_OP_RETHROW: + { + /* must be done before checking branch block */ + SET_CUR_BLOCK_STACK_POLYMORPHIC_STATE(true); + + /* check the target catching block: LABEL_TYPE_CATCH */ + if (!(frame_csp_tmp = + check_branch_block(loader_ctx, &p, p_end, opcode, + error_buf, error_buf_size))) + goto fail; + + if (frame_csp_tmp->label_type != LABEL_TYPE_CATCH + && frame_csp_tmp->label_type != LABEL_TYPE_CATCH_ALL) { + /* trap according to spectest (rethrow.wast) */ + set_error_buf(error_buf, error_buf_size, + "invalid rethrow label"); + goto fail; + } + + BranchBlock *cur_block = loader_ctx->frame_csp - 1; + uint8 label_type = cur_block->label_type; + (void)label_type; + /* rethrow is stack polymorphic */ + RESET_STACK(); + break; + } + case WASM_OP_DELEGATE: + { + /* check target block is valid */ + if (!(frame_csp_tmp = check_branch_block_for_delegate( + loader_ctx, &p, p_end, error_buf, error_buf_size))) + goto fail; + + BranchBlock *cur_block = loader_ctx->frame_csp - 1; + uint8 label_type = cur_block->label_type; + + (void)label_type; + /* DELEGATE ends the block */ + POP_CSP(); + break; + } + case WASM_OP_CATCH: + { + BranchBlock *cur_block = loader_ctx->frame_csp - 1; + + uint8 label_type = cur_block->label_type; + uint32 tag_index = 0; + read_leb_int32(p, p_end, tag_index); + + /* check validity of tag_index against module->tag_count */ + /* check tag index is within the tag index space */ + if (tag_index >= module->import_tag_count + module->tag_count) { + LOG_VERBOSE("In %s, unknown tag at WASM_OP_CATCH\n", + __FUNCTION__); + set_error_buf(error_buf, error_buf_size, "unknown tag"); + goto fail; + } + + /* the tag_type is stored in either the WASMTag (section tags) + * or WASMTagImport (import tag) */ + WASMType *func_type = NULL; + if (tag_index < module->import_tag_count) { + func_type = module->import_tags[tag_index].u.tag.tag_type; + } + else { + func_type = + module->tags[tag_index - module->import_tag_count] + ->tag_type; + } + + if (func_type->result_count != 0) { + set_error_buf(error_buf, error_buf_size, + "tag type signature does not return void"); + goto fail; + } + + /* check validity of current label (expect LABEL_TYPE_TRY or + * LABEL_TYPE_CATCH) */ + if ((LABEL_TYPE_CATCH != label_type) + && (LABEL_TYPE_TRY != label_type)) { + set_error_buf(error_buf, error_buf_size, + "Unexpected block sequence encountered."); + goto fail; + } + + BlockType new_block_type; + new_block_type.is_value_type = false; + new_block_type.u.type = func_type; + + /* + * replace frame_csp by LABEL_TYPE_CATCH + */ + cur_block->label_type = LABEL_TYPE_CATCH; + + /* RESET_STACK removes the values pushed in TRY or pervious + * CATCH Blocks */ + RESET_STACK(); + + /* push types on the stack according to catched type */ + if (BLOCK_HAS_PARAM(new_block_type)) { + for (i = 0; i < new_block_type.u.type->param_count; i++) + PUSH_TYPE(new_block_type.u.type->types[i]); + } + break; + } + case WASM_OP_CATCH_ALL: + { + BranchBlock *cur_block = loader_ctx->frame_csp - 1; + + /* expecting a TRY or CATCH, anything else will be considered an + * error */ + if ((LABEL_TYPE_CATCH != cur_block->label_type) + && (LABEL_TYPE_TRY != cur_block->label_type)) { + set_error_buf(error_buf, error_buf_size, + "Unexpected block sequence encountered."); + goto fail; + } + + /* no immediates */ + /* replace frame_csp by LABEL_TYPE_CATCH_ALL */ + cur_block->label_type = LABEL_TYPE_CATCH_ALL; + + /* RESET_STACK removes the values pushed in TRY or pervious + * CATCH Blocks */ + RESET_STACK(); + + /* catch_all has no tagtype and therefore no parameters */ + break; + } +#endif case WASM_OP_ELSE: { - BlockType block_type = (loader_ctx->frame_csp - 1)->block_type; + BranchBlock *block = NULL; + BlockType block_type; if (loader_ctx->csp_num < 2 - || (loader_ctx->frame_csp - 1)->label_type - != LABEL_TYPE_IF) { + /* the matched if isn't found */ + || (loader_ctx->frame_csp - 1)->label_type != LABEL_TYPE_IF + /* duplicated else is found */ + || (loader_ctx->frame_csp - 1)->else_addr) { set_error_buf( error_buf, error_buf_size, "opcode else found without matched opcode if"); goto fail; } + block = loader_ctx->frame_csp - 1; /* check whether if branch's stack matches its result type */ - if (!check_block_stack(loader_ctx, loader_ctx->frame_csp - 1, - error_buf, error_buf_size)) + if (!check_block_stack(loader_ctx, block, error_buf, + error_buf_size)) goto fail; - (loader_ctx->frame_csp - 1)->else_addr = p - 1; + block->else_addr = p - 1; + block_type = block->block_type; #if WASM_ENABLE_FAST_INTERP != 0 /* if the result of if branch is in local or const area, add a @@ -7310,12 +8138,12 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, /* Recover top param_count values of frame_offset stack */ if (BLOCK_HAS_PARAM((block_type))) { uint32 size; - BranchBlock *block = loader_ctx->frame_csp - 1; size = sizeof(int16) * block_type.u.type->param_cell_num; bh_memcpy_s(loader_ctx->frame_offset, size, block->param_frame_offsets, size); loader_ctx->frame_offset += (size / sizeof(int16)); } + loader_ctx->dynamic_offset = block->start_dynamic_offset; #endif break; @@ -7399,8 +8227,9 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, case WASM_OP_BR: { - if (!(frame_csp_tmp = check_branch_block( - loader_ctx, &p, p_end, error_buf, error_buf_size))) + if (!(frame_csp_tmp = + check_branch_block(loader_ctx, &p, p_end, opcode, + error_buf, error_buf_size))) goto fail; RESET_STACK(); @@ -7412,8 +8241,9 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, { POP_I32(); - if (!(frame_csp_tmp = check_branch_block( - loader_ctx, &p, p_end, error_buf, error_buf_size))) + if (!(frame_csp_tmp = + check_branch_block(loader_ctx, &p, p_end, opcode, + error_buf, error_buf_size))) goto fail; break; @@ -7422,13 +8252,11 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, case WASM_OP_BR_TABLE: { uint8 *ret_types = NULL; - uint32 ret_count = 0; + uint32 ret_count = 0, depth = 0; #if WASM_ENABLE_FAST_INTERP == 0 - uint8 *p_depth_begin, *p_depth; - uint32 depth, j; BrTableCache *br_table_cache = NULL; - - p_org = p - 1; + uint8 *p_depth_begin, *p_depth, *p_opcode = p - 1; + uint32 j; #endif read_leb_uint32(p, p_end, count); @@ -7437,12 +8265,26 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, #endif POP_I32(); + /* Get each depth and check it */ + p_org = p; + for (i = 0; i <= count; i++) { + read_leb_uint32(p, p_end, depth); + bh_assert(loader_ctx->csp_num > 0); + if (loader_ctx->csp_num - 1 < depth) { + set_error_buf(error_buf, error_buf_size, + "unknown label, " + "unexpected end of section or function"); + goto fail; + } + } + p = p_org; + #if WASM_ENABLE_FAST_INTERP == 0 p_depth_begin = p_depth = p; #endif for (i = 0; i <= count; i++) { if (!(frame_csp_tmp = - check_branch_block(loader_ctx, &p, p_end, + check_branch_block(loader_ctx, &p, p_end, opcode, error_buf, error_buf_size))) goto fail; @@ -7490,7 +8332,7 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, /* The depth cannot be stored in one byte, create br_table cache to store each depth */ #if WASM_ENABLE_DEBUG_INTERP != 0 - if (!record_fast_op(module, p_org, *p_org, + if (!record_fast_op(module, p_opcode, *p_opcode, error_buf, error_buf_size)) { goto fail; } @@ -7502,8 +8344,8 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, error_buf, error_buf_size))) { goto fail; } - *p_org = EXT_OP_BR_TABLE_CACHE; - br_table_cache->br_table_op_addr = p_org; + *p_opcode = EXT_OP_BR_TABLE_CACHE; + br_table_cache->br_table_op_addr = p_opcode; br_table_cache->br_count = count; /* Copy previous depths which are one byte */ for (j = 0; j < i; j++) { @@ -7543,11 +8385,11 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, idx--) { ret_type = *(func->func_type->types + func->func_type->param_count + idx); - POP_TYPE(ret_type); #if WASM_ENABLE_FAST_INTERP != 0 /* emit the offset after return opcode */ POP_OFFSET_TYPE(ret_type); #endif + POP_TYPE(ret_type); } RESET_STACK(); @@ -7587,10 +8429,10 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, if (func_type->param_count > 0) { for (idx = (int32)(func_type->param_count - 1); idx >= 0; idx--) { - POP_TYPE(func_type->types[idx]); #if WASM_ENABLE_FAST_INTERP != 0 POP_OFFSET_TYPE(func_type->types[idx]); #endif + POP_TYPE(func_type->types[idx]); } } @@ -7688,10 +8530,10 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, if (func_type->param_count > 0) { for (idx = (int32)(func_type->param_count - 1); idx >= 0; idx--) { - POP_TYPE(func_type->types[idx]); #if WASM_ENABLE_FAST_INTERP != 0 POP_OFFSET_TYPE(func_type->types[idx]); #endif + POP_TYPE(func_type->types[idx]); } } @@ -7758,8 +8600,7 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, } if (available_stack_cell > 0) { - if (is_32bit_type(*(loader_ctx->frame_ref - 1)) - || *(loader_ctx->frame_ref - 1) == VALUE_TYPE_ANY) { + if (is_32bit_type(*(loader_ctx->frame_ref - 1))) { loader_ctx->frame_ref--; loader_ctx->stack_cell_num--; #if WASM_ENABLE_FAST_INTERP != 0 @@ -7837,6 +8678,7 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, switch (*(loader_ctx->frame_ref - 1)) { case REF_I32: case REF_F32: + case REF_ANY: break; case REF_I64_2: case REF_F64_2: @@ -8050,13 +8892,33 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, case WASM_OP_REF_IS_NULL: { #if WASM_ENABLE_FAST_INTERP != 0 - if (!wasm_loader_pop_frame_ref_offset(loader_ctx, - VALUE_TYPE_FUNCREF, - error_buf, error_buf_size) - && !wasm_loader_pop_frame_ref_offset( - loader_ctx, VALUE_TYPE_EXTERNREF, error_buf, - error_buf_size)) { - goto fail; + BranchBlock *cur_block = loader_ctx->frame_csp - 1; + int32 block_stack_cell_num = + (int32)(loader_ctx->stack_cell_num + - cur_block->stack_cell_num); + if (block_stack_cell_num <= 0) { + if (!cur_block->is_stack_polymorphic) { + set_error_buf( + error_buf, error_buf_size, + "type mismatch: expect data but stack was empty"); + goto fail; + } + } + else { + if (*(loader_ctx->frame_ref - 1) == VALUE_TYPE_FUNCREF + || *(loader_ctx->frame_ref - 1) == VALUE_TYPE_EXTERNREF + || *(loader_ctx->frame_ref - 1) == VALUE_TYPE_ANY) { + if (!wasm_loader_pop_frame_ref_offset( + loader_ctx, *(loader_ctx->frame_ref - 1), + error_buf, error_buf_size)) { + goto fail; + } + } + else { + set_error_buf(error_buf, error_buf_size, + "type mismatch"); + goto fail; + } } #else if (!wasm_loader_pop_frame_ref(loader_ctx, VALUE_TYPE_FUNCREF, @@ -8079,24 +8941,44 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, goto fail; } - /* Refer to a forward-declared function */ - if (func_idx >= cur_func_idx + module->import_function_count) { + /* Refer to a forward-declared function: + the function must be an import, exported, or present in + a table elem segment or global initializer to be used as + the operand to ref.func */ + if (func_idx >= module->import_function_count) { WASMTableSeg *table_seg = module->table_segments; bool func_declared = false; uint32 j; - /* Check whether the function is declared in table segs */ - for (i = 0; i < module->table_seg_count; i++, table_seg++) { - if (table_seg->elem_type == VALUE_TYPE_FUNCREF - && wasm_elem_is_declarative(table_seg->mode)) { - for (j = 0; j < table_seg->function_count; j++) { - if (table_seg->func_indexes[j] == func_idx) { - func_declared = true; - break; + for (i = 0; i < module->global_count; i++) { + if (module->globals[i].type == VALUE_TYPE_FUNCREF + && module->globals[i].init_expr.init_expr_type + == INIT_EXPR_TYPE_FUNCREF_CONST + && module->globals[i].init_expr.u.u32 == func_idx) { + func_declared = true; + break; + } + } + + if (!func_declared) { + /* Check whether the function is declared in table segs, + note that it doesn't matter whether the table seg's + mode is passive, active or declarative. */ + for (i = 0; i < module->table_seg_count; + i++, table_seg++) { + if (table_seg->elem_type == VALUE_TYPE_FUNCREF) { + for (j = 0; j < table_seg->function_count; + j++) { + if (table_seg->func_indexes[j] + == func_idx) { + func_declared = true; + break; + } } } } } + if (!func_declared) { /* Check whether the function is exported */ for (i = 0; i < module->export_count; i++) { @@ -8159,7 +9041,6 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, { p_org = p - 1; GET_LOCAL_INDEX_TYPE_AND_OFFSET(); - POP_TYPE(local_type); #if WASM_ENABLE_FAST_INTERP != 0 if (!(preserve_referenced_local( @@ -8216,6 +9097,7 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, } #endif #endif /* end of WASM_ENABLE_FAST_INTERP != 0 */ + POP_TYPE(local_type); break; } @@ -8353,8 +9235,6 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, - module->import_global_count] .type; - POP_TYPE(global_type); - #if WASM_ENABLE_FAST_INTERP == 0 if (global_type == VALUE_TYPE_I64 || global_type == VALUE_TYPE_F64) { @@ -8393,6 +9273,9 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, emit_uint32(loader_ctx, global_idx); POP_OFFSET_TYPE(global_type); #endif /* end of WASM_ENABLE_FAST_INTERP */ + + POP_TYPE(global_type); + break; } @@ -8577,6 +9460,7 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, break; case WASM_OP_F32_CONST: + CHECK_BUF(p, p_end, sizeof(float32)); p += sizeof(float32); #if WASM_ENABLE_FAST_INTERP != 0 skip_label(); @@ -8595,6 +9479,7 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, break; case WASM_OP_F64_CONST: + CHECK_BUF(p, p_end, sizeof(float64)); p += sizeof(float64); #if WASM_ENABLE_FAST_INTERP != 0 skip_label(); @@ -8916,6 +9801,7 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, } case WASM_OP_MEMORY_COPY: { + CHECK_BUF(p, p_end, sizeof(int16)); /* both src and dst memory index should be 0 */ if (*(int16 *)p != 0x0000) goto fail_zero_byte_expected; @@ -9113,8 +9999,8 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, { uint32 opcode1; - CHECK_BUF(p, p_end, 1); - opcode1 = read_uint8(p); + read_leb_uint32(p, p_end, opcode1); + /* follow the order of enum WASMSimdEXTOpcode in wasm_opcode.h */ switch (opcode1) { @@ -9601,13 +10487,6 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, break; } - case SIMD_i32x4_narrow_i64x2_s: - case SIMD_i32x4_narrow_i64x2_u: - { - POP2_AND_PUSH(VALUE_TYPE_V128, VALUE_TYPE_V128); - break; - } - case SIMD_i32x4_extend_low_i16x8_s: case SIMD_i32x4_extend_high_i16x8_s: case SIMD_i32x4_extend_low_i16x8_u: @@ -9634,7 +10513,6 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, case SIMD_i32x4_max_s: case SIMD_i32x4_max_u: case SIMD_i32x4_dot_i16x8_s: - case SIMD_i32x4_avgr_u: case SIMD_i32x4_extmul_low_i16x8_s: case SIMD_i32x4_extmul_high_i16x8_s: case SIMD_i32x4_extmul_low_i16x8_u: @@ -9698,7 +10576,6 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, /* f32x4 operation */ case SIMD_f32x4_abs: case SIMD_f32x4_neg: - case SIMD_f32x4_round: case SIMD_f32x4_sqrt: { POP_AND_PUSH(VALUE_TYPE_V128, VALUE_TYPE_V128); @@ -9721,7 +10598,6 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, /* f64x2 operation */ case SIMD_f64x2_abs: case SIMD_f64x2_neg: - case SIMD_f64x2_round: case SIMD_f64x2_sqrt: { POP_AND_PUSH(VALUE_TYPE_V128, VALUE_TYPE_V128); @@ -9775,8 +10651,8 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, { uint32 opcode1; - CHECK_BUF(p, p_end, 1); - opcode1 = read_uint8(p); + read_leb_uint32(p, p_end, opcode1); + #if WASM_ENABLE_FAST_INTERP != 0 emit_byte(loader_ctx, opcode1); #endif diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/interpreter/wasm_loader.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/interpreter/wasm_loader.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/interpreter/wasm_loader.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/interpreter/wasm_loader.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/interpreter/wasm_mini_loader.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/interpreter/wasm_mini_loader.c similarity index 94% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/interpreter/wasm_mini_loader.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/interpreter/wasm_mini_loader.c index 47ec549eedb..0939ad48974 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/interpreter/wasm_mini_loader.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/interpreter/wasm_mini_loader.c @@ -51,7 +51,10 @@ set_error_buf(char *error_buf, uint32 error_buf_size, const char *string) static bool is_32bit_type(uint8 type) { - if (type == VALUE_TYPE_I32 || type == VALUE_TYPE_F32 + if (type == VALUE_TYPE_I32 + || type == VALUE_TYPE_F32 + /* the operand stack is in polymorphic state */ + || type == VALUE_TYPE_ANY #if WASM_ENABLE_REF_TYPES != 0 || type == VALUE_TYPE_FUNCREF || type == VALUE_TYPE_EXTERNREF #endif @@ -418,6 +421,10 @@ load_type_section(const uint8 *buf, const uint8 *buf_end, WASMModule *module, type->param_cell_num = (uint16)param_cell_num; type->ret_cell_num = (uint16)ret_cell_num; +#if WASM_ENABLE_QUICK_AOT_ENTRY != 0 + type->quick_aot_entry = wasm_native_lookup_quick_aot_entry(type); +#endif + /* If there is already a same type created, use it instead */ for (j = 0; j < i; ++j) { if (wasm_type_equal(type, module->types[j])) { @@ -1874,10 +1881,11 @@ init_llvm_jit_functions_stage1(WASMModule *module, char *error_buf, } option.is_jit_mode = true; - option.opt_level = llvm_jit_options.opt_level; - option.size_level = llvm_jit_options.size_level; - option.segue_flags = llvm_jit_options.segue_flags; - option.linux_perf_support = llvm_jit_options.linux_perf_support; + option.opt_level = llvm_jit_options->opt_level; + option.size_level = llvm_jit_options->size_level; + option.segue_flags = llvm_jit_options->segue_flags; + option.quick_invoke_c_api_import = + llvm_jit_options->quick_invoke_c_api_import; #if WASM_ENABLE_BULK_MEMORY != 0 option.enable_bulk_memory = true; @@ -3254,6 +3262,17 @@ wasm_loader_find_block_addr(WASMExecEnv *exec_env, BlockAddr *block_addr_cache, u8 = read_uint8(p); /* 0x00 */ break; +#if WASM_ENABLE_EXCE_HANDLING != 0 + case WASM_OP_TRY: + case WASM_OP_CATCH: + case WASM_OP_THROW: + case WASM_OP_RETHROW: + case WASM_OP_DELEGATE: + case WASM_OP_CATCH_ALL: + /* TODO */ + return false; +#endif + case WASM_OP_DROP: case WASM_OP_SELECT: case WASM_OP_DROP_64: @@ -3476,8 +3495,11 @@ wasm_loader_find_block_addr(WASMExecEnv *exec_env, BlockAddr *block_addr_cache, uint32 opcode1; read_leb_uint32(p, p_end, opcode1); + /* opcode1 was checked in wasm_loader_prepare_bytecode and + is no larger than UINT8_MAX */ + opcode = (uint8)opcode1; - switch (opcode1) { + switch (opcode) { case WASM_OP_I32_TRUNC_SAT_S_F32: case WASM_OP_I32_TRUNC_SAT_U_F32: case WASM_OP_I32_TRUNC_SAT_S_F64: @@ -3533,8 +3555,14 @@ wasm_loader_find_block_addr(WASMExecEnv *exec_env, BlockAddr *block_addr_cache, #if WASM_ENABLE_SHARED_MEMORY != 0 case WASM_OP_ATOMIC_PREFIX: { - /* atomic_op (1 u8) + memarg (2 u32_leb) */ - opcode = read_uint8(p); + uint32 opcode1; + + /* atomic_op (u32_leb) + memarg (2 u32_leb) */ + read_leb_uint32(p, p_end, opcode1); + /* opcode1 was checked in wasm_loader_prepare_bytecode and + is no larger than UINT8_MAX */ + opcode = (uint8)opcode1; + if (opcode != WASM_OP_ATOMIC_FENCE) { skip_leb_uint32(p, p_end); /* align */ skip_leb_uint32(p, p_end); /* offset */ @@ -3595,6 +3623,11 @@ typedef struct BranchBlock { BranchBlockPatch *patch_list; /* This is used to save params frame_offset of of if block */ int16 *param_frame_offsets; + /* This is used to store available param num for if/else branch, so the else + * opcode can know how many parameters should be copied to the stack */ + uint32 available_param_num; + /* This is used to recover dynamic offset for else branch */ + uint16 start_dynamic_offset; #endif /* Indicate the operand stack is in polymorphic state. @@ -4057,11 +4090,11 @@ wasm_loader_pop_frame_csp(WASMLoaderContext *ctx, char *error_buf, wasm_loader_emit_ptr(loader_ctx, NULL); \ } while (0) -#define emit_br_info(frame_csp) \ - do { \ - if (!wasm_loader_emit_br_info(loader_ctx, frame_csp, error_buf, \ - error_buf_size)) \ - goto fail; \ +#define emit_br_info(frame_csp, is_br) \ + do { \ + if (!wasm_loader_emit_br_info(loader_ctx, frame_csp, is_br, error_buf, \ + error_buf_size)) \ + goto fail; \ } while (0) #define LAST_OP_OUTPUT_I32() \ @@ -4446,7 +4479,7 @@ apply_label_patch(WASMLoaderContext *ctx, uint8 depth, uint8 patch_type) static bool wasm_loader_emit_br_info(WASMLoaderContext *ctx, BranchBlock *frame_csp, - char *error_buf, uint32 error_buf_size) + bool is_br, char *error_buf, uint32 error_buf_size) { /* br info layout: * a) arity of target block @@ -4495,6 +4528,8 @@ wasm_loader_emit_br_info(WASMLoaderContext *ctx, BranchBlock *frame_csp, /* Part e */ dynamic_offset = frame_csp->dynamic_offset + wasm_get_cell_num(types, arity); + if (is_br) + ctx->dynamic_offset = dynamic_offset; for (i = (int32)arity - 1; i >= 0; i--) { cell = (uint8)wasm_value_type_cell_num(types[i]); dynamic_offset -= cell; @@ -5173,20 +5208,13 @@ reserve_block_ret(WASMLoaderContext *loader_ctx, uint8 opcode, local_offset = local_offsets[local_idx]; \ } while (0) -#define CHECK_BR(depth) \ - do { \ - if (!wasm_loader_check_br(loader_ctx, depth, error_buf, \ - error_buf_size)) \ - goto fail; \ - } while (0) - #define CHECK_MEMORY() \ do { \ bh_assert(module->import_memory_count + module->memory_count > 0); \ } while (0) static bool -wasm_loader_check_br(WASMLoaderContext *loader_ctx, uint32 depth, +wasm_loader_check_br(WASMLoaderContext *loader_ctx, uint32 depth, uint8 opcode, char *error_buf, uint32 error_buf_size) { BranchBlock *target_block, *cur_block; @@ -5196,7 +5224,22 @@ wasm_loader_check_br(WASMLoaderContext *loader_ctx, uint32 depth, int32 i, available_stack_cell; uint16 cell_num; - if (loader_ctx->csp_num < depth + 1) { + uint8 *frame_ref_old = loader_ctx->frame_ref; + uint8 *frame_ref_after_popped = NULL; + uint8 frame_ref_tmp[4] = { 0 }; + uint8 *frame_ref_buf = frame_ref_tmp; + uint32 stack_cell_num_old = loader_ctx->stack_cell_num; +#if WASM_ENABLE_FAST_INTERP != 0 + int16 *frame_offset_old = loader_ctx->frame_offset; + int16 *frame_offset_after_popped = NULL; + int16 frame_offset_tmp[4] = { 0 }; + int16 *frame_offset_buf = frame_offset_tmp; + uint16 dynamic_offset_old = (loader_ctx->frame_csp - 1)->dynamic_offset; +#endif + bool ret = false; + + bh_assert(loader_ctx->csp_num > 0); + if (loader_ctx->csp_num - 1 < depth) { set_error_buf(error_buf, error_buf_size, "unknown label, " "unexpected end of section or function"); @@ -5226,6 +5269,38 @@ wasm_loader_check_br(WASMLoaderContext *loader_ctx, uint32 depth, #endif POP_TYPE(types[i]); } + + /* Backup stack data since it may be changed in the below + push operations, and the stack data may be used when + checking other target blocks of opcode br_table */ + if (opcode == WASM_OP_BR_TABLE) { + uint64 total_size; + + frame_ref_after_popped = loader_ctx->frame_ref; + total_size = (uint64)sizeof(uint8) + * (frame_ref_old - frame_ref_after_popped); + if (total_size > sizeof(frame_ref_tmp) + && !(frame_ref_buf = loader_malloc(total_size, error_buf, + error_buf_size))) { + goto fail; + } + bh_memcpy_s(frame_ref_buf, (uint32)total_size, + frame_ref_after_popped, (uint32)total_size); + +#if WASM_ENABLE_FAST_INTERP != 0 + frame_offset_after_popped = loader_ctx->frame_offset; + total_size = (uint64)sizeof(int16) + * (frame_offset_old - frame_offset_after_popped); + if (total_size > sizeof(frame_offset_tmp) + && !(frame_offset_buf = loader_malloc(total_size, error_buf, + error_buf_size))) { + goto fail; + } + bh_memcpy_s(frame_offset_buf, (uint32)total_size, + frame_offset_after_popped, (uint32)total_size); +#endif + } + for (i = 0; i < (int32)arity; i++) { #if WASM_ENABLE_FAST_INTERP != 0 bool disable_emit = true; @@ -5234,7 +5309,41 @@ wasm_loader_check_br(WASMLoaderContext *loader_ctx, uint32 depth, #endif PUSH_TYPE(types[i]); } - return true; + +#if WASM_ENABLE_FAST_INTERP != 0 + emit_br_info(target_block, opcode == WASM_OP_BR); +#endif + + /* Restore the stack data, note that frame_ref_bottom, + frame_offset_bottom may be re-allocated in the above + push operations */ + if (opcode == WASM_OP_BR_TABLE) { + uint32 total_size; + + /* The stack operand num should not be smaller than before + after pop and push operations */ + bh_assert(loader_ctx->stack_cell_num >= stack_cell_num_old); + loader_ctx->stack_cell_num = stack_cell_num_old; + loader_ctx->frame_ref = + loader_ctx->frame_ref_bottom + stack_cell_num_old; + total_size = (uint32)sizeof(uint8) + * (frame_ref_old - frame_ref_after_popped); + bh_memcpy_s((uint8 *)loader_ctx->frame_ref - total_size, total_size, + frame_ref_buf, total_size); + +#if WASM_ENABLE_FAST_INTERP != 0 + loader_ctx->frame_offset = + loader_ctx->frame_offset_bottom + stack_cell_num_old; + total_size = (uint32)sizeof(int16) + * (frame_offset_old - frame_offset_after_popped); + bh_memcpy_s((uint8 *)loader_ctx->frame_offset - total_size, + total_size, frame_offset_buf, total_size); + (loader_ctx->frame_csp - 1)->dynamic_offset = dynamic_offset_old; +#endif + } + + ret = true; + goto cleanup_and_return; } available_stack_cell = @@ -5244,32 +5353,46 @@ wasm_loader_check_br(WASMLoaderContext *loader_ctx, uint32 depth, for (i = (int32)arity - 1; i >= 0; i--) { if (!check_stack_top_values(frame_ref, available_stack_cell, types[i], error_buf, error_buf_size)) - return false; + goto fail; cell_num = wasm_value_type_cell_num(types[i]); frame_ref -= cell_num; available_stack_cell -= cell_num; } - return true; +#if WASM_ENABLE_FAST_INTERP != 0 + emit_br_info(target_block, opcode == WASM_OP_BR); +#endif + + ret = true; +cleanup_and_return: fail: - return false; + if (frame_ref_buf && frame_ref_buf != frame_ref_tmp) + wasm_runtime_free(frame_ref_buf); +#if WASM_ENABLE_FAST_INTERP != 0 + if (frame_offset_buf && frame_offset_buf != frame_offset_tmp) + wasm_runtime_free(frame_offset_buf); +#endif + + return ret; } static BranchBlock * check_branch_block(WASMLoaderContext *loader_ctx, uint8 **p_buf, uint8 *buf_end, - char *error_buf, uint32 error_buf_size) + uint8 opcode, char *error_buf, uint32 error_buf_size) { uint8 *p = *p_buf, *p_end = buf_end; BranchBlock *frame_csp_tmp; uint32 depth; read_leb_uint32(p, p_end, depth); - CHECK_BR(depth); + bh_assert(loader_ctx->csp_num > 0); + if (!wasm_loader_check_br(loader_ctx, depth, opcode, error_buf, + error_buf_size)) { + goto fail; + } + frame_csp_tmp = loader_ctx->frame_csp - depth - 1; -#if WASM_ENABLE_FAST_INTERP != 0 - emit_br_info(frame_csp_tmp); -#endif *p_buf = p; return frame_csp_tmp; @@ -5354,6 +5477,7 @@ static bool copy_params_to_dynamic_space(WASMLoaderContext *loader_ctx, bool is_if_block, char *error_buf, uint32 error_buf_size) { + bool ret = false; int16 *frame_offset = NULL; uint8 *cells = NULL, cell; int16 *src_offsets = NULL; @@ -5368,6 +5492,7 @@ copy_params_to_dynamic_space(WASMLoaderContext *loader_ctx, bool is_if_block, int16 operand_offset = 0; uint64 size = (uint64)param_count * (sizeof(*cells) + sizeof(*src_offsets)); + bh_assert(size > 0); /* For if block, we also need copy the condition operand offset. */ if (is_if_block) @@ -5397,7 +5522,6 @@ copy_params_to_dynamic_space(WASMLoaderContext *loader_ctx, bool is_if_block, src_offsets[i] = *frame_offset; frame_offset += cell; } - /* emit copy instruction */ emit_label(EXT_OP_COPY_STACK_VALUES); /* Part a) */ @@ -5424,14 +5548,13 @@ copy_params_to_dynamic_space(WASMLoaderContext *loader_ctx, bool is_if_block, if (is_if_block) PUSH_OFFSET_TYPE(VALUE_TYPE_I32); - /* Free the emit data */ - wasm_runtime_free(emit_data); - return true; + ret = true; fail: /* Free the emit data */ wasm_runtime_free(emit_data); - return false; + + return ret; } #endif @@ -5498,7 +5621,8 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, uint8 *func_const_end, *func_const = NULL; int16 operand_offset = 0; uint8 last_op = 0; - bool disable_emit, preserve_local = false; + bool disable_emit, preserve_local = false, if_condition_available = true; + ; float32 f32_const; float64 f64_const; @@ -5568,11 +5692,23 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, break; case WASM_OP_IF: + { #if WASM_ENABLE_FAST_INTERP != 0 + BranchBlock *parent_block = loader_ctx->frame_csp - 1; + int32 available_stack_cell = + (int32)(loader_ctx->stack_cell_num + - parent_block->stack_cell_num); + + if (available_stack_cell <= 0 + && parent_block->is_stack_polymorphic) + if_condition_available = false; + else + if_condition_available = true; PRESERVE_LOCAL_FOR_BLOCK(); #endif POP_I32(); goto handle_op_block_and_loop; + } case WASM_OP_BLOCK: case WASM_OP_LOOP: #if WASM_ENABLE_FAST_INTERP != 0 @@ -5582,6 +5718,9 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, { uint8 value_type; BlockType block_type; +#if WASM_ENABLE_FAST_INTERP != 0 + uint32 available_params = 0; +#endif p_org = p - 1; value_type = read_uint8(p); @@ -5612,9 +5751,35 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, /* Pop block parameters from stack */ if (BLOCK_HAS_PARAM(block_type)) { WASMType *wasm_type = block_type.u.type; - for (i = 0; i < block_type.u.type->param_count; i++) + + BranchBlock *cur_block = loader_ctx->frame_csp - 1; +#if WASM_ENABLE_FAST_INTERP != 0 + uint32 cell_num; + available_params = block_type.u.type->param_count; +#endif + for (i = 0; i < block_type.u.type->param_count; i++) { + + int32 available_stack_cell = + (int32)(loader_ctx->stack_cell_num + - cur_block->stack_cell_num); + if (available_stack_cell <= 0 + && cur_block->is_stack_polymorphic) { +#if WASM_ENABLE_FAST_INTERP != 0 + available_params = i; +#endif + break; + } + POP_TYPE( wasm_type->types[wasm_type->param_count - i - 1]); +#if WASM_ENABLE_FAST_INTERP != 0 + /* decrease the frame_offset pointer accordingly to keep + * consistent with frame_ref stack */ + cell_num = wasm_value_type_cell_num( + wasm_type->types[wasm_type->param_count - i - 1]); + loader_ctx->frame_offset -= cell_num; +#endif + } } PUSH_CSP(LABEL_TYPE_BLOCK + (opcode - WASM_OP_BLOCK), @@ -5622,8 +5787,35 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, /* Pass parameters to block */ if (BLOCK_HAS_PARAM(block_type)) { - for (i = 0; i < block_type.u.type->param_count; i++) + for (i = 0; i < block_type.u.type->param_count; i++) { +#if WASM_ENABLE_FAST_INTERP != 0 + uint32 cell_num = wasm_value_type_cell_num( + block_type.u.type->types[i]); + if (i >= available_params) { + /* If there isn't enough data on stack, push a dummy + * offset to keep the stack consistent with + * frame_ref. + * Since the stack is already in polymorphic state, + * the opcode will not be executed, so the dummy + * offset won't cause any error */ + uint32 n; + + for (n = 0; n < cell_num; n++) { + if (loader_ctx->p_code_compiled == NULL) { + if (!check_offset_push(loader_ctx, + error_buf, + error_buf_size)) + goto fail; + } + *loader_ctx->frame_offset++ = 0; + } + } + else { + loader_ctx->frame_offset += cell_num; + } +#endif PUSH_TYPE(block_type.u.type->types[i]); + } } #if WASM_ENABLE_FAST_INTERP != 0 @@ -5641,6 +5833,7 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, } } else if (opcode == WASM_OP_IF) { + BranchBlock *block = loader_ctx->frame_csp - 1; /* If block has parameters, we should make sure they are in * dynamic space. Otherwise, when else branch is missing, * the later opcode may consume incorrect operand offset. @@ -5659,11 +5852,15 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, * */ if (BLOCK_HAS_PARAM(block_type)) { - BranchBlock *block = loader_ctx->frame_csp - 1; uint64 size; - /* skip the if condition operand offset */ - wasm_loader_emit_backspace(loader_ctx, sizeof(int16)); + /* In polymorphic state, there may be no if condition on + * the stack, so the offset may not emitted */ + if (if_condition_available) { + /* skip the if condition operand offset */ + wasm_loader_emit_backspace(loader_ctx, + sizeof(int16)); + } /* skip the if label */ skip_label(); /* Emit a copy instruction */ @@ -5690,6 +5887,8 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, (uint32)size); } + block->start_dynamic_offset = loader_ctx->dynamic_offset; + emit_empty_label_addr_and_frame_ip(PATCH_ELSE); emit_empty_label_addr_and_frame_ip(PATCH_END); } @@ -5699,17 +5898,22 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, case WASM_OP_ELSE: { + BranchBlock *block = NULL; BlockType block_type = (loader_ctx->frame_csp - 1)->block_type; bh_assert(loader_ctx->csp_num >= 2 + /* the matched if is found */ && (loader_ctx->frame_csp - 1)->label_type - == LABEL_TYPE_IF); + == LABEL_TYPE_IF + /* duplicated else isn't found */ + && !(loader_ctx->frame_csp - 1)->else_addr); + block = loader_ctx->frame_csp - 1; /* check whether if branch's stack matches its result type */ - if (!check_block_stack(loader_ctx, loader_ctx->frame_csp - 1, - error_buf, error_buf_size)) + if (!check_block_stack(loader_ctx, block, error_buf, + error_buf_size)) goto fail; - (loader_ctx->frame_csp - 1)->else_addr = p - 1; + block->else_addr = p - 1; #if WASM_ENABLE_FAST_INTERP != 0 /* if the result of if branch is in local or const area, add a @@ -5732,12 +5936,12 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, /* Recover top param_count values of frame_offset stack */ if (BLOCK_HAS_PARAM((block_type))) { uint32 size; - BranchBlock *block = loader_ctx->frame_csp - 1; size = sizeof(int16) * block_type.u.type->param_cell_num; bh_memcpy_s(loader_ctx->frame_offset, size, block->param_frame_offsets, size); loader_ctx->frame_offset += (size / sizeof(int16)); } + loader_ctx->dynamic_offset = block->start_dynamic_offset; #endif break; @@ -5816,8 +6020,9 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, case WASM_OP_BR: { - if (!(frame_csp_tmp = check_branch_block( - loader_ctx, &p, p_end, error_buf, error_buf_size))) + if (!(frame_csp_tmp = + check_branch_block(loader_ctx, &p, p_end, opcode, + error_buf, error_buf_size))) goto fail; RESET_STACK(); @@ -5829,8 +6034,9 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, { POP_I32(); - if (!(frame_csp_tmp = check_branch_block( - loader_ctx, &p, p_end, error_buf, error_buf_size))) + if (!(frame_csp_tmp = + check_branch_block(loader_ctx, &p, p_end, opcode, + error_buf, error_buf_size))) goto fail; break; @@ -5839,13 +6045,11 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, case WASM_OP_BR_TABLE: { uint8 *ret_types = NULL; - uint32 ret_count = 0; + uint32 ret_count = 0, depth = 0; #if WASM_ENABLE_FAST_INTERP == 0 - uint8 *p_depth_begin, *p_depth; - uint32 depth, j; BrTableCache *br_table_cache = NULL; - - p_org = p - 1; + uint8 *p_depth_begin, *p_depth, *p_opcode = p - 1; + uint32 j; #endif read_leb_uint32(p, p_end, count); @@ -5854,12 +6058,22 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, #endif POP_I32(); + /* Get each depth and check it */ + p_org = p; + for (i = 0; i <= count; i++) { + read_leb_uint32(p, p_end, depth); + bh_assert(loader_ctx->csp_num > 0); + bh_assert(loader_ctx->csp_num - 1 >= depth); + (void)depth; + } + p = p_org; + #if WASM_ENABLE_FAST_INTERP == 0 p_depth_begin = p_depth = p; #endif for (i = 0; i <= count; i++) { if (!(frame_csp_tmp = - check_branch_block(loader_ctx, &p, p_end, + check_branch_block(loader_ctx, &p, p_end, opcode, error_buf, error_buf_size))) goto fail; @@ -5879,8 +6093,8 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, error_buf, error_buf_size))) { goto fail; } - *p_org = EXT_OP_BR_TABLE_CACHE; - br_table_cache->br_table_op_addr = p_org; + *p_opcode = EXT_OP_BR_TABLE_CACHE; + br_table_cache->br_table_op_addr = p_opcode; br_table_cache->br_count = count; /* Copy previous depths which are one byte */ for (j = 0; j < i; j++) { @@ -5923,11 +6137,11 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, idx--) { ret_type = *(func->func_type->types + func->func_type->param_count + idx); - POP_TYPE(ret_type); #if WASM_ENABLE_FAST_INTERP != 0 /* emit the offset after return opcode */ POP_OFFSET_TYPE(ret_type); #endif + POP_TYPE(ret_type); } RESET_STACK(); @@ -5966,10 +6180,10 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, if (func_type->param_count > 0) { for (idx = (int32)(func_type->param_count - 1); idx >= 0; idx--) { - POP_TYPE(func_type->types[idx]); #if WASM_ENABLE_FAST_INTERP != 0 POP_OFFSET_TYPE(func_type->types[idx]); #endif + POP_TYPE(func_type->types[idx]); } } @@ -6047,10 +6261,10 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, if (func_type->param_count > 0) { for (idx = (int32)(func_type->param_count - 1); idx >= 0; idx--) { - POP_TYPE(func_type->types[idx]); #if WASM_ENABLE_FAST_INTERP != 0 POP_OFFSET_TYPE(func_type->types[idx]); #endif + POP_TYPE(func_type->types[idx]); } } @@ -6088,6 +6302,18 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, break; } +#if WASM_ENABLE_EXCE_HANDLING != 0 + case WASM_OP_TRY: + case WASM_OP_CATCH: + case WASM_OP_THROW: + case WASM_OP_RETHROW: + case WASM_OP_DELEGATE: + case WASM_OP_CATCH_ALL: + /* TODO */ + set_error_buf(error_buf, error_buf_size, "unsupported opcode"); + goto fail; +#endif + case WASM_OP_DROP: { BranchBlock *cur_block = loader_ctx->frame_csp - 1; @@ -6099,8 +6325,7 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, && !cur_block->is_stack_polymorphic)); if (available_stack_cell > 0) { - if (is_32bit_type(*(loader_ctx->frame_ref - 1)) - || *(loader_ctx->frame_ref - 1) == VALUE_TYPE_ANY) { + if (is_32bit_type(*(loader_ctx->frame_ref - 1))) { loader_ctx->frame_ref--; loader_ctx->stack_cell_num--; #if WASM_ENABLE_FAST_INTERP != 0 @@ -6162,6 +6387,7 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, switch (*(loader_ctx->frame_ref - 1)) { case REF_I32: case REF_F32: + case REF_ANY: break; case REF_I64_2: case REF_F64_2: @@ -6356,13 +6582,33 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, case WASM_OP_REF_IS_NULL: { #if WASM_ENABLE_FAST_INTERP != 0 - if (!wasm_loader_pop_frame_ref_offset(loader_ctx, - VALUE_TYPE_FUNCREF, - error_buf, error_buf_size) - && !wasm_loader_pop_frame_ref_offset( - loader_ctx, VALUE_TYPE_EXTERNREF, error_buf, - error_buf_size)) { - goto fail; + BranchBlock *cur_block = loader_ctx->frame_csp - 1; + int32 block_stack_cell_num = + (int32)(loader_ctx->stack_cell_num + - cur_block->stack_cell_num); + if (block_stack_cell_num <= 0) { + if (!cur_block->is_stack_polymorphic) { + set_error_buf( + error_buf, error_buf_size, + "type mismatch: expect data but stack was empty"); + goto fail; + } + } + else { + if (*(loader_ctx->frame_ref - 1) == VALUE_TYPE_FUNCREF + || *(loader_ctx->frame_ref - 1) == VALUE_TYPE_EXTERNREF + || *(loader_ctx->frame_ref - 1) == VALUE_TYPE_ANY) { + if (!wasm_loader_pop_frame_ref_offset( + loader_ctx, *(loader_ctx->frame_ref - 1), + error_buf, error_buf_size)) { + goto fail; + } + } + else { + set_error_buf(error_buf, error_buf_size, + "type mismatch"); + goto fail; + } } #else if (!wasm_loader_pop_frame_ref(loader_ctx, VALUE_TYPE_FUNCREF, @@ -6386,24 +6632,44 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, goto fail; } - /* Refer to a forward-declared function */ - if (func_idx >= cur_func_idx + module->import_function_count) { + /* Refer to a forward-declared function: + the function must be an import, exported, or present in + a table elem segment or global initializer to be used as + the operand to ref.func */ + if (func_idx >= module->import_function_count) { WASMTableSeg *table_seg = module->table_segments; bool func_declared = false; uint32 j; - /* Check whether the function is declared in table segs */ - for (i = 0; i < module->table_seg_count; i++, table_seg++) { - if (table_seg->elem_type == VALUE_TYPE_FUNCREF - && wasm_elem_is_declarative(table_seg->mode)) { - for (j = 0; j < table_seg->function_count; j++) { - if (table_seg->func_indexes[j] == func_idx) { - func_declared = true; - break; + for (i = 0; i < module->global_count; i++) { + if (module->globals[i].type == VALUE_TYPE_FUNCREF + && module->globals[i].init_expr.init_expr_type + == INIT_EXPR_TYPE_FUNCREF_CONST + && module->globals[i].init_expr.u.u32 == func_idx) { + func_declared = true; + break; + } + } + + if (!func_declared) { + /* Check whether the function is declared in table segs, + note that it doesn't matter whether the table seg's + mode is passive, active or declarative. */ + for (i = 0; i < module->table_seg_count; + i++, table_seg++) { + if (table_seg->elem_type == VALUE_TYPE_FUNCREF) { + for (j = 0; j < table_seg->function_count; + j++) { + if (table_seg->func_indexes[j] + == func_idx) { + func_declared = true; + break; + } } } } } + if (!func_declared) { /* Check whether the function is exported */ for (i = 0; i < module->export_count; i++) { @@ -6459,7 +6725,6 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, { p_org = p - 1; GET_LOCAL_INDEX_TYPE_AND_OFFSET(); - POP_TYPE(local_type); #if WASM_ENABLE_FAST_INTERP != 0 if (!(preserve_referenced_local( @@ -6513,6 +6778,7 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, } #endif #endif + POP_TYPE(local_type); break; } @@ -6630,8 +6896,6 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, - module->import_global_count] .type; - POP_TYPE(global_type); - #if WASM_ENABLE_FAST_INTERP == 0 if (is_64bit_type(global_type)) { *p_org = WASM_OP_SET_GLOBAL_64; @@ -6657,6 +6921,8 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, POP_OFFSET_TYPE(global_type); #endif /* end of WASM_ENABLE_FAST_INTERP */ + POP_TYPE(global_type); + (void)is_mutable; break; } @@ -6832,6 +7098,7 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, break; case WASM_OP_F32_CONST: + CHECK_BUF(p, p_end, sizeof(float32)); p += sizeof(float32); #if WASM_ENABLE_FAST_INTERP != 0 skip_label(); @@ -6850,6 +7117,7 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, break; case WASM_OP_F64_CONST: + CHECK_BUF(p, p_end, sizeof(float64)); p += sizeof(float64); #if WASM_ENABLE_FAST_INTERP != 0 skip_label(); @@ -7157,6 +7425,7 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, } case WASM_OP_MEMORY_COPY: { + CHECK_BUF(p, p_end, sizeof(int16)); /* both src and dst memory index should be 0 */ bh_assert(*(int16 *)p == 0x0000); p += 2; @@ -7339,11 +7608,14 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, #if WASM_ENABLE_SHARED_MEMORY != 0 case WASM_OP_ATOMIC_PREFIX: { - opcode = read_uint8(p); + uint32 opcode1; + + read_leb_uint32(p, p_end, opcode1); + #if WASM_ENABLE_FAST_INTERP != 0 - emit_byte(loader_ctx, opcode); + emit_byte(loader_ctx, opcode1); #endif - if (opcode != WASM_OP_ATOMIC_FENCE) { + if (opcode1 != WASM_OP_ATOMIC_FENCE) { CHECK_MEMORY(); read_leb_uint32(p, p_end, align); /* align */ read_leb_uint32(p, p_end, mem_offset); /* offset */ @@ -7354,7 +7626,7 @@ wasm_loader_prepare_bytecode(WASMModule *module, WASMFunction *func, #if WASM_ENABLE_JIT != 0 || WASM_ENABLE_WAMR_COMPILER != 0 func->has_memory_operations = true; #endif - switch (opcode) { + switch (opcode1) { case WASM_OP_ATOMIC_NOTIFY: POP2_AND_PUSH(VALUE_TYPE_I32, VALUE_TYPE_I32); break; diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/interpreter/wasm_opcode.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/interpreter/wasm_opcode.h similarity index 96% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/interpreter/wasm_opcode.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/interpreter/wasm_opcode.h index ce5e358a2d8..0144b119880 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/interpreter/wasm_opcode.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/interpreter/wasm_opcode.h @@ -20,11 +20,10 @@ typedef enum WASMOpcode { WASM_OP_LOOP = 0x03, /* loop */ WASM_OP_IF = 0x04, /* if */ WASM_OP_ELSE = 0x05, /* else */ - - WASM_OP_UNUSED_0x06 = 0x06, - WASM_OP_UNUSED_0x07 = 0x07, - WASM_OP_UNUSED_0x08 = 0x08, - WASM_OP_UNUSED_0x09 = 0x09, + WASM_OP_TRY = 0x06, /* try */ + WASM_OP_CATCH = 0x07, /* catch* */ + WASM_OP_THROW = 0x08, /* throw of a try catch */ + WASM_OP_RETHROW = 0x09, /* rethrow of a try catch */ WASM_OP_UNUSED_0x0a = 0x0a, WASM_OP_END = 0x0b, /* end */ @@ -41,8 +40,9 @@ typedef enum WASMOpcode { WASM_OP_UNUSED_0x15 = 0x15, WASM_OP_UNUSED_0x16 = 0x16, WASM_OP_UNUSED_0x17 = 0x17, - WASM_OP_UNUSED_0x18 = 0x18, - WASM_OP_UNUSED_0x19 = 0x19, + + WASM_OP_DELEGATE = 0x18, /* delegate block of the try catch*/ + WASM_OP_CATCH_ALL = 0x19, /* a catch_all handler in a try block */ /* parametric instructions */ WASM_OP_DROP = 0x1a, /* drop */ @@ -268,8 +268,10 @@ typedef enum WASMOpcode { EXT_OP_IF = 0xd5, /* if with blocktype */ EXT_OP_BR_TABLE_CACHE = 0xd6, /* br_table from cache */ + EXT_OP_TRY = 0xd7, /* try block with blocktype */ + #if WASM_ENABLE_DEBUG_INTERP != 0 - DEBUG_OP_BREAK = 0xd7, /* debug break point */ + DEBUG_OP_BREAK = 0xd8, /* debug break point */ #endif /* Post-MVP extend op prefix */ @@ -494,8 +496,8 @@ typedef enum WASMSimdEXTOpcode { /* placeholder = 0xa2 */ SIMD_i32x4_all_true = 0xa3, SIMD_i32x4_bitmask = 0xa4, - SIMD_i32x4_narrow_i64x2_s = 0xa5, - SIMD_i32x4_narrow_i64x2_u = 0xa6, + /* placeholder = 0xa5 */ + /* placeholder = 0xa6 */ SIMD_i32x4_extend_low_i16x8_s = 0xa7, SIMD_i32x4_extend_high_i16x8_s = 0xa8, SIMD_i32x4_extend_low_i16x8_u = 0xa9, @@ -504,19 +506,19 @@ typedef enum WASMSimdEXTOpcode { SIMD_i32x4_shr_s = 0xac, SIMD_i32x4_shr_u = 0xad, SIMD_i32x4_add = 0xae, - SIMD_i32x4_add_sat_s = 0xaf, - SIMD_i32x4_add_sat_u = 0xb0, + /* placeholder = 0xaf */ + /* placeholder = 0xb0 */ SIMD_i32x4_sub = 0xb1, - SIMD_i32x4_sub_sat_s = 0xb2, - SIMD_i32x4_sub_sat_u = 0xb3, - /* placeholder = 0xb4 */ + /* placeholder = 0xb2 */ + /* placeholder = 0xb3 */ + /* placeholder = 0xb4 */ SIMD_i32x4_mul = 0xb5, SIMD_i32x4_min_s = 0xb6, SIMD_i32x4_min_u = 0xb7, SIMD_i32x4_max_s = 0xb8, SIMD_i32x4_max_u = 0xb9, SIMD_i32x4_dot_i16x8_s = 0xba, - SIMD_i32x4_avgr_u = 0xbb, + /* placeholder = 0xbb */ SIMD_i32x4_extmul_low_i16x8_s = 0xbc, SIMD_i32x4_extmul_high_i16x8_s = 0xbd, SIMD_i32x4_extmul_low_i16x8_u = 0xbe, @@ -559,7 +561,7 @@ typedef enum WASMSimdEXTOpcode { /* f32x4 operation */ SIMD_f32x4_abs = 0xe0, SIMD_f32x4_neg = 0xe1, - SIMD_f32x4_round = 0xe2, + /* placeholder = 0xe2 */ SIMD_f32x4_sqrt = 0xe3, SIMD_f32x4_add = 0xe4, SIMD_f32x4_sub = 0xe5, @@ -573,7 +575,7 @@ typedef enum WASMSimdEXTOpcode { /* f64x2 operation */ SIMD_f64x2_abs = 0xec, SIMD_f64x2_neg = 0xed, - SIMD_f64x2_round = 0xee, + /* placeholder = 0xee */ SIMD_f64x2_sqrt = 0xef, SIMD_f64x2_add = 0xf0, SIMD_f64x2_sub = 0xf1, @@ -683,6 +685,13 @@ typedef enum WASMAtomicEXTOpcode { #define SET_GOTO_TABLE_ELEM(opcode) [opcode] = HANDLE_OPCODE(opcode) +#if WASM_ENABLE_JIT != 0 && WASM_ENABLE_SIMD != 0 +#define SET_GOTO_TABLE_SIMD_PREFIX_ELEM() \ + SET_GOTO_TABLE_ELEM(WASM_OP_SIMD_PREFIX), +#else +#define SET_GOTO_TABLE_SIMD_PREFIX_ELEM() +#endif + /* * Macro used to generate computed goto tables for the C interpreter. */ @@ -696,10 +705,10 @@ typedef enum WASMAtomicEXTOpcode { HANDLE_OPCODE(WASM_OP_LOOP), /* 0x03 */ \ HANDLE_OPCODE(WASM_OP_IF), /* 0x04 */ \ HANDLE_OPCODE(WASM_OP_ELSE), /* 0x05 */ \ - HANDLE_OPCODE(WASM_OP_UNUSED_0x06), /* 0x06 */ \ - HANDLE_OPCODE(WASM_OP_UNUSED_0x07), /* 0x07 */ \ - HANDLE_OPCODE(WASM_OP_UNUSED_0x08), /* 0x08 */ \ - HANDLE_OPCODE(WASM_OP_UNUSED_0x09), /* 0x09 */ \ + HANDLE_OPCODE(WASM_OP_TRY), /* 0x06 */ \ + HANDLE_OPCODE(WASM_OP_CATCH), /* 0x07 */ \ + HANDLE_OPCODE(WASM_OP_THROW), /* 0x08 */ \ + HANDLE_OPCODE(WASM_OP_RETHROW), /* 0x09 */ \ HANDLE_OPCODE(WASM_OP_UNUSED_0x0a), /* 0x0a */ \ HANDLE_OPCODE(WASM_OP_END), /* 0x0b */ \ HANDLE_OPCODE(WASM_OP_BR), /* 0x0c */ \ @@ -714,8 +723,8 @@ typedef enum WASMAtomicEXTOpcode { HANDLE_OPCODE(WASM_OP_UNUSED_0x15), /* 0x15 */ \ HANDLE_OPCODE(WASM_OP_UNUSED_0x16), /* 0x16 */ \ HANDLE_OPCODE(WASM_OP_UNUSED_0x17), /* 0x17 */ \ - HANDLE_OPCODE(WASM_OP_UNUSED_0x18), /* 0x18 */ \ - HANDLE_OPCODE(WASM_OP_UNUSED_0x19), /* 0x19 */ \ + HANDLE_OPCODE(WASM_OP_DELEGATE), /* 0x18 */ \ + HANDLE_OPCODE(WASM_OP_CATCH_ALL), /* 0x19 */ \ HANDLE_OPCODE(WASM_OP_DROP), /* 0x1a */ \ HANDLE_OPCODE(WASM_OP_SELECT), /* 0x1b */ \ HANDLE_OPCODE(WASM_OP_SELECT_T), /* 0x1c */ \ @@ -905,7 +914,9 @@ typedef enum WASMAtomicEXTOpcode { HANDLE_OPCODE(EXT_OP_LOOP), /* 0xd4 */ \ HANDLE_OPCODE(EXT_OP_IF), /* 0xd5 */ \ HANDLE_OPCODE(EXT_OP_BR_TABLE_CACHE), /* 0xd6 */ \ + HANDLE_OPCODE(EXT_OP_TRY), /* 0xd7 */ \ SET_GOTO_TABLE_ELEM(WASM_OP_MISC_PREFIX), /* 0xfc */ \ + SET_GOTO_TABLE_SIMD_PREFIX_ELEM() /* 0xfd */ \ SET_GOTO_TABLE_ELEM(WASM_OP_ATOMIC_PREFIX), /* 0xfe */ \ DEF_DEBUG_BREAK_HANDLE() \ }; diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/interpreter/wasm_runtime.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/interpreter/wasm_runtime.c similarity index 90% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/interpreter/wasm_runtime.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/interpreter/wasm_runtime.c index 205c6d4b6fb..659d788754b 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/interpreter/wasm_runtime.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/interpreter/wasm_runtime.c @@ -115,6 +115,9 @@ static void memories_deinstantiate(WASMModuleInstance *module_inst, WASMMemoryInstance **memories, uint32 count) { +#ifdef WASM_LINEAR_MEMORY_MMAP + uint64 map_size; +#endif uint32 i; if (memories) { for (i = 0; i < count; i++) { @@ -142,15 +145,21 @@ memories_deinstantiate(WASMModuleInstance *module_inst, } if (memories[i]->memory_data) { #ifndef OS_ENABLE_HW_BOUND_CHECK - wasm_runtime_free(memories[i]->memory_data); -#else -#ifdef BH_PLATFORM_WINDOWS - os_mem_decommit(memories[i]->memory_data, - memories[i]->num_bytes_per_page - * memories[i]->cur_page_count); +#ifdef WASM_LINEAR_MEMORY_MMAP + if (shared_memory_is_shared(memories[i])) { + map_size = (uint64)memories[i]->num_bytes_per_page + * memories[i]->max_page_count; + wasm_munmap_linear_memory(memories[i]->memory_data, + map_size, map_size); + } + else #endif - os_munmap((uint8 *)memories[i]->memory_data, - 8 * (uint64)BH_GB); + wasm_runtime_free(memories[i]->memory_data); +#else + map_size = (uint64)memories[i]->num_bytes_per_page + * memories[i]->cur_page_count; + wasm_munmap_linear_memory(memories[i]->memory_data, + map_size, 8 * (uint64)BH_GB); #endif } } @@ -173,10 +182,9 @@ memory_instantiate(WASMModuleInstance *module_inst, WASMModuleInstance *parent, uint32 inc_page_count, aux_heap_base, global_idx; uint32 bytes_of_last_page, bytes_to_page_end; uint8 *global_addr; -#ifdef OS_ENABLE_HW_BOUND_CHECK - uint8 *mapped_mem; - uint64 map_size = 8 * (uint64)BH_GB; - uint64 page_size = os_getpagesize(); +#ifdef WASM_LINEAR_MEMORY_MMAP + uint8 *mapped_mem = NULL; + uint64 map_size; #endif #if WASM_ENABLE_SHARED_MEMORY != 0 @@ -295,18 +303,29 @@ memory_instantiate(WASMModuleInstance *module_inst, WASMModuleInstance *parent, (void)max_memory_data_size; bh_assert(memory != NULL); + #ifndef OS_ENABLE_HW_BOUND_CHECK #if WASM_ENABLE_SHARED_MEMORY != 0 if (is_shared_memory) { /* Allocate maximum memory size when memory is shared */ +#if WASM_ENABLE_SHARED_MEMORY_MMAP != 0 + map_size = max_memory_data_size; + if (max_memory_data_size > 0 + && !(memory->memory_data = mapped_mem = + wasm_mmap_linear_memory(map_size, &max_memory_data_size, + error_buf, error_buf_size))) { + goto fail1; + } +#else if (max_memory_data_size > 0 && !(memory->memory_data = runtime_malloc( max_memory_data_size, error_buf, error_buf_size))) { goto fail1; } +#endif } else -#endif +#endif /* end of WASM_ENABLE_SHARED_MEMORY != 0 */ { /* Allocate initial memory size when memory is not shared */ if (memory_data_size > 0 @@ -315,43 +334,18 @@ memory_instantiate(WASMModuleInstance *module_inst, WASMModuleInstance *parent, goto fail1; } } -#else /* else of OS_ENABLE_HW_BOUND_CHECK */ - memory_data_size = (memory_data_size + page_size - 1) & ~(page_size - 1); - +#else /* else of OS_ENABLE_HW_BOUND_CHECK */ /* Totally 8G is mapped, the opcode load/store address range is 0 to 8G: * ea = i + memarg.offset * both i and memarg.offset are u32 in range 0 to 4G * so the range of ea is 0 to 8G */ - if (!(memory->memory_data = mapped_mem = - os_mmap(NULL, map_size, MMAP_PROT_NONE, MMAP_MAP_NONE, - os_get_invalid_handle()))) { + map_size = 8 * (uint64)BH_GB; + if (!(memory->memory_data = mapped_mem = wasm_mmap_linear_memory( + map_size, &memory_data_size, error_buf, error_buf_size))) { set_error_buf(error_buf, error_buf_size, "mmap memory failed"); goto fail1; } - -#ifdef BH_PLATFORM_WINDOWS - if (memory_data_size > 0 - && !os_mem_commit(mapped_mem, memory_data_size, - MMAP_PROT_READ | MMAP_PROT_WRITE)) { - set_error_buf(error_buf, error_buf_size, "commit memory failed"); - os_munmap(mapped_mem, map_size); - goto fail1; - } -#endif - - if (os_mprotect(mapped_mem, memory_data_size, - MMAP_PROT_READ | MMAP_PROT_WRITE) - != 0) { - set_error_buf(error_buf, error_buf_size, "mprotect memory failed"); - goto fail2; - } - - /* Newly allocated pages are filled with zero by the OS, we don't fill it - * again here */ - - if (memory_data_size > UINT32_MAX) - memory_data_size = UINT32_MAX; #endif /* end of OS_ENABLE_HW_BOUND_CHECK */ memory->module_type = Wasm_Module_Bytecode; @@ -398,15 +392,15 @@ memory_instantiate(WASMModuleInstance *module_inst, WASMModuleInstance *parent, if (heap_size > 0) wasm_runtime_free(memory->heap_handle); fail2: -#ifndef OS_ENABLE_HW_BOUND_CHECK - if (memory->memory_data) - wasm_runtime_free(memory->memory_data); -#else -#ifdef BH_PLATFORM_WINDOWS - os_mem_decommit(mapped_mem, memory_data_size); -#endif - os_munmap(mapped_mem, map_size); +#ifdef WASM_LINEAR_MEMORY_MMAP + if (mapped_mem) + wasm_munmap_linear_memory(mapped_mem, memory_data_size, map_size); + else #endif + { + if (memory->memory_data) + wasm_runtime_free(memory->memory_data); + } fail1: return NULL; } @@ -738,6 +732,101 @@ functions_instantiate(const WASMModule *module, WASMModuleInstance *module_inst, return functions; } +#if WASM_ENABLE_TAGS != 0 +/** + * Destroy tags instances. + */ +static void +tags_deinstantiate(WASMTagInstance *tags, void **import_tag_ptrs) +{ + if (tags) { + wasm_runtime_free(tags); + } + if (import_tag_ptrs) { + wasm_runtime_free(import_tag_ptrs); + } +} + +/** + * Instantiate tags in a module. + */ +static WASMTagInstance * +tags_instantiate(const WASMModule *module, WASMModuleInstance *module_inst, + char *error_buf, uint32 error_buf_size) +{ + WASMImport *import; + uint32 i, tag_count = module->import_tag_count + module->tag_count; + uint64 total_size = sizeof(WASMTagInstance) * (uint64)tag_count; + WASMTagInstance *tags, *tag; + + if (!(tags = runtime_malloc(total_size, error_buf, error_buf_size))) { + return NULL; + } + + total_size = sizeof(void *) * (uint64)module->import_tag_count; + if (total_size > 0 + && !(module_inst->e->import_tag_ptrs = + runtime_malloc(total_size, error_buf, error_buf_size))) { + wasm_runtime_free(tags); + return NULL; + } + + /* instantiate tags from import section */ + tag = tags; + import = module->import_tags; + for (i = 0; i < module->import_tag_count; i++, import++) { + tag->is_import_tag = true; + tag->u.tag_import = &import->u.tag; + tag->type = import->u.tag.type; + tag->attribute = import->u.tag.attribute; +#if WASM_ENABLE_MULTI_MODULE != 0 + if (import->u.tag.import_module) { + if (!(tag->import_module_inst = get_sub_module_inst( + module_inst, import->u.tag.import_module))) { + set_error_buf(error_buf, error_buf_size, "unknown tag"); + goto fail; + } + + if (!(tag->import_tag_inst = + wasm_lookup_tag(tag->import_module_inst, + import->u.tag.field_name, NULL))) { + set_error_buf(error_buf, error_buf_size, "unknown tag"); + goto fail; + } + + /* Copy the imported tag to current instance */ + module_inst->e->import_tag_ptrs[i] = + tag->u.tag_import->import_tag_linked; + } +#endif + tag++; + } + + /* instantiate tags from tag section */ + for (i = 0; i < module->tag_count; i++) { + tag->is_import_tag = false; + tag->type = module->tags[i]->type; + tag->u.tag = module->tags[i]; + +#if WASM_ENABLE_FAST_INTERP != 0 + /* tag->const_cell_num = function->u.func->const_cell_num; */ +#endif + tag++; + } + bh_assert((uint32)(tag - tags) == tag_count); + + return tags; + +#if WASM_ENABLE_MULTI_MODULE != 0 +fail: + tags_deinstantiate(tags, module_inst->e->import_tag_ptrs); + /* clean up */ + module_inst->e->import_tag_ptrs = NULL; + return NULL; +#endif +} +#endif + /** * Destroy global instances. */ @@ -937,6 +1026,52 @@ export_functions_instantiate(const WASMModule *module, return export_funcs; } +#if WASM_ENABLE_TAGS != 0 +/** + * Destroy export function instances. + */ +static void +export_tags_deinstantiate(WASMExportTagInstance *tags) +{ + if (tags) + wasm_runtime_free(tags); +} + +/** + * Instantiate export functions in a module. + */ +static WASMExportTagInstance * +export_tags_instantiate(const WASMModule *module, + WASMModuleInstance *module_inst, + uint32 export_tag_count, char *error_buf, + uint32 error_buf_size) +{ + WASMExportTagInstance *export_tags, *export_tag; + WASMExport *export = module->exports; + uint32 i; + uint64 total_size = + sizeof(WASMExportTagInstance) * (uint64)export_tag_count; + + if (!(export_tag = export_tags = + runtime_malloc(total_size, error_buf, error_buf_size))) { + return NULL; + } + + for (i = 0; i < module->export_count; i++, export ++) + if (export->kind == EXPORT_KIND_TAG) { + export_tag->name = export->name; + + bh_assert(module_inst->e->tags); + + export_tag->tag = &module_inst->e->tags[export->index]; + export_tag++; + } + + bh_assert((uint32)(export_tag - export_tags) == export_tag_count); + return export_tags; +} +#endif + #if WASM_ENABLE_MULTI_MODULE != 0 static void export_globals_deinstantiate(WASMExportGlobInstance *globals) @@ -1676,6 +1811,10 @@ wasm_instantiate(WASMModule *module, WASMModuleInstance *parent, "failed to allocate bitmaps"); goto fail; } + for (i = 0; i < module->data_seg_count; i++) { + if (!module->data_segments[i]->is_passive) + bh_bitmap_set_bit(module_inst->e->common.data_dropped, i); + } } #endif #if WASM_ENABLE_REF_TYPES != 0 @@ -1688,6 +1827,10 @@ wasm_instantiate(WASMModule *module, WASMModuleInstance *parent, "failed to allocate bitmaps"); goto fail; } + for (i = 0; i < module->table_seg_count; i++) { + if (wasm_elem_is_active(module->table_segments[i].mode)) + bh_bitmap_set_bit(module_inst->e->common.elem_dropped, i); + } } #endif @@ -1718,6 +1861,9 @@ wasm_instantiate(WASMModule *module, WASMModuleInstance *parent, module_inst->table_count = module->import_table_count + module->table_count; module_inst->e->function_count = module->import_function_count + module->function_count; +#if WASM_ENABLE_TAGS != 0 + module_inst->e->tag_count = module->import_tag_count + module->tag_count; +#endif /* export */ module_inst->export_func_count = get_export_count(module, EXPORT_KIND_FUNC); @@ -1726,11 +1872,15 @@ wasm_instantiate(WASMModule *module, WASMModuleInstance *parent, get_export_count(module, EXPORT_KIND_TABLE); module_inst->export_memory_count = get_export_count(module, EXPORT_KIND_MEMORY); +#if WASM_ENABLE_TAGS != 0 + module_inst->e->export_tag_count = + get_export_count(module, EXPORT_KIND_TAG); +#endif module_inst->export_global_count = get_export_count(module, EXPORT_KIND_GLOBAL); #endif - /* Instantiate memories/tables/functions */ + /* Instantiate memories/tables/functions/tags */ if ((module_inst->memory_count > 0 && !(module_inst->memories = memories_instantiate(module, module_inst, parent, heap_size, @@ -1746,6 +1896,15 @@ wasm_instantiate(WASMModule *module, WASMModuleInstance *parent, && !(module_inst->export_functions = export_functions_instantiate( module, module_inst, module_inst->export_func_count, error_buf, error_buf_size))) +#if WASM_ENABLE_TAGS != 0 + || (module_inst->e->tag_count > 0 + && !(module_inst->e->tags = tags_instantiate( + module, module_inst, error_buf, error_buf_size))) + || (module_inst->e->export_tag_count > 0 + && !(module_inst->e->export_tags = export_tags_instantiate( + module, module_inst, module_inst->e->export_tag_count, + error_buf, error_buf_size))) +#endif #if WASM_ENABLE_MULTI_MODULE != 0 || (module_inst->export_global_count > 0 && !(module_inst->export_globals = export_globals_instantiate( @@ -1763,7 +1922,6 @@ wasm_instantiate(WASMModule *module, WASMModuleInstance *parent, ) { goto fail; } - if (global_count > 0) { /* Initialize the global data */ global_data = module_inst->global_data; @@ -1859,7 +2017,7 @@ wasm_instantiate(WASMModule *module, WASMModuleInstance *parent, /* check offset */ if (base_offset > memory_size) { - LOG_DEBUG("base_offset(%d) > memory_size(%d)", base_offset, + LOG_DEBUG("base_offset(%u) > memory_size(%" PRIu64 ")", base_offset, memory_size); #if WASM_ENABLE_REF_TYPES != 0 set_error_buf(error_buf, error_buf_size, @@ -1874,7 +2032,7 @@ wasm_instantiate(WASMModule *module, WASMModuleInstance *parent, /* check offset + length(could be zero) */ length = data_seg->data_length; if ((uint64)base_offset + length > memory_size) { - LOG_DEBUG("base_offset(%d) + length(%d) > memory_size(%d)", + LOG_DEBUG("base_offset(%u) + length(%u) > memory_size(%" PRIu64 ")", base_offset, length, memory_size); #if WASM_ENABLE_REF_TYPES != 0 set_error_buf(error_buf, error_buf_size, @@ -2186,8 +2344,16 @@ wasm_deinstantiate(WASMModuleInstance *module_inst, bool is_sub_inst) tables_deinstantiate(module_inst); functions_deinstantiate(module_inst->e->functions, module_inst->e->function_count); +#if WASM_ENABLE_TAGS != 0 + tags_deinstantiate(module_inst->e->tags, module_inst->e->import_tag_ptrs); +#endif + globals_deinstantiate(module_inst->e->globals); export_functions_deinstantiate(module_inst->export_functions); +#if WASM_ENABLE_TAGS != 0 + export_tags_deinstantiate(module_inst->e->export_tags); +#endif + #if WASM_ENABLE_MULTI_MODULE != 0 export_globals_deinstantiate(module_inst->export_globals); #endif @@ -2268,10 +2434,24 @@ wasm_lookup_table(const WASMModuleInstance *module_inst, const char *name) (void)module_inst->export_tables; return module_inst->tables[0]; } + +#if WASM_ENABLE_TAGS != 0 +WASMTagInstance * +wasm_lookup_tag(const WASMModuleInstance *module_inst, const char *name, + const char *signature) +{ + uint32 i; + for (i = 0; i < module_inst->e->export_tag_count; i++) + if (!strcmp(module_inst->e->export_tags[i].name, name)) + return module_inst->e->export_tags[i].tag; + (void)signature; + return NULL; +} #endif -#ifdef OS_ENABLE_HW_BOUND_CHECK +#endif +#ifdef OS_ENABLE_HW_BOUND_CHECK static void call_wasm_with_hw_bound_check(WASMModuleInstance *module_inst, WASMExecEnv *exec_env, @@ -2301,19 +2481,26 @@ call_wasm_with_hw_bound_check(WASMModuleInstance *module_inst, return; } - if (exec_env_tls && (exec_env_tls != exec_env)) { - wasm_set_exception(module_inst, "invalid exec env"); - return; - } + if (!exec_env_tls) { + if (!os_thread_signal_inited()) { + wasm_set_exception(module_inst, "thread signal env not inited"); + return; + } - if (!os_thread_signal_inited()) { - wasm_set_exception(module_inst, "thread signal env not inited"); - return; + /* Set thread handle and stack boundary if they haven't been set */ + wasm_exec_env_set_thread_info(exec_env); + + wasm_runtime_set_exec_env_tls(exec_env); + } + else { + if (exec_env_tls != exec_env) { + wasm_set_exception(module_inst, "invalid exec env"); + return; + } } wasm_exec_env_push_jmpbuf(exec_env, &jmpbuf_node); - wasm_runtime_set_exec_env_tls(exec_env); if (os_setjmp(jmpbuf_node.jmpbuf) == 0) { #ifndef BH_PLATFORM_WINDOWS wasm_interp_call_wasm(module_inst, exec_env, function, argc, argv); @@ -2323,7 +2510,7 @@ call_wasm_with_hw_bound_check(WASMModuleInstance *module_inst, } __except (wasm_copy_exception(module_inst, NULL) ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) { - /* exception was thrown in wasm_exception_handler */ + /* Exception was thrown in wasm_exception_handler */ ret = false; } has_exception = wasm_copy_exception(module_inst, exception); @@ -2377,63 +2564,118 @@ wasm_call_function(WASMExecEnv *exec_env, WASMFunctionInstance *function, WASMModuleInstance *module_inst = (WASMModuleInstance *)exec_env->module_inst; - /* set thread handle and stack boundary */ +#ifndef OS_ENABLE_HW_BOUND_CHECK + /* Set thread handle and stack boundary */ wasm_exec_env_set_thread_info(exec_env); +#else + /* Set thread info in call_wasm_with_hw_bound_check when + hw bound check is enabled */ +#endif - /* set exec env so it can be later retrieved from instance */ + /* Set exec env so it can be later retrieved from instance */ module_inst->e->common.cur_exec_env = exec_env; interp_call_wasm(module_inst, exec_env, function, argc, argv); return !wasm_copy_exception(module_inst, NULL); } +#if WASM_ENABLE_PERF_PROFILING != 0 || WASM_ENABLE_DUMP_CALL_STACK != 0 +/* look for the function name */ +static char * +get_func_name_from_index(const WASMModuleInstance *inst, uint32 func_index) +{ + char *func_name = NULL; + WASMFunctionInstance *func_inst = inst->e->functions + func_index; + + if (func_inst->is_import_func) { + func_name = func_inst->u.func_import->field_name; + } + else { +#if WASM_ENABLE_CUSTOM_NAME_SECTION != 0 + func_name = func_inst->u.func->field_name; +#endif + /* if custom name section is not generated, + search symbols from export table */ + if (!func_name) { + unsigned j; + for (j = 0; j < inst->export_func_count; j++) { + WASMExportFuncInstance *export_func = + inst->export_functions + j; + if (export_func->function == func_inst) { + func_name = export_func->name; + break; + } + } + } + } + + return func_name; +} +#endif /*WASM_ENABLE_PERF_PROFILING != 0 || WASM_ENABLE_DUMP_CALL_STACK != 0*/ + #if WASM_ENABLE_PERF_PROFILING != 0 void wasm_dump_perf_profiling(const WASMModuleInstance *module_inst) { - WASMExportFuncInstance *export_func; WASMFunctionInstance *func_inst; char *func_name; - uint32 i, j; + uint32 i; os_printf("Performance profiler data:\n"); for (i = 0; i < module_inst->e->function_count; i++) { func_inst = module_inst->e->functions + i; - if (func_inst->is_import_func) { - func_name = func_inst->u.func_import->field_name; - } -#if WASM_ENABLE_CUSTOM_NAME_SECTION != 0 - else if (func_inst->u.func->field_name) { - func_name = func_inst->u.func->field_name; - } -#endif - else { - func_name = NULL; - for (j = 0; j < module_inst->export_func_count; j++) { - export_func = module_inst->export_functions + j; - if (export_func->function == func_inst) { - func_name = export_func->name; - break; - } - } - } + if (func_inst->total_exec_cnt == 0) + continue; + + func_name = get_func_name_from_index(module_inst, i); if (func_name) os_printf( " func %s, execution time: %.3f ms, execution count: %" PRIu32 - " times\n", - func_name, - module_inst->e->functions[i].total_exec_time / 1000.0f, - module_inst->e->functions[i].total_exec_cnt); + " times, children execution time: %.3f ms\n", + func_name, func_inst->total_exec_time / 1000.0f, + func_inst->total_exec_cnt, + func_inst->children_exec_time / 1000.0f); else os_printf(" func %" PRIu32 ", execution time: %.3f ms, execution count: %" PRIu32 - " times\n", - i, module_inst->e->functions[i].total_exec_time / 1000.0f, - module_inst->e->functions[i].total_exec_cnt); + " times, children execution time: %.3f ms\n", + i, func_inst->total_exec_time / 1000.0f, + func_inst->total_exec_cnt, + func_inst->children_exec_time / 1000.0f); } } -#endif + +double +wasm_summarize_wasm_execute_time(const WASMModuleInstance *inst) +{ + double ret = 0; + + unsigned i; + for (i = 0; i < inst->e->function_count; i++) { + WASMFunctionInstance *func = inst->e->functions + i; + ret += (func->total_exec_time - func->children_exec_time) / 1000.0f; + } + + return ret; +} + +double +wasm_get_wasm_func_exec_time(const WASMModuleInstance *inst, + const char *func_name) +{ + unsigned i; + for (i = 0; i < inst->e->function_count; i++) { + char *name_in_wasm = get_func_name_from_index(inst, i); + if (name_in_wasm && strcmp(name_in_wasm, func_name) == 0) { + WASMFunctionInstance *func = inst->e->functions + i; + return (func->total_exec_time - func->children_exec_time) / 1000.0f; + } + } + + return -1.0; +} +#endif /*WASM_ENABLE_PERF_PROFILING != 0*/ uint32 wasm_module_malloc_internal(WASMModuleInstance *module_inst, @@ -2928,29 +3170,7 @@ wasm_interp_create_call_stack(struct WASMExecEnv *exec_env) frame.func_offset = (uint32)(cur_frame->ip - func_code_base); } - /* look for the function name */ - if (func_inst->is_import_func) { - func_name = func_inst->u.func_import->field_name; - } - else { -#if WASM_ENABLE_CUSTOM_NAME_SECTION != 0 - func_name = func_inst->u.func->field_name; -#endif - /* if custom name section is not generated, - search symbols from export table */ - if (!func_name) { - uint32 i; - for (i = 0; i < module_inst->export_func_count; i++) { - WASMExportFuncInstance *export_func = - module_inst->export_functions + i; - if (export_func->function == func_inst) { - func_name = export_func->name; - break; - } - } - } - } - + func_name = get_func_name_from_index(module_inst, frame.func_index); frame.func_name_wp = func_name; if (!bh_vector_append(module_inst->frames, &frame)) { @@ -3245,6 +3465,7 @@ llvm_jit_table_init(WASMModuleInstance *module_inst, uint32 tbl_idx, { WASMTableInstance *tbl_inst; WASMTableSeg *tbl_seg; + uint32 *tbl_seg_elems = NULL, tbl_seg_len = 0; bh_assert(module_inst->module_type == Wasm_Module_Bytecode); @@ -3254,31 +3475,26 @@ llvm_jit_table_init(WASMModuleInstance *module_inst, uint32 tbl_idx, bh_assert(tbl_inst); bh_assert(tbl_seg); - if (offset_len_out_of_bounds(src_offset, length, tbl_seg->function_count) - || offset_len_out_of_bounds(dst_offset, length, tbl_inst->cur_size)) { - jit_set_exception_with_id(module_inst, EXCE_OUT_OF_BOUNDS_TABLE_ACCESS); - return; - } - - if (!length) { - return; + if (!bh_bitmap_get_bit(module_inst->e->common.elem_dropped, tbl_seg_idx)) { + /* table segment isn't dropped */ + tbl_seg_elems = tbl_seg->func_indexes; + tbl_seg_len = tbl_seg->function_count; } - if (bh_bitmap_get_bit(module_inst->e->common.elem_dropped, tbl_seg_idx)) { + if (offset_len_out_of_bounds(src_offset, length, tbl_seg_len) + || offset_len_out_of_bounds(dst_offset, length, tbl_inst->cur_size)) { jit_set_exception_with_id(module_inst, EXCE_OUT_OF_BOUNDS_TABLE_ACCESS); return; } - if (!wasm_elem_is_passive(tbl_seg->mode)) { - jit_set_exception_with_id(module_inst, EXCE_OUT_OF_BOUNDS_TABLE_ACCESS); + if (!length) { return; } bh_memcpy_s((uint8 *)tbl_inst + offsetof(WASMTableInstance, elems) + dst_offset * sizeof(uint32), (uint32)sizeof(uint32) * (tbl_inst->cur_size - dst_offset), - tbl_seg->func_indexes + src_offset, - (uint32)(length * sizeof(uint32))); + tbl_seg_elems + src_offset, (uint32)(length * sizeof(uint32))); } void @@ -3397,7 +3613,7 @@ llvm_jit_alloc_frame(WASMExecEnv *exec_env, uint32 func_index) frame->ip = NULL; frame->sp = frame->lp; #if WASM_ENABLE_PERF_PROFILING != 0 - frame->time_started = os_time_get_boot_microsecond(); + frame->time_started = os_time_thread_cputime_us(); #endif frame->prev_frame = wasm_exec_env_get_cur_frame(exec_env); wasm_exec_env_set_cur_frame(exec_env, frame); @@ -3418,9 +3634,13 @@ llvm_jit_free_frame(WASMExecEnv *exec_env) #if WASM_ENABLE_PERF_PROFILING != 0 if (frame->function) { - frame->function->total_exec_time += - os_time_get_boot_microsecond() - frame->time_started; + uint64 elapsed = os_time_thread_cputime_us() - frame->time_started; + frame->function->total_exec_time += elapsed; frame->function->total_exec_cnt++; + + /* parent function */ + if (prev_frame) + prev_frame->function->children_exec_time += elapsed; } #endif wasm_exec_env_free_wasm_frame(exec_env, frame); diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/interpreter/wasm_runtime.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/interpreter/wasm_runtime.h similarity index 93% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/interpreter/wasm_runtime.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/interpreter/wasm_runtime.h index bb5fdc80bbe..b1224863efc 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/interpreter/wasm_runtime.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/interpreter/wasm_runtime.h @@ -28,6 +28,9 @@ typedef struct WASMFunctionInstance WASMFunctionInstance; typedef struct WASMMemoryInstance WASMMemoryInstance; typedef struct WASMTableInstance WASMTableInstance; typedef struct WASMGlobalInstance WASMGlobalInstance; +#if WASM_ENABLE_TAGS != 0 +typedef struct WASMTagInstance WASMTagInstance; +#endif /** * When LLVM JIT, WAMR compiler or AOT is enabled, we should ensure that @@ -186,9 +189,35 @@ struct WASMFunctionInstance { uint64 total_exec_time; /* total execution count */ uint32 total_exec_cnt; + /* children execution time */ + uint64 children_exec_time; +#endif +}; + +#if WASM_ENABLE_TAGS != 0 +struct WASMTagInstance { + bool is_import_tag; + /* tag attribute */ + uint8 attribute; + /* tag type index */ + uint32 type; + union { + WASMTagImport *tag_import; + WASMTag *tag; + } u; + +#if WASM_ENABLE_MULTI_MODULE != 0 + WASMModuleInstance *import_module_inst; + WASMTagInstance *import_tag_inst; #endif }; +#endif +#if WASM_ENABLE_EXCE_HANDLING != 0 +#define INVALID_TAGINDEX ((uint32)0xFFFFFFFF) +#define SET_INVALID_TAGINDEX(tag) (tag = INVALID_TAGINDEX) +#define IS_INVALID_TAGINDEX(tag) ((tag & INVALID_TAGINDEX) == INVALID_TAGINDEX) +#endif typedef struct WASMExportFuncInstance { char *name; WASMFunctionInstance *function; @@ -209,6 +238,13 @@ typedef struct WASMExportMemInstance { WASMMemoryInstance *memory; } WASMExportMemInstance; +#if WASM_ENABLE_TAGS != 0 +typedef struct WASMExportTagInstance { + char *name; + WASMTagInstance *tag; +} WASMExportTagInstance; +#endif + /* wasm-c-api import function info */ typedef struct CApiFuncImport { /* host func pointer after linked */ @@ -221,8 +257,8 @@ typedef struct CApiFuncImport { /* The common part of WASMModuleInstanceExtra and AOTModuleInstanceExtra */ typedef struct WASMModuleInstanceExtraCommon { - void *contexts[WASM_MAX_INSTANCE_CONTEXTS]; CApiFuncImport *c_api_func_imports; + void *contexts[WASM_MAX_INSTANCE_CONTEXTS]; /* pointer to the exec env currently used */ WASMExecEnv *cur_exec_env; #if WASM_CONFIGURABLE_BOUNDS_CHECKS != 0 @@ -261,6 +297,14 @@ typedef struct WASMModuleInstanceExtra { WASMTableInstance **table_insts_linked; #endif +#if WASM_ENABLE_TAGS != 0 + uint32 tag_count; + uint32 export_tag_count; + WASMTagInstance *tags; + WASMExportTagInstance *export_tags; + void **import_tag_ptrs; +#endif + #if WASM_ENABLE_MEMORY_PROFILING != 0 uint32 max_aux_stack_used; #endif @@ -432,6 +476,13 @@ wasm_instantiate(WASMModule *module, WASMModuleInstance *parent, void wasm_dump_perf_profiling(const WASMModuleInstance *module_inst); +double +wasm_summarize_wasm_execute_time(const WASMModuleInstance *inst); + +double +wasm_get_wasm_func_exec_time(const WASMModuleInstance *inst, + const char *func_name); + void wasm_deinstantiate(WASMModuleInstance *module_inst, bool is_sub_inst); @@ -452,6 +503,13 @@ wasm_lookup_memory(const WASMModuleInstance *module_inst, const char *name); WASMTableInstance * wasm_lookup_table(const WASMModuleInstance *module_inst, const char *name); + +#if WASM_ENABLE_TAGS != 0 +WASMTagInstance * +wasm_lookup_tag(const WASMModuleInstance *module_inst, const char *name, + const char *signature); +#endif + #endif bool diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/debug-engine/debug_engine.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/debug-engine/debug_engine.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/debug-engine/debug_engine.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/debug-engine/debug_engine.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/debug-engine/debug_engine.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/debug-engine/debug_engine.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/debug-engine/debug_engine.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/debug-engine/debug_engine.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/debug-engine/debug_engine.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/debug-engine/debug_engine.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/debug-engine/debug_engine.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/debug-engine/debug_engine.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/debug-engine/gdbserver.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/debug-engine/gdbserver.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/debug-engine/gdbserver.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/debug-engine/gdbserver.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/debug-engine/gdbserver.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/debug-engine/gdbserver.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/debug-engine/gdbserver.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/debug-engine/gdbserver.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/debug-engine/handler.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/debug-engine/handler.c similarity index 99% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/debug-engine/handler.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/debug-engine/handler.c index 8d451b1a358..905ca2f7c20 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/debug-engine/handler.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/debug-engine/handler.c @@ -309,9 +309,11 @@ handle_general_query(WASMGDBServer *server, char *payload) } if (!strcmp(name, "WasmData")) { + write_packet(server, ""); } if (!strcmp(name, "WasmMem")) { + write_packet(server, ""); } if (!strcmp(name, "Symbol")) { @@ -447,7 +449,7 @@ send_thread_stop_status(WASMGDBServer *server, uint32 status, korp_tid tid) "thread-pcs:%" PRIx64 ";00:%s;reason:%s;", pc, pc_string, "trace"); } - else if (status > 0) { + else { /* status > 0 (== 0 is checked at the function beginning) */ len += snprintf(tmpbuf + len, MAX_PACKET_SIZE - len, "thread-pcs:%" PRIx64 ";00:%s;reason:%s;", pc, pc_string, "signal"); diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/debug-engine/handler.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/debug-engine/handler.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/debug-engine/handler.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/debug-engine/handler.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/debug-engine/packets.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/debug-engine/packets.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/debug-engine/packets.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/debug-engine/packets.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/debug-engine/packets.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/debug-engine/packets.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/debug-engine/packets.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/debug-engine/packets.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/debug-engine/utils.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/debug-engine/utils.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/debug-engine/utils.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/debug-engine/utils.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/debug-engine/utils.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/debug-engine/utils.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/debug-engine/utils.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/debug-engine/utils.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-pthread/SConscript b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-pthread/SConscript similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-pthread/SConscript rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-pthread/SConscript diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-pthread/lib_pthread.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-pthread/lib_pthread.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-pthread/lib_pthread.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-pthread/lib_pthread.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-pthread/lib_pthread_wrapper.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-pthread/lib_pthread_wrapper.c similarity index 96% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-pthread/lib_pthread_wrapper.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-pthread/lib_pthread_wrapper.c index 56deaff32f1..3092f5d0310 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-pthread/lib_pthread_wrapper.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-pthread/lib_pthread_wrapper.c @@ -468,7 +468,7 @@ get_thread_info(wasm_exec_env_t exec_env, uint32 handle) WASMCluster *cluster = wasm_exec_env_get_cluster(exec_env); ClusterInfoNode *info = get_cluster_info(cluster); - if (!info) { + if (!info || !handle) { return NULL; } @@ -558,6 +558,7 @@ pthread_create_wrapper(wasm_exec_env_t exec_env, ThreadRoutineArgs *routine_args = NULL; uint32 thread_handle; uint32 stack_size = 8192; + uint32 aux_stack_start = 0, aux_stack_size; int32 ret = -1; bh_assert(module); @@ -609,10 +610,22 @@ pthread_create_wrapper(wasm_exec_env_t exec_env, routine_args->info_node = info_node; routine_args->module_inst = new_module_inst; + /* Allocate aux stack previously since exec_env->wait_lock is acquired + below, and if the stack is allocated in wasm_cluster_create_thread, + runtime may call the exported malloc function to allocate the stack, + which acquires exec_env->wait again in wasm_exec_env_set_thread_info, + and recursive lock (or hang) occurs */ + if (!wasm_cluster_allocate_aux_stack(exec_env, &aux_stack_start, + &aux_stack_size)) { + LOG_ERROR("thread manager error: " + "failed to allocate aux stack space for new thread"); + goto fail; + } + os_mutex_lock(&exec_env->wait_lock); - ret = - wasm_cluster_create_thread(exec_env, new_module_inst, true, - pthread_start_routine, (void *)routine_args); + ret = wasm_cluster_create_thread( + exec_env, new_module_inst, true, aux_stack_start, aux_stack_size, + pthread_start_routine, (void *)routine_args); if (ret != 0) { os_mutex_unlock(&exec_env->wait_lock); goto fail; @@ -636,6 +649,8 @@ pthread_create_wrapper(wasm_exec_env_t exec_env, wasm_runtime_free(info_node); if (routine_args) wasm_runtime_free(routine_args); + if (aux_stack_start) + wasm_cluster_free_aux_stack(exec_env, aux_stack_start); return ret; } @@ -1129,6 +1144,10 @@ sem_open_wrapper(wasm_exec_env_t exec_env, const char *name, int32 oflags, * For Unix like system, it's dedicated for multiple processes. */ + if (!name) { /* avoid passing NULL to bh_hash_map_find and os_sem_open */ + return -1; + } + if ((info_node = bh_hash_map_find(sem_info_map, (void *)name))) { return info_node->handle; } @@ -1261,7 +1280,13 @@ sem_unlink_wrapper(wasm_exec_env_t exec_env, const char *name) (void)exec_env; int32 ret_val; - ThreadInfoNode *info_node = bh_hash_map_find(sem_info_map, (void *)name); + ThreadInfoNode *info_node; + + if (!name) { /* avoid passing NULL to bh_hash_map_find */ + return -1; + } + + info_node = bh_hash_map_find(sem_info_map, (void *)name); if (!info_node || info_node->type != T_SEM) return -1; diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-rats/lib_rats.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-rats/lib_rats.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-rats/lib_rats.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-rats/lib_rats.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-rats/lib_rats_common.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-rats/lib_rats_common.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-rats/lib_rats_common.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-rats/lib_rats_common.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-rats/lib_rats_wrapper.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-rats/lib_rats_wrapper.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-rats/lib_rats_wrapper.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-rats/lib_rats_wrapper.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-rats/lib_rats_wrapper.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-rats/lib_rats_wrapper.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-rats/lib_rats_wrapper.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-rats/lib_rats_wrapper.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-socket/inc/wasi_socket_ext.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-socket/inc/wasi_socket_ext.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-socket/inc/wasi_socket_ext.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-socket/inc/wasi_socket_ext.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-socket/lib_socket_wasi.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-socket/lib_socket_wasi.cmake similarity index 90% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-socket/lib_socket_wasi.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-socket/lib_socket_wasi.cmake index 209b0c4c9c3..8ddddffebad 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-socket/lib_socket_wasi.cmake +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-socket/lib_socket_wasi.cmake @@ -3,7 +3,7 @@ cmake_minimum_required (VERSION 2.8...3.16) -project(socket_wasi_ext) +project(socket_wasi_ext LANGUAGES C) add_library(${PROJECT_NAME} STATIC ${CMAKE_CURRENT_LIST_DIR}/src/wasi/wasi_socket_ext.c) target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_LIST_DIR}/inc/) diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-socket/src/wasi/wasi_socket_ext.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-socket/src/wasi/wasi_socket_ext.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-socket/src/wasi/wasi_socket_ext.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-socket/src/wasi/wasi_socket_ext.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-socket/test/build.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-socket/test/build.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-socket/test/build.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-socket/test/build.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-socket/test/manifest.json b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-socket/test/manifest.json similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-socket/test/manifest.json rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-socket/test/manifest.json diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-socket/test/nslookup.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-socket/test/nslookup.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-socket/test/nslookup.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-socket/test/nslookup.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-socket/test/tcp_udp.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-socket/test/tcp_udp.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-socket/test/tcp_udp.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-socket/test/tcp_udp.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/lib_wasi_threads.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/lib_wasi_threads.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/lib_wasi_threads.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/lib_wasi_threads.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/lib_wasi_threads_wrapper.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/lib_wasi_threads_wrapper.c similarity index 99% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/lib_wasi_threads_wrapper.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/lib_wasi_threads_wrapper.c index 7e557be9009..3922661136f 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/lib_wasi_threads_wrapper.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/lib_wasi_threads_wrapper.c @@ -119,7 +119,7 @@ thread_spawn_wrapper(wasm_exec_env_t exec_env, uint32 start_arg) thread_start_arg->arg = start_arg; thread_start_arg->start_func = start_func; - ret = wasm_cluster_create_thread(exec_env, new_module_inst, false, + ret = wasm_cluster_create_thread(exec_env, new_module_inst, false, 0, 0, thread_start, thread_start_arg); if (ret != 0) { LOG_ERROR("Failed to spawn a new thread"); diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/stress-test/build.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/stress-test/build.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/stress-test/build.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/stress-test/build.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/stress-test/errorcheck_mutex_stress_test.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/stress-test/errorcheck_mutex_stress_test.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/stress-test/errorcheck_mutex_stress_test.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/stress-test/errorcheck_mutex_stress_test.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/stress-test/manifest.json b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/stress-test/manifest.json similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/stress-test/manifest.json rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/stress-test/manifest.json diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/stress-test/mutex_common.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/stress-test/mutex_common.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/stress-test/mutex_common.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/stress-test/mutex_common.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/stress-test/normal_mutex_stress_test.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/stress-test/normal_mutex_stress_test.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/stress-test/normal_mutex_stress_test.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/stress-test/normal_mutex_stress_test.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/stress-test/recursive_mutex_stress_test.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/stress-test/recursive_mutex_stress_test.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/stress-test/recursive_mutex_stress_test.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/stress-test/recursive_mutex_stress_test.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/stress-test/spawn_stress_test.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/stress-test/spawn_stress_test.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/stress-test/spawn_stress_test.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/stress-test/spawn_stress_test.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/stress-test/stress_test_threads_creation.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/stress-test/stress_test_threads_creation.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/stress-test/stress_test_threads_creation.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/stress-test/stress_test_threads_creation.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/build.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/build.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/build.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/build.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/common.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/common.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/common.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/common.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/create_threads_until_limit.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/create_threads_until_limit.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/create_threads_until_limit.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/create_threads_until_limit.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/global_atomic.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/global_atomic.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/global_atomic.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/global_atomic.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/global_lock.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/global_lock.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/global_lock.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/global_lock.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/linear_memory_size_update.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/linear_memory_size_update.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/linear_memory_size_update.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/linear_memory_size_update.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/main_proc_exit_busy.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/main_proc_exit_busy.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/main_proc_exit_busy.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/main_proc_exit_busy.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/main_proc_exit_busy.json b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/main_proc_exit_busy.json similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/main_proc_exit_busy.json rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/main_proc_exit_busy.json diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/main_proc_exit_sleep.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/main_proc_exit_sleep.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/main_proc_exit_sleep.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/main_proc_exit_sleep.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/main_proc_exit_sleep.json b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/main_proc_exit_sleep.json similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/main_proc_exit_sleep.json rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/main_proc_exit_sleep.json diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/main_proc_exit_wait.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/main_proc_exit_wait.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/main_proc_exit_wait.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/main_proc_exit_wait.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/main_proc_exit_wait.json b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/main_proc_exit_wait.json similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/main_proc_exit_wait.json rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/main_proc_exit_wait.json diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/main_trap_busy.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/main_trap_busy.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/main_trap_busy.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/main_trap_busy.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/main_trap_busy.json b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/main_trap_busy.json similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/main_trap_busy.json rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/main_trap_busy.json diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/main_trap_sleep.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/main_trap_sleep.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/main_trap_sleep.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/main_trap_sleep.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/main_trap_sleep.json b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/main_trap_sleep.json similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/main_trap_sleep.json rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/main_trap_sleep.json diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/main_trap_wait.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/main_trap_wait.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/main_trap_wait.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/main_trap_wait.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/main_trap_wait.json b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/main_trap_wait.json similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/main_trap_wait.json rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/main_trap_wait.json diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/manifest.json b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/manifest.json similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/manifest.json rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/manifest.json diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/nonmain_proc_exit_busy.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/nonmain_proc_exit_busy.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/nonmain_proc_exit_busy.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/nonmain_proc_exit_busy.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/nonmain_proc_exit_busy.json b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/nonmain_proc_exit_busy.json similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/nonmain_proc_exit_busy.json rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/nonmain_proc_exit_busy.json diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/nonmain_proc_exit_sleep.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/nonmain_proc_exit_sleep.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/nonmain_proc_exit_sleep.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/nonmain_proc_exit_sleep.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/nonmain_proc_exit_sleep.json b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/nonmain_proc_exit_sleep.json similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/nonmain_proc_exit_sleep.json rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/nonmain_proc_exit_sleep.json diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/nonmain_proc_exit_wait.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/nonmain_proc_exit_wait.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/nonmain_proc_exit_wait.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/nonmain_proc_exit_wait.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/nonmain_proc_exit_wait.json b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/nonmain_proc_exit_wait.json similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/nonmain_proc_exit_wait.json rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/nonmain_proc_exit_wait.json diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/nonmain_trap_busy.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/nonmain_trap_busy.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/nonmain_trap_busy.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/nonmain_trap_busy.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/nonmain_trap_busy.json b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/nonmain_trap_busy.json similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/nonmain_trap_busy.json rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/nonmain_trap_busy.json diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/nonmain_trap_sleep.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/nonmain_trap_sleep.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/nonmain_trap_sleep.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/nonmain_trap_sleep.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/nonmain_trap_sleep.json b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/nonmain_trap_sleep.json similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/nonmain_trap_sleep.json rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/nonmain_trap_sleep.json diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/nonmain_trap_wait.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/nonmain_trap_wait.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/nonmain_trap_wait.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/nonmain_trap_wait.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/nonmain_trap_wait.json b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/nonmain_trap_wait.json similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/nonmain_trap_wait.json rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/nonmain_trap_wait.json diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/spawn_multiple_times.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/spawn_multiple_times.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/spawn_multiple_times.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/spawn_multiple_times.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/sync_primitives.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/sync_primitives.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/sync_primitives.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/sync_primitives.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/trap_after_main_thread_finishes.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/trap_after_main_thread_finishes.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/trap_after_main_thread_finishes.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/trap_after_main_thread_finishes.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/update_shared_data_and_alloc_heap.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/update_shared_data_and_alloc_heap.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/test/update_shared_data_and_alloc_heap.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/test/update_shared_data_and_alloc_heap.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/tid_allocator.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/tid_allocator.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/tid_allocator.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/tid_allocator.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/tid_allocator.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/tid_allocator.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/tid_allocator.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/tid_allocator.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/unit-test/lib_wasi_threads_unit_tests.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/unit-test/lib_wasi_threads_unit_tests.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/unit-test/lib_wasi_threads_unit_tests.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/unit-test/lib_wasi_threads_unit_tests.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/unit-test/test_tid_allocator.cpp b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/unit-test/test_tid_allocator.cpp similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/lib-wasi-threads/unit-test/test_tid_allocator.cpp rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/lib-wasi-threads/unit-test/test_tid_allocator.cpp diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-builtin/SConscript b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-builtin/SConscript similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-builtin/SConscript rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-builtin/SConscript diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-builtin/libc_builtin.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-builtin/libc_builtin.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-builtin/libc_builtin.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-builtin/libc_builtin.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-builtin/libc_builtin_wrapper.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-builtin/libc_builtin_wrapper.c similarity index 98% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-builtin/libc_builtin_wrapper.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-builtin/libc_builtin_wrapper.c index 55916deb469..923840f3b51 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-builtin/libc_builtin_wrapper.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-builtin/libc_builtin_wrapper.c @@ -426,7 +426,7 @@ sprintf_wrapper(wasm_exec_env_t exec_env, char *str, const char *format, if (!wasm_runtime_get_native_addr_range(module_inst, (uint8 *)str, NULL, &native_end_offset)) { wasm_runtime_set_exception(module_inst, "out of bounds memory access"); - return false; + return 0; } ctx.str = str; @@ -473,12 +473,16 @@ snprintf_wrapper(wasm_exec_env_t exec_env, char *str, uint32 size, static int puts_wrapper(wasm_exec_env_t exec_env, const char *str) { + (void)exec_env; + return os_printf("%s\n", str); } static int putchar_wrapper(wasm_exec_env_t exec_env, int c) { + (void)exec_env; + os_printf("%c", c); return 1; } @@ -585,6 +589,8 @@ strchr_wrapper(wasm_exec_env_t exec_env, const char *s, int32 c) static int32 strcmp_wrapper(wasm_exec_env_t exec_env, const char *s1, const char *s2) { + (void)exec_env; + /* s1 and s2 have been checked by runtime */ return strcmp(s1, s2); } @@ -641,6 +647,8 @@ strncpy_wrapper(wasm_exec_env_t exec_env, char *dst, const char *src, static uint32 strlen_wrapper(wasm_exec_env_t exec_env, const char *s) { + (void)exec_env; + /* s has been checked by runtime */ return (uint32)strlen(s); } @@ -693,6 +701,7 @@ free_wrapper(wasm_exec_env_t exec_env, void *ptr) static int32 atoi_wrapper(wasm_exec_env_t exec_env, const char *s) { + (void)exec_env; /* s has been checked by runtime */ return atoi(s); } @@ -757,6 +766,8 @@ static int32 strncasecmp_wrapper(wasm_exec_env_t exec_env, const char *s1, const char *s2, uint32 n) { + (void)exec_env; + /* s1 and s2 have been checked by runtime */ return strncasecmp(s1, s2, n); } @@ -764,6 +775,8 @@ strncasecmp_wrapper(wasm_exec_env_t exec_env, const char *s1, const char *s2, static uint32 strspn_wrapper(wasm_exec_env_t exec_env, const char *s, const char *accept) { + (void)exec_env; + /* s and accept have been checked by runtime */ return (uint32)strspn(s, accept); } @@ -771,6 +784,8 @@ strspn_wrapper(wasm_exec_env_t exec_env, const char *s, const char *accept) static uint32 strcspn_wrapper(wasm_exec_env_t exec_env, const char *s, const char *reject) { + (void)exec_env; + /* s and reject have been checked by runtime */ return (uint32)strcspn(s, reject); } @@ -787,60 +802,80 @@ strstr_wrapper(wasm_exec_env_t exec_env, const char *s, const char *find) static int32 isupper_wrapper(wasm_exec_env_t exec_env, int32 c) { + (void)exec_env; + return isupper(c); } static int32 isalpha_wrapper(wasm_exec_env_t exec_env, int32 c) { + (void)exec_env; + return isalpha(c); } static int32 isspace_wrapper(wasm_exec_env_t exec_env, int32 c) { + (void)exec_env; + return isspace(c); } static int32 isgraph_wrapper(wasm_exec_env_t exec_env, int32 c) { + (void)exec_env; + return isgraph(c); } static int32 isprint_wrapper(wasm_exec_env_t exec_env, int32 c) { + (void)exec_env; + return isprint(c); } static int32 isdigit_wrapper(wasm_exec_env_t exec_env, int32 c) { + (void)exec_env; + return isdigit(c); } static int32 isxdigit_wrapper(wasm_exec_env_t exec_env, int32 c) { + (void)exec_env; + return isxdigit(c); } static int32 tolower_wrapper(wasm_exec_env_t exec_env, int32 c) { + (void)exec_env; + return tolower(c); } static int32 toupper_wrapper(wasm_exec_env_t exec_env, int32 c) { + (void)exec_env; + return toupper(c); } static int32 isalnum_wrapper(wasm_exec_env_t exec_env, int32 c) { + (void)exec_env; + return isalnum(c); } @@ -899,7 +934,10 @@ __cxa_allocate_exception_wrapper(wasm_exec_env_t exec_env, uint32 thrown_size) static void __cxa_begin_catch_wrapper(wasm_exec_env_t exec_env, void *exception_object) -{} +{ + (void)exec_env; + (void)exception_object; +} static void __cxa_throw_wrapper(wasm_exec_env_t exec_env, void *thrown_exception, @@ -908,6 +946,10 @@ __cxa_throw_wrapper(wasm_exec_env_t exec_env, void *thrown_exception, wasm_module_inst_t module_inst = get_module_inst(exec_env); char buf[32]; + (void)thrown_exception; + (void)tinfo; + (void)table_elem_idx; + snprintf(buf, sizeof(buf), "%s", "exception thrown by stdc++"); wasm_runtime_set_exception(module_inst, buf); } @@ -924,10 +966,12 @@ clock_gettime_wrapper(wasm_exec_env_t exec_env, uint32 clk_id, wasm_module_inst_t module_inst = get_module_inst(exec_env); uint64 time; + (void)clk_id; + if (!validate_native_addr(ts_app, sizeof(struct timespec_app))) return (uint32)-1; - time = os_time_get_boot_microsecond(); + time = os_time_get_boot_us(); ts_app->tv_sec = time / 1000000; ts_app->tv_nsec = (time % 1000000) * 1000; @@ -937,9 +981,11 @@ clock_gettime_wrapper(wasm_exec_env_t exec_env, uint32 clk_id, static uint64 clock_wrapper(wasm_exec_env_t exec_env) { + (void)exec_env; + /* Convert to nano seconds as CLOCKS_PER_SEC in wasi-sdk */ - return os_time_get_boot_microsecond() * 1000; + return os_time_get_boot_us() * 1000; } #if WASM_ENABLE_SPEC_TEST != 0 diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-emcc/SConscript b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-emcc/SConscript similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-emcc/SConscript rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-emcc/SConscript diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-emcc/libc_emcc.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-emcc/libc_emcc.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-emcc/libc_emcc.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-emcc/libc_emcc.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-emcc/libc_emcc_wrapper.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-emcc/libc_emcc_wrapper.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-emcc/libc_emcc_wrapper.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-emcc/libc_emcc_wrapper.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-uvwasi/FindLIBUV.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-uvwasi/FindLIBUV.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-uvwasi/FindLIBUV.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-uvwasi/FindLIBUV.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-uvwasi/FindUVWASI.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-uvwasi/FindUVWASI.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-uvwasi/FindUVWASI.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-uvwasi/FindUVWASI.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-uvwasi/LICENSE_LIBUV b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-uvwasi/LICENSE_LIBUV similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-uvwasi/LICENSE_LIBUV rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-uvwasi/LICENSE_LIBUV diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-uvwasi/LICENSE_UVWASI b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-uvwasi/LICENSE_UVWASI similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-uvwasi/LICENSE_UVWASI rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-uvwasi/LICENSE_UVWASI diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-uvwasi/libc_uvwasi.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-uvwasi/libc_uvwasi.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-uvwasi/libc_uvwasi.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-uvwasi/libc_uvwasi.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-uvwasi/libc_uvwasi_wrapper.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-uvwasi/libc_uvwasi_wrapper.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-uvwasi/libc_uvwasi_wrapper.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-uvwasi/libc_uvwasi_wrapper.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/SConscript b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/SConscript similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/SConscript rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/SConscript diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/libc_wasi.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/libc_wasi.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/libc_wasi.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/libc_wasi.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/libc_wasi_wrapper.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/libc_wasi_wrapper.c similarity index 91% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/libc_wasi_wrapper.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/libc_wasi_wrapper.c index 9f35b81a7f8..0b69de6b92f 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/libc_wasi_wrapper.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/libc_wasi_wrapper.c @@ -72,7 +72,7 @@ min_uint32(uint32_t a, uint32_t b) } static inline struct fd_table * -wasi_ctx_get_curfds(wasm_module_inst_t module_inst, wasi_ctx_t wasi_ctx) +wasi_ctx_get_curfds(wasi_ctx_t wasi_ctx) { if (!wasi_ctx) return NULL; @@ -88,7 +88,7 @@ wasi_ctx_get_argv_environ(wasm_module_inst_t module_inst, wasi_ctx_t wasi_ctx) } static inline struct fd_prestats * -wasi_ctx_get_prestats(wasm_module_inst_t module_inst, wasi_ctx_t wasi_ctx) +wasi_ctx_get_prestats(wasi_ctx_t wasi_ctx) { if (!wasi_ctx) return NULL; @@ -96,7 +96,7 @@ wasi_ctx_get_prestats(wasm_module_inst_t module_inst, wasi_ctx_t wasi_ctx) } static inline struct addr_pool * -wasi_ctx_get_addr_pool(wasm_module_inst_t module_inst, wasi_ctx_t wasi_ctx) +wasi_ctx_get_addr_pool(wasi_ctx_t wasi_ctx) { if (!wasi_ctx) return NULL; @@ -292,7 +292,7 @@ wasi_fd_prestat_get(wasm_exec_env_t exec_env, wasi_fd_t fd, { wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_prestats *prestats = wasi_ctx_get_prestats(module_inst, wasi_ctx); + struct fd_prestats *prestats = wasi_ctx_get_prestats(wasi_ctx); wasi_prestat_t prestat; wasi_errno_t err; @@ -317,7 +317,7 @@ wasi_fd_prestat_dir_name(wasm_exec_env_t exec_env, wasi_fd_t fd, char *path, { wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_prestats *prestats = wasi_ctx_get_prestats(module_inst, wasi_ctx); + struct fd_prestats *prestats = wasi_ctx_get_prestats(wasi_ctx); if (!wasi_ctx) return (wasi_errno_t)-1; @@ -330,8 +330,8 @@ wasi_fd_close(wasm_exec_env_t exec_env, wasi_fd_t fd) { wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); - struct fd_prestats *prestats = wasi_ctx_get_prestats(module_inst, wasi_ctx); + struct fd_table *curfds = wasi_ctx_get_curfds(wasi_ctx); + struct fd_prestats *prestats = wasi_ctx_get_prestats(wasi_ctx); if (!wasi_ctx) return (wasi_errno_t)-1; @@ -344,7 +344,7 @@ wasi_fd_datasync(wasm_exec_env_t exec_env, wasi_fd_t fd) { wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + struct fd_table *curfds = wasi_ctx_get_curfds(wasi_ctx); if (!wasi_ctx) return (wasi_errno_t)-1; @@ -358,7 +358,7 @@ wasi_fd_pread(wasm_exec_env_t exec_env, wasi_fd_t fd, iovec_app_t *iovec_app, { wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + struct fd_table *curfds = wasi_ctx_get_curfds(wasi_ctx); wasi_iovec_t *iovec, *iovec_begin; uint64 total_size; size_t nread; @@ -412,7 +412,7 @@ wasi_fd_pwrite(wasm_exec_env_t exec_env, wasi_fd_t fd, { wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + struct fd_table *curfds = wasi_ctx_get_curfds(wasi_ctx); wasi_ciovec_t *ciovec, *ciovec_begin; uint64 total_size; size_t nwritten; @@ -465,7 +465,7 @@ wasi_fd_read(wasm_exec_env_t exec_env, wasi_fd_t fd, { wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + struct fd_table *curfds = wasi_ctx_get_curfds(wasi_ctx); wasi_iovec_t *iovec, *iovec_begin; uint64 total_size; size_t nread; @@ -517,8 +517,8 @@ wasi_fd_renumber(wasm_exec_env_t exec_env, wasi_fd_t from, wasi_fd_t to) { wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); - struct fd_prestats *prestats = wasi_ctx_get_prestats(module_inst, wasi_ctx); + struct fd_table *curfds = wasi_ctx_get_curfds(wasi_ctx); + struct fd_prestats *prestats = wasi_ctx_get_prestats(wasi_ctx); if (!wasi_ctx) return (wasi_errno_t)-1; @@ -532,7 +532,7 @@ wasi_fd_seek(wasm_exec_env_t exec_env, wasi_fd_t fd, wasi_filedelta_t offset, { wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + struct fd_table *curfds = wasi_ctx_get_curfds(wasi_ctx); if (!wasi_ctx) return (wasi_errno_t)-1; @@ -549,7 +549,7 @@ wasi_fd_tell(wasm_exec_env_t exec_env, wasi_fd_t fd, wasi_filesize_t *newoffset) { wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + struct fd_table *curfds = wasi_ctx_get_curfds(wasi_ctx); if (!wasi_ctx) return (wasi_errno_t)-1; @@ -566,7 +566,7 @@ wasi_fd_fdstat_get(wasm_exec_env_t exec_env, wasi_fd_t fd, { wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + struct fd_table *curfds = wasi_ctx_get_curfds(wasi_ctx); wasi_fdstat_t fdstat; wasi_errno_t err; @@ -590,7 +590,7 @@ wasi_fd_fdstat_set_flags(wasm_exec_env_t exec_env, wasi_fd_t fd, { wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + struct fd_table *curfds = wasi_ctx_get_curfds(wasi_ctx); if (!wasi_ctx) return (wasi_errno_t)-1; @@ -605,7 +605,7 @@ wasi_fd_fdstat_set_rights(wasm_exec_env_t exec_env, wasi_fd_t fd, { wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + struct fd_table *curfds = wasi_ctx_get_curfds(wasi_ctx); if (!wasi_ctx) return (wasi_errno_t)-1; @@ -619,7 +619,7 @@ wasi_fd_sync(wasm_exec_env_t exec_env, wasi_fd_t fd) { wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + struct fd_table *curfds = wasi_ctx_get_curfds(wasi_ctx); if (!wasi_ctx) return (wasi_errno_t)-1; @@ -634,7 +634,7 @@ wasi_fd_write(wasm_exec_env_t exec_env, wasi_fd_t fd, { wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + struct fd_table *curfds = wasi_ctx_get_curfds(wasi_ctx); wasi_ciovec_t *ciovec, *ciovec_begin; uint64 total_size; size_t nwritten; @@ -687,7 +687,7 @@ wasi_fd_advise(wasm_exec_env_t exec_env, wasi_fd_t fd, wasi_filesize_t offset, { wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + struct fd_table *curfds = wasi_ctx_get_curfds(wasi_ctx); if (!wasi_ctx) return (wasi_errno_t)-1; @@ -701,7 +701,7 @@ wasi_fd_allocate(wasm_exec_env_t exec_env, wasi_fd_t fd, wasi_filesize_t offset, { wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + struct fd_table *curfds = wasi_ctx_get_curfds(wasi_ctx); if (!wasi_ctx) return (wasi_errno_t)-1; @@ -715,7 +715,7 @@ wasi_path_create_directory(wasm_exec_env_t exec_env, wasi_fd_t fd, { wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + struct fd_table *curfds = wasi_ctx_get_curfds(wasi_ctx); if (!wasi_ctx) return (wasi_errno_t)-1; @@ -732,8 +732,8 @@ wasi_path_link(wasm_exec_env_t exec_env, wasi_fd_t old_fd, { wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); - struct fd_prestats *prestats = wasi_ctx_get_prestats(module_inst, wasi_ctx); + struct fd_table *curfds = wasi_ctx_get_curfds(wasi_ctx); + struct fd_prestats *prestats = wasi_ctx_get_prestats(wasi_ctx); if (!wasi_ctx) return (wasi_errno_t)-1; @@ -752,7 +752,7 @@ wasi_path_open(wasm_exec_env_t exec_env, wasi_fd_t dirfd, { wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + struct fd_table *curfds = wasi_ctx_get_curfds(wasi_ctx); wasi_fd_t fd = (wasi_fd_t)-1; /* set fd_app -1 if path open failed */ wasi_errno_t err; @@ -776,7 +776,7 @@ wasi_fd_readdir(wasm_exec_env_t exec_env, wasi_fd_t fd, void *buf, { wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + struct fd_table *curfds = wasi_ctx_get_curfds(wasi_ctx); size_t bufused; wasi_errno_t err; @@ -802,7 +802,7 @@ wasi_path_readlink(wasm_exec_env_t exec_env, wasi_fd_t fd, const char *path, { wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + struct fd_table *curfds = wasi_ctx_get_curfds(wasi_ctx); size_t bufused; wasi_errno_t err; @@ -828,7 +828,7 @@ wasi_path_rename(wasm_exec_env_t exec_env, wasi_fd_t old_fd, { wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + struct fd_table *curfds = wasi_ctx_get_curfds(wasi_ctx); if (!wasi_ctx) return (wasi_errno_t)-1; @@ -844,7 +844,7 @@ wasi_fd_filestat_get(wasm_exec_env_t exec_env, wasi_fd_t fd, { wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + struct fd_table *curfds = wasi_ctx_get_curfds(wasi_ctx); if (!wasi_ctx) return (wasi_errno_t)-1; @@ -862,7 +862,7 @@ wasi_fd_filestat_set_times(wasm_exec_env_t exec_env, wasi_fd_t fd, { wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + struct fd_table *curfds = wasi_ctx_get_curfds(wasi_ctx); if (!wasi_ctx) return (wasi_errno_t)-1; @@ -877,7 +877,7 @@ wasi_fd_filestat_set_size(wasm_exec_env_t exec_env, wasi_fd_t fd, { wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + struct fd_table *curfds = wasi_ctx_get_curfds(wasi_ctx); if (!wasi_ctx) return (wasi_errno_t)-1; @@ -892,7 +892,7 @@ wasi_path_filestat_get(wasm_exec_env_t exec_env, wasi_fd_t fd, { wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + struct fd_table *curfds = wasi_ctx_get_curfds(wasi_ctx); if (!wasi_ctx) return (wasi_errno_t)-1; @@ -912,7 +912,7 @@ wasi_path_filestat_set_times(wasm_exec_env_t exec_env, wasi_fd_t fd, { wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + struct fd_table *curfds = wasi_ctx_get_curfds(wasi_ctx); if (!wasi_ctx) return (wasi_errno_t)-1; @@ -929,8 +929,8 @@ wasi_path_symlink(wasm_exec_env_t exec_env, const char *old_path, { wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); - struct fd_prestats *prestats = wasi_ctx_get_prestats(module_inst, wasi_ctx); + struct fd_table *curfds = wasi_ctx_get_curfds(wasi_ctx); + struct fd_prestats *prestats = wasi_ctx_get_prestats(wasi_ctx); if (!wasi_ctx) return (wasi_errno_t)-1; @@ -945,7 +945,7 @@ wasi_path_unlink_file(wasm_exec_env_t exec_env, wasi_fd_t fd, const char *path, { wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + struct fd_table *curfds = wasi_ctx_get_curfds(wasi_ctx); if (!wasi_ctx) return (wasi_errno_t)-1; @@ -959,7 +959,7 @@ wasi_path_remove_directory(wasm_exec_env_t exec_env, wasi_fd_t fd, { wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + struct fd_table *curfds = wasi_ctx_get_curfds(wasi_ctx); if (!wasi_ctx) return (wasi_errno_t)-1; @@ -1047,7 +1047,7 @@ execute_interruptible_poll_oneoff( if (wasm_cluster_is_thread_terminated(exec_env)) { wasm_runtime_free(in_copy); - return EINTR; + return __WASI_EINTR; } else if (*nevents > 0) { all_outs_are_type_clock = true; @@ -1076,7 +1076,7 @@ wasi_poll_oneoff(wasm_exec_env_t exec_env, const wasi_subscription_t *in, { wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + struct fd_table *curfds = wasi_ctx_get_curfds(wasi_ctx); size_t nevents = 0; wasi_errno_t err; @@ -1128,6 +1128,8 @@ wasi_proc_raise(wasm_exec_env_t exec_env, wasi_signal_t sig) static wasi_errno_t wasi_random_get(wasm_exec_env_t exec_env, void *buf, uint32 buf_len) { + (void)exec_env; + return wasmtime_ssp_random_get(buf, buf_len); } @@ -1142,7 +1144,7 @@ wasi_sock_accept(wasm_exec_env_t exec_env, wasi_fd_t fd, wasi_fdflags_t flags, if (!wasi_ctx) return __WASI_EACCES; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasi_ssp_sock_accept(exec_env, curfds, fd, flags, fd_new); } @@ -1161,7 +1163,7 @@ wasi_sock_addr_local(wasm_exec_env_t exec_env, wasi_fd_t fd, if (!validate_native_addr(addr, sizeof(__wasi_addr_t))) return __WASI_EINVAL; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasi_ssp_sock_addr_local(exec_env, curfds, fd, addr); } @@ -1180,7 +1182,7 @@ wasi_sock_addr_remote(wasm_exec_env_t exec_env, wasi_fd_t fd, if (!validate_native_addr(addr, sizeof(__wasi_addr_t))) return __WASI_EINVAL; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasi_ssp_sock_addr_remote(exec_env, curfds, fd, addr); } @@ -1200,7 +1202,7 @@ wasi_sock_addr_resolve(wasm_exec_env_t exec_env, const char *host, if (!wasi_ctx) return __WASI_EACCES; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); ns_lookup_list = wasi_ctx_get_ns_lookup_list(wasi_ctx); return wasi_ssp_sock_addr_resolve(exec_env, curfds, ns_lookup_list, host, @@ -1219,8 +1221,8 @@ wasi_sock_bind(wasm_exec_env_t exec_env, wasi_fd_t fd, wasi_addr_t *addr) if (!wasi_ctx) return __WASI_EACCES; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); - addr_pool = wasi_ctx_get_addr_pool(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); + addr_pool = wasi_ctx_get_addr_pool(wasi_ctx); return wasi_ssp_sock_bind(exec_env, curfds, addr_pool, fd, addr); } @@ -1228,6 +1230,9 @@ wasi_sock_bind(wasm_exec_env_t exec_env, wasi_fd_t fd, wasi_addr_t *addr) static wasi_errno_t wasi_sock_close(wasm_exec_env_t exec_env, wasi_fd_t fd) { + (void)exec_env; + (void)fd; + return __WASI_ENOSYS; } @@ -1242,8 +1247,8 @@ wasi_sock_connect(wasm_exec_env_t exec_env, wasi_fd_t fd, wasi_addr_t *addr) if (!wasi_ctx) return __WASI_EACCES; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); - addr_pool = wasi_ctx_get_addr_pool(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); + addr_pool = wasi_ctx_get_addr_pool(wasi_ctx); return wasi_ssp_sock_connect(exec_env, curfds, addr_pool, fd, addr); } @@ -1262,7 +1267,7 @@ wasi_sock_get_broadcast(wasm_exec_env_t exec_env, wasi_fd_t fd, if (!validate_native_addr(is_enabled, sizeof(bool))) return __WASI_EINVAL; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_get_broadcast(exec_env, curfds, fd, is_enabled); } @@ -1281,7 +1286,7 @@ wasi_sock_get_keep_alive(wasm_exec_env_t exec_env, wasi_fd_t fd, if (!validate_native_addr(is_enabled, sizeof(bool))) return __WASI_EINVAL; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_get_keep_alive(exec_env, curfds, fd, is_enabled); } @@ -1301,7 +1306,7 @@ wasi_sock_get_linger(wasm_exec_env_t exec_env, wasi_fd_t fd, bool *is_enabled, || !validate_native_addr(linger_s, sizeof(int))) return __WASI_EINVAL; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_get_linger(exec_env, curfds, fd, is_enabled, linger_s); @@ -1321,7 +1326,7 @@ wasi_sock_get_recv_buf_size(wasm_exec_env_t exec_env, wasi_fd_t fd, if (!validate_native_addr(size, sizeof(wasi_size_t))) return __WASI_EINVAL; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_get_recv_buf_size(exec_env, curfds, fd, size); } @@ -1340,7 +1345,7 @@ wasi_sock_get_recv_timeout(wasm_exec_env_t exec_env, wasi_fd_t fd, if (!validate_native_addr(timeout_us, sizeof(uint64_t))) return __WASI_EINVAL; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_get_recv_timeout(exec_env, curfds, fd, timeout_us); } @@ -1359,7 +1364,7 @@ wasi_sock_get_reuse_addr(wasm_exec_env_t exec_env, wasi_fd_t fd, if (!validate_native_addr(is_enabled, sizeof(bool))) return __WASI_EINVAL; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_get_reuse_addr(exec_env, curfds, fd, is_enabled); } @@ -1378,7 +1383,7 @@ wasi_sock_get_reuse_port(wasm_exec_env_t exec_env, wasi_fd_t fd, if (!validate_native_addr(is_enabled, sizeof(bool))) return __WASI_EINVAL; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_get_reuse_port(exec_env, curfds, fd, is_enabled); } @@ -1397,7 +1402,7 @@ wasi_sock_get_send_buf_size(wasm_exec_env_t exec_env, wasi_fd_t fd, if (!validate_native_addr(size, sizeof(__wasi_size_t))) return __WASI_EINVAL; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_get_send_buf_size(exec_env, curfds, fd, size); } @@ -1416,7 +1421,7 @@ wasi_sock_get_send_timeout(wasm_exec_env_t exec_env, wasi_fd_t fd, if (!validate_native_addr(timeout_us, sizeof(uint64_t))) return __WASI_EINVAL; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_get_send_timeout(exec_env, curfds, fd, timeout_us); } @@ -1435,7 +1440,7 @@ wasi_sock_get_tcp_fastopen_connect(wasm_exec_env_t exec_env, wasi_fd_t fd, if (!validate_native_addr(is_enabled, sizeof(bool))) return __WASI_EINVAL; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_get_tcp_fastopen_connect(exec_env, curfds, fd, is_enabled); @@ -1455,7 +1460,7 @@ wasi_sock_get_tcp_no_delay(wasm_exec_env_t exec_env, wasi_fd_t fd, if (!validate_native_addr(is_enabled, sizeof(bool))) return __WASI_EINVAL; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_get_tcp_no_delay(exec_env, curfds, fd, is_enabled); } @@ -1474,7 +1479,7 @@ wasi_sock_get_tcp_quick_ack(wasm_exec_env_t exec_env, wasi_fd_t fd, if (!validate_native_addr(is_enabled, sizeof(bool))) return __WASI_EINVAL; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_get_tcp_quick_ack(exec_env, curfds, fd, is_enabled); @@ -1494,7 +1499,7 @@ wasi_sock_get_tcp_keep_idle(wasm_exec_env_t exec_env, wasi_fd_t fd, if (!validate_native_addr(time_s, sizeof(uint32_t))) return __WASI_EINVAL; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_get_tcp_keep_idle(exec_env, curfds, fd, time_s); } @@ -1513,7 +1518,7 @@ wasi_sock_get_tcp_keep_intvl(wasm_exec_env_t exec_env, wasi_fd_t fd, if (!validate_native_addr(time_s, sizeof(uint32_t))) return __WASI_EINVAL; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_get_tcp_keep_intvl(exec_env, curfds, fd, time_s); } @@ -1532,7 +1537,7 @@ wasi_sock_get_ip_multicast_loop(wasm_exec_env_t exec_env, wasi_fd_t fd, if (!validate_native_addr(is_enabled, sizeof(bool))) return __WASI_EINVAL; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_get_ip_multicast_loop(exec_env, curfds, fd, ipv6, is_enabled); @@ -1551,7 +1556,7 @@ wasi_sock_get_ip_ttl(wasm_exec_env_t exec_env, wasi_fd_t fd, uint8_t *ttl_s) if (!validate_native_addr(ttl_s, sizeof(uint8_t))) return __WASI_EINVAL; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_get_ip_ttl(exec_env, curfds, fd, ttl_s); } @@ -1570,7 +1575,7 @@ wasi_sock_get_ip_multicast_ttl(wasm_exec_env_t exec_env, wasi_fd_t fd, if (!validate_native_addr(ttl_s, sizeof(uint8_t))) return __WASI_EINVAL; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_get_ip_multicast_ttl(exec_env, curfds, fd, ttl_s); } @@ -1589,7 +1594,7 @@ wasi_sock_get_ipv6_only(wasm_exec_env_t exec_env, wasi_fd_t fd, if (!validate_native_addr(is_enabled, sizeof(bool))) return __WASI_EINVAL; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_get_ipv6_only(exec_env, curfds, fd, is_enabled); } @@ -1604,7 +1609,7 @@ wasi_sock_listen(wasm_exec_env_t exec_env, wasi_fd_t fd, uint32 backlog) if (!wasi_ctx) return __WASI_EACCES; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasi_ssp_sock_listen(exec_env, curfds, fd, backlog); } @@ -1621,7 +1626,7 @@ wasi_sock_open(wasm_exec_env_t exec_env, wasi_fd_t poolfd, if (!wasi_ctx) return __WASI_EACCES; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasi_ssp_sock_open(exec_env, curfds, poolfd, af, socktype, sockfd); } @@ -1636,7 +1641,7 @@ wasi_sock_set_broadcast(wasm_exec_env_t exec_env, wasi_fd_t fd, bool is_enabled) if (!wasi_ctx) return __WASI_EACCES; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_set_broadcast(exec_env, curfds, fd, is_enabled); } @@ -1652,7 +1657,7 @@ wasi_sock_set_keep_alive(wasm_exec_env_t exec_env, wasi_fd_t fd, if (!wasi_ctx) return __WASI_EACCES; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_set_keep_alive(exec_env, curfds, fd, is_enabled); } @@ -1668,7 +1673,7 @@ wasi_sock_set_linger(wasm_exec_env_t exec_env, wasi_fd_t fd, bool is_enabled, if (!wasi_ctx) return __WASI_EACCES; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_set_linger(exec_env, curfds, fd, is_enabled, linger_s); @@ -1684,7 +1689,7 @@ wasi_sock_set_recv_buf_size(wasm_exec_env_t exec_env, wasi_fd_t fd, size_t size) if (!wasi_ctx) return __WASI_EACCES; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_set_recv_buf_size(exec_env, curfds, fd, size); } @@ -1700,7 +1705,7 @@ wasi_sock_set_recv_timeout(wasm_exec_env_t exec_env, wasi_fd_t fd, if (!wasi_ctx) return __WASI_EACCES; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_set_recv_timeout(exec_env, curfds, fd, timeout_us); } @@ -1716,7 +1721,7 @@ wasi_sock_set_reuse_addr(wasm_exec_env_t exec_env, wasi_fd_t fd, if (!wasi_ctx) return __WASI_EACCES; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_set_reuse_addr(exec_env, curfds, fd, is_enabled); } @@ -1732,7 +1737,7 @@ wasi_sock_set_reuse_port(wasm_exec_env_t exec_env, wasi_fd_t fd, if (!wasi_ctx) return __WASI_EACCES; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_set_reuse_port(exec_env, curfds, fd, is_enabled); } @@ -1747,7 +1752,7 @@ wasi_sock_set_send_buf_size(wasm_exec_env_t exec_env, wasi_fd_t fd, size_t size) if (!wasi_ctx) return __WASI_EACCES; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_set_send_buf_size(exec_env, curfds, fd, size); } @@ -1763,7 +1768,7 @@ wasi_sock_set_send_timeout(wasm_exec_env_t exec_env, wasi_fd_t fd, if (!wasi_ctx) return __WASI_EACCES; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_set_send_timeout(exec_env, curfds, fd, timeout_us); } @@ -1779,7 +1784,7 @@ wasi_sock_set_tcp_fastopen_connect(wasm_exec_env_t exec_env, wasi_fd_t fd, if (!wasi_ctx) return __WASI_EACCES; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_set_tcp_fastopen_connect(exec_env, curfds, fd, is_enabled); @@ -1796,7 +1801,7 @@ wasi_sock_set_tcp_no_delay(wasm_exec_env_t exec_env, wasi_fd_t fd, if (!wasi_ctx) return __WASI_EACCES; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_set_tcp_no_delay(exec_env, curfds, fd, is_enabled); } @@ -1812,7 +1817,7 @@ wasi_sock_set_tcp_quick_ack(wasm_exec_env_t exec_env, wasi_fd_t fd, if (!wasi_ctx) return __WASI_EACCES; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_set_tcp_quick_ack(exec_env, curfds, fd, is_enabled); @@ -1829,7 +1834,7 @@ wasi_sock_set_tcp_keep_idle(wasm_exec_env_t exec_env, wasi_fd_t fd, if (!wasi_ctx) return __WASI_EACCES; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_set_tcp_keep_idle(exec_env, curfds, fd, time_s); } @@ -1845,7 +1850,7 @@ wasi_sock_set_tcp_keep_intvl(wasm_exec_env_t exec_env, wasi_fd_t fd, if (!wasi_ctx) return __WASI_EACCES; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_set_tcp_keep_intvl(exec_env, curfds, fd, time_s); } @@ -1861,7 +1866,7 @@ wasi_sock_set_ip_multicast_loop(wasm_exec_env_t exec_env, wasi_fd_t fd, if (!wasi_ctx) return __WASI_EACCES; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_set_ip_multicast_loop(exec_env, curfds, fd, ipv6, is_enabled); @@ -1882,7 +1887,7 @@ wasi_sock_set_ip_add_membership(wasm_exec_env_t exec_env, wasi_fd_t fd, if (!validate_native_addr(imr_multiaddr, sizeof(__wasi_addr_ip_t))) return __WASI_EINVAL; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_set_ip_add_membership( exec_env, curfds, fd, imr_multiaddr, imr_interface); @@ -1903,7 +1908,7 @@ wasi_sock_set_ip_drop_membership(wasm_exec_env_t exec_env, wasi_fd_t fd, if (!validate_native_addr(imr_multiaddr, sizeof(__wasi_addr_ip_t))) return __WASI_EINVAL; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_set_ip_drop_membership( exec_env, curfds, fd, imr_multiaddr, imr_interface); @@ -1919,7 +1924,7 @@ wasi_sock_set_ip_ttl(wasm_exec_env_t exec_env, wasi_fd_t fd, uint8_t ttl_s) if (!wasi_ctx) return __WASI_EACCES; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_set_ip_ttl(exec_env, curfds, fd, ttl_s); } @@ -1935,7 +1940,7 @@ wasi_sock_set_ip_multicast_ttl(wasm_exec_env_t exec_env, wasi_fd_t fd, if (!wasi_ctx) return __WASI_EACCES; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_set_ip_multicast_ttl(exec_env, curfds, fd, ttl_s); } @@ -1950,7 +1955,7 @@ wasi_sock_set_ipv6_only(wasm_exec_env_t exec_env, wasi_fd_t fd, bool is_enabled) if (!wasi_ctx) return __WASI_EACCES; - curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + curfds = wasi_ctx_get_curfds(wasi_ctx); return wasmtime_ssp_sock_set_ipv6_only(exec_env, curfds, fd, is_enabled); } @@ -2013,7 +2018,8 @@ copy_buffer_to_iovec_app(wasm_module_inst_t module_inst, uint8 *buf_begin, } if (buf >= buf_begin + buf_size - || buf + data->buf_len < buf /* integer overflow */ + /* integer overflow */ + || data->buf_len > UINTPTR_MAX - (uintptr_t)buf || buf + data->buf_len > buf_begin + buf_size || size_to_copy == 0) { break; @@ -2048,7 +2054,7 @@ wasi_sock_recv_from(wasm_exec_env_t exec_env, wasi_fd_t sock, **/ wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + struct fd_table *curfds = wasi_ctx_get_curfds(wasi_ctx); uint64 total_size; uint8 *buf_begin = NULL; wasi_errno_t err; @@ -2152,7 +2158,7 @@ wasi_sock_send(wasm_exec_env_t exec_env, wasi_fd_t sock, **/ wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + struct fd_table *curfds = wasi_ctx_get_curfds(wasi_ctx); uint64 buf_size = 0; uint8 *buf = NULL; wasi_errno_t err; @@ -2192,12 +2198,12 @@ wasi_sock_send_to(wasm_exec_env_t exec_env, wasi_fd_t sock, **/ wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + struct fd_table *curfds = wasi_ctx_get_curfds(wasi_ctx); uint64 buf_size = 0; uint8 *buf = NULL; wasi_errno_t err; size_t send_bytes = 0; - struct addr_pool *addr_pool = wasi_ctx_get_addr_pool(module_inst, wasi_ctx); + struct addr_pool *addr_pool = wasi_ctx_get_addr_pool(wasi_ctx); if (!wasi_ctx) { return __WASI_EINVAL; @@ -2226,7 +2232,7 @@ wasi_sock_shutdown(wasm_exec_env_t exec_env, wasi_fd_t sock, wasi_sdflags_t how) { wasm_module_inst_t module_inst = get_module_inst(exec_env); wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst); - struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx); + struct fd_table *curfds = wasi_ctx_get_curfds(wasi_ctx); if (!wasi_ctx) return __WASI_EINVAL; @@ -2237,6 +2243,8 @@ wasi_sock_shutdown(wasm_exec_env_t exec_env, wasi_fd_t sock, wasi_sdflags_t how) static wasi_errno_t wasi_sched_yield(wasm_exec_env_t exec_env) { + (void)exec_env; + return wasmtime_ssp_sched_yield(); } diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/libc_wasi_wrapper.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/libc_wasi_wrapper.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/libc_wasi_wrapper.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/libc_wasi_wrapper.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/LICENSE b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/LICENSE similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/LICENSE rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/LICENSE diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/include/LICENSE b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/include/LICENSE similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/include/LICENSE rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/include/LICENSE diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/include/wasmtime_ssp.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/include/wasmtime_ssp.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/include/wasmtime_ssp.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/include/wasmtime_ssp.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/LICENSE b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/LICENSE similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/LICENSE rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/LICENSE diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/blocking_op.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/blocking_op.c similarity index 91% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/blocking_op.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/blocking_op.c index ec1481c2ef0..4dcc4f5b0b8 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/blocking_op.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/blocking_op.c @@ -7,6 +7,7 @@ #include "ssp_config.h" #include "blocking_op.h" +#include "libc_errno.h" __wasi_errno_t blocking_op_close(wasm_exec_env_t exec_env, os_file_handle handle, @@ -170,3 +171,23 @@ blocking_op_openat(wasm_exec_env_t exec_env, os_file_handle handle, wasm_runtime_end_blocking_op(exec_env); return error; } + +#ifndef BH_PLATFORM_WINDOWS +/* REVISIT: apply the os_file_handle style abstraction for pollfd? */ +__wasi_errno_t +blocking_op_poll(wasm_exec_env_t exec_env, struct pollfd *pfds, nfds_t nfds, + int timeout_ms, int *retp) +{ + int ret; + if (!wasm_runtime_begin_blocking_op(exec_env)) { + return __WASI_EINTR; + } + ret = poll(pfds, nfds, timeout_ms); + wasm_runtime_end_blocking_op(exec_env); + if (ret == -1) { + return convert_errno(errno); + } + *retp = ret; + return 0; +} +#endif diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/blocking_op.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/blocking_op.h similarity index 89% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/blocking_op.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/blocking_op.h index afaa4a4f0cb..a32e5d662ed 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/blocking_op.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/blocking_op.h @@ -3,6 +3,9 @@ * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception */ +#ifndef _BLOCKING_OP_H_ +#define _BLOCKING_OP_H_ + #include "bh_platform.h" #include "wasm_export.h" @@ -50,4 +53,12 @@ __wasi_errno_t blocking_op_openat(wasm_exec_env_t exec_env, os_file_handle handle, const char *path, __wasi_oflags_t oflags, __wasi_fdflags_t fd_flags, __wasi_lookupflags_t lookup_flags, - wasi_libc_file_access_mode access_mode, os_file_handle *out); \ No newline at end of file + wasi_libc_file_access_mode access_mode, os_file_handle *out); + +#ifndef BH_PLATFORM_WINDOWS +__wasi_errno_t +blocking_op_poll(wasm_exec_env_t exec_env, struct pollfd *pfds, nfds_t nfds, + int timeout, int *retp); +#endif + +#endif /* end of _BLOCKING_OP_H_ */ diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/locking.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/locking.h similarity index 99% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/locking.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/locking.h index 5e0778c3f22..0ad40ecfd3d 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/locking.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/locking.h @@ -88,7 +88,7 @@ struct LOCKABLE rwlock { }; static inline bool -rwlock_init(struct rwlock *lock) REQUIRES_UNLOCKED(*lock) +rwlock_initialize(struct rwlock *lock) REQUIRES_UNLOCKED(*lock) { return os_rwlock_init(&lock->object) == 0 ? true : false; } diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/posix.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/posix.c similarity index 99% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/posix.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/posix.c index b59035f349e..03ff50a3f4f 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/posix.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/posix.c @@ -204,7 +204,7 @@ struct fd_prestat { bool fd_prestats_init(struct fd_prestats *pt) { - if (!rwlock_init(&pt->lock)) + if (!rwlock_initialize(&pt->lock)) return false; pt->prestats = NULL; pt->size = 0; @@ -340,7 +340,7 @@ struct fd_entry { bool fd_table_init(struct fd_table *ft) { - if (!rwlock_init(&ft->lock)) + if (!rwlock_initialize(&ft->lock)) return false; ft->entries = NULL; ft->size = 0; @@ -1017,9 +1017,13 @@ wasmtime_ssp_fd_fdstat_get(wasm_exec_env_t exec_env, struct fd_table *curfds, __wasi_fd_t fd, __wasi_fdstat_t *buf) { struct fd_table *ft = curfds; - rwlock_rdlock(&ft->lock); struct fd_entry *fe; - __wasi_errno_t error = fd_table_get_entry(ft, fd, 0, 0, &fe); + __wasi_errno_t error; + + (void)exec_env; + + rwlock_rdlock(&ft->lock); + error = fd_table_get_entry(ft, fd, 0, 0, &fe); if (error != __WASI_ESUCCESS) { rwlock_unlock(&ft->lock); return error; @@ -1071,9 +1075,13 @@ wasmtime_ssp_fd_fdstat_set_rights(wasm_exec_env_t exec_env, __wasi_rights_t fs_rights_inheriting) { struct fd_table *ft = curfds; - rwlock_wrlock(&ft->lock); struct fd_entry *fe; - __wasi_errno_t error = + __wasi_errno_t error; + + (void)exec_env; + + rwlock_wrlock(&ft->lock); + error = fd_table_get_entry(ft, fd, fs_rights_base, fs_rights_inheriting, &fe); if (error != 0) { rwlock_unlock(&ft->lock); @@ -1891,7 +1899,13 @@ wasmtime_ssp_fd_filestat_set_times(wasm_exec_env_t exec_env, if ((fstflags & ~(__WASI_FILESTAT_SET_ATIM | __WASI_FILESTAT_SET_ATIM_NOW | __WASI_FILESTAT_SET_MTIM | __WASI_FILESTAT_SET_MTIM_NOW)) - != 0) + != 0 + || (fstflags + & (__WASI_FILESTAT_SET_ATIM | __WASI_FILESTAT_SET_ATIM_NOW)) + == (__WASI_FILESTAT_SET_ATIM | __WASI_FILESTAT_SET_ATIM_NOW) + || (fstflags + & (__WASI_FILESTAT_SET_MTIM | __WASI_FILESTAT_SET_MTIM_NOW)) + == (__WASI_FILESTAT_SET_MTIM | __WASI_FILESTAT_SET_MTIM_NOW)) return __WASI_EINVAL; struct fd_object *fo; @@ -2216,11 +2230,10 @@ wasmtime_ssp_poll_oneoff(wasm_exec_env_t exec_env, struct fd_table *curfds, timeout = -1; } - int ret = poll(pfds, nsubscriptions, timeout); - - __wasi_errno_t error = 0; - if (ret == -1) { - error = convert_errno(errno); + int ret; + int error = blocking_op_poll(exec_env, pfds, nsubscriptions, timeout, &ret); + if (error != 0) { + /* got an error */ } else if (ret == 0 && *nevents == 0 && clock_subscription != NULL) { // No events triggered. Trigger the clock event. @@ -2974,7 +2987,9 @@ argv_environ_init(struct argv_environ_values *argv_environ, char *argv_buf, void argv_environ_destroy(struct argv_environ_values *argv_environ) -{} +{ + (void)argv_environ; +} void fd_table_destroy(struct fd_table *ft) diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/posix.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/posix.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/posix.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/posix.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/queue.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/queue.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/queue.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/queue.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/random.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/random.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/random.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/random.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/random.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/random.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/random.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/random.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/refcount.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/refcount.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/refcount.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/refcount.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/rights.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/rights.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/rights.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/rights.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/ssp_config.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/ssp_config.h similarity index 94% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/ssp_config.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/ssp_config.h index bcc750c2621..298dea67444 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/ssp_config.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/ssp_config.h @@ -34,14 +34,15 @@ #define CONFIG_HAS_GETRANDOM 0 #endif -#if defined(__CloudABI__) +#if defined(__CloudABI__) || defined(BH_PLATFORM_FREERTOS) #define CONFIG_HAS_CAP_ENTER 1 #else #define CONFIG_HAS_CAP_ENTER 0 #endif #if !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__EMSCRIPTEN__) \ - && !defined(ESP_PLATFORM) && !defined(DISABLE_CLOCK_NANOSLEEP) + && !defined(ESP_PLATFORM) && !defined(DISABLE_CLOCK_NANOSLEEP) \ + && !defined(BH_PLATFORM_FREERTOS) #define CONFIG_HAS_CLOCK_NANOSLEEP 1 #else #define CONFIG_HAS_CLOCK_NANOSLEEP 0 @@ -54,7 +55,7 @@ #endif #if !defined(__APPLE__) && !defined(BH_PLATFORM_LINUX_SGX) && !defined(_WIN32) \ - && !defined(__COSMOPOLITAN__) + && !defined(__COSMOPOLITAN__) && !defined(BH_PLATFORM_FREERTOS) #define CONFIG_HAS_PTHREAD_CONDATTR_SETCLOCK 1 #else #define CONFIG_HAS_PTHREAD_CONDATTR_SETCLOCK 0 diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/str.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/str.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/str.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/str.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/str.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/str.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/str.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/libc-wasi/sandboxed-system-primitives/src/str.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/thread-mgr/SConscript b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/thread-mgr/SConscript similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/thread-mgr/SConscript rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/thread-mgr/SConscript diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/thread-mgr/thread_manager.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/thread-mgr/thread_manager.c similarity index 90% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/thread-mgr/thread_manager.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/thread-mgr/thread_manager.c index dbf002468ba..ebeb1978339 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/thread-mgr/thread_manager.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/thread-mgr/thread_manager.c @@ -4,6 +4,7 @@ */ #include "thread_manager.h" +#include "../common/wasm_c_api_internal.h" #if WASM_ENABLE_INTERP != 0 #include "../interpreter/wasm_runtime.h" @@ -136,9 +137,10 @@ safe_traverse_exec_env_list(WASMCluster *cluster, list_visitor visitor, return ret; } -/* The caller must lock cluster->lock */ -static bool -allocate_aux_stack(WASMExecEnv *exec_env, uint32 *start, uint32 *size) +/* The caller must not have any locks */ +bool +wasm_cluster_allocate_aux_stack(WASMExecEnv *exec_env, uint32 *p_start, + uint32 *p_size) { WASMCluster *cluster = wasm_exec_env_get_cluster(exec_env); #if WASM_ENABLE_HEAP_AUX_STACK_ALLOCATION != 0 @@ -148,8 +150,8 @@ allocate_aux_stack(WASMExecEnv *exec_env, uint32 *start, uint32 *size) stack_end = wasm_runtime_module_malloc_internal(module_inst, exec_env, cluster->stack_size, NULL); - *start = stack_end + cluster->stack_size; - *size = cluster->stack_size; + *p_start = stack_end + cluster->stack_size; + *p_size = cluster->stack_size; return stack_end != 0; #else @@ -157,27 +159,33 @@ allocate_aux_stack(WASMExecEnv *exec_env, uint32 *start, uint32 *size) /* If the module doesn't have aux stack info, it can't create any threads */ - if (!cluster->stack_segment_occupied) + + os_mutex_lock(&cluster->lock); + if (!cluster->stack_segment_occupied) { + os_mutex_unlock(&cluster->lock); return false; + } for (i = 0; i < cluster_max_thread_num; i++) { if (!cluster->stack_segment_occupied[i]) { - if (start) - *start = cluster->stack_tops[i]; - if (size) - *size = cluster->stack_size; + if (p_start) + *p_start = cluster->stack_tops[i]; + if (p_size) + *p_size = cluster->stack_size; cluster->stack_segment_occupied[i] = true; + os_mutex_unlock(&cluster->lock); return true; } } + os_mutex_unlock(&cluster->lock); return false; #endif } -/* The caller must lock cluster->lock */ -static bool -free_aux_stack(WASMExecEnv *exec_env, uint32 start) +/* The caller must not have any locks */ +bool +wasm_cluster_free_aux_stack(WASMExecEnv *exec_env, uint32 start) { WASMCluster *cluster = wasm_exec_env_get_cluster(exec_env); @@ -198,12 +206,15 @@ free_aux_stack(WASMExecEnv *exec_env, uint32 start) #else uint32 i; + os_mutex_lock(&cluster->lock); for (i = 0; i < cluster_max_thread_num; i++) { if (start == cluster->stack_tops[i]) { cluster->stack_segment_occupied[i] = false; + os_mutex_unlock(&cluster->lock); return true; } } + os_mutex_unlock(&cluster->lock); return false; #endif } @@ -343,6 +354,10 @@ wasm_cluster_destroy(WASMCluster *cluster) wasm_debug_instance_destroy(cluster); #endif +#if WASM_ENABLE_DUMP_CALL_STACK != 0 + bh_vector_destroy(&cluster->exception_frames); +#endif + wasm_runtime_free(cluster); } @@ -488,10 +503,32 @@ wasm_cluster_spawn_exec_env(WASMExecEnv *exec_env) return NULL; } + if (!(new_module_inst = wasm_runtime_instantiate_internal( + module, module_inst, exec_env, stack_size, 0, NULL, 0))) { + return NULL; + } + + /* Set custom_data to new module instance */ + wasm_runtime_set_custom_data_internal( + new_module_inst, wasm_runtime_get_custom_data(module_inst)); + + wasm_native_inherit_contexts(new_module_inst, module_inst); + + if (!(wasm_cluster_dup_c_api_imports(new_module_inst, module_inst))) { + goto fail1; + } + + if (!wasm_cluster_allocate_aux_stack(exec_env, &aux_stack_start, + &aux_stack_size)) { + LOG_ERROR("thread manager error: " + "failed to allocate aux stack space for new thread"); + goto fail1; + } + os_mutex_lock(&cluster->lock); if (cluster->has_exception || cluster->processing) { - goto fail1; + goto fail2; } #if WASM_ENABLE_INTERP != 0 @@ -508,53 +545,39 @@ wasm_cluster_spawn_exec_env(WASMExecEnv *exec_env) } #endif - if (!(new_module_inst = wasm_runtime_instantiate_internal( - module, module_inst, exec_env, stack_size, 0, NULL, 0))) { - goto fail1; - } - - /* Set custom_data to new module instance */ - wasm_runtime_set_custom_data_internal( - new_module_inst, wasm_runtime_get_custom_data(module_inst)); - - wasm_native_inherit_contexts(new_module_inst, module_inst); - new_exec_env = wasm_exec_env_create_internal(new_module_inst, exec_env->wasm_stack_size); - if (!new_exec_env) + if (!new_exec_env) { goto fail2; - - if (!allocate_aux_stack(exec_env, &aux_stack_start, &aux_stack_size)) { - LOG_ERROR("thread manager error: " - "failed to allocate aux stack space for new thread"); - goto fail3; } /* Set aux stack for current thread */ if (!wasm_exec_env_set_aux_stack(new_exec_env, aux_stack_start, aux_stack_size)) { - goto fail4; + goto fail3; } + new_exec_env->is_aux_stack_allocated = true; /* Inherit suspend_flags of parent thread */ - new_exec_env->suspend_flags.flags = exec_env->suspend_flags.flags; + new_exec_env->suspend_flags.flags = + (exec_env->suspend_flags.flags & WASM_SUSPEND_FLAG_INHERIT_MASK); - if (!wasm_cluster_add_exec_env(cluster, new_exec_env)) - goto fail4; + if (!wasm_cluster_add_exec_env(cluster, new_exec_env)) { + goto fail3; + } os_mutex_unlock(&cluster->lock); return new_exec_env; -fail4: - /* free the allocated aux stack space */ - free_aux_stack(exec_env, aux_stack_start); fail3: wasm_exec_env_destroy_internal(new_exec_env); fail2: - wasm_runtime_deinstantiate_internal(new_module_inst, true); -fail1: os_mutex_unlock(&cluster->lock); + /* free the allocated aux stack space */ + wasm_cluster_free_aux_stack(exec_env, aux_stack_start); +fail1: + wasm_runtime_deinstantiate_internal(new_module_inst, true); return NULL; } @@ -565,11 +588,28 @@ wasm_cluster_destroy_spawned_exec_env(WASMExecEnv *exec_env) WASMCluster *cluster = wasm_exec_env_get_cluster(exec_env); wasm_module_inst_t module_inst = wasm_runtime_get_module_inst(exec_env); bh_assert(cluster != NULL); + WASMExecEnv *exec_env_tls = NULL; + +#ifdef OS_ENABLE_HW_BOUND_CHECK + /* Note: free_aux_stack can execute the module's "free" function + * using the specified exec_env. In case of OS_ENABLE_HW_BOUND_CHECK, + * it needs to match the TLS exec_env if available. (Consider a native + * function which calls wasm_cluster_destroy_spawned_exec_env.) + */ + exec_env_tls = wasm_runtime_get_exec_env_tls(); +#endif + if (exec_env_tls == NULL) { + exec_env_tls = exec_env; + } + + /* Free aux stack space which was allocated in + wasm_cluster_spawn_exec_env */ + bh_assert(exec_env_tls->is_aux_stack_allocated); + wasm_cluster_free_aux_stack(exec_env_tls, + exec_env->aux_stack_bottom.bottom); os_mutex_lock(&cluster->lock); - /* Free aux stack space */ - free_aux_stack(exec_env, exec_env->aux_stack_bottom.bottom); /* Remove exec_env */ wasm_cluster_del_exec_env_internal(cluster, exec_env, false); /* Destroy exec_env */ @@ -615,6 +655,11 @@ thread_manager_start_routine(void *arg) wasm_cluster_thread_exited(exec_env); #endif + /* Free aux stack space */ + if (exec_env->is_aux_stack_allocated) + wasm_cluster_free_aux_stack(exec_env, + exec_env->aux_stack_bottom.bottom); + os_mutex_lock(&cluster_list_lock); os_mutex_lock(&cluster->lock); @@ -629,8 +674,12 @@ thread_manager_start_routine(void *arg) since we will exit soon */ } - /* Free aux stack space */ - free_aux_stack(exec_env, exec_env->aux_stack_bottom.bottom); +#if WASM_ENABLE_PERF_PROFILING != 0 + os_printf("============= Spawned thread ===========\n"); + wasm_runtime_dump_perf_profiling(module_inst); + os_printf("========================================\n"); +#endif + /* Remove exec_env */ wasm_cluster_del_exec_env_internal(cluster, exec_env, false); /* Destroy exec_env */ @@ -648,12 +697,13 @@ thread_manager_start_routine(void *arg) int32 wasm_cluster_create_thread(WASMExecEnv *exec_env, - wasm_module_inst_t module_inst, bool alloc_aux_stack, + wasm_module_inst_t module_inst, + bool is_aux_stack_allocated, uint32 aux_stack_start, + uint32 aux_stack_size, void *(*thread_routine)(void *), void *arg) { WASMCluster *cluster; WASMExecEnv *new_exec_env; - uint32 aux_stack_start = 0, aux_stack_size; korp_tid tid; cluster = wasm_exec_env_get_cluster(exec_env); @@ -670,30 +720,27 @@ wasm_cluster_create_thread(WASMExecEnv *exec_env, if (!new_exec_env) goto fail1; - if (alloc_aux_stack) { - if (!allocate_aux_stack(exec_env, &aux_stack_start, &aux_stack_size)) { - LOG_ERROR("thread manager error: " - "failed to allocate aux stack space for new thread"); - goto fail2; - } - + if (is_aux_stack_allocated) { /* Set aux stack for current thread */ if (!wasm_exec_env_set_aux_stack(new_exec_env, aux_stack_start, aux_stack_size)) { - goto fail3; + goto fail2; } + new_exec_env->is_aux_stack_allocated = true; } else { /* Disable aux stack */ new_exec_env->aux_stack_boundary.boundary = 0; new_exec_env->aux_stack_bottom.bottom = UINT32_MAX; + new_exec_env->is_aux_stack_allocated = false; } /* Inherit suspend_flags of parent thread */ - new_exec_env->suspend_flags.flags = exec_env->suspend_flags.flags; + new_exec_env->suspend_flags.flags = + (exec_env->suspend_flags.flags & WASM_SUSPEND_FLAG_INHERIT_MASK); if (!wasm_cluster_add_exec_env(cluster, new_exec_env)) - goto fail3; + goto fail2; new_exec_env->thread_start_routine = thread_routine; new_exec_env->thread_arg = arg; @@ -705,7 +752,7 @@ wasm_cluster_create_thread(WASMExecEnv *exec_env, (void *)new_exec_env, APP_THREAD_STACK_SIZE_DEFAULT)) { os_mutex_unlock(&new_exec_env->wait_lock); - goto fail4; + goto fail3; } /* Wait until the new_exec_env->handle is set to avoid it is @@ -717,12 +764,8 @@ wasm_cluster_create_thread(WASMExecEnv *exec_env, return 0; -fail4: - wasm_cluster_del_exec_env_internal(cluster, new_exec_env, false); fail3: - /* free the allocated aux stack space */ - if (alloc_aux_stack) - free_aux_stack(exec_env, aux_stack_start); + wasm_cluster_del_exec_env_internal(cluster, new_exec_env, false); fail2: wasm_exec_env_destroy_internal(new_exec_env); fail1: @@ -737,7 +780,7 @@ wasm_cluster_dup_c_api_imports(WASMModuleInstanceCommon *module_inst_dst, { /* workaround about passing instantiate-linking information */ CApiFuncImport **new_c_api_func_imports = NULL; - CApiFuncImport *c_api_func_imports; + CApiFuncImport *c_api_func_imports = NULL; uint32 import_func_count = 0; uint32 size_in_bytes = 0; @@ -1013,6 +1056,9 @@ wasm_cluster_exit_thread(WASMExecEnv *exec_env, void *retval) wasm_cluster_thread_exited(exec_env); #endif + /* Free aux stack space */ + wasm_cluster_free_aux_stack(exec_env, exec_env->aux_stack_bottom.bottom); + /* App exit the thread, free the resources before exit native thread */ os_mutex_lock(&cluster_list_lock); @@ -1031,8 +1077,6 @@ wasm_cluster_exit_thread(WASMExecEnv *exec_env, void *retval) module_inst = exec_env->module_inst; - /* Free aux stack space */ - free_aux_stack(exec_env, exec_env->aux_stack_bottom.bottom); /* Remove exec_env */ wasm_cluster_del_exec_env_internal(cluster, exec_env, false); /* Destroy exec_env */ @@ -1297,6 +1341,29 @@ wasm_cluster_set_exception(WASMExecEnv *exec_env, const char *exception) data.exception = exception; os_mutex_lock(&cluster->lock); +#if WASM_ENABLE_DUMP_CALL_STACK != 0 + if (has_exception) { + /* Save the stack frames of the crashed thread into the cluster */ + WASMModuleInstance *module_inst = + (WASMModuleInstance *)get_module_inst(exec_env); + +#if WASM_ENABLE_INTERP != 0 + if (module_inst->module_type == Wasm_Module_Bytecode + && wasm_interp_create_call_stack(exec_env)) { + wasm_frame_vec_clone_internal(module_inst->frames, + &cluster->exception_frames); + } +#endif + +#if WASM_ENABLE_AOT != 0 + if (module_inst->module_type == Wasm_Module_AoT + && aot_create_call_stack(exec_env)) { + wasm_frame_vec_clone_internal(module_inst->frames, + &cluster->exception_frames); + } +#endif + } +#endif /* WASM_ENABLE_DUMP_CALL_STACK != 0 */ cluster->has_exception = has_exception; traverse_list(&cluster->exec_env_list, set_exception_visitor, &data); os_mutex_unlock(&cluster->lock); diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/thread-mgr/thread_manager.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/thread-mgr/thread_manager.h similarity index 90% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/thread-mgr/thread_manager.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/thread-mgr/thread_manager.h index b95f434ae0d..06d20883648 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/thread-mgr/thread_manager.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/thread-mgr/thread_manager.h @@ -51,6 +51,13 @@ struct WASMCluster { #if WASM_ENABLE_DEBUG_INTERP != 0 WASMDebugInstance *debug_inst; #endif + +#if WASM_ENABLE_DUMP_CALL_STACK != 0 + /* When an exception occurs in a thread, the stack frames of that thread are + * saved into the cluster + */ + Vector exception_frames; +#endif }; void @@ -81,7 +88,9 @@ wasm_cluster_dup_c_api_imports(WASMModuleInstanceCommon *module_inst_dst, int32 wasm_cluster_create_thread(WASMExecEnv *exec_env, - wasm_module_inst_t module_inst, bool alloc_aux_stack, + wasm_module_inst_t module_inst, + bool is_aux_stack_allocated, uint32 aux_stack_start, + uint32 aux_stack_size, void *(*thread_routine)(void *), void *arg); int32 @@ -221,6 +230,13 @@ wasm_cluster_traverse_lock(WASMExecEnv *exec_env); void wasm_cluster_traverse_unlock(WASMExecEnv *exec_env); +bool +wasm_cluster_allocate_aux_stack(WASMExecEnv *exec_env, uint32 *p_start, + uint32 *p_size); + +bool +wasm_cluster_free_aux_stack(WASMExecEnv *exec_env, uint32 start); + #ifdef __cplusplus } #endif diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/thread-mgr/thread_mgr.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/thread-mgr/thread_mgr.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/thread-mgr/thread_mgr.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/thread-mgr/thread_mgr.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/.gitignore b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/.gitignore similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/.gitignore rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/.gitignore diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/cmake/Findtensorflow_lite.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/cmake/Findtensorflow_lite.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/cmake/Findtensorflow_lite.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/cmake/Findtensorflow_lite.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/cmake/iwasm_helper.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/cmake/iwasm_helper.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/cmake/iwasm_helper.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/cmake/iwasm_helper.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/cmake/wasi_nn.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/cmake/wasi_nn.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/cmake/wasi_nn.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/cmake/wasi_nn.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/external/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/external/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/external/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/external/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/external/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/external/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/external/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/external/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/include/wasi_nn.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/include/wasi_nn.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/include/wasi_nn.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/include/wasi_nn.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/include/wasi_nn_types.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/include/wasi_nn_types.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/include/wasi_nn_types.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/include/wasi_nn_types.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/src/utils/logger.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/src/utils/logger.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/src/utils/logger.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/src/utils/logger.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/src/utils/wasi_nn_app_native.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/src/utils/wasi_nn_app_native.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/src/utils/wasi_nn_app_native.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/src/utils/wasi_nn_app_native.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/src/utils/wasi_nn_app_native.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/src/utils/wasi_nn_app_native.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/src/utils/wasi_nn_app_native.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/src/utils/wasi_nn_app_native.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/src/wasi_nn.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/src/wasi_nn.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/src/wasi_nn.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/src/wasi_nn.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/src/wasi_nn_private.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/src/wasi_nn_private.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/src/wasi_nn_private.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/src/wasi_nn_private.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/src/wasi_nn_tensorflowlite.cpp b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/src/wasi_nn_tensorflowlite.cpp similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/src/wasi_nn_tensorflowlite.cpp rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/src/wasi_nn_tensorflowlite.cpp diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/src/wasi_nn_tensorflowlite.hpp b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/src/wasi_nn_tensorflowlite.hpp similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/src/wasi_nn_tensorflowlite.hpp rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/src/wasi_nn_tensorflowlite.hpp diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/Dockerfile.compile b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/Dockerfile.compile similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/Dockerfile.compile rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/Dockerfile.compile diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/Dockerfile.cpu b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/Dockerfile.cpu similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/Dockerfile.cpu rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/Dockerfile.cpu diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/Dockerfile.nvidia-gpu b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/Dockerfile.nvidia-gpu similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/Dockerfile.nvidia-gpu rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/Dockerfile.nvidia-gpu diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/Dockerfile.tpu b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/Dockerfile.tpu similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/Dockerfile.tpu rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/Dockerfile.tpu diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/Dockerfile.vx-delegate b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/Dockerfile.vx-delegate similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/Dockerfile.vx-delegate rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/Dockerfile.vx-delegate diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/build.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/build.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/build.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/build.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/models/average.py b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/models/average.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/models/average.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/models/average.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/models/max.py b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/models/max.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/models/max.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/models/max.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/models/mult_dimension.py b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/models/mult_dimension.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/models/mult_dimension.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/models/mult_dimension.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/models/mult_outputs.py b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/models/mult_outputs.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/models/mult_outputs.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/models/mult_outputs.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/models/quantized.py b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/models/quantized.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/models/quantized.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/models/quantized.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/models/sum.py b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/models/sum.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/models/sum.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/models/sum.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/models/utils.py b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/models/utils.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/models/utils.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/models/utils.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/requirements.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/requirements.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/requirements.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/requirements.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/test_tensorflow.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/test_tensorflow.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/test_tensorflow.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/test_tensorflow.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/test_tensorflow_quantized.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/test_tensorflow_quantized.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/test_tensorflow_quantized.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/test_tensorflow_quantized.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/utils.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/utils.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/utils.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/utils.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/utils.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/utils.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/iwasm/libraries/wasi-nn/test/utils.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/iwasm/libraries/wasi-nn/test/utils.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/coap/er-coap/LICENSE.md b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/coap/er-coap/LICENSE.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/coap/er-coap/LICENSE.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/coap/er-coap/LICENSE.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/coap/er-coap/coap-constants.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/coap/er-coap/coap-constants.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/coap/er-coap/coap-constants.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/coap/er-coap/coap-constants.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/coap/extension/coap_ext.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/coap/extension/coap_ext.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/coap/extension/coap_ext.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/coap/extension/coap_ext.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/coap/lib_coap.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/coap/lib_coap.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/coap/lib_coap.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/coap/lib_coap.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/mem-alloc/SConscript b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/mem-alloc/SConscript similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/mem-alloc/SConscript rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/mem-alloc/SConscript diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/mem-alloc/ems/ems_alloc.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/mem-alloc/ems/ems_alloc.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/mem-alloc/ems/ems_alloc.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/mem-alloc/ems/ems_alloc.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/mem-alloc/ems/ems_gc.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/mem-alloc/ems/ems_gc.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/mem-alloc/ems/ems_gc.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/mem-alloc/ems/ems_gc.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/mem-alloc/ems/ems_gc_internal.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/mem-alloc/ems/ems_gc_internal.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/mem-alloc/ems/ems_gc_internal.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/mem-alloc/ems/ems_gc_internal.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/mem-alloc/ems/ems_hmu.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/mem-alloc/ems/ems_hmu.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/mem-alloc/ems/ems_hmu.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/mem-alloc/ems/ems_hmu.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/mem-alloc/ems/ems_kfc.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/mem-alloc/ems/ems_kfc.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/mem-alloc/ems/ems_kfc.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/mem-alloc/ems/ems_kfc.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/mem-alloc/mem_alloc.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/mem-alloc/mem_alloc.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/mem-alloc/mem_alloc.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/mem-alloc/mem_alloc.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/mem-alloc/mem_alloc.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/mem-alloc/mem_alloc.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/mem-alloc/mem_alloc.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/mem-alloc/mem_alloc.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/mem-alloc/mem_alloc.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/mem-alloc/mem_alloc.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/mem-alloc/mem_alloc.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/mem-alloc/mem_alloc.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/alios/alios_platform.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/alios/alios_platform.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/alios/alios_platform.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/alios/alios_platform.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/alios/alios_thread.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/alios/alios_thread.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/alios/alios_thread.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/alios/alios_thread.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/alios/alios_time.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/alios/alios_time.c similarity index 60% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/alios/alios_time.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/alios/alios_time.c index 549252738c1..fb09623a65e 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/alios/alios_time.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/alios/alios_time.c @@ -6,7 +6,14 @@ #include "platform_api_vmcore.h" uint64 -os_time_get_boot_microsecond() +os_time_get_boot_us() { return (uint64)aos_now_ms() * 1000; } + +uint64 +os_time_thread_cputime_us(void) +{ + /* FIXME if u know the right api */ + return os_time_get_boot_us(); +} \ No newline at end of file diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/alios/platform_internal.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/alios/platform_internal.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/alios/platform_internal.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/alios/platform_internal.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/alios/shared_platform.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/alios/shared_platform.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/alios/shared_platform.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/alios/shared_platform.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/android/platform_init.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/android/platform_init.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/android/platform_init.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/android/platform_init.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/android/platform_internal.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/android/platform_internal.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/android/platform_internal.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/android/platform_internal.h index 42e4e726c40..4449f21e87d 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/android/platform_internal.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/android/platform_internal.h @@ -80,8 +80,6 @@ typedef jmp_buf korp_jmpbuf; #define os_longjmp longjmp #define os_alloca alloca -#define os_getpagesize getpagesize - typedef void (*os_signal_handler)(void *sig_addr); int @@ -101,6 +99,8 @@ os_sigreturn(); #endif /* end of BUILD_TARGET_X86_64/AMD_64/AARCH64/RISCV64 */ #endif /* end of WASM_DISABLE_HW_BOUND_CHECK */ +#define os_getpagesize getpagesize + typedef long int __syscall_slong_t; #if __ANDROID_API__ < 19 diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/android/shared_platform.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/android/shared_platform.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/android/shared_platform.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/android/shared_platform.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/freertos/freertos_malloc.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/freertos/freertos_malloc.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/freertos/freertos_malloc.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/freertos/freertos_malloc.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/freertos/freertos_thread.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/freertos/freertos_thread.c similarity index 93% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/freertos/freertos_thread.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/freertos/freertos_thread.c index 9f68bc8f92c..8d57fda531b 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/freertos/freertos_thread.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/freertos/freertos_thread.c @@ -204,8 +204,7 @@ os_thread_wrapper(void *arg) thread_data_list_add(thread_data); thread_data->start_routine(thread_data->arg); - os_thread_cleanup(); - vTaskDelete(NULL); + os_thread_exit(NULL); } int @@ -301,6 +300,22 @@ os_thread_join(korp_tid thread, void **value_ptr) return BHT_OK; } +int +os_thread_detach(korp_tid thread) +{ + /* Do nothing */ + (void)thread; + return BHT_OK; +} + +void +os_thread_exit(void *retval) +{ + (void)retval; + os_thread_cleanup(); + vTaskDelete(NULL); +} + int os_mutex_init(korp_mutex *mutex) { @@ -452,3 +467,33 @@ os_cond_signal(korp_cond *cond) return BHT_OK; } + +int +os_cond_broadcast(korp_cond *cond) +{ + /* Signal all of the wait node of wait list */ + xSemaphoreTake(cond->wait_list_lock, portMAX_DELAY); + if (cond->thread_wait_list) { + os_thread_wait_node *p = cond->thread_wait_list; + while (p) { + xSemaphoreGive(p->sem); + p = p->next; + } + } + xSemaphoreGive(cond->wait_list_lock); + + return BHT_OK; +} + +uint8 * +os_thread_get_stack_boundary() +{ + /* TODO: get freertos stack boundary */ + return NULL; +} + +void +os_thread_jit_write_protect_np(bool enabled) +{ + (void)enabled; +} diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/freertos/freertos_time.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/freertos/freertos_time.c similarity index 66% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/freertos/freertos_time.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/freertos/freertos_time.c index 4497d8c6ce1..e8249fec196 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/freertos/freertos_time.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/freertos/freertos_time.c @@ -6,8 +6,15 @@ #include "platform_api_vmcore.h" uint64 -os_time_get_boot_microsecond() +os_time_get_boot_us() { TickType_t ticks = xTaskGetTickCount(); return (uint64)1000 * 1000 / configTICK_RATE_HZ * ticks; } + +uint64 +os_time_thread_cputime_us(void) +{ + /* FIXME if u know the right api */ + return os_time_get_boot_us(); +} \ No newline at end of file diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/freertos/platform_api_freertos.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/freertos/platform_api_freertos.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/freertos/platform_api_freertos.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/freertos/platform_api_freertos.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/libc-util/libc_errno.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/libc-util/libc_errno.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/libc-util/libc_errno.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/libc-util/libc_errno.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/libc-util/libc_errno.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/libc-util/libc_errno.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/libc-util/libc_errno.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/libc-util/libc_errno.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/libc-util/platform_common_libc_util.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/libc-util/platform_common_libc_util.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/libc-util/platform_common_libc_util.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/libc-util/platform_common_libc_util.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/math/COPYRIGHT b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/math/COPYRIGHT similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/math/COPYRIGHT rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/math/COPYRIGHT diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/math/math.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/math/math.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/math/math.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/math/math.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/math/platform_api_math.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/math/platform_api_math.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/math/platform_api_math.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/math/platform_api_math.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/posix/platform_api_posix.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/posix/platform_api_posix.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/posix/platform_api_posix.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/posix/platform_api_posix.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/posix/posix_blocking_op.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/posix/posix_blocking_op.c similarity index 98% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/posix/posix_blocking_op.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/posix/posix_blocking_op.c index 560828a06eb..e56f84cf1d7 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/posix/posix_blocking_op.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/posix/posix_blocking_op.c @@ -15,6 +15,7 @@ static void blocking_op_sighandler(int signo) { /* nothing */ + (void)signo; } void diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/posix/posix_clock.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/posix/posix_clock.c similarity index 99% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/posix/posix_clock.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/posix/posix_clock.c index 280306c422c..41413211cbb 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/posix/posix_clock.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/posix/posix_clock.c @@ -73,6 +73,8 @@ os_clock_time_get(__wasi_clockid_t clock_id, __wasi_timestamp_t precision, clockid_t nclock_id; __wasi_errno_t error = wasi_clockid_to_clockid(clock_id, &nclock_id); + (void)precision; + if (error != __WASI_ESUCCESS) return error; diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/posix/posix_file.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/posix/posix_file.c similarity index 98% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/posix/posix_file.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/posix/posix_file.c index 8c4f7aa9d24..87ce0e2ee1d 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/posix/posix_file.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/posix/posix_file.c @@ -25,12 +25,14 @@ * For NuttX, CONFIG_HAS_ISATTY is provided by its platform header. * (platform_internal.h) */ +#if !defined(CONFIG_HAS_D_INO) #if !defined(__NuttX__) #define CONFIG_HAS_D_INO 1 #define CONFIG_HAS_ISATTY 1 #else #define CONFIG_HAS_D_INO 0 #endif +#endif #if !defined(__APPLE__) && !defined(ESP_PLATFORM) && !defined(__COSMOPOLITAN__) #define CONFIG_HAS_POSIX_FALLOCATE 1 @@ -382,7 +384,7 @@ os_openat(os_file_handle handle, const char *path, __wasi_oflags_t oflags, // Linux returns ENXIO instead of EOPNOTSUPP when opening a socket. if (openat_errno == ENXIO) { struct stat sb; - int ret = fstatat(fd, path, &sb, + int ret = fstatat(handle, path, &sb, (lookup_flags & __WASI_LOOKUP_SYMLINK_FOLLOW) ? 0 : AT_SYMLINK_NOFOLLOW); @@ -394,7 +396,7 @@ os_openat(os_file_handle handle, const char *path, __wasi_oflags_t oflags, if (openat_errno == ENOTDIR && (open_flags & (O_NOFOLLOW | O_DIRECTORY)) != 0) { struct stat sb; - int ret = fstatat(fd, path, &sb, AT_SYMLINK_NOFOLLOW); + int ret = fstatat(handle, path, &sb, AT_SYMLINK_NOFOLLOW); if (S_ISLNK(sb.st_mode)) { return __WASI_ELOOP; } @@ -918,7 +920,12 @@ os_readdir(os_dir_stream dir_stream, __wasi_dirent_t *entry, if (dent == NULL) { *d_name = NULL; - return convert_errno(errno); + if (errno != 0) { + return convert_errno(errno); + } + else { + return 0; + } } long offset = (__wasi_dircookie_t)telldir(dir_stream); @@ -1004,4 +1011,4 @@ char * os_realpath(const char *path, char *resolved_path) { return realpath(path, resolved_path); -} \ No newline at end of file +} diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/posix/posix_malloc.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/posix/posix_malloc.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/posix/posix_malloc.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/posix/posix_malloc.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/posix/posix_memmap.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/posix/posix_memmap.c similarity index 97% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/posix/posix_memmap.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/posix/posix_memmap.c index 583557bb855..2baf5aeb7ed 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/posix/posix_memmap.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/posix/posix_memmap.c @@ -5,8 +5,9 @@ #include "platform_api_vmcore.h" -#if (defined(__APPLE__) || defined(__MACH__)) && defined(__arm64__) +#if defined(__APPLE__) || defined(__MACH__) #include +#include #endif #ifndef BH_ENABLE_TRACE_MMAP @@ -40,7 +41,8 @@ void * os_mmap(void *hint, size_t size, int prot, int flags, os_file_handle file) { int map_prot = PROT_NONE; -#if (defined(__APPLE__) || defined(__MACH__)) && defined(__arm64__) +#if (defined(__APPLE__) || defined(__MACH__)) && defined(__arm64__) \ + && defined(TARGET_OS_OSX) && TARGET_OS_OSX != 0 int map_flags = MAP_ANONYMOUS | MAP_PRIVATE | MAP_JIT; #else int map_flags = MAP_ANONYMOUS | MAP_PRIVATE; @@ -263,7 +265,10 @@ os_dcache_flush(void) void os_icache_flush(void *start, size_t len) { -#if (defined(__APPLE__) || defined(__MACH__)) && defined(__arm64__) +#if defined(__APPLE__) || defined(__MACH__) sys_icache_invalidate(start, len); +#else + (void)start; + (void)len; #endif } diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/posix/posix_sleep.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/posix/posix_sleep.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/posix/posix_sleep.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/posix/posix_sleep.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/posix/posix_socket.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/posix/posix_socket.c similarity index 99% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/posix/posix_socket.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/posix/posix_socket.c index 7bdcb529e61..0293b08d86d 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/posix/posix_socket.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/posix/posix_socket.c @@ -884,7 +884,7 @@ os_socket_set_ip_ttl(bh_socket_t socket, uint8_t ttl_s) int os_socket_get_ip_ttl(bh_socket_t socket, uint8_t *ttl_s) { - socklen_t opt_len = sizeof(ttl_s); + socklen_t opt_len = sizeof(*ttl_s); if (getsockopt(socket, IPPROTO_IP, IP_TTL, ttl_s, &opt_len) != 0) { return BHT_ERROR; } @@ -906,7 +906,7 @@ os_socket_set_ip_multicast_ttl(bh_socket_t socket, uint8_t ttl_s) int os_socket_get_ip_multicast_ttl(bh_socket_t socket, uint8_t *ttl_s) { - socklen_t opt_len = sizeof(ttl_s); + socklen_t opt_len = sizeof(*ttl_s); if (getsockopt(socket, IPPROTO_IP, IP_MULTICAST_TTL, ttl_s, &opt_len) != 0) { return BHT_ERROR; diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/posix/posix_thread.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/posix/posix_thread.c similarity index 99% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/posix/posix_thread.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/posix/posix_thread.c index 616420c948c..1195d80eba4 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/posix/posix_thread.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/posix/posix_thread.c @@ -9,6 +9,10 @@ #include "platform_api_vmcore.h" #include "platform_api_extension.h" +#if defined(__APPLE__) || defined(__MACH__) +#include +#endif + typedef struct { thread_start_routine_t start; void *arg; @@ -476,7 +480,8 @@ os_thread_get_stack_boundary() void os_thread_jit_write_protect_np(bool enabled) { -#if (defined(__APPLE__) || defined(__MACH__)) && defined(__arm64__) +#if (defined(__APPLE__) || defined(__MACH__)) && defined(__arm64__) \ + && defined(TARGET_OS_OSX) && TARGET_OS_OSX != 0 pthread_jit_write_protect_np(enabled); #endif } diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/posix/posix_time.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/posix/posix_time.c similarity index 58% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/posix/posix_time.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/posix/posix_time.c index bcf5ca3ce55..8c339aba27c 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/common/posix/posix_time.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/common/posix/posix_time.c @@ -6,7 +6,7 @@ #include "platform_api_vmcore.h" uint64 -os_time_get_boot_microsecond() +os_time_get_boot_us() { struct timespec ts; if (clock_gettime(CLOCK_MONOTONIC, &ts) != 0) { @@ -15,3 +15,14 @@ os_time_get_boot_microsecond() return ((uint64)ts.tv_sec) * 1000 * 1000 + ((uint64)ts.tv_nsec) / 1000; } + +uint64 +os_time_thread_cputime_us() +{ + struct timespec ts; + if (clock_gettime(CLOCK_THREAD_CPUTIME_ID, &ts) != 0) { + return 0; + } + + return ((uint64)ts.tv_sec) * 1000 * 1000 + ((uint64)ts.tv_nsec) / 1000; +} \ No newline at end of file diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/cosmopolitan/platform_init.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/cosmopolitan/platform_init.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/cosmopolitan/platform_init.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/cosmopolitan/platform_init.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/cosmopolitan/platform_internal.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/cosmopolitan/platform_internal.h similarity index 96% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/cosmopolitan/platform_internal.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/cosmopolitan/platform_internal.h index 02cd78be496..72602116062 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/cosmopolitan/platform_internal.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/cosmopolitan/platform_internal.h @@ -55,6 +55,7 @@ typedef pthread_t korp_tid; typedef pthread_mutex_t korp_mutex; typedef pthread_cond_t korp_cond; typedef pthread_t korp_thread; +typedef pthread_rwlock_t korp_rwlock; typedef sem_t korp_sem; #define OS_THREAD_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER @@ -67,6 +68,12 @@ typedef int os_file_handle; typedef DIR *os_dir_stream; typedef int os_raw_file_handle; +static inline os_file_handle +os_get_invalid_handle() +{ + return -1; +} + #if WASM_DISABLE_WRITE_GS_BASE == 0 #if defined(BUILD_TARGET_X86_64) || defined(BUILD_TARGET_AMD_64) #define os_writegsbase(base_addr) \ @@ -98,8 +105,6 @@ typedef jmp_buf korp_jmpbuf; #define os_longjmp longjmp #define os_alloca alloca -#define os_getpagesize getpagesize - typedef void (*os_signal_handler)(void *sig_addr); int @@ -119,6 +124,8 @@ os_sigreturn(); #endif /* end of BUILD_TARGET_X86_64/AMD_64/AARCH64/RISCV64 */ #endif /* end of WASM_DISABLE_HW_BOUND_CHECK */ +#define os_getpagesize getpagesize + #ifdef __cplusplus } #endif diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/cosmopolitan/shared_platform.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/cosmopolitan/shared_platform.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/cosmopolitan/shared_platform.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/cosmopolitan/shared_platform.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/darwin/platform_init.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/darwin/platform_init.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/darwin/platform_init.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/darwin/platform_init.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/darwin/platform_internal.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/darwin/platform_internal.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/darwin/platform_internal.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/darwin/platform_internal.h index 30b89624e99..1cbecdc205b 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/darwin/platform_internal.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/darwin/platform_internal.h @@ -82,8 +82,6 @@ typedef jmp_buf korp_jmpbuf; #define os_longjmp longjmp #define os_alloca alloca -#define os_getpagesize getpagesize - typedef void (*os_signal_handler)(void *sig_addr); int @@ -103,6 +101,8 @@ os_sigreturn(); #endif /* end of BUILD_TARGET_X86_64/AMD_64/AARCH64/RISCV64 */ #endif /* end of WASM_DISABLE_HW_BOUND_CHECK */ +#define os_getpagesize getpagesize + #if WASM_DISABLE_WAKEUP_BLOCKING_OP == 0 #define OS_ENABLE_WAKEUP_BLOCKING_OP #endif diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/darwin/shared_platform.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/darwin/shared_platform.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/darwin/shared_platform.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/darwin/shared_platform.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/ego/platform_init.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/ego/platform_init.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/ego/platform_init.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/ego/platform_init.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/ego/platform_internal.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/ego/platform_internal.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/ego/platform_internal.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/ego/platform_internal.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/ego/shared_platform.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/ego/shared_platform.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/ego/shared_platform.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/ego/shared_platform.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/esp-idf/espidf_clock.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/esp-idf/espidf_clock.c new file mode 100644 index 00000000000..41413211cbb --- /dev/null +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/esp-idf/espidf_clock.c @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2023 Amazon Inc. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + */ + +#include "libc_errno.h" +#include "platform_api_extension.h" + +#define NANOSECONDS_PER_SECOND 1000000000ULL + +static __wasi_errno_t +wasi_clockid_to_clockid(__wasi_clockid_t in, clockid_t *out) +{ + switch (in) { + case __WASI_CLOCK_MONOTONIC: + *out = CLOCK_MONOTONIC; + return __WASI_ESUCCESS; + case __WASI_CLOCK_REALTIME: + *out = CLOCK_REALTIME; + return __WASI_ESUCCESS; + case __WASI_CLOCK_PROCESS_CPUTIME_ID: +#if defined(CLOCK_PROCESS_CPUTIME_ID) + *out = CLOCK_PROCESS_CPUTIME_ID; + return __WASI_ESUCCESS; +#else + return __WASI_ENOTSUP; +#endif + case __WASI_CLOCK_THREAD_CPUTIME_ID: +#if defined(CLOCK_THREAD_CPUTIME_ID) + *out = CLOCK_THREAD_CPUTIME_ID; + return __WASI_ESUCCESS; +#else + return __WASI_ENOTSUP; +#endif + default: + return __WASI_EINVAL; + } +} + +static __wasi_timestamp_t +timespec_to_nanoseconds(const struct timespec *ts) +{ + if (ts->tv_sec < 0) + return 0; + if ((__wasi_timestamp_t)ts->tv_sec >= UINT64_MAX / NANOSECONDS_PER_SECOND) + return UINT64_MAX; + return (__wasi_timestamp_t)ts->tv_sec * NANOSECONDS_PER_SECOND + + (__wasi_timestamp_t)ts->tv_nsec; +} + +__wasi_errno_t +os_clock_res_get(__wasi_clockid_t clock_id, __wasi_timestamp_t *resolution) +{ + clockid_t nclock_id; + __wasi_errno_t error = wasi_clockid_to_clockid(clock_id, &nclock_id); + + if (error != __WASI_ESUCCESS) + return error; + + struct timespec ts; + if (clock_getres(nclock_id, &ts) < 0) + return convert_errno(errno); + + *resolution = timespec_to_nanoseconds(&ts); + + return error; +} + +__wasi_errno_t +os_clock_time_get(__wasi_clockid_t clock_id, __wasi_timestamp_t precision, + __wasi_timestamp_t *time) +{ + clockid_t nclock_id; + __wasi_errno_t error = wasi_clockid_to_clockid(clock_id, &nclock_id); + + (void)precision; + + if (error != __WASI_ESUCCESS) + return error; + + struct timespec ts; + if (clock_gettime(nclock_id, &ts) < 0) + return convert_errno(errno); + + *time = timespec_to_nanoseconds(&ts); + + return error; +} diff --git a/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/esp-idf/espidf_file.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/esp-idf/espidf_file.c new file mode 100644 index 00000000000..8e53da8b62e --- /dev/null +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/esp-idf/espidf_file.c @@ -0,0 +1,1009 @@ +/* + * Copyright (C) 2023 Intel Corporation. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + */ + +#include "platform_api_extension.h" +#include "libc_errno.h" +#include + +#if !defined(__APPLE__) && !defined(ESP_PLATFORM) +#define CONFIG_HAS_PWRITEV 1 +#define CONFIG_HAS_PREADV 1 +#else +#define CONFIG_HAS_PWRITEV 0 +#define CONFIG_HAS_PREADV 0 +#endif + +#if !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(ESP_PLATFORM) +#define CONFIG_HAS_FDATASYNC 1 +#else +#define CONFIG_HAS_FDATASYNC 0 +#endif + +/* + * For NuttX, CONFIG_HAS_ISATTY is provided by its platform header. + * (platform_internal.h) + */ +#if !defined(CONFIG_HAS_D_INO) +#if !defined(__NuttX__) +#define CONFIG_HAS_D_INO 1 +#define CONFIG_HAS_ISATTY 1 +#else +#define CONFIG_HAS_D_INO 0 +#endif +#endif + +#if !defined(__APPLE__) && !defined(ESP_PLATFORM) && !defined(__COSMOPOLITAN__) +#define CONFIG_HAS_POSIX_FALLOCATE 1 +#else +#define CONFIG_HAS_POSIX_FALLOCATE 0 +#endif + +#if defined(O_DSYNC) +#define CONFIG_HAS_O_DSYNC +#endif + +// POSIX requires O_RSYNC to be defined, but Linux explicitly doesn't support +// it. +#if defined(O_RSYNC) && !defined(__linux__) +#define CONFIG_HAS_O_RSYNC +#endif + +#if defined(O_SYNC) +#define CONFIG_HAS_O_SYNC +#endif + +// Converts a POSIX timespec to a WASI timestamp. +static __wasi_timestamp_t +convert_timespec(const struct timespec *ts) +{ + if (ts->tv_sec < 0) + return 0; + if ((__wasi_timestamp_t)ts->tv_sec >= UINT64_MAX / 1000000000) + return UINT64_MAX; + return (__wasi_timestamp_t)ts->tv_sec * 1000000000 + + (__wasi_timestamp_t)ts->tv_nsec; +} + +// Converts a POSIX stat structure to a WASI filestat structure +static void +convert_stat(os_file_handle handle, const struct stat *in, + __wasi_filestat_t *out) +{ + out->st_dev = in->st_dev; + out->st_ino = in->st_ino; + out->st_nlink = (__wasi_linkcount_t)in->st_nlink; + out->st_size = (__wasi_filesize_t)in->st_size; +#ifdef __APPLE__ + out->st_atim = convert_timespec(&in->st_atimespec); + out->st_mtim = convert_timespec(&in->st_mtimespec); + out->st_ctim = convert_timespec(&in->st_ctimespec); +#else + out->st_atim = convert_timespec(&in->st_atim); + out->st_mtim = convert_timespec(&in->st_mtim); + out->st_ctim = convert_timespec(&in->st_ctim); +#endif + + // Convert the file type. In the case of sockets there is no way we + // can easily determine the exact socket type. + if (S_ISBLK(in->st_mode)) { + out->st_filetype = __WASI_FILETYPE_BLOCK_DEVICE; + } + else if (S_ISCHR(in->st_mode)) { + out->st_filetype = __WASI_FILETYPE_CHARACTER_DEVICE; + } + else if (S_ISDIR(in->st_mode)) { + out->st_filetype = __WASI_FILETYPE_DIRECTORY; + } + else if (S_ISFIFO(in->st_mode)) { + out->st_filetype = __WASI_FILETYPE_SOCKET_STREAM; + } + else if (S_ISLNK(in->st_mode)) { + out->st_filetype = __WASI_FILETYPE_SYMBOLIC_LINK; + } + else if (S_ISREG(in->st_mode)) { + out->st_filetype = __WASI_FILETYPE_REGULAR_FILE; + } + else if (S_ISSOCK(in->st_mode)) { + int socktype; + socklen_t socktypelen = sizeof(socktype); + + if (getsockopt(handle, SOL_SOCKET, SO_TYPE, &socktype, &socktypelen) + < 0) { + out->st_filetype = __WASI_FILETYPE_UNKNOWN; + return; + } + + switch (socktype) { + case SOCK_DGRAM: + out->st_filetype = __WASI_FILETYPE_SOCKET_DGRAM; + break; + case SOCK_STREAM: + out->st_filetype = __WASI_FILETYPE_SOCKET_STREAM; + break; + default: + out->st_filetype = __WASI_FILETYPE_UNKNOWN; + return; + } + } + else { + out->st_filetype = __WASI_FILETYPE_UNKNOWN; + } +} + +static void +convert_timestamp(__wasi_timestamp_t in, struct timespec *out) +{ + // Store sub-second remainder. +#if defined(__SYSCALL_SLONG_TYPE) + out->tv_nsec = (__SYSCALL_SLONG_TYPE)(in % 1000000000); +#else + out->tv_nsec = (long)(in % 1000000000); +#endif + in /= 1000000000; + + // Clamp to the maximum in case it would overflow our system's time_t. + out->tv_sec = (time_t)in < BH_TIME_T_MAX ? (time_t)in : BH_TIME_T_MAX; +} + +// Converts the provided timestamps and flags to a set of arguments for +// futimens() and utimensat(). +static void +convert_utimens_arguments(__wasi_timestamp_t st_atim, + __wasi_timestamp_t st_mtim, + __wasi_fstflags_t fstflags, struct timespec *ts) +{ + if ((fstflags & __WASI_FILESTAT_SET_ATIM_NOW) != 0) { + ts[0].tv_nsec = UTIME_NOW; + } + else if ((fstflags & __WASI_FILESTAT_SET_ATIM) != 0) { + convert_timestamp(st_atim, &ts[0]); + } + else { + ts[0].tv_nsec = UTIME_OMIT; + } + + if ((fstflags & __WASI_FILESTAT_SET_MTIM_NOW) != 0) { + ts[1].tv_nsec = UTIME_NOW; + } + else if ((fstflags & __WASI_FILESTAT_SET_MTIM) != 0) { + convert_timestamp(st_mtim, &ts[1]); + } + else { + ts[1].tv_nsec = UTIME_OMIT; + } +} + +__wasi_errno_t +os_fstat(os_file_handle handle, struct __wasi_filestat_t *buf) +{ + struct stat stat_buf; + int ret = fstat(handle, &stat_buf); + + if (ret < 0) + return convert_errno(errno); + + convert_stat(handle, &stat_buf, buf); + + return __WASI_ESUCCESS; +} + +__wasi_errno_t +os_fstatat(os_file_handle handle, const char *path, + struct __wasi_filestat_t *buf, __wasi_lookupflags_t lookup_flags) +{ + struct stat stat_buf; + int ret = fstatat(handle, path, &stat_buf, + (lookup_flags & __WASI_LOOKUP_SYMLINK_FOLLOW) + ? AT_SYMLINK_FOLLOW + : AT_SYMLINK_NOFOLLOW); + + if (ret < 0) + return convert_errno(errno); + + convert_stat(handle, &stat_buf, buf); + + return __WASI_ESUCCESS; +} + +__wasi_errno_t +os_file_get_fdflags(os_file_handle handle, __wasi_fdflags_t *flags) +{ + int ret = fcntl(handle, F_GETFL); + + if (ret < 0) + return convert_errno(errno); + + *flags = 0; + + if ((ret & O_APPEND) != 0) + *flags |= __WASI_FDFLAG_APPEND; +#ifdef CONFIG_HAS_O_DSYNC + if ((ret & O_DSYNC) != 0) + *flags |= __WASI_FDFLAG_DSYNC; +#endif + if ((ret & O_NONBLOCK) != 0) + *flags |= __WASI_FDFLAG_NONBLOCK; +#ifdef CONFIG_HAS_O_RSYNC + if ((ret & O_RSYNC) != 0) + *flags |= __WASI_FDFLAG_RSYNC; +#endif +#ifdef CONFIG_HAS_O_SYNC + if ((ret & O_SYNC) != 0) + *flags |= __WASI_FDFLAG_SYNC; +#endif + + return __WASI_ESUCCESS; +} + +__wasi_errno_t +os_file_set_fdflags(os_file_handle handle, __wasi_fdflags_t flags) +{ + int fcntl_flags = 0; + + if ((flags & __WASI_FDFLAG_APPEND) != 0) + fcntl_flags |= O_APPEND; + if ((flags & __WASI_FDFLAG_DSYNC) != 0) +#ifdef CONFIG_HAS_O_DSYNC + fcntl_flags |= O_DSYNC; +#else + return __WASI_ENOTSUP; +#endif + if ((flags & __WASI_FDFLAG_NONBLOCK) != 0) + fcntl_flags |= O_NONBLOCK; + if ((flags & __WASI_FDFLAG_RSYNC) != 0) +#ifdef CONFIG_HAS_O_RSYNC + fcntl_flags |= O_RSYNC; +#else + return __WASI_ENOTSUP; +#endif + if ((flags & __WASI_FDFLAG_SYNC) != 0) +#ifdef CONFIG_HAS_O_SYNC + fcntl_flags |= O_SYNC; +#else + return __WASI_ENOTSUP; +#endif + + int ret = fcntl(handle, F_SETFL, fcntl_flags); + + if (ret < 0) + return convert_errno(errno); + + return __WASI_ESUCCESS; +} + +__wasi_errno_t +os_fdatasync(os_file_handle handle) +{ +#if CONFIG_HAS_FDATASYNC + int ret = fdatasync(handle); +#else + int ret = fsync(handle); +#endif + + if (ret < 0) + return convert_errno(errno); + + return __WASI_ESUCCESS; +} + +__wasi_errno_t +os_fsync(os_file_handle handle) +{ + int ret = fsync(handle); + + if (ret < 0) + return convert_errno(errno); + + return __WASI_ESUCCESS; +} + +__wasi_errno_t +os_open_preopendir(const char *path, os_file_handle *out) +{ + + int fd = open(path, O_RDONLY | O_DIRECTORY, 0); + + if (fd < 0) + return convert_errno(errno); + + *out = fd; + + return __WASI_ESUCCESS; +} + +__wasi_errno_t +os_openat(os_file_handle handle, const char *path, __wasi_oflags_t oflags, + __wasi_fdflags_t fs_flags, __wasi_lookupflags_t lookup_flags, + wasi_libc_file_access_mode read_write_mode, os_file_handle *out) +{ + int open_flags = 0; + + // Convert open flags. + if ((oflags & __WASI_O_CREAT) != 0) { + open_flags |= O_CREAT; + } + if ((oflags & __WASI_O_DIRECTORY) != 0) + open_flags |= O_DIRECTORY; + if ((oflags & __WASI_O_EXCL) != 0) + open_flags |= O_EXCL; + if ((oflags & __WASI_O_TRUNC) != 0) { + open_flags |= O_TRUNC; + } + + // Convert file descriptor flags. + if ((fs_flags & __WASI_FDFLAG_APPEND) != 0) + open_flags |= O_APPEND; + if ((fs_flags & __WASI_FDFLAG_DSYNC) != 0) { +#ifdef CONFIG_HAS_O_DSYNC + open_flags |= O_DSYNC; +#else + return __WASI_ENOTSUP; +#endif + } + if ((fs_flags & __WASI_FDFLAG_NONBLOCK) != 0) + open_flags |= O_NONBLOCK; + if ((fs_flags & __WASI_FDFLAG_RSYNC) != 0) { +#ifdef CONFIG_HAS_O_RSYNC + open_flags |= O_RSYNC; +#else + return __WASI_ENOTSUP; +#endif + } + if ((fs_flags & __WASI_FDFLAG_SYNC) != 0) { +#ifdef CONFIG_HAS_O_SYNC + open_flags |= O_SYNC; +#else + return __WASI_ENOTSUP; +#endif + } + + if ((lookup_flags & __WASI_LOOKUP_SYMLINK_FOLLOW) == 0) { + open_flags |= O_NOFOLLOW; + } + + switch (read_write_mode) { + case WASI_LIBC_ACCESS_MODE_READ_WRITE: + open_flags |= O_RDWR; + break; + case WASI_LIBC_ACCESS_MODE_READ_ONLY: + open_flags |= O_RDONLY; + break; + case WASI_LIBC_ACCESS_MODE_WRITE_ONLY: + open_flags |= O_WRONLY; + break; + default: + return __WASI_EINVAL; + } + + int fd = openat(handle, path, open_flags, 0666); + + if (fd < 0) { + int openat_errno = errno; + // Linux returns ENXIO instead of EOPNOTSUPP when opening a socket. + if (openat_errno == ENXIO) { + struct stat sb; + int ret = fstatat(handle, path, &sb, + (lookup_flags & __WASI_LOOKUP_SYMLINK_FOLLOW) + ? 0 + : AT_SYMLINK_NOFOLLOW); + return ret == 0 && S_ISSOCK(sb.st_mode) ? __WASI_ENOTSUP + : __WASI_ENXIO; + } + // Linux returns ENOTDIR instead of ELOOP when using + // O_NOFOLLOW|O_DIRECTORY on a symlink. + if (openat_errno == ENOTDIR + && (open_flags & (O_NOFOLLOW | O_DIRECTORY)) != 0) { + struct stat sb; + int ret = fstatat(handle, path, &sb, AT_SYMLINK_NOFOLLOW); + if (S_ISLNK(sb.st_mode)) { + return __WASI_ELOOP; + } + (void)ret; + } + // FreeBSD returns EMLINK instead of ELOOP when using O_NOFOLLOW on + // a symlink. + if ((lookup_flags & __WASI_LOOKUP_SYMLINK_FOLLOW) == 0 + && openat_errno == EMLINK) + return __WASI_ELOOP; + + return convert_errno(openat_errno); + } + + *out = fd; + + return __WASI_ESUCCESS; +} + +__wasi_errno_t +os_file_get_access_mode(os_file_handle handle, + wasi_libc_file_access_mode *access_mode) +{ + int ret = fcntl(handle, F_GETFL, 0); + + if (ret < 0) + return convert_errno(errno); + + switch (ret & O_ACCMODE) { + case O_RDONLY: + *access_mode = WASI_LIBC_ACCESS_MODE_READ_ONLY; + break; + case O_WRONLY: + *access_mode = WASI_LIBC_ACCESS_MODE_WRITE_ONLY; + break; + case O_RDWR: + *access_mode = WASI_LIBC_ACCESS_MODE_READ_WRITE; + break; + default: + return __WASI_EINVAL; + } + + return __WASI_ESUCCESS; +} + +__wasi_errno_t +os_close(os_file_handle handle, bool is_stdio) +{ + if (is_stdio) + return __WASI_ESUCCESS; + + int ret = close(handle); + + if (ret < 0) + return convert_errno(errno); + + return __WASI_ESUCCESS; +} + +__wasi_errno_t +os_preadv(os_file_handle handle, const struct __wasi_iovec_t *iov, int iovcnt, + __wasi_filesize_t offset, size_t *nread) +{ +#if CONFIG_HAS_PREADV + ssize_t len = + preadv(handle, (const struct iovec *)iov, (int)iovcnt, (off_t)offset); + if (len < 0) + return convert_errno(errno); + + *nread = (size_t)len; + return __WASI_ESUCCESS; +#else + if (iovcnt == 1) { + ssize_t len = pread(handle, iov->buf, iov->buf_len, offset); + + if (len < 0) + return convert_errno(errno); + + *nread = len; + return __WASI_ESUCCESS; + } + + // Allocate a single buffer to fit all data. + size_t totalsize = 0; + for (int i = 0; i < iovcnt; ++i) + totalsize += iov[i].buf_len; + + char *buf = BH_MALLOC(totalsize); + + if (buf == NULL) { + return __WASI_ENOMEM; + } + + // Perform a single read operation. + ssize_t len = pread(handle, buf, totalsize, offset); + + if (len < 0) { + BH_FREE(buf); + return convert_errno(errno); + } + + // Copy data back to vectors. + size_t bufoff = 0; + for (int i = 0; i < iovcnt; ++i) { + if (bufoff + iov[i].buf_len < (size_t)len) { + memcpy(iov[i].buf, buf + bufoff, iov[i].buf_len); + bufoff += iov[i].buf_len; + } + else { + memcpy(iov[i].buf, buf + bufoff, len - bufoff); + break; + } + } + BH_FREE(buf); + *nread = len; + + return __WASI_ESUCCESS; +#endif +} + +__wasi_errno_t +os_pwritev(os_file_handle handle, const struct __wasi_ciovec_t *iov, int iovcnt, + __wasi_filesize_t offset, size_t *nwritten) +{ + if (iovcnt == 0) + return __WASI_EINVAL; + + ssize_t len = 0; +#if CONFIG_HAS_PWRITEV + len = + pwritev(handle, (const struct iovec *)iov, (int)iovcnt, (off_t)offset); +#else + if (iovcnt == 1) { + len = pwrite(handle, iov->buf, iov->buf_len, offset); + } + else { + // Allocate a single buffer to fit all data. + size_t totalsize = 0; + for (int i = 0; i < iovcnt; ++i) + totalsize += iov[i].buf_len; + char *buf = BH_MALLOC(totalsize); + if (buf == NULL) { + return __WASI_ENOMEM; + } + size_t bufoff = 0; + for (int i = 0; i < iovcnt; ++i) { + memcpy(buf + bufoff, iov[i].buf, iov[i].buf_len); + bufoff += iov[i].buf_len; + } + + // Perform a single write operation. + len = pwrite(handle, buf, totalsize, offset); + BH_FREE(buf); + } +#endif + if (len < 0) + return convert_errno(errno); + + *nwritten = (size_t)len; + return __WASI_ESUCCESS; +} + +__wasi_errno_t +os_readv(os_file_handle handle, const struct __wasi_iovec_t *iov, int iovcnt, + size_t *nread) +{ + ssize_t len = readv(handle, (const struct iovec *)iov, (int)iovcnt); + + if (len < 0) + return convert_errno(errno); + + *nread = (size_t)len; + + return __WASI_ESUCCESS; +} + +__wasi_errno_t +os_writev(os_file_handle handle, const struct __wasi_ciovec_t *iov, int iovcnt, + size_t *nwritten) +{ + ssize_t len = writev(handle, (const struct iovec *)iov, (int)iovcnt); + + if (len < 0) + return convert_errno(errno); + + *nwritten = (size_t)len; + + return __WASI_ESUCCESS; +} + +__wasi_errno_t +os_fallocate(os_file_handle handle, __wasi_filesize_t offset, + __wasi_filesize_t length) +{ +#if CONFIG_HAS_POSIX_FALLOCATE + int ret = posix_fallocate(handle, (off_t)offset, (off_t)length); +#else + // At least ensure that the file is grown to the right size. + // TODO(ed): See if this can somehow be implemented without any race + // conditions. We may end up shrinking the file right now. + struct stat sb; + int ret = fstat(handle, &sb); + off_t newsize = (off_t)(offset + length); + + if (ret == 0 && sb.st_size < newsize) + ret = ftruncate(handle, newsize); +#endif + + if (ret != 0) + return convert_errno(ret); + + return __WASI_ESUCCESS; +} + +__wasi_errno_t +os_ftruncate(os_file_handle handle, __wasi_filesize_t size) +{ + int ret = ftruncate(handle, (off_t)size); + + if (ret < 0) + return convert_errno(errno); + + return __WASI_ESUCCESS; +} + +__wasi_errno_t +os_futimens(os_file_handle handle, __wasi_timestamp_t access_time, + __wasi_timestamp_t modification_time, __wasi_fstflags_t fstflags) +{ + struct timespec ts[2]; + convert_utimens_arguments(access_time, modification_time, fstflags, ts); + + int ret = futimens(handle, ts); + + if (ret < 0) + return convert_errno(errno); + + return __WASI_ESUCCESS; +} + +__wasi_errno_t +os_utimensat(os_file_handle handle, const char *path, + __wasi_timestamp_t access_time, + __wasi_timestamp_t modification_time, __wasi_fstflags_t fstflags, + __wasi_lookupflags_t lookup_flags) +{ + struct timespec ts[2]; + convert_utimens_arguments(access_time, modification_time, fstflags, ts); + + int ret = utimensat(handle, path, ts, + (lookup_flags & __WASI_LOOKUP_SYMLINK_FOLLOW) + ? 0 + : AT_SYMLINK_NOFOLLOW); + + if (ret < 0) + return convert_errno(errno); + + return __WASI_ESUCCESS; +} + +__wasi_errno_t +os_readlinkat(os_file_handle handle, const char *path, char *buf, + size_t bufsize, size_t *nread) +{ + // Linux requires that the buffer size is positive. whereas POSIX does + // not. Use a fake buffer to store the results if the size is zero. + char fakebuf[1]; + ssize_t len = readlinkat(handle, path, bufsize == 0 ? fakebuf : buf, + bufsize == 0 ? sizeof(fakebuf) : bufsize); + + if (len < 0) + return convert_errno(errno); + + *nread = (size_t)len < bufsize ? (size_t)len : bufsize; + + return __WASI_ESUCCESS; +} + +__wasi_errno_t +os_linkat(os_file_handle from_handle, const char *from_path, + os_file_handle to_handle, const char *to_path, + __wasi_lookupflags_t lookup_flags) +{ + int ret = linkat( + from_handle, from_path, to_handle, to_path, + (lookup_flags & __WASI_LOOKUP_SYMLINK_FOLLOW) ? AT_SYMLINK_FOLLOW : 0); + + if (ret < 0) + return convert_errno(errno); + + return __WASI_ESUCCESS; +} + +__wasi_errno_t +os_symlinkat(const char *old_path, os_file_handle handle, const char *new_path) +{ + int ret = symlinkat(old_path, handle, new_path); + + if (ret < 0) + return convert_errno(errno); + + return __WASI_ESUCCESS; +} + +__wasi_errno_t +os_mkdirat(os_file_handle handle, const char *path) +{ + int ret = mkdirat(handle, path, 0777); + + if (ret < 0) + return convert_errno(errno); + + return __WASI_ESUCCESS; +} + +__wasi_errno_t +os_renameat(os_file_handle old_handle, const char *old_path, + os_file_handle new_handle, const char *new_path) +{ + + int ret = renameat(old_handle, old_path, new_handle, new_path); + + if (ret < 0) + return convert_errno(errno); + + return __WASI_ESUCCESS; +} + +__wasi_errno_t +os_unlinkat(os_file_handle handle, const char *path, bool is_dir) +{ + int ret = unlinkat(handle, path, is_dir ? AT_REMOVEDIR : 0); + +#ifndef __linux__ + if (ret < 0) { + // Non-Linux implementations may return EPERM when attempting to remove + // a directory without REMOVEDIR. While that's what POSIX specifies, + // it's less useful. Adjust this to EISDIR. It doesn't matter that this + // is not atomic with the unlinkat, because if the file is removed and a + // directory is created before fstatat sees it, we're racing with that + // change anyway and unlinkat could have legitimately seen the directory + // if the race had turned out differently. + if (errno == EPERM) { + struct stat statbuf; + if (fstatat(handle, path, &statbuf, AT_SYMLINK_NOFOLLOW) == 0 + && S_ISDIR(statbuf.st_mode)) { + errno = EISDIR; + } + } + // POSIX permits either EEXIST or ENOTEMPTY when the directory is not + // empty. Map it to ENOTEMPTY. + else if (errno == EEXIST) { + errno = ENOTEMPTY; + } + + return convert_errno(errno); + } +#endif + + if (ret < 0) + return convert_errno(errno); + + return __WASI_ESUCCESS; +} + +__wasi_errno_t +os_lseek(os_file_handle handle, __wasi_filedelta_t offset, + __wasi_whence_t whence, __wasi_filesize_t *new_offset) +{ + int nwhence; + + switch (whence) { + case __WASI_WHENCE_CUR: + nwhence = SEEK_CUR; + break; + case __WASI_WHENCE_END: + nwhence = SEEK_END; + break; + case __WASI_WHENCE_SET: + nwhence = SEEK_SET; + break; + default: + return __WASI_EINVAL; + } + + off_t ret = lseek(handle, offset, nwhence); + + if (ret < 0) + return convert_errno(errno); + + *new_offset = (__wasi_filesize_t)ret; + + return __WASI_ESUCCESS; +} + +__wasi_errno_t +os_fadvise(os_file_handle handle, __wasi_filesize_t offset, + __wasi_filesize_t length, __wasi_advice_t advice) +{ +#ifdef POSIX_FADV_NORMAL + int nadvice; + switch (advice) { + case __WASI_ADVICE_DONTNEED: + nadvice = POSIX_FADV_DONTNEED; + break; + case __WASI_ADVICE_NOREUSE: + nadvice = POSIX_FADV_NOREUSE; + break; + case __WASI_ADVICE_NORMAL: + nadvice = POSIX_FADV_NORMAL; + break; + case __WASI_ADVICE_RANDOM: + nadvice = POSIX_FADV_RANDOM; + break; + case __WASI_ADVICE_SEQUENTIAL: + nadvice = POSIX_FADV_SEQUENTIAL; + break; + case __WASI_ADVICE_WILLNEED: + nadvice = POSIX_FADV_WILLNEED; + break; + default: + return __WASI_EINVAL; + } + + int ret = posix_fadvise(handle, (off_t)offset, (off_t)length, nadvice); + + if (ret < 0) + return convert_errno(ret); + + return __WASI_ESUCCESS; +#else + // Advisory information can be safely ignored if not supported + switch (advice) { + case __WASI_ADVICE_DONTNEED: + case __WASI_ADVICE_NOREUSE: + case __WASI_ADVICE_NORMAL: + case __WASI_ADVICE_RANDOM: + case __WASI_ADVICE_SEQUENTIAL: + case __WASI_ADVICE_WILLNEED: + return __WASI_ESUCCESS; + default: + return __WASI_EINVAL; + } +#endif +} + +__wasi_errno_t +os_isatty(os_file_handle handle) +{ +#if CONFIG_HAS_ISATTY + int ret = isatty(handle); + + if (ret == 1) + return __WASI_ESUCCESS; + + return __WASI_ENOTTY; +#else + return __WASI_ENOTSUP; +#endif +} + +os_file_handle +os_convert_stdin_handle(os_raw_file_handle raw_stdin) +{ +#ifndef STDIN_FILENO +#define STDIN_FILENO 0 +#endif + return raw_stdin >= 0 ? raw_stdin : STDIN_FILENO; +} + +os_file_handle +os_convert_stdout_handle(os_raw_file_handle raw_stdout) +{ +#ifndef STDOUT_FILENO +#define STDOUT_FILENO 1 +#endif + return raw_stdout >= 0 ? raw_stdout : STDOUT_FILENO; +} + +os_file_handle +os_convert_stderr_handle(os_raw_file_handle raw_stderr) +{ +#ifndef STDERR_FILENO +#define STDERR_FILENO 2 +#endif + return raw_stderr >= 0 ? raw_stderr : STDERR_FILENO; +} + +__wasi_errno_t +os_fdopendir(os_file_handle handle, os_dir_stream *dir_stream) +{ + *dir_stream = fdopendir(handle); + + if (*dir_stream == NULL) + return convert_errno(errno); + + return __WASI_ESUCCESS; +} + +__wasi_errno_t +os_rewinddir(os_dir_stream dir_stream) +{ + rewinddir(dir_stream); + return __WASI_ESUCCESS; +} + +__wasi_errno_t +os_seekdir(os_dir_stream dir_stream, __wasi_dircookie_t position) +{ + seekdir(dir_stream, (long)position); + return __WASI_ESUCCESS; +} + +__wasi_errno_t +os_readdir(os_dir_stream dir_stream, __wasi_dirent_t *entry, + const char **d_name) +{ + errno = 0; + + struct dirent *dent = readdir(dir_stream); + + if (dent == NULL) { + *d_name = NULL; + return convert_errno(errno); + } + + long offset = (__wasi_dircookie_t)telldir(dir_stream); + + size_t namlen = strlen(dent->d_name); + + *d_name = dent->d_name; + entry->d_next = offset; + entry->d_namlen = (__wasi_dirnamlen_t)namlen; +#if CONFIG_HAS_D_INO + entry->d_ino = dent->d_ino; +#else + entry->d_ino = 0; +#endif + + switch (dent->d_type) { + case DT_BLK: + entry->d_type = __WASI_FILETYPE_BLOCK_DEVICE; + break; + case DT_CHR: + entry->d_type = __WASI_FILETYPE_CHARACTER_DEVICE; + break; + case DT_DIR: + entry->d_type = __WASI_FILETYPE_DIRECTORY; + break; + case DT_FIFO: + entry->d_type = __WASI_FILETYPE_SOCKET_STREAM; + break; + case DT_LNK: + entry->d_type = __WASI_FILETYPE_SYMBOLIC_LINK; + break; + case DT_REG: + entry->d_type = __WASI_FILETYPE_REGULAR_FILE; + break; +#ifdef DT_SOCK + case DT_SOCK: + // Technically not correct, but good enough. + entry->d_type = __WASI_FILETYPE_SOCKET_STREAM; + break; +#endif + default: + entry->d_type = __WASI_FILETYPE_UNKNOWN; + break; + } + + return __WASI_ESUCCESS; +} + +__wasi_errno_t +os_closedir(os_dir_stream dir_stream) +{ + int ret = closedir(dir_stream); + + if (ret < 0) + return convert_errno(errno); + + return __WASI_ESUCCESS; +} + +os_dir_stream +os_get_invalid_dir_stream() +{ + return NULL; +} + +bool +os_is_dir_stream_valid(os_dir_stream *dir_stream) +{ + assert(dir_stream != NULL); + + return *dir_stream != NULL; +} + +bool +os_is_handle_valid(os_file_handle *handle) +{ + assert(handle != NULL); + + return *handle > -1; +} + +char * +os_realpath(const char *path, char *resolved_path) +{ + return realpath(path, resolved_path); +} diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/esp-idf/espidf_malloc.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/esp-idf/espidf_malloc.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/esp-idf/espidf_malloc.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/esp-idf/espidf_malloc.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/esp-idf/espidf_memmap.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/esp-idf/espidf_memmap.c similarity index 74% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/esp-idf/espidf_memmap.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/esp-idf/espidf_memmap.c index 9f3ec47a6a3..ee155181382 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/esp-idf/espidf_memmap.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/esp-idf/espidf_memmap.c @@ -9,11 +9,10 @@ #include "soc/mmu.h" #include "rom/cache.h" -#define MEM_DUAL_BUS_OFFSET (IRAM0_CACHE_ADDRESS_LOW - DRAM0_CACHE_ADDRESS_LOW) +#define MEM_DUAL_BUS_OFFSET (SOC_IROM_LOW - SOC_IROM_HIGH) -#define in_ibus_ext(addr) \ - (((uint32)addr >= IRAM0_CACHE_ADDRESS_LOW) \ - && ((uint32)addr < IRAM0_CACHE_ADDRESS_HIGH)) +#define in_ibus_ext(addr) \ + (((uint32)addr >= SOC_IROM_LOW) && ((uint32)addr < SOC_IROM_HIGH)) static portMUX_TYPE s_spinlock = portMUX_INITIALIZER_UNLOCKED; #endif @@ -55,7 +54,24 @@ os_mmap(void *hint, size_t size, int prot, int flags, os_file_handle file) #else uint32_t mem_caps = MALLOC_CAP_8BIT; #endif - return heap_caps_malloc(size, mem_caps); + void *buf_origin = + heap_caps_malloc(size + 4 + sizeof(uintptr_t), mem_caps); + if (!buf_origin) { + return NULL; + } + + // Memory allocation with MALLOC_CAP_SPIRAM or MALLOC_CAP_8BIT will + // return 4-byte aligned Reserve extra 4 byte to fixup alignment and + // size for the pointer to the originally allocated address + void *buf_fixed = buf_origin + sizeof(void *); + if ((uintptr_t)buf_fixed & (uintptr_t)0x7) { + buf_fixed = (void *)((uintptr_t)(buf_fixed + 4) & (~(uintptr_t)7)); + } + + uintptr_t *addr_field = buf_fixed - sizeof(uintptr_t); + *addr_field = (uintptr_t)buf_origin; + + return buf_fixed; } } diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/esp-idf/espidf_platform.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/esp-idf/espidf_platform.c similarity index 76% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/esp-idf/espidf_platform.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/esp-idf/espidf_platform.c index bbc18f69bf6..670d5bdb243 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/esp-idf/espidf_platform.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/esp-idf/espidf_platform.c @@ -3,9 +3,25 @@ * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception */ +#include "sdkconfig.h" #include "platform_api_vmcore.h" #include "platform_api_extension.h" +#if (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0)) \ + && (ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(5, 2, 0)) +#define UTIMENSAT_TIMESPEC_POINTER 1 +#define FUTIMENS_TIMESPEC_POINTER 1 +#endif + +#if CONFIG_LITTLEFS_OPEN_DIR && CONFIG_LITTLEFS_FCNTL_GET_PATH +#define OPENAT_SUPPORT 1 + +#undef F_GETPATH +#define F_GETPATH CONFIG_LITTLEFS_FCNTL_F_GETPATH_VALUE + +#define DIR_PATH_LEN (CONFIG_LITTLEFS_OBJ_NAME_LEN + 1) +#endif + int bh_platform_init() { @@ -36,11 +52,18 @@ os_vprintf(const char *format, va_list ap) } uint64 -os_time_get_boot_microsecond(void) +os_time_get_boot_us(void) { return (uint64)esp_timer_get_time(); } +uint64 +os_time_thread_cputime_us(void) +{ + /* FIXME if u know the right api */ + return os_time_get_boot_us(); +} + uint8 * os_thread_get_stack_boundary(void) { @@ -162,12 +185,40 @@ writev(int fildes, const struct iovec *iov, int iovcnt) return ntotal; } +#if OPENAT_SUPPORT +int +openat(int fd, const char *pathname, int flags, ...) +{ + int new_fd; + int ret; + char dir_path[DIR_PATH_LEN]; + char *full_path; + + ret = fcntl(fd, F_GETPATH, dir_path); + if (ret != 0) { + errno = -EINVAL; + return -1; + } + + ret = asprintf(&full_path, "%s/%s", dir_path, pathname); + if (ret < 0) { + errno = ENOMEM; + return -1; + } + + new_fd = open(full_path, flags); + free(full_path); + + return new_fd; +} +#else int openat(int fd, const char *path, int oflags, ...) { errno = ENOSYS; return -1; } +#endif int fstatat(int fd, const char *path, struct stat *buf, int flag) @@ -219,7 +270,13 @@ unlinkat(int fd, const char *path, int flag) } int -utimensat(int fd, const char *path, const struct timespec *ts, int flag) +utimensat(int fd, const char *path, +#if UTIMENSAT_TIMESPEC_POINTER + const struct timespec *ts, +#else + const struct timespec ts[2], +#endif + int flag) { errno = ENOSYS; return -1; @@ -242,7 +299,13 @@ ftruncate(int fd, off_t length) #endif int -futimens(int fd, const struct timespec *times) +futimens(int fd, +#if FUTIMENS_TIMESPEC_POINTER + const struct timespec *times +#else + const struct timespec times[2] +#endif +) { errno = ENOSYS; return -1; @@ -253,4 +316,4 @@ nanosleep(const struct timespec *req, struct timespec *rem) { errno = ENOSYS; return -1; -} \ No newline at end of file +} diff --git a/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/esp-idf/espidf_socket.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/esp-idf/espidf_socket.c new file mode 100644 index 00000000000..8c65094647d --- /dev/null +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/esp-idf/espidf_socket.c @@ -0,0 +1,1027 @@ +/* + * Copyright (C) 2021 Intel Corporation. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + */ + +#include "platform_api_vmcore.h" +#include "platform_api_extension.h" +#include "libc_errno.h" + +#include +#include +#include +#include + +static bool +textual_addr_to_sockaddr(const char *textual, int port, struct sockaddr *out, + socklen_t *out_len) +{ + struct sockaddr_in *v4; +#ifdef IPPROTO_IPV6 + struct sockaddr_in6 *v6; +#endif + + assert(textual); + + v4 = (struct sockaddr_in *)out; + if (inet_pton(AF_INET, textual, &v4->sin_addr.s_addr) == 1) { + v4->sin_family = AF_INET; + v4->sin_port = htons(port); + *out_len = sizeof(struct sockaddr_in); + return true; + } + +#ifdef IPPROTO_IPV6 + v6 = (struct sockaddr_in6 *)out; + if (inet_pton(AF_INET6, textual, &v6->sin6_addr.s6_addr) == 1) { + v6->sin6_family = AF_INET6; + v6->sin6_port = htons(port); + *out_len = sizeof(struct sockaddr_in6); + return true; + } +#endif + + return false; +} + +static int +sockaddr_to_bh_sockaddr(const struct sockaddr *sockaddr, + bh_sockaddr_t *bh_sockaddr) +{ + switch (sockaddr->sa_family) { + case AF_INET: + { + struct sockaddr_in *addr = (struct sockaddr_in *)sockaddr; + + bh_sockaddr->port = ntohs(addr->sin_port); + bh_sockaddr->addr_buffer.ipv4 = ntohl(addr->sin_addr.s_addr); + bh_sockaddr->is_ipv4 = true; + return BHT_OK; + } +#ifdef IPPROTO_IPV6 + case AF_INET6: + { + struct sockaddr_in6 *addr = (struct sockaddr_in6 *)sockaddr; + size_t i; + + bh_sockaddr->port = ntohs(addr->sin6_port); + + for (i = 0; i < sizeof(bh_sockaddr->addr_buffer.ipv6) + / sizeof(bh_sockaddr->addr_buffer.ipv6[0]); + i++) { + uint16 part_addr = addr->sin6_addr.s6_addr[i * 2] + | (addr->sin6_addr.s6_addr[i * 2 + 1] << 8); + bh_sockaddr->addr_buffer.ipv6[i] = ntohs(part_addr); + } + + bh_sockaddr->is_ipv4 = false; + return BHT_OK; + } +#endif + default: + errno = EAFNOSUPPORT; + return BHT_ERROR; + } +} + +static void +bh_sockaddr_to_sockaddr(const bh_sockaddr_t *bh_sockaddr, + struct sockaddr_storage *sockaddr, socklen_t *socklen) +{ + if (bh_sockaddr->is_ipv4) { + struct sockaddr_in *addr = (struct sockaddr_in *)sockaddr; + addr->sin_port = htons(bh_sockaddr->port); + addr->sin_family = AF_INET; + addr->sin_addr.s_addr = htonl(bh_sockaddr->addr_buffer.ipv4); + *socklen = sizeof(*addr); + } +#ifdef IPPROTO_IPV6 + else { + struct sockaddr_in6 *addr = (struct sockaddr_in6 *)sockaddr; + size_t i; + addr->sin6_port = htons(bh_sockaddr->port); + addr->sin6_family = AF_INET6; + + for (i = 0; i < sizeof(bh_sockaddr->addr_buffer.ipv6) + / sizeof(bh_sockaddr->addr_buffer.ipv6[0]); + i++) { + uint16 part_addr = htons(bh_sockaddr->addr_buffer.ipv6[i]); + addr->sin6_addr.s6_addr[i * 2] = 0xff & part_addr; + addr->sin6_addr.s6_addr[i * 2 + 1] = (0xff00 & part_addr) >> 8; + } + + *socklen = sizeof(*addr); + } +#endif +} + +int +os_socket_create(bh_socket_t *sock, bool is_ipv4, bool is_tcp) +{ + int af = is_ipv4 ? AF_INET : AF_INET6; + + if (!sock) { + return BHT_ERROR; + } + + if (is_tcp) { + *sock = socket(af, SOCK_STREAM, IPPROTO_TCP); + } + else { + *sock = socket(af, SOCK_DGRAM, 0); + } + + return (*sock == -1) ? BHT_ERROR : BHT_OK; +} + +int +os_socket_bind(bh_socket_t socket, const char *host, int *port) +{ + struct sockaddr_storage addr = { 0 }; + struct linger ling; + socklen_t socklen; + int ret; + + assert(host); + assert(port); + + ling.l_onoff = 1; + ling.l_linger = 0; + + if (!textual_addr_to_sockaddr(host, *port, (struct sockaddr *)&addr, + &socklen)) { + goto fail; + } + + ret = setsockopt(socket, SOL_SOCKET, SO_LINGER, &ling, sizeof(ling)); + if (ret < 0) { + goto fail; + } + + ret = bind(socket, (struct sockaddr *)&addr, socklen); + if (ret < 0) { + goto fail; + } + + socklen = sizeof(addr); + if (getsockname(socket, (void *)&addr, &socklen) == -1) { + goto fail; + } + + if (addr.ss_family == AF_INET) { + *port = ntohs(((struct sockaddr_in *)&addr)->sin_port); + } + else { +#ifdef IPPROTO_IPV6 + *port = ntohs(((struct sockaddr_in6 *)&addr)->sin6_port); +#else + goto fail; +#endif + } + + return BHT_OK; + +fail: + return BHT_ERROR; +} + +int +os_socket_settimeout(bh_socket_t socket, uint64 timeout_us) +{ + struct timeval tv; + tv.tv_sec = timeout_us / 1000000UL; + tv.tv_usec = timeout_us % 1000000UL; + + if (setsockopt(socket, SOL_SOCKET, SO_RCVTIMEO, (const char *)&tv, + sizeof(tv)) + != 0) { + return BHT_ERROR; + } + + return BHT_OK; +} + +int +os_socket_listen(bh_socket_t socket, int max_client) +{ + if (listen(socket, max_client) != 0) { + return BHT_ERROR; + } + + return BHT_OK; +} + +int +os_socket_accept(bh_socket_t server_sock, bh_socket_t *sock, void *addr, + unsigned int *addrlen) +{ + *sock = accept(server_sock, addr, (socklen_t *)addrlen); + + if (*sock < 0) { + return BHT_ERROR; + } + + return BHT_OK; +} + +int +os_socket_connect(bh_socket_t socket, const char *addr, int port) +{ + struct sockaddr_storage addr_in = { 0 }; + socklen_t addr_len; + int ret = 0; + + if (!textual_addr_to_sockaddr(addr, port, (struct sockaddr *)&addr_in, + &addr_len)) { + return BHT_ERROR; + } + + ret = connect(socket, (struct sockaddr *)&addr_in, addr_len); + if (ret == -1) { + return BHT_ERROR; + } + + return BHT_OK; +} + +int +os_socket_recv(bh_socket_t socket, void *buf, unsigned int len) +{ + return recv(socket, buf, len, 0); +} + +int +os_socket_recv_from(bh_socket_t socket, void *buf, unsigned int len, int flags, + bh_sockaddr_t *src_addr) +{ + struct sockaddr_storage sock_addr = { 0 }; + socklen_t socklen = sizeof(sock_addr); + int ret; + + ret = recvfrom(socket, buf, len, flags, (struct sockaddr *)&sock_addr, + &socklen); + + if (ret < 0) { + return ret; + } + + if (src_addr && socklen > 0) { + if (sockaddr_to_bh_sockaddr((struct sockaddr *)&sock_addr, src_addr) + == BHT_ERROR) { + return -1; + } + } + else if (src_addr) { + memset(src_addr, 0, sizeof(*src_addr)); + } + + return ret; +} + +int +os_socket_send(bh_socket_t socket, const void *buf, unsigned int len) +{ + return send(socket, buf, len, 0); +} + +int +os_socket_send_to(bh_socket_t socket, const void *buf, unsigned int len, + int flags, const bh_sockaddr_t *dest_addr) +{ + struct sockaddr_storage sock_addr = { 0 }; + socklen_t socklen = 0; + + bh_sockaddr_to_sockaddr(dest_addr, &sock_addr, &socklen); + + return sendto(socket, buf, len, flags, (const struct sockaddr *)&sock_addr, + socklen); +} + +int +os_socket_close(bh_socket_t socket) +{ + close(socket); + return BHT_OK; +} + +__wasi_errno_t +os_socket_shutdown(bh_socket_t socket) +{ + if (shutdown(socket, O_RDWR) != 0) { + return convert_errno(errno); + } + return __WASI_ESUCCESS; +} + +int +os_socket_inet_network(bool is_ipv4, const char *cp, bh_ip_addr_buffer_t *out) +{ + if (!cp) + return BHT_ERROR; + + if (is_ipv4) { + if (inet_pton(AF_INET, cp, &out->ipv4) != 1) { + return BHT_ERROR; + } + /* Note: ntohl(INADDR_NONE) == INADDR_NONE */ + out->ipv4 = ntohl(out->ipv4); + } + else { +#ifdef IPPROTO_IPV6 + if (inet_pton(AF_INET6, cp, out->ipv6) != 1) { + return BHT_ERROR; + } + for (int i = 0; i < 8; i++) { + out->ipv6[i] = ntohs(out->ipv6[i]); + } +#else + errno = EAFNOSUPPORT; + return BHT_ERROR; +#endif + } + + return BHT_OK; +} + +static int +getaddrinfo_error_to_errno(int error) +{ + switch (error) { + case EAI_AGAIN: + return EAGAIN; + case EAI_FAIL: + return EFAULT; + case EAI_MEMORY: + return ENOMEM; + default: + return EINVAL; + } +} + +static int +is_addrinfo_supported(struct addrinfo *info) +{ + return + // Allow only IPv4 and IPv6 + (info->ai_family == AF_INET || info->ai_family == AF_INET6) + // Allow only UDP and TCP + && (info->ai_socktype == SOCK_DGRAM || info->ai_socktype == SOCK_STREAM) + && (info->ai_protocol == IPPROTO_TCP + || info->ai_protocol == IPPROTO_UDP); +} + +int +os_socket_addr_resolve(const char *host, const char *service, + uint8_t *hint_is_tcp, uint8_t *hint_is_ipv4, + bh_addr_info_t *addr_info, size_t addr_info_size, + size_t *max_info_size) +{ + struct addrinfo hints = { 0 }, *res, *result; + int hints_enabled = hint_is_tcp || hint_is_ipv4; + int ret; + size_t pos = 0; + + if (hints_enabled) { + if (hint_is_ipv4) { + hints.ai_family = *hint_is_ipv4 ? AF_INET : AF_INET6; + } + if (hint_is_tcp) { + hints.ai_socktype = *hint_is_tcp ? SOCK_STREAM : SOCK_DGRAM; + } + } + + ret = getaddrinfo(host, strlen(service) == 0 ? NULL : service, + hints_enabled ? &hints : NULL, &result); + if (ret != BHT_OK) { + errno = getaddrinfo_error_to_errno(ret); + return BHT_ERROR; + } + + res = result; + while (res) { + if (addr_info_size > pos) { + if (!is_addrinfo_supported(res)) { + res = res->ai_next; + continue; + } + + ret = + sockaddr_to_bh_sockaddr(res->ai_addr, &addr_info[pos].sockaddr); + + if (ret == BHT_ERROR) { + freeaddrinfo(result); + return BHT_ERROR; + } + + addr_info[pos].is_tcp = res->ai_socktype == SOCK_STREAM; + } + + pos++; + res = res->ai_next; + } + + *max_info_size = pos; + freeaddrinfo(result); + + return BHT_OK; +} + +static int +os_socket_setbooloption(bh_socket_t socket, int level, int optname, + bool is_enabled) +{ + int option = (int)is_enabled; + if (setsockopt(socket, level, optname, &option, sizeof(option)) != 0) { + return BHT_ERROR; + } + + return BHT_OK; +} + +static int +os_socket_getbooloption(bh_socket_t socket, int level, int optname, + bool *is_enabled) +{ + assert(is_enabled); + + int optval; + socklen_t optval_size = sizeof(optval); + if (getsockopt(socket, level, optname, &optval, &optval_size) != 0) { + return BHT_ERROR; + } + *is_enabled = (bool)optval; + return BHT_OK; +} + +int +os_socket_set_send_buf_size(bh_socket_t socket, size_t bufsiz) +{ + int buf_size_int = (int)bufsiz; + if (setsockopt(socket, SOL_SOCKET, SO_SNDBUF, &buf_size_int, + sizeof(buf_size_int)) + != 0) { + return BHT_ERROR; + } + + return BHT_OK; +} + +int +os_socket_get_send_buf_size(bh_socket_t socket, size_t *bufsiz) +{ + assert(bufsiz); + + int buf_size_int; + socklen_t bufsiz_len = sizeof(buf_size_int); + if (getsockopt(socket, SOL_SOCKET, SO_SNDBUF, &buf_size_int, &bufsiz_len) + != 0) { + return BHT_ERROR; + } + *bufsiz = (size_t)buf_size_int; + + return BHT_OK; +} + +int +os_socket_set_recv_buf_size(bh_socket_t socket, size_t bufsiz) +{ + int buf_size_int = (int)bufsiz; + if (setsockopt(socket, SOL_SOCKET, SO_RCVBUF, &buf_size_int, + sizeof(buf_size_int)) + != 0) { + return BHT_ERROR; + } + + return BHT_OK; +} + +int +os_socket_get_recv_buf_size(bh_socket_t socket, size_t *bufsiz) +{ + assert(bufsiz); + + int buf_size_int; + socklen_t bufsiz_len = sizeof(buf_size_int); + if (getsockopt(socket, SOL_SOCKET, SO_RCVBUF, &buf_size_int, &bufsiz_len) + != 0) { + return BHT_ERROR; + } + *bufsiz = (size_t)buf_size_int; + + return BHT_OK; +} + +int +os_socket_set_keep_alive(bh_socket_t socket, bool is_enabled) +{ + return os_socket_setbooloption(socket, SOL_SOCKET, SO_KEEPALIVE, + is_enabled); +} + +int +os_socket_get_keep_alive(bh_socket_t socket, bool *is_enabled) +{ + return os_socket_getbooloption(socket, SOL_SOCKET, SO_KEEPALIVE, + is_enabled); +} + +int +os_socket_set_reuse_addr(bh_socket_t socket, bool is_enabled) +{ + return os_socket_setbooloption(socket, SOL_SOCKET, SO_REUSEADDR, + is_enabled); +} + +int +os_socket_get_reuse_addr(bh_socket_t socket, bool *is_enabled) +{ + return os_socket_getbooloption(socket, SOL_SOCKET, SO_REUSEADDR, + is_enabled); +} + +int +os_socket_set_reuse_port(bh_socket_t socket, bool is_enabled) +{ +#if defined(SO_REUSEPORT) /* NuttX doesn't have SO_REUSEPORT */ + return os_socket_setbooloption(socket, SOL_SOCKET, SO_REUSEPORT, + is_enabled); +#else + errno = ENOTSUP; + return BHT_ERROR; +#endif /* defined(SO_REUSEPORT) */ +} + +int +os_socket_get_reuse_port(bh_socket_t socket, bool *is_enabled) +{ +#if defined(SO_REUSEPORT) /* NuttX doesn't have SO_REUSEPORT */ + return os_socket_getbooloption(socket, SOL_SOCKET, SO_REUSEPORT, + is_enabled); +#else + errno = ENOTSUP; + return BHT_ERROR; +#endif /* defined(SO_REUSEPORT) */ +} + +int +os_socket_set_linger(bh_socket_t socket, bool is_enabled, int linger_s) +{ + struct linger linger_opts = { .l_onoff = (int)is_enabled, + .l_linger = linger_s }; + if (setsockopt(socket, SOL_SOCKET, SO_LINGER, &linger_opts, + sizeof(linger_opts)) + != 0) { + return BHT_ERROR; + } + + return BHT_OK; +} + +int +os_socket_get_linger(bh_socket_t socket, bool *is_enabled, int *linger_s) +{ + assert(is_enabled); + assert(linger_s); + + struct linger linger_opts; + socklen_t linger_opts_len = sizeof(linger_opts); + if (getsockopt(socket, SOL_SOCKET, SO_LINGER, &linger_opts, + &linger_opts_len) + != 0) { + return BHT_ERROR; + } + *linger_s = linger_opts.l_linger; + *is_enabled = (bool)linger_opts.l_onoff; + return BHT_OK; +} + +int +os_socket_set_tcp_no_delay(bh_socket_t socket, bool is_enabled) +{ + return os_socket_setbooloption(socket, IPPROTO_TCP, TCP_NODELAY, + is_enabled); +} + +int +os_socket_get_tcp_no_delay(bh_socket_t socket, bool *is_enabled) +{ + return os_socket_getbooloption(socket, IPPROTO_TCP, TCP_NODELAY, + is_enabled); +} + +int +os_socket_set_tcp_quick_ack(bh_socket_t socket, bool is_enabled) +{ +#ifdef TCP_QUICKACK + return os_socket_setbooloption(socket, IPPROTO_TCP, TCP_QUICKACK, + is_enabled); +#else + errno = ENOSYS; + + return BHT_ERROR; +#endif +} + +int +os_socket_get_tcp_quick_ack(bh_socket_t socket, bool *is_enabled) +{ +#ifdef TCP_QUICKACK + return os_socket_getbooloption(socket, IPPROTO_TCP, TCP_QUICKACK, + is_enabled); +#else + errno = ENOSYS; + + return BHT_ERROR; +#endif +} + +int +os_socket_set_tcp_keep_idle(bh_socket_t socket, uint32 time_s) +{ + int time_s_int = (int)time_s; +#ifdef TCP_KEEPIDLE + if (setsockopt(socket, IPPROTO_TCP, TCP_KEEPIDLE, &time_s_int, + sizeof(time_s_int)) + != 0) { + return BHT_ERROR; + } + return BHT_OK; +#elif defined(TCP_KEEPALIVE) + if (setsockopt(socket, IPPROTO_TCP, TCP_KEEPALIVE, &time_s_int, + sizeof(time_s_int)) + != 0) { + return BHT_ERROR; + } + return BHT_OK; +#else + errno = ENOSYS; + + return BHT_ERROR; +#endif +} + +int +os_socket_get_tcp_keep_idle(bh_socket_t socket, uint32 *time_s) +{ + assert(time_s); + int time_s_int; + socklen_t time_s_len = sizeof(time_s_int); +#ifdef TCP_KEEPIDLE + if (getsockopt(socket, IPPROTO_TCP, TCP_KEEPIDLE, &time_s_int, &time_s_len) + != 0) { + return BHT_ERROR; + } + *time_s = (uint32)time_s_int; + return BHT_OK; +#elif defined(TCP_KEEPALIVE) + if (getsockopt(socket, IPPROTO_TCP, TCP_KEEPALIVE, &time_s_int, &time_s_len) + != 0) { + return BHT_ERROR; + } + *time_s = (uint32)time_s_int; + return BHT_OK; +#else + errno = ENOSYS; + + return BHT_ERROR; +#endif +} + +int +os_socket_set_tcp_keep_intvl(bh_socket_t socket, uint32 time_s) +{ + int time_s_int = (int)time_s; +#ifdef TCP_KEEPINTVL + if (setsockopt(socket, IPPROTO_TCP, TCP_KEEPINTVL, &time_s_int, + sizeof(time_s_int)) + != 0) { + return BHT_ERROR; + } + + return BHT_OK; +#else + errno = ENOSYS; + + return BHT_ERROR; +#endif +} + +int +os_socket_get_tcp_keep_intvl(bh_socket_t socket, uint32 *time_s) +{ +#ifdef TCP_KEEPINTVL + assert(time_s); + int time_s_int; + socklen_t time_s_len = sizeof(time_s_int); + if (getsockopt(socket, IPPROTO_TCP, TCP_KEEPINTVL, &time_s_int, &time_s_len) + != 0) { + return BHT_ERROR; + } + *time_s = (uint32)time_s_int; + return BHT_OK; +#else + errno = ENOSYS; + + return BHT_ERROR; +#endif +} + +int +os_socket_set_tcp_fastopen_connect(bh_socket_t socket, bool is_enabled) +{ +#ifdef TCP_FASTOPEN_CONNECT + return os_socket_setbooloption(socket, IPPROTO_TCP, TCP_FASTOPEN_CONNECT, + is_enabled); +#else + errno = ENOSYS; + + return BHT_ERROR; +#endif +} + +int +os_socket_get_tcp_fastopen_connect(bh_socket_t socket, bool *is_enabled) +{ +#ifdef TCP_FASTOPEN_CONNECT + return os_socket_getbooloption(socket, IPPROTO_TCP, TCP_FASTOPEN_CONNECT, + is_enabled); +#else + errno = ENOSYS; + + return BHT_ERROR; +#endif +} + +int +os_socket_set_ip_multicast_loop(bh_socket_t socket, bool ipv6, bool is_enabled) +{ + if (ipv6) { +#ifdef IPPROTO_IPV6 + return os_socket_setbooloption(socket, IPPROTO_IPV6, + IPV6_MULTICAST_LOOP, is_enabled); +#else + errno = EAFNOSUPPORT; + return BHT_ERROR; +#endif + } + else { + return os_socket_setbooloption(socket, IPPROTO_IP, IP_MULTICAST_LOOP, + is_enabled); + } +} + +int +os_socket_get_ip_multicast_loop(bh_socket_t socket, bool ipv6, bool *is_enabled) +{ + if (ipv6) { +#ifdef IPPROTO_IPV6 + return os_socket_getbooloption(socket, IPPROTO_IPV6, + IPV6_MULTICAST_LOOP, is_enabled); +#else + errno = EAFNOSUPPORT; + return BHT_ERROR; +#endif + } + else { + return os_socket_getbooloption(socket, IPPROTO_IP, IP_MULTICAST_LOOP, + is_enabled); + } +} + +int +os_socket_set_ip_add_membership(bh_socket_t socket, + bh_ip_addr_buffer_t *imr_multiaddr, + uint32_t imr_interface, bool is_ipv6) +{ + assert(imr_multiaddr); + if (is_ipv6) { +#if defined(IPPROTO_IPV6) && !defined(BH_PLATFORM_COSMOPOLITAN) + struct ipv6_mreq mreq; + for (int i = 0; i < 8; i++) { + ((uint16_t *)mreq.ipv6mr_multiaddr.s6_addr)[i] = + imr_multiaddr->ipv6[i]; + } + mreq.ipv6mr_interface = imr_interface; + if (setsockopt(socket, IPPROTO_IPV6, IPV6_JOIN_GROUP, &mreq, + sizeof(mreq)) + != 0) { + return BHT_ERROR; + } +#else + errno = EAFNOSUPPORT; + return BHT_ERROR; +#endif + } + else { + struct ip_mreq mreq; + mreq.imr_multiaddr.s_addr = imr_multiaddr->ipv4; + mreq.imr_interface.s_addr = imr_interface; + if (setsockopt(socket, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, + sizeof(mreq)) + != 0) { + return BHT_ERROR; + } + } + + return BHT_OK; +} + +int +os_socket_set_ip_drop_membership(bh_socket_t socket, + bh_ip_addr_buffer_t *imr_multiaddr, + uint32_t imr_interface, bool is_ipv6) +{ + assert(imr_multiaddr); + if (is_ipv6) { +#if defined(IPPROTO_IPV6) && !defined(BH_PLATFORM_COSMOPOLITAN) + struct ipv6_mreq mreq; + for (int i = 0; i < 8; i++) { + ((uint16_t *)mreq.ipv6mr_multiaddr.s6_addr)[i] = + imr_multiaddr->ipv6[i]; + } + mreq.ipv6mr_interface = imr_interface; + if (setsockopt(socket, IPPROTO_IPV6, IPV6_LEAVE_GROUP, &mreq, + sizeof(mreq)) + != 0) { + return BHT_ERROR; + } +#else + errno = EAFNOSUPPORT; + return BHT_ERROR; +#endif + } + else { + struct ip_mreq mreq; + mreq.imr_multiaddr.s_addr = imr_multiaddr->ipv4; + mreq.imr_interface.s_addr = imr_interface; + if (setsockopt(socket, IPPROTO_IP, IP_DROP_MEMBERSHIP, &mreq, + sizeof(mreq)) + != 0) { + return BHT_ERROR; + } + } + + return BHT_OK; +} + +int +os_socket_set_ip_ttl(bh_socket_t socket, uint8_t ttl_s) +{ + if (setsockopt(socket, IPPROTO_IP, IP_TTL, &ttl_s, sizeof(ttl_s)) != 0) { + return BHT_ERROR; + } + + return BHT_OK; +} + +int +os_socket_get_ip_ttl(bh_socket_t socket, uint8_t *ttl_s) +{ + socklen_t opt_len = sizeof(*ttl_s); + if (getsockopt(socket, IPPROTO_IP, IP_TTL, ttl_s, &opt_len) != 0) { + return BHT_ERROR; + } + + return BHT_OK; +} + +int +os_socket_set_ip_multicast_ttl(bh_socket_t socket, uint8_t ttl_s) +{ + if (setsockopt(socket, IPPROTO_IP, IP_MULTICAST_TTL, &ttl_s, sizeof(ttl_s)) + != 0) { + return BHT_ERROR; + } + + return BHT_OK; +} + +int +os_socket_get_ip_multicast_ttl(bh_socket_t socket, uint8_t *ttl_s) +{ + socklen_t opt_len = sizeof(*ttl_s); + if (getsockopt(socket, IPPROTO_IP, IP_MULTICAST_TTL, ttl_s, &opt_len) + != 0) { + return BHT_ERROR; + } + + return BHT_OK; +} + +int +os_socket_set_ipv6_only(bh_socket_t socket, bool is_enabled) +{ +#ifdef IPPROTO_IPV6 + return os_socket_setbooloption(socket, IPPROTO_IPV6, IPV6_V6ONLY, + is_enabled); +#else + errno = EAFNOSUPPORT; + return BHT_ERROR; +#endif +} + +int +os_socket_get_ipv6_only(bh_socket_t socket, bool *is_enabled) +{ +#ifdef IPPROTO_IPV6 + return os_socket_getbooloption(socket, IPPROTO_IPV6, IPV6_V6ONLY, + is_enabled); +#else + errno = EAFNOSUPPORT; + return BHT_ERROR; +#endif +} + +int +os_socket_set_broadcast(bh_socket_t socket, bool is_enabled) +{ + return os_socket_setbooloption(socket, SOL_SOCKET, SO_BROADCAST, + is_enabled); +} + +int +os_socket_get_broadcast(bh_socket_t socket, bool *is_enabled) +{ + return os_socket_getbooloption(socket, SOL_SOCKET, SO_BROADCAST, + is_enabled); +} + +int +os_socket_set_send_timeout(bh_socket_t socket, uint64 timeout_us) +{ + struct timeval tv; + tv.tv_sec = timeout_us / 1000000UL; + tv.tv_usec = timeout_us % 1000000UL; + if (setsockopt(socket, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(tv)) != 0) { + return BHT_ERROR; + } + return BHT_OK; +} + +int +os_socket_get_send_timeout(bh_socket_t socket, uint64 *timeout_us) +{ + struct timeval tv; + socklen_t tv_len = sizeof(tv); + if (getsockopt(socket, SOL_SOCKET, SO_SNDTIMEO, &tv, &tv_len) != 0) { + return BHT_ERROR; + } + *timeout_us = (tv.tv_sec * 1000000UL) + tv.tv_usec; + return BHT_OK; +} + +int +os_socket_set_recv_timeout(bh_socket_t socket, uint64 timeout_us) +{ + struct timeval tv; + tv.tv_sec = timeout_us / 1000000UL; + tv.tv_usec = timeout_us % 1000000UL; + if (setsockopt(socket, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)) != 0) { + return BHT_ERROR; + } + return BHT_OK; +} + +int +os_socket_get_recv_timeout(bh_socket_t socket, uint64 *timeout_us) +{ + struct timeval tv; + socklen_t tv_len = sizeof(tv); + if (getsockopt(socket, SOL_SOCKET, SO_RCVTIMEO, &tv, &tv_len) != 0) { + return BHT_ERROR; + } + *timeout_us = (tv.tv_sec * 1000000UL) + tv.tv_usec; + return BHT_OK; +} + +int +os_socket_addr_local(bh_socket_t socket, bh_sockaddr_t *sockaddr) +{ + struct sockaddr_storage addr_storage = { 0 }; + socklen_t addr_len = sizeof(addr_storage); + int ret; + + ret = getsockname(socket, (struct sockaddr *)&addr_storage, &addr_len); + + if (ret != BHT_OK) { + return BHT_ERROR; + } + + return sockaddr_to_bh_sockaddr((struct sockaddr *)&addr_storage, sockaddr); +} + +int +os_socket_addr_remote(bh_socket_t socket, bh_sockaddr_t *sockaddr) +{ + struct sockaddr_storage addr_storage = { 0 }; + socklen_t addr_len = sizeof(addr_storage); + int ret; + + ret = getpeername(socket, (struct sockaddr *)&addr_storage, &addr_len); + + if (ret != BHT_OK) { + return BHT_ERROR; + } + + return sockaddr_to_bh_sockaddr((struct sockaddr *)&addr_storage, sockaddr); +} diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/esp-idf/espidf_thread.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/esp-idf/espidf_thread.c similarity index 86% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/esp-idf/espidf_thread.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/esp-idf/espidf_thread.c index 637cd4177f5..768d823a8b8 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/esp-idf/espidf_thread.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/esp-idf/espidf_thread.c @@ -230,4 +230,59 @@ int os_cond_broadcast(korp_cond *cond) { return pthread_cond_broadcast(cond); -} \ No newline at end of file +} + +int +os_rwlock_init(korp_rwlock *lock) +{ + assert(lock); + + if (pthread_rwlock_init(lock, NULL) != BHT_OK) + return BHT_ERROR; + + return BHT_OK; +} + +int +os_rwlock_rdlock(korp_rwlock *lock) +{ + assert(lock); + + if (pthread_rwlock_rdlock(lock) != BHT_OK) + return BHT_ERROR; + + return BHT_OK; +} + +int +os_rwlock_wrlock(korp_rwlock *lock) +{ + assert(lock); + + if (pthread_rwlock_wrlock(lock) != BHT_OK) + return BHT_ERROR; + + return BHT_OK; +} + +int +os_rwlock_unlock(korp_rwlock *lock) +{ + assert(lock); + + if (pthread_rwlock_unlock(lock) != BHT_OK) + return BHT_ERROR; + + return BHT_OK; +} + +int +os_rwlock_destroy(korp_rwlock *lock) +{ + assert(lock); + + if (pthread_rwlock_destroy(lock) != BHT_OK) + return BHT_ERROR; + + return BHT_OK; +} diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/esp-idf/platform_internal.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/esp-idf/platform_internal.h similarity index 79% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/esp-idf/platform_internal.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/esp-idf/platform_internal.h index 70c4fe7b1d5..aa81b3d892f 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/esp-idf/platform_internal.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/esp-idf/platform_internal.h @@ -56,39 +56,29 @@ typedef unsigned int korp_sem; #define UTIME_OMIT ((1l << 30) - 2l) #endif -#ifdef DT_UNKNOWN -#undef DT_UNKNOWN -#endif - -#ifdef DT_REG -#undef DT_REG -#endif - -#ifdef DT_DIR -#undef DT_DIR -#endif - /* Below parts of d_type define are ported from Nuttx, under Apache License v2.0 */ -/* File type code for the d_type field in dirent structure. - * Note that because of the simplified filesystem organization of the NuttX, - * top-level, pseudo-file system, an inode can be BOTH a file and a directory +/* Following macros are defined in espressif GCC of esp-idf v5.3 */ #define DTYPE_UNKNOWN 0 -#define DTYPE_FIFO 1 -#define DTYPE_CHR 2 -#define DTYPE_SEM 3 -#define DTYPE_DIRECTORY 4 -#define DTYPE_MQ 5 -#define DTYPE_BLK 6 -#define DTYPE_SHM 7 -#define DTYPE_FILE 8 -#define DTYPE_MTD 9 +#define DTYPE_FILE 1 +#define DTYPE_DIRECTORY 2 +#define DTYPE_CHR 4 +#define DTYPE_BLK 5 +#define DTYPE_FIFO 8 #define DTYPE_LINK 10 #define DTYPE_SOCK 12 +/* Following macros are not defined in espressif GCC of esp-idf v5.3 + */ + +#define DTYPE_SEM 100 +#define DTYPE_MQ 101 +#define DTYPE_SHM 102 +#define DTYPE_MTD 103 + /* The d_type field of the dirent structure is not specified by POSIX. It * is a non-standard, 4.5BSD extension that is implemented by most OSs. A * POSIX compliant OS may not implement the d_type field at all. Many OS's @@ -96,18 +86,53 @@ typedef unsigned int korp_sem; * type names: */ +#ifndef DT_UNKNOWN #define DT_UNKNOWN DTYPE_UNKNOWN +#endif + +#ifndef DT_FIFO #define DT_FIFO DTYPE_FIFO +#endif + +#ifndef DT_CHR #define DT_CHR DTYPE_CHR +#endif + +#ifndef DT_SEM #define DT_SEM DTYPE_SEM +#endif + +#ifndef DT_DIR #define DT_DIR DTYPE_DIRECTORY +#endif + +#ifndef DT_MQ #define DT_MQ DTYPE_MQ +#endif + +#ifndef DT_BLK #define DT_BLK DTYPE_BLK +#endif + +#ifndef DT_SHM #define DT_SHM DTYPE_SHM +#endif + +#ifndef DT_REG #define DT_REG DTYPE_FILE +#endif + +#ifndef DT_MTD #define DT_MTD DTYPE_MTD +#endif + +#ifndef DT_LNK #define DT_LNK DTYPE_LINK +#endif + +#ifndef DT_SOCK #define DT_SOCK DTYPE_SOCK +#endif typedef int os_file_handle; typedef DIR *os_dir_stream; diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/esp-idf/shared_platform.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/esp-idf/shared_platform.cmake similarity index 81% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/esp-idf/shared_platform.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/esp-idf/shared_platform.cmake index 8d7fe5d808a..d254b087b09 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/esp-idf/shared_platform.cmake +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/esp-idf/shared_platform.cmake @@ -10,6 +10,9 @@ include_directories(${PLATFORM_SHARED_DIR}/../include) file (GLOB_RECURSE source_all ${PLATFORM_SHARED_DIR}/*.c) +include (${CMAKE_CURRENT_LIST_DIR}/../common/libc-util/platform_common_libc_util.cmake) +set (source_all ${source_all} ${PLATFORM_COMMON_LIBC_UTIL_SOURCE}) + set (PLATFORM_SHARED_SOURCE ${source_all} ${PLATFORM_COMMON_MATH_SOURCE}) # If enable PSRAM of ESP32-S3, it had better to put AOT into PSRAM, so that diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/freebsd/platform_init.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/freebsd/platform_init.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/freebsd/platform_init.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/freebsd/platform_init.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/freebsd/platform_internal.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/freebsd/platform_internal.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/freebsd/platform_internal.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/freebsd/platform_internal.h index 5241c64569c..bfdfe1493ff 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/freebsd/platform_internal.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/freebsd/platform_internal.h @@ -85,8 +85,6 @@ typedef jmp_buf korp_jmpbuf; #define os_longjmp longjmp #define os_alloca alloca -#define os_getpagesize getpagesize - typedef void (*os_signal_handler)(void *sig_addr); int @@ -106,6 +104,8 @@ os_sigreturn(); #endif /* end of BUILD_TARGET_X86_64/AMD_64/AARCH64/RISCV64 */ #endif /* end of WASM_DISABLE_HW_BOUND_CHECK */ +#define os_getpagesize getpagesize + #if WASM_DISABLE_WAKEUP_BLOCKING_OP == 0 #define OS_ENABLE_WAKEUP_BLOCKING_OP #endif diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/freebsd/shared_platform.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/freebsd/shared_platform.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/freebsd/shared_platform.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/freebsd/shared_platform.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/include/platform_api_extension.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/include/platform_api_extension.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/include/platform_api_extension.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/include/platform_api_extension.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/include/platform_api_vmcore.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/include/platform_api_vmcore.h similarity index 96% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/include/platform_api_vmcore.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/include/platform_api_vmcore.h index 559141f75f3..4a9d29cc0ab 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/include/platform_api_vmcore.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/include/platform_api_vmcore.h @@ -64,7 +64,13 @@ os_vprintf(const char *format, va_list ap); * Get microseconds after boot. */ uint64 -os_time_get_boot_microsecond(void); +os_time_get_boot_us(void); + +/** + * Get thread-specific CPU-time clock in microseconds + */ +uint64 +os_time_thread_cputime_us(void); /** * Get current thread id. diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/include/platform_common.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/include/platform_common.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/include/platform_common.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/include/platform_common.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/include/platform_wasi_types.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/include/platform_wasi_types.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/include/platform_wasi_types.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/include/platform_wasi_types.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/platform_internal.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/platform_internal.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/platform_internal.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/platform_internal.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_file.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_file.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_file.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_file.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_file.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_file.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_file.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_file.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_ipfs.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_ipfs.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_ipfs.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_ipfs.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_ipfs.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_ipfs.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_ipfs.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_ipfs.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_platform.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_platform.c similarity index 91% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_platform.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_platform.c index 32b95682670..d97883a8e48 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_platform.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_platform.c @@ -119,6 +119,18 @@ strcpy(char *dest, const char *src) return dest; } +#if WASM_ENABLE_LIBC_WASI == 0 +bool +os_is_handle_valid(os_file_handle *handle) +{ + assert(handle != NULL); + + return *handle > -1; +} +#else +/* implemented in posix_file.c */ +#endif + void * os_mmap(void *hint, size_t size, int prot, int flags, os_file_handle file) { @@ -142,8 +154,8 @@ os_mmap(void *hint, size_t size, int prot, int flags, os_file_handle file) ret = sgx_alloc_rsrv_mem(aligned_size); if (ret == NULL) { - os_printf("os_mmap(size=%u, aligned size=%lu, prot=0x%x) failed.", size, - aligned_size, prot); + os_printf("os_mmap(size=%u, aligned size=%lu, prot=0x%x) failed.\n", + size, aligned_size, prot); return NULL; } @@ -156,7 +168,7 @@ os_mmap(void *hint, size_t size, int prot, int flags, os_file_handle file) st = sgx_tprotect_rsrv_mem(ret, aligned_size, mprot); if (st != SGX_SUCCESS) { - os_printf("os_mmap(size=%u, prot=0x%x) failed to set protect.", size, + os_printf("os_mmap(size=%u, prot=0x%x) failed to set protect.\n", size, prot); sgx_free_rsrv_mem(ret, aligned_size); return NULL; @@ -193,7 +205,8 @@ os_mprotect(void *addr, size_t size, int prot) mprot |= SGX_PROT_EXEC; st = sgx_tprotect_rsrv_mem(addr, aligned_size, mprot); if (st != SGX_SUCCESS) - os_printf("os_mprotect(addr=0x%" PRIx64 ", size=%u, prot=0x%x) failed.", + os_printf("os_mprotect(addr=0x%" PRIx64 + ", size=%u, prot=0x%x) failed.\n", (uintptr_t)addr, size, prot); return (st == SGX_SUCCESS ? 0 : -1); diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_pthread.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_pthread.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_pthread.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_pthread.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_pthread.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_pthread.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_pthread.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_pthread.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_rsrv_mem_mngr.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_rsrv_mem_mngr.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_rsrv_mem_mngr.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_rsrv_mem_mngr.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_signal.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_signal.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_signal.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_signal.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_signal.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_signal.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_signal.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_signal.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_socket.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_socket.c similarity index 99% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_socket.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_socket.c index cd1a6ceade8..458bb1e249d 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_socket.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_socket.c @@ -5,10 +5,11 @@ #include "platform_api_vmcore.h" #include "platform_api_extension.h" -#include "libc_errno.h" #ifndef SGX_DISABLE_WASI +#include "libc_errno.h" + #define TRACE_OCALL_FAIL() os_printf("ocall %s failed!\n", __FUNCTION__) /** OCALLs prototypes **/ diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_socket.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_socket.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_socket.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_socket.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_thread.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_thread.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_thread.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_thread.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_time.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_time.c similarity index 90% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_time.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_time.c index d090083ef0d..d39db22fbc2 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_time.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_time.c @@ -26,7 +26,7 @@ ocall_clock_nanosleep(int *p_ret, unsigned clock_id, int flags, const void *rem_buf, unsigned int rem_buf_size); uint64 -os_time_get_boot_microsecond() +os_time_get_boot_us() { #ifndef SGX_DISABLE_WASI struct timespec ts; @@ -40,6 +40,21 @@ os_time_get_boot_microsecond() #endif } +uint64 +os_time_thread_cputime_us(void) +{ +#ifndef SGX_DISABLE_WASI + struct timespec ts; + if (clock_gettime(CLOCK_THREAD_CPUTIME_ID, &ts) != 0) { + return 0; + } + + return ((uint64)ts.tv_sec) * 1000 * 1000 + ((uint64)ts.tv_nsec) / 1000; +#else + return 0; +#endif +} + #ifndef SGX_DISABLE_WASI int diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_time.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_time.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_time.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_time.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_wamr.edl b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_wamr.edl similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/sgx_wamr.edl rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/sgx_wamr.edl diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/shared_platform.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/shared_platform.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/shared_platform.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/shared_platform.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/untrusted/file.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/untrusted/file.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/untrusted/file.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/untrusted/file.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/untrusted/pthread.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/untrusted/pthread.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/untrusted/pthread.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/untrusted/pthread.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/untrusted/signal.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/untrusted/signal.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/untrusted/signal.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/untrusted/signal.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/untrusted/socket.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/untrusted/socket.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/untrusted/socket.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/untrusted/socket.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/untrusted/time.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/untrusted/time.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux-sgx/untrusted/time.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux-sgx/untrusted/time.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux/platform_init.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux/platform_init.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux/platform_init.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux/platform_init.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux/platform_internal.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux/platform_internal.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux/platform_internal.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux/platform_internal.h index 335070bf80f..aeddc4ccf25 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux/platform_internal.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux/platform_internal.h @@ -95,8 +95,6 @@ typedef jmp_buf korp_jmpbuf; #define os_longjmp longjmp #define os_alloca alloca -#define os_getpagesize getpagesize - typedef void (*os_signal_handler)(void *sig_addr); int @@ -116,6 +114,8 @@ os_sigreturn(); #endif /* end of BUILD_TARGET_X86_64/AMD_64/AARCH64/RISCV64 */ #endif /* end of WASM_DISABLE_HW_BOUND_CHECK */ +#define os_getpagesize getpagesize + #if WASM_DISABLE_WAKEUP_BLOCKING_OP == 0 #define OS_ENABLE_WAKEUP_BLOCKING_OP #endif diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux/shared_platform.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux/shared_platform.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/linux/shared_platform.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/linux/shared_platform.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/nuttx/nuttx_platform.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/nuttx/nuttx_platform.c similarity index 86% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/nuttx/nuttx_platform.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/nuttx/nuttx_platform.c index 38e70076d16..0077c9e0211 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/nuttx/nuttx_platform.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/nuttx/nuttx_platform.c @@ -87,13 +87,18 @@ os_dumps_proc_mem_info(char *out, unsigned int size) void * os_mmap(void *hint, size_t size, int prot, int flags, os_file_handle file) { + void *p; #if (WASM_MEM_DUAL_BUS_MIRROR != 0) void *i_addr, *d_addr; #endif #if defined(CONFIG_ARCH_USE_TEXT_HEAP) if ((prot & MMAP_PROT_EXEC) != 0) { - return up_textheap_memalign(sizeof(void *), size); + p = up_textheap_memalign(sizeof(void *), size); + if (p) { + memset(p, 0, size); + } + return p; } #endif @@ -107,10 +112,32 @@ os_mmap(void *hint, size_t size, int prot, int flags, os_file_handle file) return NULL; } i_addr = (void *)((uint8 *)d_addr + MEM_DUAL_BUS_OFFSET); - return in_ibus_ext(i_addr) ? i_addr : d_addr; + p = in_ibus_ext(i_addr) ? i_addr : d_addr; + if (p) { + memset(p, 0, size); + } + return p; } #endif - return malloc((uint32)size); + /* Note: aot_loader.c assumes that os_mmap provides large enough + * alignment for any data sections. Some sections like rodata.cst32 + * actually require alignment larger than the natural alignment + * provided by malloc. + * + * Probably it's cleaner to add an explicit alignment argument to + * os_mmap. However, it only makes sense if we change our aot format + * to keep the necessary alignment. + * + * For now, let's assume 32 byte alignment is enough. + */ + if (posix_memalign(&p, 32, size)) { + return NULL; + } + + /* Zero the memory which is required by os_mmap */ + memset(p, 0, size); + + return p; } void diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/nuttx/platform_internal.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/nuttx/platform_internal.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/nuttx/platform_internal.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/nuttx/platform_internal.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/nuttx/shared_platform.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/nuttx/shared_platform.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/nuttx/shared_platform.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/nuttx/shared_platform.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/riot/platform_internal.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/riot/platform_internal.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/riot/platform_internal.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/riot/platform_internal.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/riot/riot_platform.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/riot/riot_platform.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/riot/riot_platform.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/riot/riot_platform.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/riot/riot_thread.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/riot/riot_thread.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/riot/riot_thread.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/riot/riot_thread.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/riot/riot_time.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/riot/riot_time.c similarity index 73% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/riot/riot_time.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/riot/riot_time.c index 1503495c1ad..ce73777c921 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/riot/riot_time.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/riot/riot_time.c @@ -10,25 +10,32 @@ #if IS_USED(MODULE_ZTIMER64_USEC) uint64 -os_time_get_boot_microsecond() +os_time_get_boot_us() { return ztimer64_now(ZTIMER64_USEC); } #elif IS_USED(MODULE_ZTIMER64_MSEC) uint64 -os_time_get_boot_microsecond() +os_time_get_boot_us() { return ztimer64_now(ZTIMER64_MSEC) * 1000; } #else #ifdef __GNUC__ __attribute__((weak)) uint64 -os_time_get_boot_microsecond(); +os_time_get_boot_us(); #endif uint64 -os_time_get_boot_microsecond() +os_time_get_boot_us() { static uint64_t times; return ++times; } #endif + +uint64 +os_time_thread_cputime_us(void) +{ + /* FIXME if u know the right api */ + return os_time_get_boot_us(); +} diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/riot/shared_platform.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/riot/shared_platform.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/riot/shared_platform.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/riot/shared_platform.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/rt-thread/SConscript b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/rt-thread/SConscript similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/rt-thread/SConscript rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/rt-thread/SConscript diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/rt-thread/platform_internal.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/rt-thread/platform_internal.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/rt-thread/platform_internal.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/rt-thread/platform_internal.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/rt-thread/rtt_platform.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/rt-thread/rtt_platform.c similarity index 96% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/rt-thread/rtt_platform.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/rt-thread/rtt_platform.c index 37b247d35fe..31fb316223f 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/rt-thread/rtt_platform.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/rt-thread/rtt_platform.c @@ -120,13 +120,20 @@ os_vprintf(const char *format, va_list ap) } uint64 -os_time_get_boot_microsecond(void) +os_time_get_boot_us(void) { uint64 ret = rt_tick_get() * 1000; ret /= RT_TICK_PER_SECOND; return ret; } +uint64 +os_time_thread_cputime_us(void) +{ + /* FIXME if u know the right api */ + return os_time_get_boot_us(); +} + korp_tid os_self_thread(void) { diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/rt-thread/shared_platform.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/rt-thread/shared_platform.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/rt-thread/shared_platform.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/rt-thread/shared_platform.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/vxworks/platform_init.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/vxworks/platform_init.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/vxworks/platform_init.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/vxworks/platform_init.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/vxworks/platform_internal.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/vxworks/platform_internal.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/vxworks/platform_internal.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/vxworks/platform_internal.h index 930ff7777bf..1b870c70eb7 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/vxworks/platform_internal.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/vxworks/platform_internal.h @@ -79,8 +79,6 @@ typedef jmp_buf korp_jmpbuf; #define os_longjmp longjmp #define os_alloca alloca -#define os_getpagesize getpagesize - typedef void (*os_signal_handler)(void *sig_addr); int @@ -100,6 +98,8 @@ os_sigreturn(); #endif /* end of BUILD_TARGET_X86_64/AMD_64/AARCH64 */ #endif /* end of WASM_DISABLE_HW_BOUND_CHECK */ +#define os_getpagesize getpagesize + static inline os_file_handle os_get_invalid_handle() { diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/vxworks/shared_platform.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/vxworks/shared_platform.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/vxworks/shared_platform.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/vxworks/shared_platform.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/windows/platform_init.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/windows/platform_init.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/windows/platform_init.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/windows/platform_init.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/windows/platform_internal.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/windows/platform_internal.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/windows/platform_internal.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/windows/platform_internal.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/windows/shared_platform.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/windows/shared_platform.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/windows/shared_platform.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/windows/shared_platform.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/windows/win_atomic.cpp b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/windows/win_atomic.cpp similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/windows/win_atomic.cpp rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/windows/win_atomic.cpp diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/windows/win_clock.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/windows/win_clock.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/windows/win_clock.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/windows/win_clock.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/windows/win_file.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/windows/win_file.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/windows/win_file.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/windows/win_file.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/windows/win_malloc.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/windows/win_malloc.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/windows/win_malloc.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/windows/win_malloc.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/windows/win_memmap.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/windows/win_memmap.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/windows/win_memmap.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/windows/win_memmap.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/windows/win_socket.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/windows/win_socket.c similarity index 99% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/windows/win_socket.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/windows/win_socket.c index 91d38fd8b60..b19e5b0976c 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/windows/win_socket.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/windows/win_socket.c @@ -32,6 +32,7 @@ static bool is_winsock_inited = false; int init_winsock() { +#if WASM_ENABLE_HOST_SOCKET_INIT == 0 WSADATA wsaData; if (!is_winsock_inited) { @@ -42,6 +43,7 @@ init_winsock() is_winsock_inited = true; } +#endif return BHT_OK; } @@ -49,9 +51,11 @@ init_winsock() void deinit_winsock() { +#if WASM_ENABLE_HOST_SOCKET_INIT == 0 if (is_winsock_inited) { WSACleanup(); } +#endif } int diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/windows/win_thread.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/windows/win_thread.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/windows/win_thread.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/windows/win_thread.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/windows/win_time.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/windows/win_time.c similarity index 77% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/windows/win_time.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/windows/win_time.c index 20e90d5eba9..7b2cd4fffa0 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/windows/win_time.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/windows/win_time.c @@ -6,7 +6,7 @@ #include "platform_api_vmcore.h" uint64 -os_time_get_boot_microsecond() +os_time_get_boot_us() { struct timespec ts; #if defined(__MINGW32__) @@ -18,3 +18,10 @@ os_time_get_boot_microsecond() return ((uint64)ts.tv_sec) * 1000 * 1000 + ((uint64)ts.tv_nsec) / 1000; } + +uint64 +os_time_thread_cputime_us(void) +{ + /* FIXME if u know the right api */ + return os_time_get_boot_us(); +} \ No newline at end of file diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/windows/win_util.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/windows/win_util.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/windows/win_util.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/windows/win_util.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/windows/win_util.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/windows/win_util.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/windows/win_util.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/windows/win_util.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/zephyr/platform_internal.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/zephyr/platform_internal.h similarity index 93% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/zephyr/platform_internal.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/zephyr/platform_internal.h index a5d563a6c8f..85d4a832d24 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/zephyr/platform_internal.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/zephyr/platform_internal.h @@ -50,6 +50,10 @@ #include #endif /* end of KERNEL_VERSION_NUMBER < 0x030200 */ +#if KERNEL_VERSION_NUMBER >= 0x030300 /* version 3.3.0 */ +#include +#endif /* end of KERNEL_VERSION_NUMBER > 0x030300 */ + #ifdef CONFIG_ARM_MPU #if KERNEL_VERSION_NUMBER < 0x030200 /* version 3.2.0 */ #include @@ -96,7 +100,8 @@ void abort(void); size_t strspn(const char *s, const char *accept); size_t strcspn(const char *s, const char *reject); -/* math functions which are not provided by os */ +/* math functions which are not provided by os with minimal libc */ +#if defined(CONFIG_MINIMAL_LIBC) double atan(double x); double atan2(double y, double x); double sqrt(double x); @@ -123,6 +128,10 @@ double scalbn(double x, int n); unsigned long long int strtoull(const char *nptr, char **endptr, int base); double strtod(const char *nptr, char **endptr); float strtof(const char *nptr, char **endptr); +#else +#include +#endif /* CONFIG_MINIMAL_LIBC */ + /* clang-format on */ #if KERNEL_VERSION_NUMBER >= 0x030100 /* version 3.1.0 */ diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/zephyr/shared_platform.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/zephyr/shared_platform.cmake similarity index 79% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/zephyr/shared_platform.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/zephyr/shared_platform.cmake index 9b043b52f3b..dfd45a4064f 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/zephyr/shared_platform.cmake +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/zephyr/shared_platform.cmake @@ -8,7 +8,9 @@ add_definitions(-DBH_PLATFORM_ZEPHYR) include_directories(${PLATFORM_SHARED_DIR}) include_directories(${PLATFORM_SHARED_DIR}/../include) -include (${CMAKE_CURRENT_LIST_DIR}/../common/math/platform_api_math.cmake) +if(${CONFIG_MINIMAL_LIBC}) + include (${CMAKE_CURRENT_LIST_DIR}/../common/math/platform_api_math.cmake) +endif() file (GLOB_RECURSE source_all ${PLATFORM_SHARED_DIR}/*.c) diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/zephyr/zephyr_platform.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/zephyr/zephyr_platform.c similarity index 92% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/zephyr/zephyr_platform.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/zephyr/zephyr_platform.c index 1a5b6621d1f..0fb8e2bd41f 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/zephyr/zephyr_platform.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/zephyr/zephyr_platform.c @@ -25,9 +25,11 @@ disable_mpu_rasr_xn(void) would most likely be set at index 2. */ for (index = 0U; index < 8; index++) { MPU->RNR = index; +#ifdef MPU_RASR_XN_Msk if (MPU->RASR & MPU_RASR_XN_Msk) { MPU->RASR |= ~MPU_RASR_XN_Msk; } +#endif } } #endif /* end of CONFIG_ARM_MPU */ @@ -72,18 +74,20 @@ bh_platform_destroy() void * os_malloc(unsigned size) { - return NULL; + return malloc(size); } void * os_realloc(void *ptr, unsigned size) { - return NULL; + return realloc(ptr, size); } void os_free(void *ptr) -{} +{ + free(ptr); +} int os_dumps_proc_mem_info(char *out, unsigned int size) @@ -202,10 +206,14 @@ void os_dcache_flush() { #if defined(CONFIG_CPU_CORTEX_M7) && defined(CONFIG_ARM_MPU) +#if KERNEL_VERSION_NUMBER < 0x030300 /* version 3.3.0 */ uint32 key; key = irq_lock(); SCB_CleanDCache(); irq_unlock(key); +#else + sys_cache_data_flush_all(); +#endif #elif defined(CONFIG_SOC_CVF_EM7D) && defined(CONFIG_ARC_MPU) \ && defined(CONFIG_CACHE_FLUSHING) __asm__ __volatile__("sync"); @@ -216,7 +224,11 @@ os_dcache_flush() void os_icache_flush(void *start, size_t len) -{} +{ +#if KERNEL_VERSION_NUMBER >= 0x030300 /* version 3.3.0 */ + sys_cache_instr_flush_range(start, len); +#endif +} void set_exec_mem_alloc_func(exec_mem_alloc_func_t alloc_func, diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/zephyr/zephyr_thread.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/zephyr/zephyr_thread.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/zephyr/zephyr_thread.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/zephyr/zephyr_thread.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/zephyr/zephyr_time.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/zephyr/zephyr_time.c similarity index 59% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/zephyr/zephyr_time.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/zephyr/zephyr_time.c index 99eb3b35467..78bc3e07613 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/platform/zephyr/zephyr_time.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/platform/zephyr/zephyr_time.c @@ -6,7 +6,14 @@ #include "platform_api_vmcore.h" uint64 -os_time_get_boot_microsecond() +os_time_get_boot_us() { return k_uptime_get() * 1000; } + +uint64 +os_time_thread_cputime_us(void) +{ + /* FIXME if u know the right api */ + return os_time_get_boot_us(); +} diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/SConscript b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/SConscript similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/SConscript rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/SConscript diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_assert.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_assert.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_assert.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_assert.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_assert.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_assert.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_assert.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_assert.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_atomic.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_atomic.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_atomic.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_atomic.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_bitmap.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_bitmap.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_bitmap.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_bitmap.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_bitmap.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_bitmap.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_bitmap.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_bitmap.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_common.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_common.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_common.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_common.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_common.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_common.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_common.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_common.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_hashmap.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_hashmap.c similarity index 97% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_hashmap.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_hashmap.c index 3502239ad87..794b7a746e0 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_hashmap.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_hashmap.c @@ -51,7 +51,9 @@ bh_hash_map_create(uint32 size, bool use_lock, HashFunc hash_func, + sizeof(HashMapElem *) * (uint64)size + (use_lock ? sizeof(korp_mutex) : 0); - if (total_size >= UINT32_MAX || !(map = BH_MALLOC((uint32)total_size))) { + /* size <= HASH_MAP_MAX_SIZE, so total_size won't be larger than + UINT32_MAX, no need to check integer overflow */ + if (!(map = BH_MALLOC((uint32)total_size))) { LOG_ERROR("HashMap create failed: alloc memory failed.\n"); return NULL; } diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_hashmap.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_hashmap.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_hashmap.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_hashmap.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_list.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_list.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_list.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_list.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_list.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_list.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_list.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_list.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_log.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_log.c similarity index 96% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_log.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_log.c index 78c058065d9..1ffd9b76416 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_log.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_log.c @@ -17,6 +17,7 @@ bh_log_set_verbose_level(uint32 level) log_verbose_level = level; } +#ifndef BH_LOG void bh_log(LogLevel log_level, const char *file, int line, const char *fmt, ...) { @@ -31,7 +32,7 @@ bh_log(LogLevel log_level, const char *file, int line, const char *fmt, ...) self = os_self_thread(); - usec = os_time_get_boot_microsecond(); + usec = os_time_get_boot_us(); t = (uint32)(usec / 1000000) % (24 * 60 * 60); h = t / (60 * 60); t = t % (60 * 60); @@ -43,7 +44,9 @@ bh_log(LogLevel log_level, const char *file, int line, const char *fmt, ...) "%02" PRIu32 ":%02" PRIu32 ":%02" PRIu32 ":%03" PRIu32, h, m, s, mills); +#ifndef BH_VPRINTF os_printf("[%s - %" PRIXPTR "]: ", buf, (uintptr_t)self); +#endif if (file) os_printf("%s, line %d, ", file, line); @@ -54,6 +57,7 @@ bh_log(LogLevel log_level, const char *file, int line, const char *fmt, ...) os_printf("\n"); } +#endif static uint32 last_time_ms = 0; static uint32 total_time_ms = 0; diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_log.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_log.h similarity index 94% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_log.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_log.h index e0bc61da26e..53921b250e0 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_log.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_log.h @@ -38,8 +38,14 @@ typedef enum { void bh_log_set_verbose_level(uint32 level); +#ifndef BH_LOG void bh_log(LogLevel log_level, const char *file, int line, const char *fmt, ...); +#else +void +BH_LOG(uint32 log_level, const char *file, int line, const char *fmt, ...); +#define bh_log BH_LOG +#endif #ifdef BH_PLATFORM_NUTTX diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_platform.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_platform.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_platform.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_platform.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_queue.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_queue.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_queue.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_queue.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_queue.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_queue.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_queue.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_queue.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_vector.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_vector.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_vector.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_vector.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_vector.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_vector.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/bh_vector.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/bh_vector.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/gnuc.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/gnuc.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/gnuc.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/gnuc.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/runtime_timer.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/runtime_timer.c similarity index 98% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/runtime_timer.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/runtime_timer.c index 8fccf4c2f34..9d390c2145b 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/runtime_timer.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/runtime_timer.c @@ -38,7 +38,7 @@ struct _timer_ctx { uint64 bh_get_tick_ms() { - return os_time_get_boot_microsecond() / 1000; + return os_time_get_boot_us() / 1000; } uint32 @@ -394,7 +394,7 @@ handle_expired_timers(timer_ctx_t ctx, app_timer_t *expired) operation may change expired->next */ expired = expired->next; if (t->is_periodic) { - /* if it is repeating, then reschedule it; */ + /* if it is repeating, then reschedule it */ reschedule_timer(ctx, t); } else { diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/runtime_timer.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/runtime_timer.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/runtime_timer.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/runtime_timer.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/shared_utils.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/shared_utils.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/shared_utils.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/shared_utils.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/uncommon/SConscript b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/uncommon/SConscript similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/uncommon/SConscript rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/uncommon/SConscript diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/uncommon/bh_getopt.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/uncommon/bh_getopt.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/uncommon/bh_getopt.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/uncommon/bh_getopt.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/uncommon/bh_getopt.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/uncommon/bh_getopt.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/uncommon/bh_getopt.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/uncommon/bh_getopt.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/uncommon/bh_read_file.c b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/uncommon/bh_read_file.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/uncommon/bh_read_file.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/uncommon/bh_read_file.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/uncommon/bh_read_file.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/uncommon/bh_read_file.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/uncommon/bh_read_file.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/uncommon/bh_read_file.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/uncommon/shared_uncommon.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/uncommon/shared_uncommon.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/shared/utils/uncommon/shared_uncommon.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/shared/utils/uncommon/shared_uncommon.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/core/version.h b/lib/wasm-micro-runtime-WAMR-1.3.3/core/version.h similarity index 89% rename from lib/wasm-micro-runtime-WAMR-1.3.0/core/version.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/core/version.h index 9bb76b2625b..a2231e5ac1b 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/core/version.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/core/version.h @@ -7,5 +7,5 @@ #define _WAMR_VERSION_H_ #define WAMR_VERSION_MAJOR 1 #define WAMR_VERSION_MINOR 3 -#define WAMR_VERSION_PATCH 0 +#define WAMR_VERSION_PATCH 3 #endif diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/build_wamr.md b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/build_wamr.md similarity index 84% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/build_wamr.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/build_wamr.md index 12cbb41258e..6857478a9cc 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/build_wamr.md +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/build_wamr.md @@ -1,7 +1,7 @@ # Build WAMR vmcore -WAMR vmcore is a set of runtime libraries for loading and running Wasm modules. This document introduces how to build the WAMR vmcore. +WAMR vmcore is a set of runtime libraries for loading and running Wasm modules. This document introduces how to build the WAMR vmcore. References: - [how to build iwasm](../product-mini/README.md): building different target platforms such as Linux, Windows, Mac etc @@ -62,6 +62,7 @@ cmake -DWAMR_BUILD_PLATFORM=linux -DWAMR_BUILD_TARGET=ARM #### **Enable Multi-Module feature** - **WAMR_BUILD_MULTI_MODULE**=1/0, default to disable if not set +> Note: See [Multiple Modules as Dependencies](./multi_module.md) for more details. #### **Enable WASM mini loader** @@ -82,6 +83,8 @@ cmake -DWAMR_BUILD_PLATFORM=linux -DWAMR_BUILD_TARGET=ARM - **WAMR_BUILD_LIB_PTHREAD**=1/0, default to disable if not set > Note: The dependent feature of lib pthread such as the `shared memory` and `thread manager` will be enabled automatically. +> See [WAMR pthread library](./pthread_library.md) for more details. + #### **Enable lib-pthread-semaphore** - **WAMR_BUILD_LIB_PTHREAD_SEMAPHORE**=1/0, default to disable if not set > Note: This feature depends on `lib-pthread`, it will be enabled automatically if this feature is enabled. @@ -90,8 +93,11 @@ cmake -DWAMR_BUILD_PLATFORM=linux -DWAMR_BUILD_TARGET=ARM - **WAMR_BUILD_LIB_WASI_THREADS**=1/0, default to disable if not set > Note: The dependent feature of lib wasi-threads such as the `shared memory` and `thread manager` will be enabled automatically. +> See [wasi-threads](./pthread_impls.md#wasi-threads-new) and [Introduction to WAMR WASI threads](https://bytecodealliance.github.io/wamr.dev/blog/introduction-to-wamr-wasi-threads) for more details. + #### **Enable lib wasi-nn** - **WAMR_BUILD_WASI_NN**=1/0, default to disable if not set +> Note: See [WASI-NN](../core/iwasm/libraries/wasi-nn) for more details. #### **Enable lib wasi-nn GPU mode** - **WAMR_BUILD_WASI_NN_ENABLE_GPU**=1/0, default to disable if not set @@ -130,19 +136,24 @@ cmake -DWAMR_BUILD_PLATFORM=linux -DWAMR_BUILD_TARGET=ARM > Note: if it is enabled, the call stack will be dumped when exception occurs. > - For interpreter mode, the function names are firstly extracted from *custom name section*, if this section doesn't exist or the feature is not enabled, then the name will be extracted from the import/export sections -> - For AOT/JIT mode, the function names are extracted from import/export section, please export as many functions as possible (for `wasi-sdk` you can use `-Wl,--export-all`) when compiling wasm module, and add `--enable-dump-call-stack` option to wamrc during compiling AOT module. +> - For AOT/JIT mode, the function names are extracted from import/export section, please export as many functions as possible (for `wasi-sdk` you can use `-Wl,--export-all`) when compiling wasm module, and add `--enable-dump-call-stack --emit-custom-sections=name` option to wamrc during compiling AOT module. #### **Enable memory profiling (Experiment)** - **WAMR_BUILD_MEMORY_PROFILING**=1/0, default to disable if not set > Note: if it is enabled, developer can use API `void wasm_runtime_dump_mem_consumption(wasm_exec_env_t exec_env)` to dump the memory consumption info. Currently we only profile the memory consumption of module, module_instance and exec_env, the memory consumed by other components such as `wasi-ctx`, `multi-module` and `thread-manager` are not included. +> Also refer to [Memory usage estimation for a module](./memory_usage.md). + #### **Enable performance profiling (Experiment)** - **WAMR_BUILD_PERF_PROFILING**=1/0, default to disable if not set > Note: if it is enabled, developer can use API `void wasm_runtime_dump_perf_profiling(wasm_module_inst_t module_inst)` to dump the performance consumption info. Currently we only profile the performance consumption of each WASM function. > The function name searching sequence is the same with dump call stack feature. +> Also refer to [Tune the performance of running wasm/aot file](./perf_tune.md). + + #### **Enable the global heap** - **WAMR_BUILD_GLOBAL_HEAP_POOL**=1/0, default to disable if not set for all *iwasm* applications, except for the platforms Alios and Zephyr. @@ -179,7 +190,17 @@ Currently we only profile the memory consumption of module, module_instance and > } > ``` > -> and then use `cmake -DWAMR_BH_VPRINTF=my_vprintf ..` to pass the callback function, or add `BH_VPRINTF=my_vprintf` macro for the compiler, e.g. add line `add_defintions(-DBH_VPRINTF=my_vprintf)` in CMakeListst.txt. +> and then use `cmake -DWAMR_BH_VPRINTF=my_vprintf ..` to pass the callback function, or add `BH_VPRINTF=my_vprintf` macro for the compiler, e.g. add line `add_defintions(-DBH_VPRINTF=my_vprintf)` in CMakeListst.txt. See [basic sample](../samples/basic/src/main.c) for a usage example. + +#### **WAMR_BH_LOG**=, default to disable if not set +> Note: if the log_callback function is provided by the developer, WAMR logs are redirected to such callback. For example: +> ```C +> void my_log(uint32 log_level, const char *file, int line, const char *fmt, ...) +> { +> /* Usage of custom logger */ +> } +> ``` +> See [basic sample](../samples/basic/src/main.c) for a usage example. #### **Enable reference types feature** - **WAMR_BUILD_REF_TYPES**=1/0, default to disable if not set @@ -192,7 +213,7 @@ Currently we only profile the memory consumption of module, module_instance and #### **Enable source debugging features** - **WAMR_BUILD_DEBUG_INTERP**=1/0, default to 0 if not set -> Note: There are some other setup required by source debugging, please refer to [source_debugging.md](./source_debugging.md) for more details. +> Note: There are some other setup required by source debugging, please refer to [source_debugging.md](./source_debugging.md) and [WAMR source debugging basic](https://bytecodealliance.github.io/wamr.dev/blog/wamr-source-debugging-basic) for more details. #### **Enable load wasm custom sections** - **WAMR_BUILD_LOAD_CUSTOM_SECTION**=1/0, default to disable if not set @@ -201,18 +222,40 @@ Currently we only profile the memory consumption of module, module_instance and > Note: If `WAMR_BUILD_CUSTOM_NAME_SECTION` is enabled, then the `custom name section` will be treated as a special section and consumed by the runtime, not available to the embedder. -> For AoT file, must use `--emit-custom-sections` to specify which sections need to be emitted into AoT file, otherwise all custom sections (except custom name section) will be ignored. +> For AoT file, must use `--emit-custom-sections` to specify which sections need to be emitted into AoT file, otherwise all custom sections will be ignored. ### **Stack guard size** - **WAMR_BUILD_STACK_GUARD_SIZE**=n, default to N/A if not set. > Note: By default, the stack guard size is 1K (1024) or 24K (if uvwasi enabled). -### **Disable the writing linear memory base address to x86 GS segment register +### **Disable the writing linear memory base address to x86 GS segment register** - **WAMR_DISABLE_WRITE_GS_BASE**=1/0, default to enable if not set and supported by platform > Note: by default only platform [linux x86-64](https://github.com/bytecodealliance/wasm-micro-runtime/blob/5fb5119239220b0803e7045ca49b0a29fe65e70e/core/shared/platform/linux/platform_internal.h#L67) will enable this feature, for 32-bit platforms it's automatically disabled even when the flag is set to 0. In linux x86-64, writing the linear memory base address to x86 GS segment register may be used to speedup the linear memory access for LLVM AOT/JIT, when `--enable-segue=[]` option is added for `wamrc` or `iwasm`. +> See [Enable segue optimization for wamrc when generating the aot file](./perf_tune.md#3-enable-segue-optimization-for-wamrc-when-generating-the-aot-file) for more details. + ### **Enable running PGO(Profile-Guided Optimization) instrumented AOT file** - **WAMR_BUILD_STATIC_PGO**=1/0, default to disable if not set +> Note: See [Use the AOT static PGO method](./perf_tune.md#5-use-the-aot-static-pgo-method) for more details. + +### **Enable linux perf support** +- **WAMR_BUILD_LINUX_PERF**=1/0, enable linux perf support to generate the flamegraph to analyze the performance of a wasm application, default to disable if not set +> Note: See [Use linux-perf](./perf_tune.md#7-use-linux-perf) for more details. + +### **Enable module instance context APIs** +- **WAMR_BUILD_MODULE_INST_CONTEXT**=1/0, enable module instance context APIs which can set one or more contexts created by the embedder for a wasm module instance, default to enable if not set: +```C + wasm_runtime_create_context_key + wasm_runtime_destroy_context_key + wasm_runtime_set_context + wasm_runtime_set_context_spread + wasm_runtime_get_context +``` +> Note: See [wasm_export.h](../core/iwasm/include/wasm_export.h) for more details. + +### **Enable quick AOT/JTI entries** +- **WAMR_BUILD_QUICK_AOT_ENTRY**=1/0, enable registering quick call entries to speedup the aot/jit func call process, default to enable if not set +> Note: See [Refine callings to AOT/JIT functions from host native](./perf_tune.md#83-refine-callings-to-aotjit-functions-from-host-native) for more details. **Combination of configurations:** diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/build_wasm_app.md b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/build_wasm_app.md similarity index 96% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/build_wasm_app.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/build_wasm_app.md index 4475824dcb7..7747d9ac396 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/build_wasm_app.md +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/build_wasm_app.md @@ -5,7 +5,7 @@ Prepare WASM building environments For C and C++, WASI-SDK version 19.0+ is the major tool supported by WAMR to build WASM applications. Also, we can use [Emscripten SDK (EMSDK)](https://github.com/emscripten-core/emsdk), but it is not recommended. And there are some other compilers such as the standard clang compiler, which might also work [here](./other_wasm_compilers.md). -To install WASI SDK, please download the [wasi-sdk release](https://github.com/CraneStation/wasi-sdk/releases) and extract the archive to default path `/opt/wasi-sdk`. +To install WASI SDK, please download the [wasi-sdk release](https://github.com/WebAssembly/wasi-sdk/releases) and extract the archive to default path `/opt/wasi-sdk`. The official *wasi-sdk release* doesn't fully support *latest 128-bit SIMD spec* yet. WAMR provides a script in [build-wasi-sdk](../test-tools/build-wasi-sdk/) to generate another wasi-sdk with *llvm-15* from source code and installs it at *../test-tools/wasi-sdk*. If you plan to build WASM applications with *latest 128-bit SIMD*, please use it instead of the official release. @@ -372,6 +372,20 @@ Examples: wamrc -o test.aot test.wasm wamrc --target=i386 --format=object -o test.o test.wasm ``` +## AoT-compiled module compatibility among WAMR versions + +When making major ABI changes for AoT-compiled modules, we bump +`AOT_CURRENT_VERSION` constant in `core/config.h` header. +The runtime rejects to load a module AoT-compiled with wamrc with +a different `AOT_CURRENT_VERSION`. + +We try our best to maintain our runtime ABI for AoT-compiled modules +compatible among WAMR versions with the same `AOT_CURRENT_VERSION` +so that combinations of older wamrc and newer runtime usually work. +However, there might be minor incompatibilities time to time. +For productions, we recommend to use the exactly same version of +wamrc and the runtime. + ## AoT compilation with 3rd-party toolchains `wamrc` uses LLVM to compile wasm bytecode to AoT file, this works for most of the architectures, but there may be circumstances where you want to use 3rd-party toolchains to take over some steps of the compilation pipeline, e.g. diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/devcontainer.md b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/devcontainer.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/devcontainer.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/devcontainer.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/embed_wamr.md b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/embed_wamr.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/embed_wamr.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/embed_wamr.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/embed_wamr_spawn_api.md b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/embed_wamr_spawn_api.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/embed_wamr_spawn_api.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/embed_wamr_spawn_api.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/export_native_api.md b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/export_native_api.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/export_native_api.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/export_native_api.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/linux_sgx.md b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/linux_sgx.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/linux_sgx.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/linux_sgx.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/memory_tune.md b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/memory_tune.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/memory_tune.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/memory_tune.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/memory_usage.md b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/memory_usage.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/memory_usage.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/memory_usage.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/multi_module.md b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/multi_module.md similarity index 98% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/multi_module.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/multi_module.md index 1c22863f95b..9ab26673e2d 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/multi_module.md +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/multi_module.md @@ -6,7 +6,7 @@ WAMR loads all dependencies recursively according to the _import section_ of a m > WAMR only implements the load-time dynamic linking. Please refer to [dynamic linking](https://webassembly.org/docs/dynamic-linking/) for more details. -WAMR follows [WASI Command/Reactor Model](https://github.com/WebAssembly/WASI/blob/main/design/application-abi.md#current-unstable-abi). The WASI model separates modules into commands and reactors. A Command is the main module that requires exports of reactors(submodules). +WAMR follows [WASI Command/Reactor Model](https://github.com/WebAssembly/WASI/blob/main/legacy/application-abi.md#current-unstable-abi). The WASI model separates modules into commands and reactors. A Command is the main module that requires exports of reactors(submodules). if `WASM_ENABLE_LIBC_WASI` is enabled, any module imports a WASI APIs, like `(import "wasi_snapshot_preview1" "XXX")`, should follow restrictions of the _WASI application ABI_: diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/other_wasm_compilers.md b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/other_wasm_compilers.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/other_wasm_compilers.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/other_wasm_compilers.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/perf_tune.md b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/perf_tune.md similarity index 57% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/perf_tune.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/perf_tune.md index f57abe068ca..498359f37f5 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/perf_tune.md +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/perf_tune.md @@ -28,7 +28,7 @@ emcc -msimd128 -O3 -o - Reduce the footprint of JIT/AOT, the JIT/AOT code generated is smaller - Reduce the compilation time of JIT/AOT -Currently it is supported on linux x86-64, developer can use `--enable-segue=[]` for wamrc: +Currently it is only supported on linux x86-64, developer can use `--enable-segue=[]` for wamrc: ```bash wamrc --enable-segue -o aot_file wasm_file @@ -50,6 +50,8 @@ iwasm --enable-segue wasm_file (iwasm is built with llvm-jit enabled) iwasm --enable-segue=[] wasm_file ``` +> Note: Currently it is only supported on linux x86-64. + ## 5. Use the AOT static PGO method LLVM PGO (Profile-Guided Optimization) allows the compiler to better optimize code for how it actually runs. WAMR supports AOT static PGO, currently it is tested on Linux x86-64 and x86-32. The basic steps are: @@ -134,7 +136,7 @@ $ perf report --input=perf.data > > For example, with EMCC, you can add `-g2`. > -> If not able to get the context of the custom name section, WAMR will use `aot_func#N` to represent the function name. `N` is from 0. `aot_func#0` represents the first *not imported wasm function*. +> If not able to get the context of the custom name section, WAMR will use `aot_func#N` to represent the function name. `N` is from 0. `aot_func#0` represents the first _not imported wasm function_. ### 7.1 Flamegraph @@ -177,3 +179,125 @@ $ ./FlameGraph/flamegraph.pl out.folded > perf.foo.wasm.svg > # only jitted functions > $ grep "wasm_runtime_invoke_native" out.folded | ./FlameGraph/flamegraph.pl > perf.foo.wasm.only.svg > ``` + +> [!TIP] +> use [trans_wasm_func_name.py](../test-tools/trans-jitted-func-name/trans_wasm_func_name.py) to translate jitted function +> names to its original wasm function names. It requires _wasm-objdump_ in _wabt_ and _name section_ in the .wasm file +> +> The input file is the output of `./FlameGraph/stackcollapse-perf.pl`. +> +> ```bash +> python trans_wasm_func_name.py --wabt_home --folded out.folded <.wasm> +> ``` +> +> Then you will see a new file named _out.folded.translated_ which contains the translated folded stacks. +> All wasm functions are translated to its original names with a prefix like "[Wasm]" + +## 8. Refine the calling processes between host native and wasm application + +In some scenarios, there may be lots of callings between host native and wasm application, e.g. frequent callings to AOT/JIT functions from host native or frequent callings to host native from AOT/JIT functions. It is important to refine these calling processes to speedup them, WAMR provides several methods: + +### 8.1 Refine callings to native APIs registered by `wasm_runtime_register_natives` from AOT code + +When wamrc compiles the wasm file to AOT code, it may generate LLVM IR to call the native API from an AOT function, and if it doesn't know the native API's signature, the generated LLVM IR has to call the runtime API `aot_invoke_native` to invoke the native API, which is a relatively slow way. If developer registers native APIs during execution by calling `wasm_runtime_register_natives` or by `iwasm --native-lib=`, then developer can also register native APIs with the same signatures to the AOT compiler by `wamrc --native-lib=`, so as to let the AOT compiler pre-know the native API's signature, and generate optimized LLVM IR to quickly call to the native API. + +The below sample registers an API `int test_add(int, int)` to the AOT compiler: + +```C +/* test_add.c */ + +#include "wasm_export.h" + +static int +test_add_wrapper(wasm_exec_env_t exec_env, int x, int y) { + return 0; /* empty function is enough */ +} + +#define REG_NATIVE_FUNC(func_name, signature) \ + { #func_name, func_name##_wrapper, signature, NULL } + +static NativeSymbol native_symbols[] = { + REG_NATIVE_FUNC(test_add, "(ii)i") +}; + +uint32_t +get_native_lib(char **p_module_name, NativeSymbol **p_native_symbols) +{ + *p_module_name = "env"; + *p_native_symbols = native_symbols; + return sizeof(native_symbols) / sizeof(NativeSymbol); +} +``` +```bash +# build native lib +gcc -O3 -fPIC -shared -I /core/iwasm/include -o libtest_add.so test_add.c +# register native lib to aot compiler +wamrc --native-lib=./libtest_add.so -o +``` + +> Note: no need to do anything for LLVM JIT since the native APIs must have been registered before execution and JIT compiler already knows the native APIs' signatures. + +### 8.2 Refine callings to native APIs registered by wasm-c-api `wasm_instance_new` from AOT code + +In wasm-c-api mode, when the native APIs are registered by `wasm_instance_new(..., imports, ...)`, developer can use `wamrc --invoke-c-api-import` option to generate the AOT file, which treats the unknown import function as wasm-c-api import function and generates optimized LLVM IR to speedup the calling process. + +> Note: no need to do anything for LLVM JIT since the similar flag has been set to JIT compiler in wasm-c-api `wasm_engine_new` when LLVM JIT is enabled. + +### 8.3 Refine callings to AOT/JIT functions from host native + +Currently by default WAMR runtime has registered many quick AOT/JIT entries to speedup the calling processes to call AOT/JIT functions from host native, as long as developer doesn't disable it by using `cmake -DWAMR_BUILD_QUICK_AOT_ENTRY=0` or setting the compiler macro `WASM_ENABLE_QUICK_AOT_ENTRY` to 0 in the makefile. These quick AOT/JIT entries include: + +1. wasm function contains 0 to 4 arguments and 0 to 1 results, with the type of each argument is i32 or i64 and the type of result is i32, i64 or void. These functions are like: + +```C +// no argument +i32 foo(), i64 foo(), void foo() +// one argument, each argument is i32 or i64 +i32 foo(i32/i64), i64 foo(i32/i64), void(i32/i64) +// two arguments, each argument is i32 or i64 +i32 foo(i32/i64, i32/i64), i64 foo(i32/i64, i32/i64), void(i32/i64, i32/i64) +// three arguments, each argument is i32 or i64 +i32 foo(i32/i64, i32/i64, i32/i64), i64 foo(i32/i64, i32/i64, i32/i64), void(i32/i64, i32/i64, i32/i64) +// four arguments, each argument is i32 or i64 +i32 foo(i32/i64, i32/i64, i32/i64, i32/i64) +i64 foo(i32/i64, i32/i64, i32/i64, i32/i64) +void(i32/i64, i32/i64, i32/i64, i32/i64) +``` + +2. wasm function contains 5 arguments and 0 to 1 results, with the type of each argument is i32 and the type of result is i32, i64 or void. These functions are like: + +```C +i32 foo(i32, i32, i32, i32, i32) +i64 foo(i32, i32, i32, i32, i32) +void foo(i32, i32, i32, i32, i32) +``` + +To speedup the calling processes, developer had better ensure that the signatures of the wasm functions to expose are like above, or add some conversions to achieve it. For example, if a wasm function to call is `f32 foo(f32)`, developer can define a new function `i32 foo1(i32)` like below and export it: +```C +int32 foo1(int32 arg_i32) +{ + float arg_f32 = *(float *)&arg_i32; + float res_f32 = foo(f32); + int32 res_i32 = *(int32 *)&res_i32; + return res_i32; +} +``` +And in the host embedder: +``` + uint32 argv[2]; + float arg_f32 = ...; /* argument to foo */ + float res_f32; + bool ret; + + argv[0] = *(uint32 *)&arg_f32; + func = wasm_runtime_lookup_function(module_inst, "foo1", NULL); + ret = wasm_runtime_call_wasm(exec_env, func, 1, argv); + if (!ret) { + /* handle exception */ + printf("%s\n", wasm_runtime_get_exception(module_inst)); + } + else { + /* the return value is stored in argv[0] */ + res_f32 = *(float *)&argv[0]; + } +``` diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/pics/app_framework.PNG b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/pics/app_framework.PNG similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/pics/app_framework.PNG rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/pics/app_framework.PNG diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/pics/embed.PNG b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/pics/embed.PNG similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/pics/embed.PNG rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/pics/embed.PNG diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/pics/extend_library.PNG b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/pics/extend_library.PNG similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/pics/extend_library.PNG rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/pics/extend_library.PNG diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/pics/multi_module_pic1.png b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/pics/multi_module_pic1.png similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/pics/multi_module_pic1.png rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/pics/multi_module_pic1.png diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/pics/native_call_wasm.PNG b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/pics/native_call_wasm.PNG similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/pics/native_call_wasm.PNG rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/pics/native_call_wasm.PNG diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/pics/request.PNG b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/pics/request.PNG similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/pics/request.PNG rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/pics/request.PNG diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/pics/safe.PNG b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/pics/safe.PNG similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/pics/safe.PNG rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/pics/safe.PNG diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/pics/sensor_callflow.PNG b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/pics/sensor_callflow.PNG similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/pics/sensor_callflow.PNG rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/pics/sensor_callflow.PNG diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/pics/sub.PNG b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/pics/sub.PNG similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/pics/sub.PNG rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/pics/sub.PNG diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/pics/vgl_demo.png b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/pics/vgl_demo.png similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/pics/vgl_demo.png rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/pics/vgl_demo.png diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/pics/vgl_demo2.png b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/pics/vgl_demo2.png similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/pics/vgl_demo2.png rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/pics/vgl_demo2.png diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/pics/vgl_demo_linux.png b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/pics/vgl_demo_linux.png similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/pics/vgl_demo_linux.png rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/pics/vgl_demo_linux.png diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/pics/vgl_linux.PNG b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/pics/vgl_linux.PNG similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/pics/vgl_linux.PNG rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/pics/vgl_linux.PNG diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/pics/wamr-arch.JPG b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/pics/wamr-arch.JPG similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/pics/wamr-arch.JPG rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/pics/wamr-arch.JPG diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/pics/wamr_memory_model.png b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/pics/wamr_memory_model.png similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/pics/wamr_memory_model.png rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/pics/wamr_memory_model.png diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/pics/wamr_menu_config.png b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/pics/wamr_menu_config.png similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/pics/wamr_menu_config.png rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/pics/wamr_menu_config.png diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/port_wamr.md b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/port_wamr.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/port_wamr.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/port_wamr.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/pthread_impls.md b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/pthread_impls.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/pthread_impls.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/pthread_impls.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/pthread_library.md b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/pthread_library.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/pthread_library.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/pthread_library.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/ref_types.md b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/ref_types.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/ref_types.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/ref_types.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/release_ack.md b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/release_ack.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/release_ack.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/release_ack.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/roadmap.md b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/roadmap.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/roadmap.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/roadmap.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/semantic_version.md b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/semantic_version.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/semantic_version.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/semantic_version.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/socket_api.md b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/socket_api.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/socket_api.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/socket_api.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.3/doc/source_debugging.md b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/source_debugging.md new file mode 100644 index 00000000000..bfa62f6c2d3 --- /dev/null +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/source_debugging.md @@ -0,0 +1,20 @@ +# WAMR source debugging + +## Build wasm application with debug information +To debug your application, you need to compile them with debug information. You can use `-g` option when compiling the source code if you are using wasi-sdk (also work for emcc and rustc): +``` bash +/opt/wasi-sdk/bin/clang -g test.c -o test.wasm +``` + +Then you will get `test.wasm` which is a WebAssembly module with embedded DWARF sections. Further, you can use `llvm-dwarfdump` to check if the generated wasm file contains DWARF information: +``` bash +llvm-dwarfdump-12 test.wasm +``` + +## Debugging with interpreter + +See [Debuggging with interpreter](source_debugging_interpreter.md). + +## Debugging with AOT + +See [Debuggging with AOT](source_debugging_aot.md). diff --git a/lib/wasm-micro-runtime-WAMR-1.3.3/doc/source_debugging_aot.md b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/source_debugging_aot.md new file mode 100644 index 00000000000..129287bde73 --- /dev/null +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/source_debugging_aot.md @@ -0,0 +1,100 @@ +# WAMR source debugging (AOT) + +## Debugging with AOT + +> Note: AOT debugging is experimental and only a few debugging capabilities are supported. + +1. Build lldb (assume you have already built llvm) +``` bash +cd ${WAMR_ROOT}/core/deps/llvm/build +cmake ../llvm -DLLVM_ENABLE_PROJECTS="clang;lldb" -DLLDB_INCLUDE_TESTS=OFF +make -j $(nproc) +``` + +2. Build wamrc with debugging feature +``` bash +cd ${WAMR_ROOT}/wamr-compiler +mkdir build && cd build +cmake .. -DWAMR_BUILD_DEBUG_AOT=1 +make -j $(nproc) +``` + +3. Build iwasm with debugging feature +``` bash +cd ${WAMR_ROOT}/product-mini/platforms/linux +mkdir build && cd build +cmake .. -DWAMR_BUILD_DEBUG_AOT=1 +make +``` + +4. Compile wasm module to AOT module +``` bash +wamrc -o test.aot test.wasm +``` + +5. Execute iwasm using lldb + + Then you can use lldb commands to debug both wamr runtime and your wasm application in ***current terminal***. + + ``` bash + % lldb iwasm -- test.aot + (lldb) target create "iwasm" + Current executable set to 'iwasm' (x86_64). + (lldb) settings set -- target.run-args "test.aot" + (lldb) settings set plugin.jit-loader.gdb.enable on + (lldb) b main + Breakpoint 1: where = iwasm`main + 48 at main.c:294:11, address = 0x0000000100001020 + (lldb) run + Process 27954 launched: '/tmp/bin/iwasm' (x86_64) + Process 27954 stopped + * thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1 + frame #0: 0x0000000100001020 iwasm`main(argc=2, argv=0x00007ff7bfeff678) at main.c:294:11 + 291 int + 292 main(int argc, char *argv[]) + 293 { + -> 294 int32 ret = -1; + 295 char *wasm_file = NULL; + 296 const char *func_name = NULL; + 297 uint8 *wasm_file_buf = NULL; + Target 0: (iwasm) stopped. + (lldb) c + Process 27954 resuming + 1 location added to breakpoint 1 + error: need to add support for DW_TAG_base_type 'void' encoded with DW_ATE = 0x0, bit_size = 0 + Process 27954 stopped + * thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.2 + frame #0: 0x00000001002980a0 JIT(0x100298004)`main(exenv=0x0000000301808200) at hello.c:6:9 + 3 int + 4 main(void) + 5 { + -> 6 printf("hello\n"); + 7 + 8 return 0; + 9 } + Target 0: (iwasm) stopped. + (lldb) br l + Current breakpoints: + 1: name = 'main', locations = 2, resolved = 2, hit count = 2 + 1.1: where = iwasm`main + 48 at main.c:294:11, address = 0x0000000100001020, resolved, hit count = 1 + 1.2: where = JIT(0x100298004)`main + 12 at hello.c:6:9, address = 0x00000001002980a0, resolved, hit count = 1 + + (lldb) + ``` + + * In the above example, + + * The first `main` function, which is in `main.c`, is the main + function of the iwasm command. + + * The second `main` function, which is in `hello.c`, is the main + function of the AOT-compiled wasm module. + + * WAMR AOT debugging uses the GDB JIT loader mechanism to load + the debug info of the debugee module. + On some platforms including macOS, you need to enable it explicitly. + (`settings set plugin.jit-loader.gdb.enable on`) + + References: + + * https://github.com/llvm/llvm-project/blob/main/llvm/docs/DebuggingJITedCode.rst + * https://sourceware.org/gdb/current/onlinedocs/gdb/JIT-Interface.html diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/source_debugging.md b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/source_debugging_interpreter.md similarity index 55% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/source_debugging.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/source_debugging_interpreter.md index 513185fe88c..577b9bf4a44 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/source_debugging.md +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/source_debugging_interpreter.md @@ -1,4 +1,4 @@ -# WAMR source debugging +# WAMR source debugging (interpreter) References: - [Blog: WAMR source debugging basic](https://bytecodealliance.github.io/wamr.dev/blog/wamr-source-debugging-basic/) @@ -8,18 +8,8 @@ WAMR supports source level debugging based on DWARF (normally used in C/C++/Rust **The lldb's ability to debug wasm application is based on the patch [Add class WasmProcess for WebAssembly debugging](https://reviews.llvm.org/D78801). Thanks very much to the author @paolosev for such a great work!** -## Build wasm application with debug information -To debug your application, you need to compile them with debug information. You can use `-g` option when compiling the source code if you are using wasi-sdk (also work for emcc and rustc): -``` bash -/opt/wasi-sdk/bin/clang -g test.c -o test.wasm -``` - -Then you will get `test.wasm` which is a WebAssembly module with embedded DWARF sections. Further, you can use `llvm-dwarfdump` to check if the generated wasm file contains DWARF information: -``` bash -llvm-dwarfdump-12 test.wasm -``` - ## Debugging with interpreter + 1. Install dependent libraries ``` bash apt update && apt install cmake make g++ libxml2-dev -y @@ -70,105 +60,6 @@ lldb ``` Then you can use lldb commands to debug your applications. Please refer to [lldb document](https://lldb.llvm.org/use/tutorial.html) for command usage. -## Debugging with AOT - -> Note: AOT debugging is experimental and only a few debugging capabilities are supported. - -1. Build lldb (assume you have already built llvm) -``` bash -cd ${WAMR_ROOT}/core/deps/llvm/build -cmake ../llvm -DLLVM_ENABLE_PROJECTS="clang;lldb" -DLLDB_INCLUDE_TESTS=OFF -make -j $(nproc) -``` - -2. Build wamrc with debugging feature -``` bash -cd ${WAMR_ROOT}/wamr-compiler -mkdir build && cd build -cmake .. -DWAMR_BUILD_DEBUG_AOT=1 -make -j $(nproc) -``` - -3. Build iwasm with debugging feature -``` bash -cd ${WAMR_ROOT}/product-mini/platforms/linux -mkdir build && cd build -cmake .. -DWAMR_BUILD_DEBUG_AOT=1 -make -``` - -4. Compile wasm module to AOT module -``` bash -wamrc -o test.aot test.wasm -``` - -5. Execute iwasm using lldb - - Then you can use lldb commands to debug both wamr runtime and your wasm application in ***current terminal***. - - ``` bash - % lldb iwasm -- test.aot - (lldb) target create "iwasm" - Current executable set to 'iwasm' (x86_64). - (lldb) settings set -- target.run-args "test.aot" - (lldb) settings set plugin.jit-loader.gdb.enable on - (lldb) b main - Breakpoint 1: where = iwasm`main + 48 at main.c:294:11, address = 0x0000000100001020 - (lldb) run - Process 27954 launched: '/tmp/bin/iwasm' (x86_64) - Process 27954 stopped - * thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1 - frame #0: 0x0000000100001020 iwasm`main(argc=2, argv=0x00007ff7bfeff678) at main.c:294:11 - 291 int - 292 main(int argc, char *argv[]) - 293 { - -> 294 int32 ret = -1; - 295 char *wasm_file = NULL; - 296 const char *func_name = NULL; - 297 uint8 *wasm_file_buf = NULL; - Target 0: (iwasm) stopped. - (lldb) c - Process 27954 resuming - 1 location added to breakpoint 1 - error: need to add support for DW_TAG_base_type 'void' encoded with DW_ATE = 0x0, bit_size = 0 - Process 27954 stopped - * thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.2 - frame #0: 0x00000001002980a0 JIT(0x100298004)`main(exenv=0x0000000301808200) at hello.c:6:9 - 3 int - 4 main(void) - 5 { - -> 6 printf("hello\n"); - 7 - 8 return 0; - 9 } - Target 0: (iwasm) stopped. - (lldb) br l - Current breakpoints: - 1: name = 'main', locations = 2, resolved = 2, hit count = 2 - 1.1: where = iwasm`main + 48 at main.c:294:11, address = 0x0000000100001020, resolved, hit count = 1 - 1.2: where = JIT(0x100298004)`main + 12 at hello.c:6:9, address = 0x00000001002980a0, resolved, hit count = 1 - - (lldb) - ``` - - * In the above example, - - * The first `main` function, which is in `main.c`, is the main - function of the iwasm command. - - * The second `main` function, which is in `hello.c`, is the main - function of the AOT-compiled wasm module. - - * WAMR AOT debugging uses the GDB JIT loader mechanism to load - the debug info of the debugee module. - On some platforms including macOS, you need to enable it explicitly. - (`settings set plugin.jit-loader.gdb.enable on`) - - References: - - * https://github.com/llvm/llvm-project/blob/main/llvm/docs/DebuggingJITedCode.rst - * https://sourceware.org/gdb/current/onlinedocs/gdb/JIT-Interface.html - ## Enable debugging in embedders (for interpreter) There are three steps to enable debugging in embedders diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/wamr_api.md b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/wamr_api.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/wamr_api.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/wamr_api.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/wasm_c_api.md b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/wasm_c_api.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/wasm_c_api.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/wasm_c_api.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/doc/xip.md b/lib/wasm-micro-runtime-WAMR-1.3.3/doc/xip.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/doc/xip.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/doc/xip.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.3/idf_component.yml b/lib/wasm-micro-runtime-WAMR-1.3.3/idf_component.yml new file mode 100644 index 00000000000..0de47f6b10a --- /dev/null +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/idf_component.yml @@ -0,0 +1,14 @@ +version: "1.3.2" +description: WebAssembly Micro Runtime - A lightweight standalone WebAssembly (Wasm) runtime with small footprint, high performance and highly configurable features +url: https://bytecodealliance.org/ +repository: https://github.com/bytecodealliance/wasm-micro-runtime.git +documentation: https://wamr.gitbook.io/ +issues: https://github.com/bytecodealliance/wasm-micro-runtime/issues +dependencies: + idf: ">=4.4" +targets: + - esp32 + - esp32s3 + - esp32c3 +examples: + - path: product-mini/platforms/esp-idf \ No newline at end of file diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/build.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/build.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/build.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/build.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/go.mod b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/go.mod similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/go.mod rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/go.mod diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/go.sum b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/go.sum similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/go.sum rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/go.sum diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/samples/build.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/samples/build.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/samples/build.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/samples/build.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/samples/run.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/samples/run.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/samples/run.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/samples/run.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/samples/test.go b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/samples/test.go similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/samples/test.go rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/samples/test.go diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/samples/wasm-app/build.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/samples/wasm-app/build.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/samples/wasm-app/build.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/samples/wasm-app/build.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/samples/wasm-app/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/samples/wasm-app/main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/samples/wasm-app/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/samples/wasm-app/main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/wamr/cgo.go b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/wamr/cgo.go similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/wamr/cgo.go rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/wamr/cgo.go diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/wamr/instance.go b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/wamr/instance.go similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/wamr/instance.go rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/wamr/instance.go diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/wamr/instance_test.go b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/wamr/instance_test.go similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/wamr/instance_test.go rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/wamr/instance_test.go diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/wamr/module.go b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/wamr/module.go similarity index 96% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/wamr/module.go rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/wamr/module.go index 13480b221c2..7fd131ea6c3 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/wamr/module.go +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/wamr/module.go @@ -117,8 +117,8 @@ func (self *Module) SetWasiArgsEx(dirList [][]byte, mapDirList [][]byte, C.wasm_runtime_set_wasi_args_ex(self.module, dirPtr, dirCount, mapDirPtr, mapDirCount, envPtr, envCount, argvPtr, argc, - C.int(stdinfd), C.int(stdoutfd), - C.int(stderrfd)) + C.int64_t(stdinfd), C.int64_t(stdoutfd), + C.int64_t(stderrfd)) } /* Set module's wasi network address pool */ diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/wamr/module_test.go b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/wamr/module_test.go similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/wamr/module_test.go rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/wamr/module_test.go diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/wamr/packaged/include/dummy.go b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/wamr/packaged/include/dummy.go similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/wamr/packaged/include/dummy.go rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/wamr/packaged/include/dummy.go diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/wamr/packaged/lib/darwin-aarch64/dummy.go b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/wamr/packaged/lib/darwin-aarch64/dummy.go similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/wamr/packaged/lib/darwin-aarch64/dummy.go rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/wamr/packaged/lib/darwin-aarch64/dummy.go diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/wamr/packaged/lib/darwin-amd64/dummy.go b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/wamr/packaged/lib/darwin-amd64/dummy.go similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/wamr/packaged/lib/darwin-amd64/dummy.go rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/wamr/packaged/lib/darwin-amd64/dummy.go diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/wamr/packaged/lib/dummy.go b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/wamr/packaged/lib/dummy.go similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/wamr/packaged/lib/dummy.go rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/wamr/packaged/lib/dummy.go diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/wamr/packaged/lib/linux-amd64/dummy.go b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/wamr/packaged/lib/linux-amd64/dummy.go similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/wamr/packaged/lib/linux-amd64/dummy.go rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/wamr/packaged/lib/linux-amd64/dummy.go diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/wamr/runtime.go b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/wamr/runtime.go similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/wamr/runtime.go rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/wamr/runtime.go diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/wamr/runtime_test.go b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/wamr/runtime_test.go similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/go/wamr/runtime_test.go rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/go/wamr/runtime_test.go diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/.gitignore b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/.gitignore similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/.gitignore rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/.gitignore diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/LICENSE b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/LICENSE similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/LICENSE rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/LICENSE diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/MANIFEST.in b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/MANIFEST.in similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/MANIFEST.in rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/MANIFEST.in diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/pyproject.toml b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/pyproject.toml similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/pyproject.toml rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/pyproject.toml diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/setup.py b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/setup.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/setup.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/setup.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/src/wamr/__init__.py b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/src/wamr/__init__.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/src/wamr/__init__.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/src/wamr/__init__.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/src/wamr/libs/.placeholder b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/src/wamr/libs/.placeholder similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/src/wamr/libs/.placeholder rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/src/wamr/libs/.placeholder diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/src/wamr/wamrapi/__init__.py b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/src/wamr/wamrapi/__init__.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/src/wamr/wamrapi/__init__.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/src/wamr/wamrapi/__init__.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/src/wamr/wamrapi/wamr.py b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/src/wamr/wamrapi/wamr.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/src/wamr/wamrapi/wamr.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/src/wamr/wamrapi/wamr.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/src/wamr/wasmcapi/__init__.py b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/src/wamr/wasmcapi/__init__.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/src/wamr/wasmcapi/__init__.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/src/wamr/wasmcapi/__init__.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/src/wamr/wasmcapi/binding.py b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/src/wamr/wasmcapi/binding.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/src/wamr/wasmcapi/binding.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/src/wamr/wasmcapi/binding.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/src/wamr/wasmcapi/ffi.py b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/src/wamr/wasmcapi/ffi.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/src/wamr/wasmcapi/ffi.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/src/wamr/wasmcapi/ffi.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/utils/create_lib.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/utils/create_lib.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/utils/create_lib.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/utils/create_lib.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wamr-api/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wamr-api/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wamr-api/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wamr-api/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wamr-api/requirements.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wamr-api/requirements.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wamr-api/requirements.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wamr-api/requirements.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wamr-api/samples/basic/compile.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wamr-api/samples/basic/compile.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wamr-api/samples/basic/compile.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wamr-api/samples/basic/compile.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wamr-api/samples/basic/main.py b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wamr-api/samples/basic/main.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wamr-api/samples/basic/main.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wamr-api/samples/basic/main.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wamr-api/samples/basic/sum.c b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wamr-api/samples/basic/sum.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wamr-api/samples/basic/sum.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wamr-api/samples/basic/sum.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wamr-api/samples/native-symbol/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wamr-api/samples/native-symbol/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wamr-api/samples/native-symbol/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wamr-api/samples/native-symbol/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wamr-api/samples/native-symbol/compile.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wamr-api/samples/native-symbol/compile.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wamr-api/samples/native-symbol/compile.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wamr-api/samples/native-symbol/compile.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wamr-api/samples/native-symbol/func.c b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wamr-api/samples/native-symbol/func.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wamr-api/samples/native-symbol/func.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wamr-api/samples/native-symbol/func.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wamr-api/samples/native-symbol/main.py b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wamr-api/samples/native-symbol/main.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wamr-api/samples/native-symbol/main.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wamr-api/samples/native-symbol/main.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wasm-c-api/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wasm-c-api/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wasm-c-api/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wasm-c-api/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wasm-c-api/docs/design.md b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wasm-c-api/docs/design.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wasm-c-api/docs/design.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wasm-c-api/docs/design.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wasm-c-api/docs/images/python_package_life_cycle.png b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wasm-c-api/docs/images/python_package_life_cycle.png similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wasm-c-api/docs/images/python_package_life_cycle.png rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wasm-c-api/docs/images/python_package_life_cycle.png diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wasm-c-api/docs/setup_dev_env.md b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wasm-c-api/docs/setup_dev_env.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wasm-c-api/docs/setup_dev_env.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wasm-c-api/docs/setup_dev_env.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wasm-c-api/requirements.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wasm-c-api/requirements.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wasm-c-api/requirements.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wasm-c-api/requirements.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wasm-c-api/samples/hello.wat b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wasm-c-api/samples/hello.wat similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wasm-c-api/samples/hello.wat rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wasm-c-api/samples/hello.wat diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wasm-c-api/samples/hello_oop.py b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wasm-c-api/samples/hello_oop.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wasm-c-api/samples/hello_oop.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wasm-c-api/samples/hello_oop.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wasm-c-api/samples/hello_procedural.py b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wasm-c-api/samples/hello_procedural.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wasm-c-api/samples/hello_procedural.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wasm-c-api/samples/hello_procedural.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wasm-c-api/tests/__init__.py b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wasm-c-api/tests/__init__.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wasm-c-api/tests/__init__.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wasm-c-api/tests/__init__.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wasm-c-api/tests/context.py b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wasm-c-api/tests/context.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wasm-c-api/tests/context.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wasm-c-api/tests/context.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wasm-c-api/tests/test_advanced.py b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wasm-c-api/tests/test_advanced.py similarity index 93% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wasm-c-api/tests/test_advanced.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wasm-c-api/tests/test_advanced.py index 2e1c285eabc..706447ab5c7 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wasm-c-api/tests/test_advanced.py +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wasm-c-api/tests/test_advanced.py @@ -188,18 +188,6 @@ def test_wasm_func_call_native(self): ffi.wasm_func_call(func, params, results) self.assertEqual(params.data[0].of.f32 * 2, results.data[0].of.f64) - def test_wasm_func_call_wrong_params(self): - export_list = ffi.wasm_vec_to_list(self.exports) - func = ffi.wasm_extern_as_func(export_list[0]) - # make a call - params = ffi.wasm_val_vec_t() - ffi.wasm_val_vec_new_empty(params) - results = ffi.wasm_val_vec_t() - ffi.wasm_val_vec_new_empty(results) - trap = ffi.wasm_func_call(func, params, results) - - self.assertIsNotNullPointer(trap) - def test_wasm_func_call_unlinked(self): ft = ffi.wasm_functype_new_0_0() func = ffi.wasm_func_new(self._wasm_store, ft, callback) @@ -453,26 +441,6 @@ def test_wasm_memory_data_size_unlinked(self): ffi.wasm_memory_data_size(mem) ffi.wasm_memory_delete(mem) - def test_wasm_trap(self): - export_list = ffi.wasm_vec_to_list(self.exports) - func = ffi.wasm_extern_as_func(export_list[0]) - # make a call - params = ffi.wasm_val_vec_t() - ffi.wasm_val_vec_new_empty(params) - results = ffi.wasm_val_vec_t() - ffi.wasm_val_vec_new_empty(results) - - trap = ffi.wasm_func_call(func, params, results) - self.assertIsNotNullPointer(trap) - - message = ffi.wasm_message_t() - ffi.wasm_trap_message(trap, message) - self.assertIsNotNullPointer(c.pointer(message)) - - # not a function internal exception - frame = ffi.wasm_trap_origin(trap) - self.assertIsNullPointer(frame) - @unittest.skipUnless( TEST_WITH_WAMR_BUILD_DUMP_CALL_STACK, "need to enable WAMR_BUILD_DUMP_CALL_STACK", diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wasm-c-api/tests/test_basic.py b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wasm-c-api/tests/test_basic.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wasm-c-api/tests/test_basic.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wasm-c-api/tests/test_basic.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wasm-c-api/utils/bindgen.py b/lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wasm-c-api/utils/bindgen.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/language-bindings/python/wasm-c-api/utils/bindgen.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/language-bindings/python/wasm-c-api/utils/bindgen.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/README.md similarity index 98% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/README.md index 22acfeaf46a..4a827561885 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/README.md +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/README.md @@ -447,12 +447,12 @@ make ## Cosmopolitan Libc Currently, only x86_64 architecture with interpreter modes is supported. -Clone the Cosmopolitan Libc. Setup `cosmocc` as described in [Getting Started](https://github.com/jart/cosmopolitan/#getting-started) being sure to get it into `PATH`. +Setup `cosmocc` as described in [Getting Started](https://github.com/jart/cosmopolitan/#getting-started) being sure to get its `bin` directory into `PATH`. Build iwasm ``` Bash -export CC=cosmocc -export CXX=cosmoc++ +export CC=x86_64-unknown-cosmo-cc +export CXX=x86_64-unknown-cosmo-c++ rm -rf build mkdir build cmake -DWAMR_BUILD_INTERP=1 -DWAMR_BUILD_FAST_INTERP=1 -B build diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/app-samples/hello-world-cmake/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/app-samples/hello-world-cmake/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/app-samples/hello-world-cmake/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/app-samples/hello-world-cmake/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/app-samples/hello-world-cmake/build.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/app-samples/hello-world-cmake/build.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/app-samples/hello-world-cmake/build.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/app-samples/hello-world-cmake/build.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/app-samples/hello-world-cmake/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/app-samples/hello-world-cmake/main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/app-samples/hello-world-cmake/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/app-samples/hello-world-cmake/main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/app-samples/hello-world-cmake/print.c b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/app-samples/hello-world-cmake/print.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/app-samples/hello-world-cmake/print.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/app-samples/hello-world-cmake/print.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/app-samples/hello-world/build.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/app-samples/hello-world/build.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/app-samples/hello-world/build.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/app-samples/hello-world/build.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/app-samples/hello-world/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/app-samples/hello-world/main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/app-samples/hello-world/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/app-samples/hello-world/main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/alios-things/aos.mk b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/alios-things/aos.mk similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/alios-things/aos.mk rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/alios-things/aos.mk diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/alios-things/src/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/alios-things/src/main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/alios-things/src/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/alios-things/src/main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/alios-things/src/test_wasm.h b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/alios-things/src/test_wasm.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/alios-things/src/test_wasm.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/alios-things/src/test_wasm.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/android/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/android/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/android/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/android/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/android/build_jit.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/android/build_jit.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/android/build_jit.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/android/build_jit.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/android/build_llvm.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/android/build_llvm.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/android/build_llvm.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/android/build_llvm.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/android/wasm-jni.cpp b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/android/wasm-jni.cpp similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/android/wasm-jni.cpp rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/android/wasm-jni.cpp diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/common/libc_wasi.c b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/common/libc_wasi.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/common/libc_wasi.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/common/libc_wasi.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/cosmopolitan/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/cosmopolitan/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/cosmopolitan/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/cosmopolitan/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/cosmopolitan/build_cosmocc.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/cosmopolitan/build_cosmocc.sh similarity index 76% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/cosmopolitan/build_cosmocc.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/cosmopolitan/build_cosmocc.sh index b2ce15d33a9..8d96027e1d0 100755 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/cosmopolitan/build_cosmocc.sh +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/cosmopolitan/build_cosmocc.sh @@ -2,8 +2,8 @@ # Copyright (C) 2023 Dylibso. All rights reserved. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -export CC=cosmocc -export CXX=cosmoc++ +export CC=x86_64-unknown-cosmo-cc +export CXX=x86_64-unknown-cosmo-c++ rm -rf build mkdir build cmake -DWAMR_BUILD_INTERP=1 -DWAMR_BUILD_FAST_INTERP=1 -B build diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/cosmopolitan/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/cosmopolitan/main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/cosmopolitan/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/cosmopolitan/main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/darwin/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/darwin/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/darwin/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/darwin/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/darwin/build_jit.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/darwin/build_jit.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/darwin/build_jit.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/darwin/build_jit.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/darwin/build_llvm.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/darwin/build_llvm.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/darwin/build_llvm.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/darwin/build_llvm.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/darwin/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/darwin/main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/darwin/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/darwin/main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/esp-idf/.gitignore b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/esp-idf/.gitignore similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/esp-idf/.gitignore rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/esp-idf/.gitignore diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/esp-idf/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/esp-idf/CMakeLists.txt similarity index 68% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/esp-idf/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/esp-idf/CMakeLists.txt index d8a3d2f96cf..8472df8dd8f 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/esp-idf/CMakeLists.txt +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/esp-idf/CMakeLists.txt @@ -6,7 +6,4 @@ cmake_minimum_required(VERSION 3.5) include($ENV{IDF_PATH}/tools/cmake/project.cmake) -set (COMPONENTS ${IDF_TARGET} main freertos esptool_py wamr) -list(APPEND EXTRA_COMPONENT_DIRS "$ENV{WAMR_PATH}/build-scripts/esp-idf") - project(wamr-simple) \ No newline at end of file diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/esp-idf/build_and_run.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/esp-idf/build_and_run.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/esp-idf/build_and_run.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/esp-idf/build_and_run.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/esp-idf/main/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/esp-idf/main/CMakeLists.txt similarity index 70% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/esp-idf/main/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/esp-idf/main/CMakeLists.txt index 55e72567049..1bb61bad945 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/esp-idf/main/CMakeLists.txt +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/esp-idf/main/CMakeLists.txt @@ -2,5 +2,4 @@ # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception idf_component_register(SRCS "main.c" - INCLUDE_DIRS "." - REQUIRES wamr) + INCLUDE_DIRS ".") diff --git a/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/esp-idf/main/idf_component.yml b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/esp-idf/main/idf_component.yml new file mode 100644 index 00000000000..83aac8567b6 --- /dev/null +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/esp-idf/main/idf_component.yml @@ -0,0 +1,7 @@ +## IDF Component Manager Manifest File +dependencies: + wasm-micro-runtime: + version: "^1" + override_path: "../../../.." + idf: + version: ">=4.4" \ No newline at end of file diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/esp-idf/main/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/esp-idf/main/main.c similarity index 98% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/esp-idf/main/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/esp-idf/main/main.c index fbfb04c2164..1a34096d7a0 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/esp-idf/main/main.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/esp-idf/main/main.c @@ -12,11 +12,7 @@ #include "esp_log.h" -#ifdef CONFIG_IDF_TARGET_ESP32S3 #define IWASM_MAIN_STACK_SIZE 5120 -#else -#define IWASM_MAIN_STACK_SIZE 4096 -#endif #define LOG_TAG "wamr" diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/esp-idf/main/test_wasm.h b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/esp-idf/main/test_wasm.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/esp-idf/main/test_wasm.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/esp-idf/main/test_wasm.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/esp-idf/sdkconfig.defaults b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/esp-idf/sdkconfig.defaults similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/esp-idf/sdkconfig.defaults rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/esp-idf/sdkconfig.defaults diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/esp-idf/sdkconfig.defaults.esp32 b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/esp-idf/sdkconfig.defaults.esp32 similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/esp-idf/sdkconfig.defaults.esp32 rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/esp-idf/sdkconfig.defaults.esp32 diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/esp-idf/sdkconfig.defaults.esp32c3 b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/esp-idf/sdkconfig.defaults.esp32c3 similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/esp-idf/sdkconfig.defaults.esp32c3 rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/esp-idf/sdkconfig.defaults.esp32c3 diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/freebsd/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/freebsd/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/freebsd/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/freebsd/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/freebsd/build_jit.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/freebsd/build_jit.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/freebsd/build_jit.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/freebsd/build_jit.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/freebsd/build_llvm.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/freebsd/build_llvm.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/freebsd/build_llvm.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/freebsd/build_llvm.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/freebsd/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/freebsd/main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/freebsd/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/freebsd/main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/ios/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/ios/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/ios/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/ios/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/ios/generate_xcodeproj.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/ios/generate_xcodeproj.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/ios/generate_xcodeproj.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/ios/generate_xcodeproj.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/linux-sgx/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/linux-sgx/CMakeLists.txt similarity index 92% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/linux-sgx/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/linux-sgx/CMakeLists.txt index a9aef355c49..0b2b4afeca7 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/linux-sgx/CMakeLists.txt +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/linux-sgx/CMakeLists.txt @@ -164,3 +164,15 @@ else() OUTPUT_VARIABLE cmdOutput ) endif() + +if (WAMR_BUILD_LIBC_WASI EQUAL 1) + execute_process( + COMMAND bash -c "sed -i -E 's/^WAMR_BUILD_LIBC_WASI = 0/WAMR_BUILD_LIBC_WASI = 1/g' ${CMAKE_CURRENT_SOURCE_DIR}/enclave-sample/Makefile" + OUTPUT_VARIABLE cmdOutput + ) +else() + execute_process( + COMMAND bash -c "sed -i -E 's/^WAMR_BUILD_LIBC_WASI = 1/WAMR_BUILD_LIBC_WASI = 0/g' ${CMAKE_CURRENT_SOURCE_DIR}/enclave-sample/Makefile" + OUTPUT_VARIABLE cmdOutput + ) +endif() diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/linux-sgx/CMakeLists_minimal.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/linux-sgx/CMakeLists_minimal.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/linux-sgx/CMakeLists_minimal.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/linux-sgx/CMakeLists_minimal.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/linux-sgx/enclave-sample/Makefile b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/linux-sgx/enclave-sample/Makefile similarity index 94% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/linux-sgx/enclave-sample/Makefile rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/linux-sgx/enclave-sample/Makefile index dae97a06998..8fd053a5fbe 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/linux-sgx/enclave-sample/Makefile +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/linux-sgx/enclave-sample/Makefile @@ -16,6 +16,7 @@ WAMR_BUILD_LIB_RATS = 0 WAMR_BUILD_GLOBAL_HEAP_POOL = 0 WAMR_BUILD_GLOBAL_HEAP_SIZE = 10485760 WAMR_BUILD_STATIC_PGO = 0 +WAMR_BUILD_LIBC_WASI = 1 VMLIB_BUILD_DIR ?= $(CURDIR)/../build LIB_RATS_SRC ?= $(VMLIB_BUILD_DIR)/_deps/librats-build @@ -66,7 +67,9 @@ ifeq ($(WAMR_BUILD_LIB_RATS), 1) App_Include_Paths += -I$(LIB_RATS_INCLUDE_DIR) endif -App_C_Flags := $(SGX_COMMON_CFLAGS) -fPIC -Wno-attributes $(App_Include_Paths) -DWASM_ENABLE_STATIC_PGO=$(WAMR_BUILD_STATIC_PGO) +App_C_Flags := $(SGX_COMMON_CFLAGS) -fPIC -Wno-attributes $(App_Include_Paths) \ + -DWASM_ENABLE_STATIC_PGO=$(WAMR_BUILD_STATIC_PGO) \ + -DWASM_ENABLE_LIBC_WASI=$(WAMR_BUILD_LIBC_WASI) # Three configuration modes - Debug, prerelease, release # Debug - Macro DEBUG enabled. @@ -135,7 +138,13 @@ ifeq ($(WAMR_BUILD_LIB_RATS), 1) Enclave_Include_Paths += -I$(LIB_RATS_INCLUDE_DIR) -I$(SGX_SSL)/include endif -Enclave_C_Flags := $(SGX_COMMON_CFLAGS) -nostdinc -fvisibility=hidden -fpie -fstack-protector $(Enclave_Include_Paths) -DWASM_GLOBAL_HEAP_SIZE=$(WAMR_BUILD_GLOBAL_HEAP_SIZE) -DWASM_ENABLE_GLOBAL_HEAP_POOL=$(WAMR_BUILD_GLOBAL_HEAP_POOL) -DWASM_ENABLE_LIB_RATS=$(WAMR_BUILD_LIB_RATS) -DWASM_ENABLE_STATIC_PGO=$(WAMR_BUILD_STATIC_PGO) +Enclave_C_Flags := $(SGX_COMMON_CFLAGS) -nostdinc -fvisibility=hidden \ + -fpie -fstack-protector $(Enclave_Include_Paths) \ + -DWASM_GLOBAL_HEAP_SIZE=$(WAMR_BUILD_GLOBAL_HEAP_SIZE) \ + -DWASM_ENABLE_GLOBAL_HEAP_POOL=$(WAMR_BUILD_GLOBAL_HEAP_POOL) \ + -DWASM_ENABLE_LIB_RATS=$(WAMR_BUILD_LIB_RATS) \ + -DWASM_ENABLE_STATIC_PGO=$(WAMR_BUILD_STATIC_PGO) \ + -DWASM_ENABLE_LIBC_WASI=$(WAMR_BUILD_LIBC_WASI) ifeq ($(SPEC_TEST), 1) Enclave_C_Flags += -DWASM_ENABLE_SPEC_TEST=1 else diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/linux-sgx/enclave-sample/Makefile_minimal b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/linux-sgx/enclave-sample/Makefile_minimal similarity index 99% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/linux-sgx/enclave-sample/Makefile_minimal rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/linux-sgx/enclave-sample/Makefile_minimal index a64d5774486..07b640da2c4 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/linux-sgx/enclave-sample/Makefile_minimal +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/linux-sgx/enclave-sample/Makefile_minimal @@ -102,7 +102,7 @@ Enclave_Include_Paths := -IEnclave -I$(WAMR_ROOT)/core/iwasm/include \ Enclave_C_Flags := $(SGX_COMMON_CFLAGS) -nostdinc -fvisibility=hidden -fpie -fstack-protector $(Enclave_Include_Paths) # disable wasi -Enclave_C_Flags += -DSGX_DISABLE_WASI +Enclave_C_Flags += -DWASM_ENABLE_LIBC_WASI=0 ifeq ($(SPEC_TEST), 1) Enclave_C_Flags += -DWASM_ENABLE_SPEC_TEST=1 diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/linux/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/linux/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/linux/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/linux/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/linux/build_jit.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/linux/build_jit.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/linux/build_jit.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/linux/build_jit.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/linux/build_llvm.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/linux/build_llvm.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/linux/build_llvm.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/linux/build_llvm.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/linux/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/linux/main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/linux/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/linux/main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/nuttx/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/nuttx/main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/nuttx/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/nuttx/main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/nuttx/wamr.mk b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/nuttx/wamr.mk similarity index 95% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/nuttx/wamr.mk rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/nuttx/wamr.mk index b91fac9a86c..748fb6a87bd 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/nuttx/wamr.mk +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/nuttx/wamr.mk @@ -133,10 +133,21 @@ CSRCS += aot_loader.c \ $(AOT_RELOC) \ aot_intrinsic.c \ aot_runtime.c +ifeq ($(CONFIG_INTERPRETERS_WAMR_DEBUG_AOT),y) +CFLAGS += -DWASM_ENABLE_DEBUG_AOT=1 +CSRCS += elf_parser.c \ + jit_debug.c +endif else CFLAGS += -DWASM_ENABLE_AOT=0 endif +ifeq ($(CONFIG_INTERPRETERS_WAMR_AOT_QUICK_ENTRY),y) +CFLAGS += -DWASM_ENABLE_QUICK_AOT_ENTRY=1 +else +CFLAGS += -DWASM_ENABLE_QUICK_AOT_ENTRY=0 +endif + ifeq ($(CONFIG_INTERPRETERS_WAMR_AOT_WORD_ALIGN_READ),y) CFLAGS += -DWASM_ENABLE_WORD_ALIGN_READ=1 else @@ -187,9 +198,7 @@ CSRCS += utils.c VPATH += $(IWASM_ROOT)/libraries/debug-engine endif -ifeq ($(CONFIG_INTERPRETERS_WAMR_STACK_GUARD_SIZE),) -CFLAGS += -DWASM_STACK_GUARD_SIZE=0 -else +ifneq ($(CONFIG_INTERPRETERS_WAMR_STACK_GUARD_SIZE),) CFLAGS += -DWASM_STACK_GUARD_SIZE=CONFIG_INTERPRETERS_WAMR_STACK_GUARD_SIZE endif @@ -350,6 +359,14 @@ else CFLAGS += -DWASM_ENABLE_REF_TYPES=0 endif +ifeq ($(CONFIG_INTERPRETERS_WAMR_ENABLE_EXCE_HANDLING),y) +CFLAGS += -DWASM_ENABLE_EXCE_HANDLING=1 +CFLAGS += -DWASM_ENABLE_TAGS=1 +else +CFLAGS += -DWASM_ENABLE_EXCE_HANDLING=0 +CFLAGS += -DWASM_ENABLE_TAGS=0 +endif + CFLAGS += -Wno-strict-prototypes -Wno-shadow -Wno-unused-variable CFLAGS += -Wno-int-conversion -Wno-implicit-function-declaration @@ -412,3 +429,4 @@ VPATH += $(IWASM_ROOT)/libraries/lib-pthread VPATH += $(IWASM_ROOT)/common/arch VPATH += $(IWASM_ROOT)/aot VPATH += $(IWASM_ROOT)/aot/arch +VPATH += $(IWASM_ROOT)/aot/debug diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/posix/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/posix/main.c similarity index 97% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/posix/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/posix/main.c index 85185549791..09d32c62092 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/posix/main.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/posix/main.c @@ -58,7 +58,6 @@ print_help() #if WASM_ENABLE_JIT != 0 printf(" --llvm-jit-size-level=n Set LLVM JIT size level, default is 3\n"); printf(" --llvm-jit-opt-level=n Set LLVM JIT optimization level, default is 3\n"); - printf(" --perf-profile Enable linux perf support. For now, it only works in llvm-jit.\n"); #if defined(os_writegsbase) printf(" --enable-segue[=] Enable using segment register GS as the base address of\n"); printf(" linear memory, which may improve performance, flags can be:\n"); @@ -67,6 +66,9 @@ print_help() printf(" Use comma to separate, e.g. --enable-segue=i32.load,i64.store\n"); printf(" and --enable-segue means all flags are added.\n"); #endif +#endif /* WASM_ENABLE_JIT != 0*/ +#if WASM_ENABLE_LINUX_PERF != 0 + printf(" --enable-linux-perf Enable linux perf support. It works in aot and llvm-jit.\n"); #endif printf(" --repl Start a very simple REPL (read-eval-print-loop) mode\n" " that runs commands in the form of \"FUNC ARG...\"\n"); @@ -561,7 +563,9 @@ main(int argc, char *argv[]) uint32 llvm_jit_size_level = 3; uint32 llvm_jit_opt_level = 3; uint32 segue_flags = 0; - bool enable_linux_perf_support = false; +#endif +#if WASM_ENABLE_LINUX_PERF != 0 + bool enable_linux_perf = false; #endif wasm_module_t wasm_module = NULL; wasm_module_inst_t wasm_module_inst = NULL; @@ -702,9 +706,6 @@ main(int argc, char *argv[]) if (segue_flags == (uint32)-1) return print_help(); } - else if (!strncmp(argv[0], "--perf-profile", 14)) { - enable_linux_perf_support = true; - } #endif /* end of WASM_ENABLE_JIT != 0 */ #if BH_HAS_DLFCN else if (!strncmp(argv[0], "--native-lib=", 13)) { @@ -718,6 +719,11 @@ main(int argc, char *argv[]) native_lib_list[native_lib_count++] = argv[0] + 13; } #endif +#if WASM_ENABLE_LINUX_PERF != 0 + else if (!strncmp(argv[0], "--enable-linux-perf", 19)) { + enable_linux_perf = true; + } +#endif #if WASM_ENABLE_MULTI_MODULE != 0 else if (!strncmp(argv[0], "--module-path=", strlen("--module-path="))) { @@ -761,7 +767,7 @@ main(int argc, char *argv[]) gen_prof_file = argv[0] + 16; } #endif - else if (!strncmp(argv[0], "--version", 9)) { + else if (!strcmp(argv[0], "--version")) { uint32 major, minor, patch; wasm_runtime_get_version(&major, &minor, &patch); printf("iwasm %" PRIu32 ".%" PRIu32 ".%" PRIu32 "\n", major, minor, @@ -819,13 +825,16 @@ main(int argc, char *argv[]) init_args.llvm_jit_size_level = llvm_jit_size_level; init_args.llvm_jit_opt_level = llvm_jit_opt_level; init_args.segue_flags = segue_flags; - init_args.linux_perf_support = enable_linux_perf_support; +#endif +#if WASM_ENABLE_LINUX_PERF != 0 + init_args.enable_linux_perf = enable_linux_perf; #endif #if WASM_ENABLE_DEBUG_INTERP != 0 init_args.instance_port = instance_port; if (ip_addr) - strcpy(init_args.ip_addr, ip_addr); + /* ensure that init_args.ip_addr is null terminated */ + strncpy(init_args.ip_addr, ip_addr, sizeof(init_args.ip_addr) - 1); #endif /* initialize runtime environment */ diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/riot/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/riot/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/riot/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/riot/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/riot/Makefile b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/riot/Makefile similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/riot/Makefile rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/riot/Makefile diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/riot/iwasmt.c b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/riot/iwasmt.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/riot/iwasmt.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/riot/iwasmt.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/riot/test_wasm.h b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/riot/test_wasm.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/riot/test_wasm.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/riot/test_wasm.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/rt-thread/SConscript b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/rt-thread/SConscript similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/rt-thread/SConscript rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/rt-thread/SConscript diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/rt-thread/iwasm.c b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/rt-thread/iwasm.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/rt-thread/iwasm.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/rt-thread/iwasm.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/rt-thread/iwasm.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/rt-thread/iwasm.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/rt-thread/iwasm.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/rt-thread/iwasm.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/vxworks/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/vxworks/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/vxworks/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/vxworks/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/vxworks/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/vxworks/main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/vxworks/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/vxworks/main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/windows/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/windows/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/windows/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/windows/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/windows/build_llvm.py b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/windows/build_llvm.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/windows/build_llvm.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/windows/build_llvm.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/windows/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/windows/main.c similarity index 98% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/windows/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/windows/main.c index 921b7726541..35a4897217e 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/windows/main.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/windows/main.c @@ -406,7 +406,7 @@ main(int argc, char *argv[]) ip_addr = argv[0] + 3; } #endif - else if (!strncmp(argv[0], "--version", 9)) { + else if (!strcmp(argv[0], "--version")) { uint32 major, minor, patch; wasm_runtime_get_version(&major, &minor, &patch); printf("iwasm %" PRIu32 ".%" PRIu32 ".%" PRIu32 "\n", major, minor, @@ -464,7 +464,9 @@ main(int argc, char *argv[]) #if WASM_ENABLE_DEBUG_INTERP != 0 init_args.instance_port = instance_port; if (ip_addr) - strcpy(init_args.ip_addr, ip_addr); + /* ensure that init_args.ip_addr is null terminated */ + strncpy_s(init_args.ip_addr, sizeof(init_args.ip_addr) - 1, ip_addr, + strlen(ip_addr)); #endif /* initialize runtime environment */ diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/windows/wasi_filtered_tests.json b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/windows/wasi_filtered_tests.json similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/windows/wasi_filtered_tests.json rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/windows/wasi_filtered_tests.json diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/zephyr/simple/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/zephyr/simple/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/zephyr/simple/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/zephyr/simple/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/zephyr/simple/Dockerfile b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/zephyr/simple/Dockerfile similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/zephyr/simple/Dockerfile rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/zephyr/simple/Dockerfile diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/zephyr/simple/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/zephyr/simple/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/zephyr/simple/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/zephyr/simple/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/zephyr/simple/boards/nucleo_f767zi.conf b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/zephyr/simple/boards/nucleo_f767zi.conf similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/zephyr/simple/boards/nucleo_f767zi.conf rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/zephyr/simple/boards/nucleo_f767zi.conf diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/zephyr/simple/boards/qemu_cortex_a53.conf b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/zephyr/simple/boards/qemu_cortex_a53.conf similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/zephyr/simple/boards/qemu_cortex_a53.conf rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/zephyr/simple/boards/qemu_cortex_a53.conf diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/zephyr/simple/build_and_run.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/zephyr/simple/build_and_run.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/zephyr/simple/build_and_run.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/zephyr/simple/build_and_run.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/zephyr/simple/prj.conf b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/zephyr/simple/prj.conf similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/zephyr/simple/prj.conf rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/zephyr/simple/prj.conf diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/zephyr/simple/src/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/zephyr/simple/src/main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/zephyr/simple/src/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/zephyr/simple/src/main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/zephyr/simple/src/test_wasm.h b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/zephyr/simple/src/test_wasm.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/zephyr/simple/src/test_wasm.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/zephyr/simple/src/test_wasm.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/zephyr/simple/src/test_wasm_riscv64.h b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/zephyr/simple/src/test_wasm_riscv64.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/zephyr/simple/src/test_wasm_riscv64.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/zephyr/simple/src/test_wasm_riscv64.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/zephyr/simple/src/wasm-app-riscv64/build.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/zephyr/simple/src/wasm-app-riscv64/build.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/zephyr/simple/src/wasm-app-riscv64/build.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/zephyr/simple/src/wasm-app-riscv64/build.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/zephyr/simple/src/wasm-app-riscv64/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/zephyr/simple/src/wasm-app-riscv64/main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/product-mini/platforms/zephyr/simple/src/wasm-app-riscv64/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/product-mini/platforms/zephyr/simple/src/wasm-app-riscv64/main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/basic/.gitignore b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/basic/.gitignore similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/basic/.gitignore rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/basic/.gitignore diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/basic/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/basic/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/basic/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/basic/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/basic/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/basic/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/basic/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/basic/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/basic/build.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/basic/build.sh similarity index 94% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/basic/build.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/basic/build.sh index a0be7e1c7be..c1d598a8c93 100755 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/basic/build.sh +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/basic/build.sh @@ -21,7 +21,7 @@ echo "#####################build basic project" cd ${CURR_DIR} mkdir -p cmake_build cd cmake_build -cmake .. +cmake .. -DCMAKE_BUILD_TYPE=Debug -DWAMR_BH_VPRINTF=my_vprintf -DWAMR_BH_LOG=my_log make -j ${nproc} if [ $? != 0 ];then echo "BUILD_FAIL basic exit as $?\n" diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/basic/run.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/basic/run.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/basic/run.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/basic/run.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/basic/src/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/basic/src/main.c similarity index 90% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/basic/src/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/basic/src/main.c index c35da317933..ca580af3309 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/basic/src/main.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/basic/src/main.c @@ -15,6 +15,30 @@ get_pow(int x, int y); int32_t calculate_native(int32_t n, int32_t func1, int32_t func2); +void +my_log(uint32 log_level, const char *file, int line, const char *fmt, ...) +{ + char buf[200]; + snprintf(buf, 200, + log_level == WASM_LOG_LEVEL_VERBOSE ? "[WamrLogger - VERBOSE] %s" + : "[WamrLogger] %s", + fmt); + + va_list ap; + va_start(ap, fmt); + vprintf(buf, ap); + va_end(ap); +} + +int +my_vprintf(const char *format, va_list ap) +{ + /* Print in blue */ + char buf[200]; + snprintf(buf, 200, "\x1b[34m%s\x1b[0m", format); + return vprintf(buf, ap); +} + void print_usage(void) { @@ -95,6 +119,7 @@ main(int argc, char *argv_main[]) printf("Init runtime environment failed.\n"); return -1; } + wasm_runtime_set_log_level(WASM_LOG_LEVEL_VERBOSE); buffer = bh_read_file_to_buffer(wasm_path, &buf_size); @@ -103,7 +128,8 @@ main(int argc, char *argv_main[]) goto fail; } - module = wasm_runtime_load(buffer, buf_size, error_buf, sizeof(error_buf)); + module = wasm_runtime_load((uint8 *)buffer, buf_size, error_buf, + sizeof(error_buf)); if (!module) { printf("Load wasm module failed. error: %s\n", error_buf); goto fail; diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/basic/src/native_impl.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/basic/src/native_impl.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/basic/src/native_impl.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/basic/src/native_impl.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/basic/wasm-apps/testapp.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/basic/wasm-apps/testapp.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/basic/wasm-apps/testapp.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/basic/wasm-apps/testapp.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/bh-atomic/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/bh-atomic/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/bh-atomic/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/bh-atomic/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/bh-atomic/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/bh-atomic/main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/bh-atomic/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/bh-atomic/main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/file/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/file/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/file/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/file/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/file/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/file/README.md similarity index 97% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/file/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/file/README.md index 8b34719ef16..98f0cc3a71b 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/file/README.md +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/file/README.md @@ -5,7 +5,7 @@ This sample can also demonstrate the SGX IPFS (Intel Protected File System), ena ## Preparation -Please install WASI SDK, download the [wasi-sdk release](https://github.com/CraneStation/wasi-sdk/releases) and extract the archive to default path `/opt/wasi-sdk`. +Please install WASI SDK, download the [wasi-sdk release](https://github.com/WebAssembly/wasi-sdk/releases) and extract the archive to default path `/opt/wasi-sdk`. For testing with SGX IPFS, follow the instructions in [the documentation of SGX for WAMR](../../doc/linux_sgx.md#sgx-intel-protected-file-system). ## Build the sample diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/file/src/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/file/src/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/file/src/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/file/src/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/file/src/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/file/src/main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/file/src/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/file/src/main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/file/wasm-app/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/file/wasm-app/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/file/wasm-app/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/file/wasm-app/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/file/wasm-app/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/file/wasm-app/main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/file/wasm-app/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/file/wasm-app/main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/build.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/build.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/build.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/build.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/lv_config/lv_conf.h b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/lv_config/lv_conf.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/lv_config/lv_conf.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/lv_config/lv_conf.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/lv_config/lv_drv_conf.h b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/lv_config/lv_drv_conf.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/lv_config/lv_drv_conf.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/lv_config/lv_drv_conf.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/lv_config/system_header.h b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/lv_config/system_header.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/lv_config/system_header.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/lv_config/system_header.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wamr_config_gui.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wamr_config_gui.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wamr_config_gui.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wamr_config_gui.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-apps/build_apps.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-apps/build_apps.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-apps/build_apps.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-apps/build_apps.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-apps/decrease/Makefile b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-apps/decrease/Makefile similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-apps/decrease/Makefile rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-apps/decrease/Makefile diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-apps/decrease/src/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-apps/decrease/src/main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-apps/decrease/src/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-apps/decrease/src/main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-apps/increase/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-apps/increase/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-apps/increase/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-apps/increase/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-apps/increase/Makefile b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-apps/increase/Makefile similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-apps/increase/Makefile rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-apps/increase/Makefile diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-apps/increase/src/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-apps/increase/src/main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-apps/increase/src/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-apps/increase/src/main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-runtime-wgl/src/platform/linux/iwasm_main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-runtime-wgl/src/platform/linux/iwasm_main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-runtime-wgl/src/platform/linux/iwasm_main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-runtime-wgl/src/platform/linux/iwasm_main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-runtime-wgl/src/platform/linux/lv_drv_conf.h b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-runtime-wgl/src/platform/linux/lv_drv_conf.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-runtime-wgl/src/platform/linux/lv_drv_conf.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-runtime-wgl/src/platform/linux/lv_drv_conf.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-runtime-wgl/src/platform/linux/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-runtime-wgl/src/platform/linux/main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-runtime-wgl/src/platform/linux/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-runtime-wgl/src/platform/linux/main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-runtime-wgl/src/platform/zephyr/LICENSE b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-runtime-wgl/src/platform/zephyr/LICENSE similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-runtime-wgl/src/platform/zephyr/LICENSE rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-runtime-wgl/src/platform/zephyr/LICENSE diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-runtime-wgl/src/platform/zephyr/XPT2046.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-runtime-wgl/src/platform/zephyr/XPT2046.c similarity index 98% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-runtime-wgl/src/platform/zephyr/XPT2046.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-runtime-wgl/src/platform/zephyr/XPT2046.c index cdad9dac205..5502cfd89d5 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-runtime-wgl/src/platform/zephyr/XPT2046.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-runtime-wgl/src/platform/zephyr/XPT2046.c @@ -10,8 +10,12 @@ #include #include "drivers/spi.h" -#include "zephyr.h" -#include "kernel.h" +#if KERNEL_VERSION_NUMBER < 0x030200 /* version 3.2.0 */ +#include +#include +#else +#include +#endif #if USE_XPT2046 diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-runtime-wgl/src/platform/zephyr/XPT2046.h b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-runtime-wgl/src/platform/zephyr/XPT2046.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-runtime-wgl/src/platform/zephyr/XPT2046.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-runtime-wgl/src/platform/zephyr/XPT2046.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-runtime-wgl/src/platform/zephyr/board_config.h b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-runtime-wgl/src/platform/zephyr/board_config.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-runtime-wgl/src/platform/zephyr/board_config.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-runtime-wgl/src/platform/zephyr/board_config.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display.h b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display_ili9340.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display_ili9340.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display_ili9340.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display_ili9340.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display_ili9340.h b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display_ili9340.h similarity index 95% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display_ili9340.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display_ili9340.h index f72279d69fc..ddc396e1d7f 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display_ili9340.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display_ili9340.h @@ -7,7 +7,12 @@ #define ZEPHYR_DRIVERS_DISPLAY_DISPLAY_ILI9340_H_ #include "board_config.h" #include + +#if KERNEL_VERSION_NUMBER < 0x030200 /* version 3.2.0 */ #include +#else +#include +#endif #define ILI9340_CMD_ENTER_SLEEP 0x10 #define ILI9340_CMD_EXIT_SLEEP 0x11 diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display_ili9340_adafruit_1480.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display_ili9340_adafruit_1480.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display_ili9340_adafruit_1480.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-runtime-wgl/src/platform/zephyr/display_ili9340_adafruit_1480.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-runtime-wgl/src/platform/zephyr/iwasm_main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-runtime-wgl/src/platform/zephyr/iwasm_main.c similarity index 97% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-runtime-wgl/src/platform/zephyr/iwasm_main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-runtime-wgl/src/platform/zephyr/iwasm_main.c index 6a88f8007b4..9ce0c11cd05 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-runtime-wgl/src/platform/zephyr/iwasm_main.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-runtime-wgl/src/platform/zephyr/iwasm_main.c @@ -31,7 +31,12 @@ xpt2046_init(void); extern void wgl_init(); +#if KERNEL_VERSION_NUMBER < 0x030200 /* version 3.2.0 */ #include +#else +#include +#endif + #include #include diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-runtime-wgl/src/platform/zephyr/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-runtime-wgl/src/platform/zephyr/main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-runtime-wgl/src/platform/zephyr/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-runtime-wgl/src/platform/zephyr/main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-runtime-wgl/src/platform/zephyr/pin_config_jlf.h b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-runtime-wgl/src/platform/zephyr/pin_config_jlf.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-runtime-wgl/src/platform/zephyr/pin_config_jlf.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-runtime-wgl/src/platform/zephyr/pin_config_jlf.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-runtime-wgl/src/platform/zephyr/pin_config_stm32.h b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-runtime-wgl/src/platform/zephyr/pin_config_stm32.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/gui/wasm-runtime-wgl/src/platform/zephyr/pin_config_stm32.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/gui/wasm-runtime-wgl/src/platform/zephyr/pin_config_stm32.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context-threads/.gitignore b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context-threads/.gitignore similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context-threads/.gitignore rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context-threads/.gitignore diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context-threads/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context-threads/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context-threads/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context-threads/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context-threads/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context-threads/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context-threads/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context-threads/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context-threads/build.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context-threads/build.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context-threads/build.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context-threads/build.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context-threads/run.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context-threads/run.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context-threads/run.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context-threads/run.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context-threads/src/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context-threads/src/main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context-threads/src/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context-threads/src/main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context-threads/src/my_context.h b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context-threads/src/my_context.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context-threads/src/my_context.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context-threads/src/my_context.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context-threads/src/native_impl.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context-threads/src/native_impl.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context-threads/src/native_impl.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context-threads/src/native_impl.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context-threads/wasm-apps/testapp.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context-threads/wasm-apps/testapp.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context-threads/wasm-apps/testapp.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context-threads/wasm-apps/testapp.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context/.gitignore b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context/.gitignore similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context/.gitignore rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context/.gitignore diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context/build.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context/build.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context/build.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context/build.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context/run.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context/run.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context/run.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context/run.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context/src/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context/src/main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context/src/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context/src/main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context/src/my_context.h b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context/src/my_context.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context/src/my_context.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context/src/my_context.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context/src/native_impl.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context/src/native_impl.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context/src/native_impl.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context/src/native_impl.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context/wasm-apps/testapp.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context/wasm-apps/testapp.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/inst-context/wasm-apps/testapp.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/inst-context/wasm-apps/testapp.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/LICENCE.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/LICENCE.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/LICENCE.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/LICENCE.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/build.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/build.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/build.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/build.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/lv_config/lv_conf.h b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/lv_config/lv_conf.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/lv_config/lv_conf.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/lv_config/lv_conf.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/lv_config/lv_drv_conf.h b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/lv_config/lv_drv_conf.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/lv_config/lv_drv_conf.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/lv_config/lv_drv_conf.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-native-ui-app/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-native-ui-app/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-native-ui-app/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-native-ui-app/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-native-ui-app/CMakeLists.txt.in b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-native-ui-app/CMakeLists.txt.in similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-native-ui-app/CMakeLists.txt.in rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-native-ui-app/CMakeLists.txt.in diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-native-ui-app/lv-drivers/.gitignore b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-native-ui-app/lv-drivers/.gitignore similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-native-ui-app/lv-drivers/.gitignore rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-native-ui-app/lv-drivers/.gitignore diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-native-ui-app/lv-drivers/display_indev.h b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-native-ui-app/lv-drivers/display_indev.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-native-ui-app/lv-drivers/display_indev.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-native-ui-app/lv-drivers/display_indev.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-native-ui-app/lv-drivers/indev/mouse.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-native-ui-app/lv-drivers/indev/mouse.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-native-ui-app/lv-drivers/indev/mouse.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-native-ui-app/lv-drivers/indev/mouse.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-native-ui-app/lv-drivers/indev/mouse.h b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-native-ui-app/lv-drivers/indev/mouse.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-native-ui-app/lv-drivers/indev/mouse.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-native-ui-app/lv-drivers/indev/mouse.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-native-ui-app/lv-drivers/linux_display_indev.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-native-ui-app/lv-drivers/linux_display_indev.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-native-ui-app/lv-drivers/linux_display_indev.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-native-ui-app/lv-drivers/linux_display_indev.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-native-ui-app/lv-drivers/system_header.h b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-native-ui-app/lv-drivers/system_header.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-native-ui-app/lv-drivers/system_header.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-native-ui-app/lv-drivers/system_header.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-native-ui-app/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-native-ui-app/main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-native-ui-app/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-native-ui-app/main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/display_indev.h b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/display_indev.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/display_indev.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/display_indev.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/display_indev.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/display_indev.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/display_indev.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/display_indev.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/iwasm_main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/iwasm_main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/iwasm_main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/iwasm_main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/mouse.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/mouse.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/mouse.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/linux/mouse.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/LICENSE b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/LICENSE similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/LICENSE rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/LICENSE diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/XPT2046.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/XPT2046.c similarity index 98% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/XPT2046.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/XPT2046.c index d59b6c9b7bf..e3948e2f208 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/XPT2046.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/XPT2046.c @@ -10,8 +10,12 @@ #include #include "drivers/spi.h" -#include "zephyr.h" -#include "kernel.h" +#if KERNEL_VERSION_NUMBER < 0x030200 /* version 3.2.0 */ +#include +#include +#else +#include +#endif #if USE_XPT2046 diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/XPT2046.h b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/XPT2046.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/XPT2046.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/XPT2046.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/board_config.h b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/board_config.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/board_config.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/board_config.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display.h b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_ili9340.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_ili9340.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_ili9340.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_ili9340.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_ili9340.h b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_ili9340.h similarity index 95% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_ili9340.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_ili9340.h index 4eb11e2d143..39257a29a62 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_ili9340.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_ili9340.h @@ -7,7 +7,12 @@ #define ZEPHYR_DRIVERS_DISPLAY_DISPLAY_ILI9340_H_ #include "board_config.h" #include + +#if KERNEL_VERSION_NUMBER < 0x030200 /* version 3.2.0 */ #include +#else +#include +#endif #define ILI9340_CMD_ENTER_SLEEP 0x10 #define ILI9340_CMD_EXIT_SLEEP 0x11 diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_ili9340_adafruit_1480.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_ili9340_adafruit_1480.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_ili9340_adafruit_1480.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_ili9340_adafruit_1480.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_indev.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_indev.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_indev.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/display_indev.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/iwasm_main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/iwasm_main.c similarity index 96% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/iwasm_main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/iwasm_main.c index dceb5786b49..10f4980268c 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/iwasm_main.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/iwasm_main.c @@ -16,7 +16,12 @@ #include "connection_native_api.h" #include "display_indev.h" +#if KERNEL_VERSION_NUMBER < 0x030200 /* version 3.2.0 */ #include +#else +#include +#endif + #include #include diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/pin_config_jlf.h b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/pin_config_jlf.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/pin_config_jlf.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/pin_config_jlf.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/pin_config_stm32.h b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/pin_config_stm32.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/pin_config_stm32.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/vgl-wasm-runtime/src/platform/zephyr/pin_config_stm32.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/wamr_config_littlevgl.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/wamr_config_littlevgl.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/wamr_config_littlevgl.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/wamr_config_littlevgl.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/wasm-apps/Makefile_wasm_app b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/wasm-apps/Makefile_wasm_app similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/wasm-apps/Makefile_wasm_app rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/wasm-apps/Makefile_wasm_app diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/wasm-apps/Makefile_wasm_app_no_wasi b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/wasm-apps/Makefile_wasm_app_no_wasi similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/wasm-apps/Makefile_wasm_app_no_wasi rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/wasm-apps/Makefile_wasm_app_no_wasi diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/wasm-apps/build_wasm_app.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/wasm-apps/build_wasm_app.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/wasm-apps/build_wasm_app.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/wasm-apps/build_wasm_app.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/wasm-apps/src/display_indev.h b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/wasm-apps/src/display_indev.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/wasm-apps/src/display_indev.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/wasm-apps/src/display_indev.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/wasm-apps/src/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/wasm-apps/src/main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/wasm-apps/src/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/wasm-apps/src/main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/wasm-apps/src/system_header.h b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/wasm-apps/src/system_header.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/littlevgl/wasm-apps/src/system_header.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/littlevgl/wasm-apps/src/system_header.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/mem-allocator/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/mem-allocator/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/mem-allocator/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/mem-allocator/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/mem-allocator/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/mem-allocator/main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/mem-allocator/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/mem-allocator/main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/multi-module/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/multi-module/CMakeLists.txt similarity index 99% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/multi-module/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/multi-module/CMakeLists.txt index ee6c98df469..17f4e1bcc27 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/multi-module/CMakeLists.txt +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/multi-module/CMakeLists.txt @@ -132,6 +132,7 @@ endif() # .c -> .wasm ExternalProject_Add(WASM_MODULE SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/wasm-apps + BUILD_ALWAYS TRUE UPDATE_COMMAND "" PATCH_COMMAND "" CONFIGURE_COMMAND ${CMAKE_COMMAND} diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/multi-module/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/multi-module/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/multi-module/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/multi-module/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/multi-module/src/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/multi-module/src/main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/multi-module/src/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/multi-module/src/main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/multi-module/wasm-apps/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/multi-module/wasm-apps/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/multi-module/wasm-apps/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/multi-module/wasm-apps/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/multi-module/wasm-apps/mA.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/multi-module/wasm-apps/mA.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/multi-module/wasm-apps/mA.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/multi-module/wasm-apps/mA.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/multi-module/wasm-apps/mB.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/multi-module/wasm-apps/mB.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/multi-module/wasm-apps/mB.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/multi-module/wasm-apps/mB.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/multi-module/wasm-apps/mC.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/multi-module/wasm-apps/mC.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/multi-module/wasm-apps/mC.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/multi-module/wasm-apps/mC.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/multi-module/wasm-apps/mD.cpp b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/multi-module/wasm-apps/mD.cpp similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/multi-module/wasm-apps/mD.cpp rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/multi-module/wasm-apps/mD.cpp diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/multi-module/wasm-apps/mE.cpp b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/multi-module/wasm-apps/mE.cpp similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/multi-module/wasm-apps/mE.cpp rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/multi-module/wasm-apps/mE.cpp diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/multi-thread/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/multi-thread/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/multi-thread/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/multi-thread/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/multi-thread/wasm-apps/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/multi-thread/wasm-apps/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/multi-thread/wasm-apps/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/multi-thread/wasm-apps/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/multi-thread/wasm-apps/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/multi-thread/wasm-apps/main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/multi-thread/wasm-apps/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/multi-thread/wasm-apps/main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/multi-thread/wasm-apps/main_global_atomic.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/multi-thread/wasm-apps/main_global_atomic.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/multi-thread/wasm-apps/main_global_atomic.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/multi-thread/wasm-apps/main_global_atomic.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/multi-thread/wasm-apps/main_thread_exception.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/multi-thread/wasm-apps/main_thread_exception.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/multi-thread/wasm-apps/main_thread_exception.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/multi-thread/wasm-apps/main_thread_exception.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/native-lib/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/native-lib/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/native-lib/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/native-lib/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/native-lib/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/native-lib/README.md similarity index 95% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/native-lib/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/native-lib/README.md index 80500ade0fd..be1cc6e74c1 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/native-lib/README.md +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/native-lib/README.md @@ -29,7 +29,7 @@ get_native_lib(char **p_module_name, NativeSymbol **p_native_symbols) ## Preparation -Please install WASI SDK, download the [wasi-sdk release](https://github.com/CraneStation/wasi-sdk/releases) and extract the archive to default path `/opt/wasi-sdk`. +Please install WASI SDK, download the [wasi-sdk release](https://github.com/WebAssembly/wasi-sdk/releases) and extract the archive to default path `/opt/wasi-sdk`. ## Build the sample diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/native-lib/test_add.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/native-lib/test_add.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/native-lib/test_add.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/native-lib/test_add.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/native-lib/test_hello.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/native-lib/test_hello.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/native-lib/test_hello.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/native-lib/test_hello.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/native-lib/test_hello2.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/native-lib/test_hello2.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/native-lib/test_hello2.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/native-lib/test_hello2.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/native-lib/test_sqrt.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/native-lib/test_sqrt.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/native-lib/test_sqrt.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/native-lib/test_sqrt.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/native-lib/wasm-app/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/native-lib/wasm-app/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/native-lib/wasm-app/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/native-lib/wasm-app/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/native-lib/wasm-app/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/native-lib/wasm-app/main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/native-lib/wasm-app/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/native-lib/wasm-app/main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/ref-types/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/ref-types/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/ref-types/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/ref-types/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/ref-types/src/hello.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/ref-types/src/hello.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/ref-types/src/hello.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/ref-types/src/hello.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/ref-types/src/hello.wat b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/ref-types/src/hello.wat similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/ref-types/src/hello.wat rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/ref-types/src/hello.wat diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/sgx-ra/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/sgx-ra/CMakeLists.txt similarity index 97% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/sgx-ra/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/sgx-ra/CMakeLists.txt index 7ab5522489f..3f5f23e97c2 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/sgx-ra/CMakeLists.txt +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/sgx-ra/CMakeLists.txt @@ -69,6 +69,7 @@ execute_process ( add_custom_target ( iwasm ALL DEPENDS vmlib_untrusted vmlib_untrusted vmlib + COMMAND make -C ${SGX_PLATFORM_DIR}/enclave-sample clean COMMAND make -C ${SGX_PLATFORM_DIR}/enclave-sample SGX_MODE=HW SGX_DEBUG=1 VMLIB_BUILD_DIR=${CMAKE_BINARY_DIR} COMMAND ${CMAKE_COMMAND} -E copy ${SGX_PLATFORM_DIR}/enclave-sample/enclave.signed.so ${CMAKE_BINARY_DIR} COMMAND ${CMAKE_COMMAND} -E copy ${SGX_PLATFORM_DIR}/enclave-sample/iwasm ${CMAKE_BINARY_DIR} diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/sgx-ra/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/sgx-ra/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/sgx-ra/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/sgx-ra/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/sgx-ra/wasm-app/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/sgx-ra/wasm-app/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/sgx-ra/wasm-app/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/sgx-ra/wasm-app/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/sgx-ra/wasm-app/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/sgx-ra/wasm-app/main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/sgx-ra/wasm-app/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/sgx-ra/wasm-app/main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/shared-module/.gitignore b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/shared-module/.gitignore similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/shared-module/.gitignore rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/shared-module/.gitignore diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/shared-module/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/shared-module/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/shared-module/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/shared-module/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/shared-module/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/shared-module/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/shared-module/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/shared-module/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/shared-module/build.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/shared-module/build.sh similarity index 97% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/shared-module/build.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/shared-module/build.sh index 9af5b3edd73..e6c10474533 100755 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/shared-module/build.sh +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/shared-module/build.sh @@ -21,7 +21,7 @@ echo "##################### build shared-module project" cd ${CURR_DIR} mkdir -p cmake_build cd cmake_build -cmake .. +cmake .. -DCMAKE_BUILD_TYPE=Debug make -j ${nproc} if [ $? != 0 ];then echo "BUILD_FAIL shared-module exit as $?\n" diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/shared-module/run.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/shared-module/run.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/shared-module/run.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/shared-module/run.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/shared-module/src/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/shared-module/src/main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/shared-module/src/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/shared-module/src/main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/shared-module/wasm-apps/testapp.wat b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/shared-module/wasm-apps/testapp.wat similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/shared-module/wasm-apps/testapp.wat rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/shared-module/wasm-apps/testapp.wat diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/.gitignore b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/.gitignore similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/.gitignore rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/.gitignore diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/build.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/build.sh similarity index 98% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/build.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/build.sh index 4e8155156a3..9d9d1874d12 100755 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/build.sh +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/build.sh @@ -17,7 +17,7 @@ APP_LIB_SRC="${APP_FRAMEWORK_DIR}/base/app/*.c ${APP_FRAMEWORK_DIR}/sensor/app/* ${APP_FRAMEWORK_DIR}/connection/app/*.c ${NATIVE_LIBS}/*.c" WASM_APPS=${PWD}/wasm-apps CLEAN= -CM_BUILD_TYPE="-DCMAKE_BUILD_TYPE=Release" +CM_BUILD_TYPE="-DCMAKE_BUILD_TYPE=Debug" CM_TOOLCHAIN="" usage () diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/profiles/arm-interp/toolchain.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/profiles/arm-interp/toolchain.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/profiles/arm-interp/toolchain.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/profiles/arm-interp/toolchain.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/profiles/arm-interp/wamr_config_simple.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/profiles/arm-interp/wamr_config_simple.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/profiles/arm-interp/wamr_config_simple.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/profiles/arm-interp/wamr_config_simple.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/profiles/arm64-aot/toolchain.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/profiles/arm64-aot/toolchain.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/profiles/arm64-aot/toolchain.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/profiles/arm64-aot/toolchain.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/profiles/arm64-aot/wamr_config_simple.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/profiles/arm64-aot/wamr_config_simple.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/profiles/arm64-aot/wamr_config_simple.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/profiles/arm64-aot/wamr_config_simple.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/profiles/arm64-interp/toolchain.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/profiles/arm64-interp/toolchain.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/profiles/arm64-interp/toolchain.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/profiles/arm64-interp/toolchain.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/profiles/arm64-interp/wamr_config_simple.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/profiles/arm64-interp/wamr_config_simple.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/profiles/arm64-interp/wamr_config_simple.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/profiles/arm64-interp/wamr_config_simple.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/profiles/host-aot/wamr_config_simple.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/profiles/host-aot/wamr_config_simple.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/profiles/host-aot/wamr_config_simple.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/profiles/host-aot/wamr_config_simple.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/profiles/host-interp/wamr_config_simple.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/profiles/host-interp/wamr_config_simple.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/profiles/host-interp/wamr_config_simple.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/profiles/host-interp/wamr_config_simple.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/profiles/macos-interp/wamr_config_simple.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/profiles/macos-interp/wamr_config_simple.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/profiles/macos-interp/wamr_config_simple.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/profiles/macos-interp/wamr_config_simple.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/sample_test_run.py b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/sample_test_run.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/sample_test_run.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/sample_test_run.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/src/iwasm_main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/src/iwasm_main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/src/iwasm_main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/src/iwasm_main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/src/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/src/main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/src/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/src/main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/wasm-apps/connection.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/wasm-apps/connection.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/wasm-apps/connection.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/wasm-apps/connection.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/wasm-apps/event_publisher.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/wasm-apps/event_publisher.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/wasm-apps/event_publisher.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/wasm-apps/event_publisher.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/wasm-apps/event_subscriber.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/wasm-apps/event_subscriber.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/wasm-apps/event_subscriber.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/wasm-apps/event_subscriber.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/wasm-apps/request_handler.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/wasm-apps/request_handler.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/wasm-apps/request_handler.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/wasm-apps/request_handler.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/wasm-apps/request_sender.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/wasm-apps/request_sender.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/wasm-apps/request_sender.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/wasm-apps/request_sender.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/wasm-apps/sensor.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/wasm-apps/sensor.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/wasm-apps/sensor.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/wasm-apps/sensor.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/wasm-apps/timer.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/wasm-apps/timer.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/simple/wasm-apps/timer.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/simple/wasm-apps/timer.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/README.md similarity index 97% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/README.md index a3bc5ac1523..911dfb7ab3c 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/README.md +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/README.md @@ -6,7 +6,7 @@ how they communicate with each other. ## Preparation -Please install WASI SDK, download the [wasi-sdk release](https://github.com/CraneStation/wasi-sdk/releases) and extract the archive to default path `/opt/wasi-sdk`. +Please install WASI SDK, download the [wasi-sdk release](https://github.com/WebAssembly/wasi-sdk/releases) and extract the archive to default path `/opt/wasi-sdk`. And install wabt, download the [wabt release](https://github.com/WebAssembly/wabt/releases) and extract the archive to default path `/opt/wabt` ## Build the sample diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/sample_test_run.py b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/sample_test_run.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/sample_test_run.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/sample_test_run.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/wasm-src/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/wasm-src/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/wasm-src/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/wasm-src/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/wasm-src/addr_resolve.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/wasm-src/addr_resolve.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/wasm-src/addr_resolve.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/wasm-src/addr_resolve.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/wasm-src/inc/.gitkeep b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/wasm-src/inc/.gitkeep similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/wasm-src/inc/.gitkeep rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/wasm-src/inc/.gitkeep diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/wasm-src/multicast_client.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/wasm-src/multicast_client.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/wasm-src/multicast_client.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/wasm-src/multicast_client.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/wasm-src/multicast_server.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/wasm-src/multicast_server.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/wasm-src/multicast_server.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/wasm-src/multicast_server.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/wasm-src/send_recv.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/wasm-src/send_recv.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/wasm-src/send_recv.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/wasm-src/send_recv.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/wasm-src/socket_opts.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/wasm-src/socket_opts.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/wasm-src/socket_opts.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/wasm-src/socket_opts.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/wasm-src/socket_utils.h b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/wasm-src/socket_utils.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/wasm-src/socket_utils.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/wasm-src/socket_utils.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/wasm-src/tcp_client.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/wasm-src/tcp_client.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/wasm-src/tcp_client.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/wasm-src/tcp_client.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/wasm-src/tcp_server.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/wasm-src/tcp_server.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/wasm-src/tcp_server.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/wasm-src/tcp_server.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/wasm-src/timeout_client.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/wasm-src/timeout_client.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/wasm-src/timeout_client.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/wasm-src/timeout_client.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/wasm-src/timeout_server.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/wasm-src/timeout_server.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/wasm-src/timeout_server.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/wasm-src/timeout_server.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/wasm-src/udp_client.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/wasm-src/udp_client.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/wasm-src/udp_client.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/wasm-src/udp_client.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/wasm-src/udp_server.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/wasm-src/udp_server.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/socket-api/wasm-src/udp_server.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/socket-api/wasm-src/udp_server.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/spawn-thread/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/spawn-thread/CMakeLists.txt similarity index 97% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/spawn-thread/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/spawn-thread/CMakeLists.txt index 7b76311d767..29c4dc429c3 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/spawn-thread/CMakeLists.txt +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/spawn-thread/CMakeLists.txt @@ -45,9 +45,9 @@ endif () set(WAMR_BUILD_INTERP 1) set(WAMR_BUILD_AOT 1) set(WAMR_BUILD_JIT 0) -set(WAMR_BUILD_LIBC_BUILTIN 1) set(WAMR_BUILD_FAST_INTERP 1) -set(WAMR_BUILD_LIB_PTHREAD 1) +set(WAMR_BUILD_THREAD_MGR 1) +set(WAMR_BUILD_SHARED_MEMORY 1) # compiling and linking flags if (NOT (CMAKE_C_COMPILER MATCHES ".*clang.*" OR CMAKE_C_COMPILER_ID MATCHES ".*Clang")) diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/spawn-thread/src/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/spawn-thread/src/main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/spawn-thread/src/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/spawn-thread/src/main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/spawn-thread/wasm-apps/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/spawn-thread/wasm-apps/CMakeLists.txt similarity index 97% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/spawn-thread/wasm-apps/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/spawn-thread/wasm-apps/CMakeLists.txt index 52ee7d7520a..0996d5841d7 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/spawn-thread/wasm-apps/CMakeLists.txt +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/spawn-thread/wasm-apps/CMakeLists.txt @@ -29,6 +29,7 @@ set (DEFINED_SYMBOLS set (CMAKE_EXE_LINKER_FLAGS "-Wl,--shared-memory,--max-memory=131072, \ -Wl,--no-entry,--strip-all,--export=sum, \ + -Wl,--export=return_bss, \ -Wl,--export=__heap_base,--export=__data_end \ -Wl,--export=__wasm_call_ctors \ -Wl,--allow-undefined-file=${DEFINED_SYMBOLS}" diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/spawn-thread/wasm-apps/sum.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/spawn-thread/wasm-apps/sum.c similarity index 61% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/spawn-thread/wasm-apps/sum.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/spawn-thread/wasm-apps/sum.c index 0bcb8918d7b..6f8b8f2189c 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/spawn-thread/wasm-apps/sum.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/spawn-thread/wasm-apps/sum.c @@ -3,6 +3,17 @@ * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception */ +/* + * have something in bss so that llvm synthesizes + * wasm start function for this module. + */ +char * +return_bss() +{ + static char bss[4096]; + return bss; +} + int sum(int start, int length) { @@ -13,4 +24,4 @@ sum(int start, int length) } return sum; -} \ No newline at end of file +} diff --git a/lib/wasm-micro-runtime-WAMR-1.3.3/samples/terminate/.gitignore b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/terminate/.gitignore new file mode 100644 index 00000000000..0fa8a76bdaf --- /dev/null +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/terminate/.gitignore @@ -0,0 +1 @@ +/out/ \ No newline at end of file diff --git a/lib/wasm-micro-runtime-WAMR-1.3.3/samples/terminate/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/terminate/CMakeLists.txt new file mode 100644 index 00000000000..246b835ddc6 --- /dev/null +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/terminate/CMakeLists.txt @@ -0,0 +1,98 @@ +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +cmake_minimum_required (VERSION 3.14) + +include(CheckPIESupported) + +project (terminate) + +set (CMAKE_CXX_STANDARD 17) + +################ runtime settings ################ +string (TOLOWER ${CMAKE_HOST_SYSTEM_NAME} WAMR_BUILD_PLATFORM) +if (APPLE) + add_definitions(-DBH_PLATFORM_DARWIN) +endif () + +# Reset default linker flags +set (CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "") +set (CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "") + +# WAMR features switch + +# Set WAMR_BUILD_TARGET, currently values supported: +# "X86_64", "AMD_64", "X86_32", "AARCH64[sub]", "ARM[sub]", "THUMB[sub]", +# "MIPS", "XTENSA", "RISCV64[sub]", "RISCV32[sub]" +if (NOT DEFINED WAMR_BUILD_TARGET) + if (CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm64|aarch64)") + set (WAMR_BUILD_TARGET "AARCH64") + elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "riscv64") + set (WAMR_BUILD_TARGET "RISCV64") + elseif (CMAKE_SIZEOF_VOID_P EQUAL 8) + # Build as X86_64 by default in 64-bit platform + set (WAMR_BUILD_TARGET "X86_64") + elseif (CMAKE_SIZEOF_VOID_P EQUAL 4) + # Build as X86_32 by default in 32-bit platform + set (WAMR_BUILD_TARGET "X86_32") + else () + message(SEND_ERROR "Unsupported build target platform!") + endif () +endif () + +if (NOT CMAKE_BUILD_TYPE) + set (CMAKE_BUILD_TYPE Debug) +endif () + +set (WAMR_BUILD_LIBC_WASI 1) +set (WAMR_BUILD_LIB_WASI_THREADS 1) +set (WAMR_BUILD_THREAD_MGR 1) +set (WAMR_BUILD_INTERP 1) +set (WAMR_BUILD_AOT 1) +set (WAMR_BUILD_JIT 0) + +# fast interpreter +# set (WAMR_BUILD_FAST_INTERP 1) + +# fast-jit +# set (WAMR_BUILD_FAST_JIT 1) + +# llvm jit +# set (WAMR_BUILD_JIT 1) +# set (LLVM_DIR /usr/local/opt/llvm@14/lib/cmake/llvm) + +set (WAMR_BUILD_REF_TYPES 1) + +if (NOT MSVC) + # linker flags + if (NOT (CMAKE_C_COMPILER MATCHES ".*clang.*" OR CMAKE_C_COMPILER_ID MATCHES ".*Clang")) + set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") + endif () + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wformat -Wformat-security") + if (WAMR_BUILD_TARGET MATCHES "X86_.*" OR WAMR_BUILD_TARGET STREQUAL "AMD_64") + if (NOT (CMAKE_C_COMPILER MATCHES ".*clang.*" OR CMAKE_C_COMPILER_ID MATCHES ".*Clang")) + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mindirect-branch-register") + endif () + endif () +endif () + +# build out vmlib +set (WAMR_ROOT_DIR ${CMAKE_CURRENT_LIST_DIR}/../..) +include (${WAMR_ROOT_DIR}/build-scripts/runtime_lib.cmake) + +add_library(vmlib ${WAMR_RUNTIME_LIB_SOURCE}) + +################ application related ################ +include_directories(${CMAKE_CURRENT_LIST_DIR}/src) +include (${SHARED_DIR}/utils/uncommon/shared_uncommon.cmake) + +add_executable (terminate src/main.c ${UNCOMMON_SHARED_SOURCE}) + +check_pie_supported() +set_target_properties (terminate PROPERTIES POSITION_INDEPENDENT_CODE ON) + +if (APPLE) + target_link_libraries (terminate vmlib -lm -ldl -lpthread ${LLVM_AVAILABLE_LIBS}) +else () + target_link_libraries (terminate vmlib -lm -ldl -lpthread -lrt ${LLVM_AVAILABLE_LIBS}) +endif () diff --git a/lib/wasm-micro-runtime-WAMR-1.3.3/samples/terminate/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/terminate/README.md new file mode 100644 index 00000000000..89a9c16bc3c --- /dev/null +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/terminate/README.md @@ -0,0 +1,4 @@ +The "terminate" sample project +============================== + +This sample demonstrates wasm_runtime_terminate API. diff --git a/lib/wasm-micro-runtime-WAMR-1.3.3/samples/terminate/build.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/terminate/build.sh new file mode 100755 index 00000000000..4c882e981b0 --- /dev/null +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/terminate/build.sh @@ -0,0 +1,63 @@ +# +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +# + +#!/bin/bash + +CURR_DIR=$PWD +WAMR_DIR=${PWD}/../.. +OUT_DIR=${PWD}/out + +WASM_APPS=${PWD}/wasm-apps + + +rm -rf ${OUT_DIR} +mkdir ${OUT_DIR} +mkdir ${OUT_DIR}/wasm-apps + + +echo "##################### build terminate project" +cd ${CURR_DIR} +mkdir -p cmake_build +cd cmake_build +cmake .. -DCMAKE_BUILD_TYPE=Debug +make -j ${nproc} +if [ $? != 0 ];then + echo "BUILD_FAIL terminate exit as $?\n" + exit 2 +fi + +cp -a terminate ${OUT_DIR} + +printf "\n" + +echo "##################### build wasm apps" + +cd ${WASM_APPS} + +for i in `ls *.wat` +do +APP_SRC="$i" +OUT_FILE=${i%.*}.wasm + +# Note: the CI installs wabt in /opt/wabt +if type wat2wasm; then + WAT2WASM=${WAT2WASM:-wat2wasm} +elif [ -x /opt/wabt/bin/wat2wasm ]; then + WAT2WASM=${WAT2WASM:-/opt/wabt/bin/wat2wasm} +fi + +${WAT2WASM} -o ${OUT_DIR}/wasm-apps/${OUT_FILE} ${APP_SRC} + +# aot +# wamrc -o ${OUT_DIR}/wasm-apps/${OUT_FILE}.aot ${OUT_DIR}/wasm-apps/${OUT_FILE} +# mv ${OUT_DIR}/wasm-apps/${OUT_FILE}.aot ${OUT_DIR}/wasm-apps/${OUT_FILE} + +if [ -f ${OUT_DIR}/wasm-apps/${OUT_FILE} ]; then + echo "build ${OUT_FILE} success" +else + echo "build ${OUT_FILE} fail" +fi +done +echo "##################### build wasm apps done" diff --git a/lib/wasm-micro-runtime-WAMR-1.3.3/samples/terminate/run.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/terminate/run.sh new file mode 100755 index 00000000000..0a75fea2a19 --- /dev/null +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/terminate/run.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +out/terminate -f out/wasm-apps/testapp.wasm diff --git a/lib/wasm-micro-runtime-WAMR-1.3.3/samples/terminate/src/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/terminate/src/main.c new file mode 100644 index 00000000000..4885b0b11bb --- /dev/null +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/terminate/src/main.c @@ -0,0 +1,219 @@ + +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + */ + +#include +#include +#include +#include + +#include "wasm_export.h" +#include "bh_read_file.h" +#include "bh_getopt.h" + +void +print_usage(void) +{ + fprintf(stdout, "Options:\r\n"); + fprintf(stdout, " -f [path of wasm file] \n"); +} + +static void * +runner_with_sigleton_exec_env(void *vp) +{ + wasm_module_inst_t inst = vp; + bool ok = wasm_runtime_init_thread_env(); + assert(ok); + wasm_application_execute_main(inst, 0, NULL); + wasm_runtime_destroy_thread_env(); + return inst; +} + +static void * +runner_with_spawn_exec_env(void *vp) +{ + wasm_exec_env_t env = vp; + wasm_module_inst_t inst = wasm_runtime_get_module_inst(env); + wasm_function_inst_t func; + bool ok = wasm_runtime_init_thread_env(); + assert(ok); + func = wasm_runtime_lookup_function(inst, "block_forever", NULL); + assert(func != NULL); + wasm_runtime_call_wasm(env, func, 0, NULL); + wasm_runtime_destroy_spawned_exec_env(env); + wasm_runtime_destroy_thread_env(); + return inst; +} + +int +main(int argc, char *argv_main[]) +{ + int exit_code = 1; + static char global_heap_buf[512 * 1024]; + char *buffer; + char error_buf[128]; + int opt; + char *wasm_path = NULL; + int ret; + int pipe_fds[2]; + + const unsigned int N = 4; + wasm_module_t module = NULL; + wasm_module_inst_t module_inst[N]; + pthread_t th[N]; + unsigned int i; + uint32 buf_size, stack_size = 8092, heap_size = 8092; + + for (i = 0; i < N; i++) { + module_inst[i] = NULL; + } + + RuntimeInitArgs init_args; + memset(&init_args, 0, sizeof(RuntimeInitArgs)); + + while ((opt = getopt(argc, argv_main, "hf:")) != -1) { + switch (opt) { + case 'f': + wasm_path = optarg; + break; + case 'h': + print_usage(); + return 0; + case '?': + print_usage(); + return 0; + } + } + if (optind == 1) { + print_usage(); + return 0; + } + + memset(&init_args, 0, sizeof(init_args)); + init_args.mem_alloc_type = Alloc_With_Pool; + init_args.mem_alloc_option.pool.heap_buf = global_heap_buf; + init_args.mem_alloc_option.pool.heap_size = sizeof(global_heap_buf); + + if (!wasm_runtime_full_init(&init_args)) { + printf("Init runtime environment failed.\n"); + return -1; + } + + buffer = bh_read_file_to_buffer(wasm_path, &buf_size); + + if (!buffer) { + printf("Open wasm app file [%s] failed.\n", wasm_path); + goto fail; + } + + module = wasm_runtime_load((uint8 *)buffer, buf_size, error_buf, + sizeof(error_buf)); + if (!module) { + printf("Load wasm module failed. error: %s\n", error_buf); + goto fail; + } + + /* Ensure that fd_read on FD 0 blocks. */ + ret = pipe(pipe_fds); + if (ret != 0) { + goto fail; + } + wasm_runtime_set_wasi_args_ex(module, NULL, 0, NULL, 0, NULL, 0, NULL, 0, + pipe_fds[0], -1, -1); + + for (i = 0; i < N; i++) { + bool use_wasm_runtime_spawn_exec_env = i / 2 == 0; + wasm_exec_env_t env; + + module_inst[i] = wasm_runtime_instantiate(module, stack_size, heap_size, + error_buf, sizeof(error_buf)); + + if (!module_inst[i]) { + printf("Instantiate wasm module failed. error: %s\n", error_buf); + goto fail; + } + + /* Note: ensure that module inst has an exec env so that + * it can receive the termination request. + */ + env = wasm_runtime_get_exec_env_singleton(module_inst[i]); + assert(env != NULL); + if (use_wasm_runtime_spawn_exec_env) { + env = wasm_runtime_spawn_exec_env(env); + assert(env != NULL); + } + + if ((i % 2) == 0) { + printf("terminating thread %u before starting\n", i); + wasm_runtime_terminate(module_inst[i]); + } + + if (use_wasm_runtime_spawn_exec_env) { + printf("starting thread %u (spawn_exec_env)\n", i); + ret = pthread_create(&th[i], NULL, runner_with_spawn_exec_env, env); + if (ret != 0) { + wasm_runtime_destroy_spawned_exec_env(env); + goto fail; + } + } + else { + printf("starting thread %u (singleton exec_env)\n", i); + ret = pthread_create(&th[i], NULL, runner_with_sigleton_exec_env, + module_inst[i]); + if (ret != 0) { + goto fail; + } + } + } + + printf("sleeping a bit to ensure that the threads actually started\n"); + sleep(1); + + for (i = 0; i < N; i++) { + if ((i % 2) != 0) { + printf("terminating thread %u\n", i); + wasm_runtime_terminate(module_inst[i]); + } + } + + for (i = 0; i < N; i++) { + printf("joining thread %u\n", i); + void *status; + ret = pthread_join(th[i], &status); + if (ret != 0) { + printf("pthread_join failed for thread %u\n", i); + goto fail; + } + } + + for (i = 0; i < N; i++) { + const char *exception = wasm_runtime_get_exception(module_inst[i]); + if (exception != NULL) { + if (!strstr(exception, "terminated by user")) { + printf("thread %u got an exception: %s (unexpected)\n", i, + exception); + goto fail; + } + printf("thread %u got an exception: %s (expected)\n", i, exception); + } + else { + printf("thread %u got no exception (unexpected)\n", i); + goto fail; + } + } + + exit_code = 0; +fail: + for (i = 0; i < N; i++) { + if (module_inst[i]) + wasm_runtime_deinstantiate(module_inst[i]); + } + if (module) + wasm_runtime_unload(module); + if (buffer) + BH_FREE(buffer); + wasm_runtime_destroy(); + return exit_code; +} diff --git a/lib/wasm-micro-runtime-WAMR-1.3.3/samples/terminate/wasm-apps/testapp.wat b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/terminate/wasm-apps/testapp.wat new file mode 100644 index 00000000000..349535da737 --- /dev/null +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/terminate/wasm-apps/testapp.wat @@ -0,0 +1,53 @@ +;; Copyright (C) 2024 YAMAMOTO Takashi +;; SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +(module + (func $fd_read (import "wasi_snapshot_preview1" "fd_read") (param i32 i32 i32 i32) (result i32)) + (func $block_forever (export "block_forever") + ;; read from FD 0 + i32.const 100 ;; iov_base + i32.const 200 ;; buffer + i32.store + i32.const 104 ;; iov_len + i32.const 1 + i32.store + i32.const 0 ;; fd 0 + i32.const 100 ;; iov_base + i32.const 1 ;; iov count + i32.const 300 ;; retp (out) + call $fd_read + unreachable + ) + (func (export "_start") + call $block_forever + ) + + ;; a dumb malloc/free implementation + (func (export "malloc") (param i32) (result i32) + local.get 0 + i32.const 65535 + i32.add + i32.const 65536 + i32.div_u + memory.grow + local.set 0 + local.get 0 + i32.const -1 + i32.eq + if + i32.const 0 + return + end + local.get 0 + i32.const 65536 + i32.mul + ) + (func (export "free") (param i32)) + + (memory (export "memory") 1) + + ;; fake globals to make wasm_set_aux_stack happy + (global (export "__heap_base") i32 (i32.const 0x10000)) + (global (export "__data_end") i32 (i32.const 0x10000)) + (global (mut i32) (i32.const 0x10000)) +) diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasi-threads/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasi-threads/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasi-threads/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasi-threads/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasi-threads/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasi-threads/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasi-threads/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasi-threads/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasi-threads/wasm-apps/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasi-threads/wasm-apps/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasi-threads/wasm-apps/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasi-threads/wasm-apps/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasi-threads/wasm-apps/no_pthread.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasi-threads/wasm-apps/no_pthread.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasi-threads/wasm-apps/no_pthread.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasi-threads/wasm-apps/no_pthread.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasi-threads/wasm-apps/wasi_thread_start.S b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasi-threads/wasm-apps/wasi_thread_start.S similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasi-threads/wasm-apps/wasi_thread_start.S rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasi-threads/wasm-apps/wasi_thread_start.S diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasi-threads/wasm-apps/wasi_thread_start.h b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasi-threads/wasm-apps/wasi_thread_start.h similarity index 96% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasi-threads/wasm-apps/wasi_thread_start.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasi-threads/wasm-apps/wasi_thread_start.h index 2427fd2b9bc..5eae2938d56 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasi-threads/wasm-apps/wasi_thread_start.h +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasi-threads/wasm-apps/wasi_thread_start.h @@ -9,6 +9,7 @@ /* See https://github.com/WebAssembly/wasi-threads#design-choice-thread-ids */ #define ASSERT_VALID_TID(TID) \ + (void)TID; \ assert(TID >= 1 && TID <= 0x1FFFFFFF && "Invalid thread ID") typedef struct { diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api-imports/.gitignore b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api-imports/.gitignore similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api-imports/.gitignore rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api-imports/.gitignore diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api-imports/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api-imports/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api-imports/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api-imports/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api-imports/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api-imports/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api-imports/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api-imports/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api-imports/host/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api-imports/host/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api-imports/host/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api-imports/host/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api-imports/host/example1.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api-imports/host/example1.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api-imports/host/example1.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api-imports/host/example1.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api-imports/wasm/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api-imports/wasm/CMakeLists.txt similarity index 91% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api-imports/wasm/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api-imports/wasm/CMakeLists.txt index 6b2743cb5b4..bf2358444c8 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api-imports/wasm/CMakeLists.txt +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api-imports/wasm/CMakeLists.txt @@ -31,7 +31,7 @@ target_link_options(send_recv PRIVATE if(WASM_TO_AOT) # wasm -> aot add_custom_target(send_recv_aot ALL - COMMAND pwd && ${WAMRC_PATH} --enable-multi-thread -o ./send_recv.aot ./send_recv.wasm + COMMAND pwd && ${WAMRC_PATH} --invoke-c-api-import --enable-multi-thread -o ./send_recv.aot ./send_recv.wasm DEPENDS send_recv WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} ) diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api-imports/wasm/inc/.gitkeep b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api-imports/wasm/inc/.gitkeep similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api-imports/wasm/inc/.gitkeep rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api-imports/wasm/inc/.gitkeep diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api-imports/wasm/send_recv.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api-imports/wasm/send_recv.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api-imports/wasm/send_recv.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api-imports/wasm/send_recv.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/LICENSE b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/LICENSE similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/LICENSE rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/LICENSE diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/callback.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/callback.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/callback.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/callback.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/callback.wat b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/callback.wat similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/callback.wat rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/callback.wat diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/callback_chain.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/callback_chain.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/callback_chain.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/callback_chain.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/callback_chain.wat b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/callback_chain.wat similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/callback_chain.wat rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/callback_chain.wat diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/clone.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/clone.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/clone.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/clone.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/clone.wat b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/clone.wat similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/clone.wat rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/clone.wat diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/empty_imports.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/empty_imports.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/empty_imports.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/empty_imports.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/empty_imports.wat b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/empty_imports.wat similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/empty_imports.wat rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/empty_imports.wat diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/global.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/global.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/global.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/global.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/global.wat b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/global.wat similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/global.wat rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/global.wat diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/globalexportimport-0.wat b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/globalexportimport-0.wat similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/globalexportimport-0.wat rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/globalexportimport-0.wat diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/globalexportimport-1.wat b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/globalexportimport-1.wat similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/globalexportimport-1.wat rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/globalexportimport-1.wat diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/globalexportimport.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/globalexportimport.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/globalexportimport.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/globalexportimport.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/hello.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/hello.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/hello.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/hello.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/hello.wat b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/hello.wat similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/hello.wat rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/hello.wat diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/hostref.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/hostref.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/hostref.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/hostref.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/hostref.wat b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/hostref.wat similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/hostref.wat rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/hostref.wat diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/memory.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/memory.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/memory.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/memory.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/memory.wat b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/memory.wat similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/memory.wat rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/memory.wat diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/multi.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/multi.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/multi.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/multi.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/multi.wat b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/multi.wat similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/multi.wat rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/multi.wat diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/reflect.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/reflect.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/reflect.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/reflect.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/reflect.wat b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/reflect.wat similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/reflect.wat rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/reflect.wat diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/serialize.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/serialize.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/serialize.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/serialize.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/serialize.wat b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/serialize.wat similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/serialize.wat rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/serialize.wat diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/table.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/table.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/table.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/table.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/table.wat b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/table.wat similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/table.wat rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/table.wat diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/threads.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/threads.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/threads.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/threads.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/threads.wat b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/threads.wat similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/threads.wat rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/threads.wat diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/trap.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/trap.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/trap.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/trap.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/trap.wat b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/trap.wat similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/trap.wat rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/trap.wat diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/utils/multi_module_utils.c b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/utils/multi_module_utils.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/wasm-c-api/src/utils/multi_module_utils.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/wasm-c-api/src/utils/multi_module_utils.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/XNNPACK/.gitignore b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/XNNPACK/.gitignore similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/XNNPACK/.gitignore rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/XNNPACK/.gitignore diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/XNNPACK/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/XNNPACK/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/XNNPACK/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/XNNPACK/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/XNNPACK/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/XNNPACK/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/XNNPACK/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/XNNPACK/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/XNNPACK/benchmark.patch b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/XNNPACK/benchmark.patch similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/XNNPACK/benchmark.patch rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/XNNPACK/benchmark.patch diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/XNNPACK/xnnpack.patch b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/XNNPACK/xnnpack.patch similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/XNNPACK/xnnpack.patch rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/XNNPACK/xnnpack.patch diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/bwa/.gitignore b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/bwa/.gitignore similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/bwa/.gitignore rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/bwa/.gitignore diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/bwa/CMakeLists.bwa_wasm.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/bwa/CMakeLists.bwa_wasm.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/bwa/CMakeLists.bwa_wasm.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/bwa/CMakeLists.bwa_wasm.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/bwa/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/bwa/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/bwa/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/bwa/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/bwa/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/bwa/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/bwa/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/bwa/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/bwa/bwa.patch b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/bwa/bwa.patch similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/bwa/bwa.patch rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/bwa/bwa.patch diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/cmake/FindBinaryen.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/cmake/FindBinaryen.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/cmake/FindBinaryen.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/cmake/FindBinaryen.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/cmake/FindWASISDK.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/cmake/FindWASISDK.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/cmake/FindWASISDK.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/cmake/FindWASISDK.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/include/.gitkeep b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/include/.gitkeep similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/include/.gitkeep rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/include/.gitkeep diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/meshoptimizer/.gitignore b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/meshoptimizer/.gitignore similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/meshoptimizer/.gitignore rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/meshoptimizer/.gitignore diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/meshoptimizer/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/meshoptimizer/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/meshoptimizer/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/meshoptimizer/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/meshoptimizer/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/meshoptimizer/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/meshoptimizer/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/meshoptimizer/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/meshoptimizer/codecbench.patch b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/meshoptimizer/codecbench.patch similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/meshoptimizer/codecbench.patch rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/meshoptimizer/codecbench.patch diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/preparation.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/preparation.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/preparation.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/preparation.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/tensorflow/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/tensorflow/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/tensorflow/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/tensorflow/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/tensorflow/build.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/tensorflow/build.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/tensorflow/build.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/tensorflow/build.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/tensorflow/tf_lite.patch b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/tensorflow/tf_lite.patch similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/tensorflow/tf_lite.patch rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/tensorflow/tf_lite.patch diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/wasm-av1/.gitignore b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/wasm-av1/.gitignore similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/wasm-av1/.gitignore rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/wasm-av1/.gitignore diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/wasm-av1/CMakeLists.avx_wasm.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/wasm-av1/CMakeLists.avx_wasm.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/wasm-av1/CMakeLists.avx_wasm.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/wasm-av1/CMakeLists.avx_wasm.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/wasm-av1/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/wasm-av1/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/wasm-av1/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/wasm-av1/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/wasm-av1/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/wasm-av1/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/wasm-av1/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/wasm-av1/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/wasm-av1/av1-clang.patch b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/wasm-av1/av1-clang.patch similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/wasm-av1/av1-clang.patch rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/wasm-av1/av1-clang.patch diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/wasm-av1/build.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/wasm-av1/build.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/wasm-av1/build.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/wasm-av1/build.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/wasm-av1/wasm-av1.patch b/lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/wasm-av1/wasm-av1.patch similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/samples/workload/wasm-av1/wasm-av1.patch rename to lib/wasm-micro-runtime-WAMR-1.3.3/samples/workload/wasm-av1/wasm-av1.patch diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/.gitignore b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/.gitignore similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/.gitignore rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/.gitignore diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/docker-compose.yml b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/docker-compose.yml similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/docker-compose.yml rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/docker-compose.yml diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/Dockerfile b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/Dockerfile similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/Dockerfile rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/Dockerfile diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/db.sqlite3 b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/db.sqlite3 similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/db.sqlite3 rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/db.sqlite3 diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/devices/__init__.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/devices/__init__.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/devices/__init__.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/devices/__init__.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/devices/admin.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/devices/admin.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/devices/admin.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/devices/admin.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/devices/apps.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/devices/apps.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/devices/apps.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/devices/apps.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/devices/migrations/__init__.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/devices/migrations/__init__.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/devices/migrations/__init__.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/devices/migrations/__init__.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/devices/models.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/devices/models.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/devices/models.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/devices/models.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/application.html b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/application.html similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/application.html rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/application.html diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/appstore.html b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/appstore.html similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/appstore.html rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/appstore.html diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/empty.html b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/empty.html similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/empty.html rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/empty.html diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/help.html b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/help.html similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/help.html rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/help.html diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/mysite.html b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/mysite.html similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/mysite.html rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/devices/templates/mysite.html diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/devices/tests.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/devices/tests.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/devices/tests.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/devices/tests.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/devices/views.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/devices/views.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/devices/views.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/devices/views.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/manage.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/manage.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/manage.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/manage.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/__init__.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/__init__.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/__init__.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/__init__.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/settings.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/settings.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/settings.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/settings.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/urls.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/urls.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/urls.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/urls.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/wsgi.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/wsgi.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/wsgi.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/mysite/wsgi.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/server/Dockerfile b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/server/Dockerfile similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/server/Dockerfile rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/server/Dockerfile diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/server/wasm_server.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/server/wasm_server.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/server/wasm_server.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/server/wasm_server.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/css/application.css b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/css/application.css similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/css/application.css rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/css/application.css diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/css/appstore.css b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/css/appstore.css similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/css/appstore.css rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/css/appstore.css diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/css/index.css b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/css/index.css similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/css/index.css rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/css/index.css diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/js/application.js b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/js/application.js similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/js/application.js rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/js/application.js diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/js/appstore.js b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/js/appstore.js similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/js/appstore.js rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/js/appstore.js diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/js/index.js b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/js/index.js similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/js/index.js rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/js/index.js diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/app(1).png b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/app(1).png similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/app(1).png rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/app(1).png diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/application.png b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/application.png similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/application.png rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/application.png diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/delete.png b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/delete.png similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/delete.png rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/delete.png diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/download(1).png b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/download(1).png similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/download(1).png rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/download(1).png diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/menu.png b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/menu.png similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/menu.png rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/menu.png diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/milky-way-2695569_1280.jpg b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/milky-way-2695569_1280.jpg similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/milky-way-2695569_1280.jpg rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/milky-way-2695569_1280.jpg diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/net_device.png b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/net_device.png similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/net_device.png rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/net_device.png diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/software-icon-32081.png b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/software-icon-32081.png similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/software-icon-32081.png rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/software-icon-32081.png diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/totalblack.png b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/totalblack.png similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/totalblack.png rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/photo/totalblack.png diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/connection.wasm b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/connection.wasm similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/connection.wasm rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/connection.wasm diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/event_publisher.wasm b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/event_publisher.wasm similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/event_publisher.wasm rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/event_publisher.wasm diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/event_subscriber.wasm b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/event_subscriber.wasm similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/event_subscriber.wasm rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/event_subscriber.wasm diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/request_handler.wasm b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/request_handler.wasm similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/request_handler.wasm rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/request_handler.wasm diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/request_sender.wasm b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/request_sender.wasm similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/request_sender.wasm rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/request_sender.wasm diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sensor.wasm b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sensor.wasm similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sensor.wasm rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sensor.wasm diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/simple b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/simple similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/simple rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/simple diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/connection.wasm b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/connection.wasm similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/connection.wasm rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/connection.wasm diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/event_publisher.wasm b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/event_publisher.wasm similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/event_publisher.wasm rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/event_publisher.wasm diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/event_subscriber.wasm b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/event_subscriber.wasm similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/event_subscriber.wasm rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/event_subscriber.wasm diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/request_handler.wasm b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/request_handler.wasm similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/request_handler.wasm rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/request_handler.wasm diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/request_sender.wasm b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/request_sender.wasm similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/request_sender.wasm rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/request_sender.wasm diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/timer.wasm b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/timer.wasm similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/timer.wasm rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/sys/timer.wasm diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/timer.wasm b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/timer.wasm similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/timer.wasm rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/timer.wasm diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/ui_app.wasm b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/ui_app.wasm similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/ui_app.wasm rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/ui_app.wasm diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/wasm_runtime_wgl b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/wasm_runtime_wgl similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/wasm_runtime_wgl rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/IoT-APP-Store-Demo/wasm_django/static/upload/wasm_runtime_wgl diff --git a/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/append-aot-to-wasm/append_aot_to_wasm.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/append-aot-to-wasm/append_aot_to_wasm.py new file mode 100644 index 00000000000..4829fbb194a --- /dev/null +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/append-aot-to-wasm/append_aot_to_wasm.py @@ -0,0 +1,161 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +# +""" +It is used to append a .aot to a .wasm as a custom section. +The custom section name is "aot". + +e.g. +$ python3 append_aot_to_wasm.py --wasm quicksort.wasm --aot quicksort.aot --output quicksort.aot.wasm +""" + +import argparse +from pathlib import Path + + +def leb128_encode_uint(value: int) -> bytes: + """ + encode unsigned int into a leb128 bytes + """ + binary = [] + while value != 0: + lower_7_bits = value & 0x7F + value >>= 7 + + if value != 0: + current_byte = 0x80 | lower_7_bits + else: + current_byte = 0x00 | lower_7_bits + + binary.append(current_byte) + + return bytes(binary) + + +def leb128_decode_uint(binary: bytes) -> (int, int): + """ + decode binary unsigned from a leb128 bytes + """ + + result = 0 + shift = 0 + for i, b in enumerate(binary): + lower_7_bits = b & 0x7F + result |= lower_7_bits << shift + + highest_bit = b & 0x80 + if not highest_bit: + break + + shift += 7 + + return i + 1, result + + +def is_aligned(n: int, alignment: int): + return (n & (alignment - 1)) == 0 + + +def align_up(n: int, alignment: int): + return n + (alignment - 1) & ~(alignment - 1) + + +def present_as_vector(content: bytes) -> bytes: + v_l = len(content) + v_bin = leb128_encode_uint(v_l) if v_l else b"\x00" + return v_bin + content + + +def calc_padding( + alignment: int, name_bin_len: int, content_len: int, start_pos: int +) -> bytes: + for padding in range(alignment * 2): + padding_bin = present_as_vector(b"\x00" * padding) + section_length = name_bin_len + len(padding_bin) + content_len + section_length_bin = leb128_encode_uint(section_length) + + pos = start_pos + 1 + len(section_length_bin) + name_bin_len + len(padding_bin) + if is_aligned(pos, alignment): + return padding_bin + + +def build_content(content: bytes, pos: int, adding: bytes) -> (int, bytes): + return pos + len(adding), content + adding + + +def create_custom_section_aligned( + start_pos: int, name: str, content: bytes, alignment: int = 4 +) -> bytes: + """ + be sure the section_content starts at a X alignment position + + 1B + | \x00 | length | name vec | padding vec | content | + ^ ^ + | | + start address aligned address + """ + + name_bin = present_as_vector(name.encode("ascii")) + padding_bin = calc_padding(alignment, len(name_bin), len(content), start_pos) + + full_content_bin = b"" + pos = start_pos + + # custome section id 0 + pos, full_content_bin = build_content(full_content_bin, pos, b"\x00") + + # custom section length + section_length = len(name_bin) + len(padding_bin) + len(content) + section_length_bin = leb128_encode_uint(section_length) + pos, full_content_bin = build_content(full_content_bin, pos, section_length_bin) + + # custom section name + pos, full_content_bin = build_content(full_content_bin, pos, name_bin) + + # padding + pos, full_content_bin = build_content(full_content_bin, pos, padding_bin) + assert is_aligned(pos, alignment), f"{pos} is not aligned to {alignment}" + + print(f"append .aot @ offset {pos}(0x{pos:X})") + _, full_content_bin = build_content(full_content_bin, pos, content) + + return full_content_bin + + +def main(wasm_file: str, aot_file: str, output: str) -> None: + cwd = Path.cwd() + wasm_file = cwd.joinpath(wasm_file).resolve() + aot_file = cwd.joinpath(aot_file).resolve() + output = cwd.joinpath(output).resolve() + + assert wasm_file.exists() + assert aot_file.exists() + output.unlink(missing_ok=True) + + # read aot content + with open(aot_file, "rb") as f: + aot_content = f.read() + + # append to .wasm + with open(wasm_file, "rb") as f_in, open(output, "wb") as f_out: + wasm_content = f_in.read(1024) + while wasm_content: + f_out.write(wasm_content) + wasm_content = f_in.read(1024) + + f_out.write(create_custom_section_aligned(f_out.tell(), "aot", aot_content, 4)) + + print(f"{wasm_file.name} + {aot_file.name} ==> {output}") + + +if __name__ == "__main__": + argparse = argparse.ArgumentParser() + argparse.add_argument("--wasm", help="a .wasm") + argparse.add_argument("--aot", help="a .aot") + argparse.add_argument("-o", "--output", help="the output, still be a .wasm") + + args = argparse.parse_args() + main(args.wasm, args.aot, args.output) diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/binarydump-tool/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/binarydump-tool/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/binarydump-tool/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/binarydump-tool/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/binarydump-tool/binarydump.c b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/binarydump-tool/binarydump.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/binarydump-tool/binarydump.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/binarydump-tool/binarydump.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/__init__.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/__init__.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/__init__.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/__init__.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/framework/__init__.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/framework/__init__.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/framework/__init__.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/framework/__init__.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/framework/case_base.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/framework/case_base.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/framework/case_base.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/framework/case_base.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/framework/engine.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/framework/engine.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/framework/engine.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/framework/engine.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/framework/framework.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/framework/framework.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/framework/framework.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/framework/framework.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/framework/suite.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/framework/suite.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/framework/suite.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/framework/suite.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/framework/test_api.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/framework/test_api.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/framework/test_api.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/framework/test_api.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/framework/test_utils.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/framework/test_utils.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/framework/test_utils.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/framework/test_utils.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/harness/__init__.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/harness/__init__.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/harness/__init__.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/harness/__init__.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/harness/harness_api.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/harness/harness_api.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/harness/harness_api.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/harness/harness_api.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/host-clients/src/host_app_sample.c b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/host-clients/src/host_app_sample.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/host-clients/src/host_app_sample.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/host-clients/src/host_app_sample.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/host-clients/src/makefile b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/host-clients/src/makefile similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/host-clients/src/makefile rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/host-clients/src/makefile diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/set_dev_env.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/set_dev_env.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/set_dev_env.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/set_dev_env.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/start.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/start.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/start.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/start.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/__init__.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/__init__.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/__init__.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/__init__.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/cases/01-install/__init__.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/cases/01-install/__init__.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/cases/01-install/__init__.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/cases/01-install/__init__.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/cases/01-install/case.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/cases/01-install/case.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/cases/01-install/case.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/cases/01-install/case.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/cases/02-request/__init__.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/cases/02-request/__init__.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/cases/02-request/__init__.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/cases/02-request/__init__.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/cases/02-request/case.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/cases/02-request/case.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/cases/02-request/case.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/cases/02-request/case.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/cases/03-event/__init__.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/cases/03-event/__init__.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/cases/03-event/__init__.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/cases/03-event/__init__.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/cases/03-event/case.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/cases/03-event/case.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/cases/03-event/case.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/cases/03-event/case.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/cases/04-request-internal/__init__.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/cases/04-request-internal/__init__.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/cases/04-request-internal/__init__.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/cases/04-request-internal/__init__.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/cases/04-request-internal/case.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/cases/04-request-internal/case.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/cases/04-request-internal/case.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/cases/04-request-internal/case.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/cases/05-event-internal/__init__.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/cases/05-event-internal/__init__.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/cases/05-event-internal/__init__.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/cases/05-event-internal/__init__.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/cases/05-event-internal/case.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/cases/05-event-internal/case.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/cases/05-event-internal/case.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/cases/05-event-internal/case.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/cases/06-timer/__init__.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/cases/06-timer/__init__.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/cases/06-timer/__init__.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/cases/06-timer/__init__.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/cases/06-timer/case.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/cases/06-timer/case.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/cases/06-timer/case.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/cases/06-timer/case.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/cases/07-sensor/__init__.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/cases/07-sensor/__init__.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/cases/07-sensor/__init__.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/cases/07-sensor/__init__.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/cases/07-sensor/case.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/cases/07-sensor/case.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/cases/07-sensor/case.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/cases/07-sensor/case.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/cases/08-on-destroy/__init__.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/cases/08-on-destroy/__init__.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/cases/08-on-destroy/__init__.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/cases/08-on-destroy/__init__.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/cases/08-on-destroy/case.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/cases/08-on-destroy/case.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/cases/08-on-destroy/case.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/cases/08-on-destroy/case.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/cases/__init__.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/cases/__init__.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/cases/__init__.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/cases/__init__.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/suite_setup.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/suite_setup.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/suite_setup.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/suite_setup.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/test-app/01_install.c b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/test-app/01_install.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/test-app/01_install.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/test-app/01_install.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/test-app/02_request.c b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/test-app/02_request.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/test-app/02_request.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/test-app/02_request.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/test-app/03_event.c b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/test-app/03_event.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/test-app/03_event.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/test-app/03_event.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/test-app/04_request_internal_req.c b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/test-app/04_request_internal_req.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/test-app/04_request_internal_req.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/test-app/04_request_internal_req.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/test-app/04_request_internal_resp.c b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/test-app/04_request_internal_resp.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/test-app/04_request_internal_resp.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/test-app/04_request_internal_resp.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/test-app/05_event_internal_provider.c b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/test-app/05_event_internal_provider.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/test-app/05_event_internal_provider.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/test-app/05_event_internal_provider.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/test-app/05_event_internal_subscriber.c b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/test-app/05_event_internal_subscriber.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/test-app/05_event_internal_subscriber.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/test-app/05_event_internal_subscriber.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/test-app/06_timer.c b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/test-app/06_timer.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/test-app/06_timer.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/test-app/06_timer.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/test-app/07_sensor.c b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/test-app/07_sensor.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/test-app/07_sensor.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/test-app/07_sensor.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/test-app/08_on_destroy.c b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/test-app/08_on_destroy.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/test-app/08_on_destroy.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/test-app/08_on_destroy.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/test-app/build.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/test-app/build.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/test-app/build.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/test-app/build.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/tools/product/start.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/tools/product/start.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/tools/product/start.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/tools/product/start.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/tools/product/stop.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/tools/product/stop.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/01-life-cycle/tools/product/stop.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/01-life-cycle/tools/product/stop.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/__init__.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/__init__.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/__init__.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/__init__.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/readme.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/readme.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/component-test/suites/readme.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/component-test/suites/readme.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/host-tool/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/host-tool/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/host-tool/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/host-tool/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/host-tool/external/cJSON/LICENSE b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/host-tool/external/cJSON/LICENSE similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/host-tool/external/cJSON/LICENSE rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/host-tool/external/cJSON/LICENSE diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/host-tool/external/cJSON/cJSON.c b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/host-tool/external/cJSON/cJSON.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/host-tool/external/cJSON/cJSON.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/host-tool/external/cJSON/cJSON.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/host-tool/external/cJSON/cJSON.h b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/host-tool/external/cJSON/cJSON.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/host-tool/external/cJSON/cJSON.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/host-tool/external/cJSON/cJSON.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/host-tool/external/cJSON/cjson.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/host-tool/external/cJSON/cjson.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/host-tool/external/cJSON/cjson.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/host-tool/external/cJSON/cjson.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/host-tool/src/host_tool_utils.c b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/host-tool/src/host_tool_utils.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/host-tool/src/host_tool_utils.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/host-tool/src/host_tool_utils.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/host-tool/src/host_tool_utils.h b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/host-tool/src/host_tool_utils.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/host-tool/src/host_tool_utils.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/host-tool/src/host_tool_utils.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/host-tool/src/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/host-tool/src/main.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/host-tool/src/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/host-tool/src/main.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/host-tool/src/transport.c b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/host-tool/src/transport.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/host-tool/src/transport.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/host-tool/src/transport.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/host-tool/src/transport.h b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/host-tool/src/transport.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/host-tool/src/transport.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/host-tool/src/transport.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/pick-up-emscripten-headers/collect_files.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/pick-up-emscripten-headers/collect_files.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/pick-up-emscripten-headers/collect_files.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/pick-up-emscripten-headers/collect_files.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/trans-jitted-func-name/trans_wasm_func_name.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/trans-jitted-func-name/trans_wasm_func_name.py new file mode 100644 index 00000000000..1380cd52a89 --- /dev/null +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/trans-jitted-func-name/trans_wasm_func_name.py @@ -0,0 +1,210 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +# +""" +It is used to translate jitted functions' names(in out.folded) to coorespond name in name section in .wasm + +Usage: + +After +``` +$ perf script -i perf.data > out.perf + +# fold call stacks +$ ./FlameGraph/stackcollapse-perf.pl out.perf > out.folded +``` + +Add a step: +``` +# translate jitted functions' names +$ python translate_wasm_function_name.py --wabt_home --folded out.folded <.wasm> +# out.folded -> out.folded.translated +$ ls out.folded.translated +``` + +Then +``` +# generate flamegraph +$ ./FlameGraph/flamegraph.pl out.folded.translated > perf.wasm.svg +``` + +""" + +import argparse +import os +from pathlib import Path +import re +import shlex +import subprocess + + +def preflight_check(wabt_home: Path) -> Path: + """ + if wasm-objdump exists in wabt_home + """ + wasm_objdump_bin = wabt_home.joinpath("bin", "wasm-objdump") + if not wasm_objdump_bin.exists(): + raise RuntimeError(f"wasm-objdump not found in {wabt_home}") + + return wasm_objdump_bin + + +def collect_import_section_content(wasm_objdump_bin: Path, wasm_file: Path) -> dict: + """ + execute "wasm_objdump_bin -j Import -x " and return a dict like {function: X, global: Y, memory: Z, table: N} + """ + assert wasm_objdump_bin.exists() + assert wasm_file.exists() + + command = f"{wasm_objdump_bin} -j Import -x {wasm_file}" + p = subprocess.run( + shlex.split(command), + capture_output=True, + check=False, + text=True, + universal_newlines=True, + ) + + if p.stderr: + return {} + + import_section = {} + for line in p.stdout.split(os.linesep): + line = line.strip() + + if not line: + continue + + if line.startswith(" - func"): + import_section.update("function", import_section.get("function", 0) + 1) + else: + pass + + return import_section + + +def collect_name_section_content(wasm_objdump_bin: Path, wasm_file: Path) -> dict: + """ + execute "wasm_objdump_bin -j name -x wasm_file" and store the output in a list + """ + assert wasm_objdump_bin.exists() + assert wasm_file.exists() + + command = f"{wasm_objdump_bin} -j name -x {wasm_file}" + p = subprocess.run( + shlex.split(command), + capture_output=True, + check=False, + text=True, + universal_newlines=True, + ) + + if p.stderr: + raise RuntimeError(f"not found name section in {wasm_file}") + + name_section = {} + for line in p.stdout.split(os.linesep): + line = line.strip() + + if not line: + continue + + # - func[0] <__imported_wasi_snapshot_preview1_fd_close> + if line.startswith("- func"): + m = re.match(r"- func\[(\d+)\] <(.+)>", line) + assert m + + func_index, func_name = m.groups() + name_section.update({func_index: func_name}) + + assert name_section + return name_section + + +def replace_function_name( + import_section: dict, name_section: dict, folded_in: str, folded_out: str +) -> None: + """ + read content in . each line will be like: + + quiche::BalsaFrame::ProcessHeaders;non-virtual thunk to Envoy::Http::Http1::BalsaParser::MessageDone;Envoy::Http::Http1::ConnectionImpl::onMessageComplete;Envoy::Http::Http1::ConnectionImpl::onMessageCompleteImpl;Envoy::Http::Http1::ServerConnectionImpl::onMessageCompleteBase;Envoy::Http::ConnectionManagerImpl::ActiveStream::decodeHeaders;Envoy::Http::FilterManager::decodeHeaders;virtual thunk to Envoy::Extensions::Common::Wasm::Context::decodeHeaders;proxy_wasm::ContextBase::onRequestHeaders;proxy_wasm::wamr::Wamr::getModuleFunctionImpl;wasm_func_call;wasm_runtime_call_wasm;wasm_call_function;call_wasm_with_hw_bound_check;wasm_interp_call_wasm;llvm_jit_call_func_bytecode;wasm_runtime_invoke_native;push_args_end;aot_func_internal#3302;aot_func_internal#3308;asm_sysvec_apic_timer_interrupt;sysvec_apic_timer_interrupt;__sysvec_apic_timer_interrupt;hrtimer_interrupt;__hrtimer_run_queues;__remove_hrtimer;rb_next 1110899 + + symbol names are spearated by ";" + + if there is a symbol named like "aot_func#XXX" or "aot_func_internal#XXX", it will be replaced with the function name in name section by index + """ + folded_in = Path(folded_in) + assert folded_in.exists() + folded_out = Path(folded_out) + + import_function_count = import_section.get("function", 0) + with folded_in.open("rt", encoding="utf-8") as f_in, folded_out.open( + "wt", encoding="utf-8" + ) as f_out: + precheck_mode = False + for line in f_in: + line = line.strip() + if "aot_func_internal" in line: + precheck_mode = True + + f_in.seek(0) + for line in f_in: + new_line = [] + line = line.strip() + + m = re.match(r"(.*) (\d+)", line) + syms, samples = m.groups() + for sym in syms.split(";"): + m = re.match(r"aot_func(_internal)?#(\d+)", sym) + if not m: + new_line.append(sym) + continue + + func_idx = m.groups()[-1] + if func_idx in name_section: + wasm_func_name = f"[Wasm] {name_section[func_idx]}" + else: + wasm_func_name = ( + f"[Wasm] function[{func_idx + import_function_count}]" + ) + + if precheck_mode: + # aot_func_internal -> xxx + # aot_func --> xxx_precheck + wasm_func_name += "_precheck" if not m.groups()[0] else "" + else: + # aot_func --> xxx + pass + + new_line.append(wasm_func_name) + + line = ";".join(new_line) + line += f" {samples}" + f_out.write(line + os.linesep) + + print(f"⚙️ {folded_in} -> {folded_out}") + + +def main(wabt_home: str, wasm_file: str, folded: str) -> None: + wabt_home = Path(wabt_home) + wasm_file = Path(wasm_file) + + wasm_objdump_bin = preflight_check(wabt_home) + import_section = collect_import_section_content(wasm_objdump_bin, wasm_file) + name_section = collect_name_section_content(wasm_objdump_bin, wasm_file) + + replace_function_name(import_section, name_section, folded, folded + ".translated") + + +if __name__ == "__main__": + argparse = argparse.ArgumentParser() + argparse.add_argument( + "--folded", help="stackcollapse-perf.pl generated, like out.folded" + ) + argparse.add_argument("wasm_file", help="wasm file") + argparse.add_argument("--wabt_home", help="wabt home, like /opt/wabt-1.0.33") + + args = argparse.parse_args() + main(args.wabt_home, args.wasm_file, args.folded) diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/.gitattributes b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/.gitattributes similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/.gitattributes rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/.gitattributes diff --git a/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/Config_building_target.png b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/Config_building_target.png new file mode 100644 index 0000000000000000000000000000000000000000..18db0c836266a4f585393ff6933a64fcbcb4e48b GIT binary patch literal 110517 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�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

xG~s4+;qz*EpBFxXX0$){m!S z#I-{36xtI}YO3~DYnHpg(HZ2=+V$REAz%}m76!9Eku&Rmc{#pbQBY7YL9lOCR#JLK zEgEWax*oDsNlk~A#uLs(Z`GzxJOCXs(89~U;6-1QqJx7~@(0i`7%YYWdb24sq<;dJ zo)0}H2*fel2rgiCIQUuJ=WEfb2e>H8tj6QIi?7YrJ;o`s(|TR(H~9^{4erjq2Vq|Z zDSm4|iGNF7o#poBI6uN*_c@~p?mhecfBjdKgPW_XM0ue>j#RmVX>sVACh-HX)7qSi zPN)5FLY$v886Muw*P)BxHD!RqIFkkj`~K~JzWR+bals@xyFa7An^*q+7wA~<_jgbH wJtw|#ssCObe{TwZZwgQk{LdZ~$BcKlNL*;6#;BSO=$ac>4Sp-XVt@ZX01IqMMgRZ+ literal 0 HcmV?d00001 diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/build_folder.png b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/build_folder.png similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/build_folder.png rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/build_folder.png diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/build_terminal.png b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/build_terminal.png similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/build_terminal.png rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/build_terminal.png diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/change_workspace_dialog.png b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/change_workspace_dialog.png similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/change_workspace_dialog.png rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/change_workspace_dialog.png diff --git a/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/compilation_config.png b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/compilation_config.png new file mode 100644 index 0000000000000000000000000000000000000000..346244d6cd46e40a1b058024cd82b5c78f238226 GIT binary patch literal 114054 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⋙`ee3+~vnxtQh!~_e;!5esKaB1z1x|1o zQ%aoZA9ezprmLP(Psxa4dJ3`wGIkupJmnQ^*J_Ji0tXeY?I#cAF)Ll{tUl3R zZg`ete586FVndx8`kTX$8|FX&K|BZR2e%G@7%$RlWo|C}tHb2Bnx9nbD@O?T}}ihOfV50%$})!yDf+3lg9+#+f3GFi1Z z>0zXMHivYcG2rDaulosl{w<-$F!!gbvo614+@Cu82+S|gPe^-S;(>F%Jxuq98ASom z2~IJwDUr>y6+c+$P*oUyv9(zq6&drOq(mRfWmVrCqJ6&9+>+jFwPjlG`>B^u>aGox zQqC<=)b-g@!aD8Uo0m1QK6AE6&cP|RFtC$ffoV5uuHPp6`ewcfl)heT%8SZ|{A6HV zAm+@qVy#l679T3y=94R)(i`PM(`C&sHl}2{{;eQ%P+w+7Nv-PAjHLrBqos{uZbG8I z1sT|jZmMd4<&of~`I3$KR92K6(v|#%-qzgDP7S$VzVh?y8t4$~UBywM;$?=C2K1lQ|qh z)EAeq3#!XcY=FwRUl^3Ur`lP)a7c7&ua?s3kC~-ORRdn9@u~{Rb&S)f4x?LgUz_y- zh*!kNDC&`tQGkr7pLlzDk-f`GK}BjZM|H;;WXPPRc*8KO=k^->TXK4Dv#c_Cz^zv6aYHe+lPI_Opv`=l>Ca(6p`;3|ys zGiTsMiEmLfC*yoqI4-uO(Ev6hc1`eGZOL3_sixA(oPv?$yYgd6w45y$bEO-}ptj)2 z64PN%%?;aI;YwMBv}!6ZFgd^*k8MFVEmb8^Dn5J-He3N=iI z^IgF>oV@_IdrD!#@m&T_4Gh}4w{J$DPD~Z`%2>>D#rOCa^0$p`LBkyl4vYrFIFr2G zPy&Iskt?4Y=`>()G>lrTlIeA@(-ylTt z_(*0YU`IU|QKQ@>A}ue?#m@TN;g+U9m{_fr@)lauERc@Mbi@g5b*t`WEg84z@sb29 z@*rRQQ%OLCs|DpKXUTpmEL19ZbG&V8z|}dYGRie6FVXoOPN&OhMvKC)Q}lNB#<$AT z10YwE^X!CCv1FaxCc8j+r4&+6#_+Tv8KkB3;+{ca`-l|cDX=)_!448M1~=BDF#Any z0*cEPs3%J5c*4B7nrpwmQYFy~HPAB4wp4POvG)W6cn3nUbqp!thKDM^A z+AeE2On`qm5m=2Du|08elQH1=wf>7yACk5|z4pw*<-pAQEZSU0!!1>IrVx*=@#_xd z{UO-*R~c-`ac&*<(tu$PT(am}C3B?+g0H{FxQRHOi~r9`-^^@@umXX(O~gFygQ7$q z*>^RCqnT)I`YH=wpx-u0-9HqJfzElskA$d&ZX_G-Rd6bS$FUK?p-*!Ad}^|m#Xh#4 zQ>~ak?#+&FBD%h&UgR}1gJicf^C$|==l#K#jK&b4FLNpc#=6XZ0 ztGF$BDNF0xMzDB7o|vMOg4dZ>=nn;whmk7!*;p=>1Ts4XXXaG?Q0_U}`OJG2j>sGz zg}nO;22Om+dVQp*T|hmt?Ju`(K@dL~;X=e7E2S2IZ1r+gRBz|{uSgX%6S<^_J?ADd zNMe{4VG3ED?NrjR-Qop zv(^IdsSZd|aqIIMM?g8b#|7RFc?KeC0huMb{#}Kghln=F!T@&i?OhnZnTLn-!6NfO zU|DI;?A>vYO>AiGfTYZ7JQa7Uk^I5M4B98g&md(mQ`Y^nHDN@pu7TSD$QXfxCl*A| zZVk|F@jS0RQ9PM_MijN!U6NVqmx{0%ab#r{#0r|2dv-{iRu}m{C{j<8yHO=8mlwoI z*Ey2MOQ~c;9KnM$CuX$meE%nNon16ZG%oGeZl!3ezuqWFNmIWDK|AEU{w-@uqB<`j zq4a~On1N3FTzZhcgJu$qSQVebvs%fznijy05yNL1a_fEz)qr5!~elFY63k$k<8 zSgXq@8jFjU@^k?Le4nfoO>(t6G8293ymMcxnYZ~W>jsv%fx*aS)MfVB-sI132WWSI zh8eu28GEaofMPDzXgNy4<=_9t-T`6yxc2NQYy3y+!%FT=R%S|-`>m46det5PeDhX zly8LTmzor3-zL`lR)FU*xD_%A?mz9&UoTn8{c>87pLE)*k}?Hp$9AN50)DSFOzdRV zPl_)O7d=?v$8T9^;~xHfX!-*W&GE^hR{6QrdnldHU-}yR*rMy~U_#v!F#c&~wR%{d zR~RGF^Ti-U{x1}&PS}-WWN;}Oi+$V&LkO~ID@n_L=IqgBg9?V&WayXyC~*M<@rEFq za_TT`WLu#Q42nbuUTwjXKds<^fPIJ)D-`Sf) zC+Y6MVhG*IN~!%L^N^&u-XWRmpcY)vroz5cb%CK0Q3G1AWR(vqY?}JXU1PAr*t5J} zKM=<+eYrJT%{bXwqliA`14UQq>ZNF4S3jtn%@f{m(yYAlsxId%F6gNR-Wzz`e)gM1 z=Gm@F_H@*1DZTuJMkZFH-6#*MPJ^ef5- z^Pc*;oOzi=MF}A83YtO6Urxx-Dq-QcmunPd$jG~y+Il|yUug`v;jQ^n7i9VcfnnEi z4e;7%D0O!}Sn;37L=*aG;GeTk3*fqA2PN0TB-Q`PyyzpPJp+bJa+n9rJPOo~MHK_* z33<1n1f?9sqcr<>1xt>QY*BHe9H3a8`&v}GBO^%BO6;(!S#U8RwuHwx4OZ#um6cR} zmG>N&-S+9My*=D3vlOBGvv5B$yOe}fbI36uripu!BGFN$^I32;#YFAy#w`>Kn4A&1cE+?zk*nEd05@rLXW(=#BQc3WJPxO zJD94XF`q@DvQFf>fTJ5)JL?x|1XQrgRX}eq#TfpAKiCyp;~%)HkMfKe+!=NZa5bKS zRQkiQ`>ZYp)c%kRbWP6lo-vib`FFYcfclj~hHf+BjUwBD^^8teVo|GgcE8YO1P8(S zADQW{TbGD9o^+Om$8+P;M?E=5E`i<0l$38ImR9cEgmii(@mY_w4bDZTWS9CxY9sUv zqUMjymf@8UCf?kD*PO$87t(U6r+PQZ{PY6GwdY1X^o3%wWV zTg|{b^$U)Ds~*Nd;JX6+)1-?1o*&{KDQ_$f;>|PIyJn}Rs^+$0OW(O(L00b?D~`Dt z)9o;?{RC0sF8Ve3G{6`^=}LPhU_Ax;jCz&R=x=s)3W}e2v{q+YF39BV?8n zWy!98V=6-sVs1r9vqF!R1YSq+3#U2Ww#s^gVq@8LIc&^QanVzO=Wq;AucLIkk;3`= zv4;DZt9f_D)zxc`?(g6Mj++L2C^Rh49GKUOqBcqYCr{4fDm!riyC6g`M zFvoTcfSqvgCxasDuW`f0<&AbY=Z00`^DeC);VQ*`Hzq%8wWzcV+k3k4=PNH+5@I)h z55tWJgAqd|c9Xw09kI!&^24!CyrpG@KR(zVs=!$5>47uRA3XJD!jJu^A38ijF07t^ zbP)r0UCp!BbL(LJyB}c_sIH8Vok%tggk37!FoV@{`_nYS>sz{?AJv^Z>AziBu$ZxF zv#T$wE$70pof+!Zb^&5eZ+5zrj26Se9xp5NHk!pP(ar}{@zZTRTX`ZV=M-STt*MGb z)lPV>!A=XTDL&dceFk5kCc!XZIw^26)h+cvO?o-pq7>|AG4mTG=;cgq#LSTPsnHx! z-+mKWIm>4Rw!2^s4#_S9+G~>rvh@-rADUr3w-elp3PdkIws!vbtqbFXstK&7xwIU* zfDyBoB_gU7G>Ep=)8wwkXs#Y~K0Wd(lEKglE6h19NYq?1ZtD_z}sgtVvF1W^$ zg;>hi)9rf5yZSjA*!I4O8pmXTc?G>zuelhA>JG4U*IR$IX`*2)b3UqI*p<7TL@2+U z(ZiGT^hkR5ysTDjHdQUbs3#3-x6a@32KG9&XLisEM)OyJvPvSvRYn-eI*uZfxgCkrj zc}Bsn2)=XPW1N%poJMEG*6H#h?XG75u|}^m(5HqIV${RVzQ|Lv)~>&jKQ6&nA?J>F6U6Y}x_wrKgVMRMFE@*h z@n6-)qeHm;+BB@E`*(BSjH&gnI(`{^rlaerG8k%r6NjH^(ylfIPHHmHbXLveu(X$^ zP;M>QoNEke>gB!9Wgqo%GBW{r6P4{Fz5hIKP4Sa69=$U9E%zJBX#w@yCp6pjIuK!G zjd{c`P}r{j=ZMah;Pp7ZA?No(v6Suw8>-+qYIi$_clb`1!1ph^wm7F{k)ZI3)yW&n zQ5BHzX@Uzo>g%agJ0LN9z60H2O_b1Wpra+L*rD3`Rp|4kyhH0IEgPF2zt=yODRlZ3KL5yq zAIo}v(Ez%p4ksB$#McCNfm#m*UKhoc$jjBydhU7J)sgef z2x6VEBI0JDI^2N34NlZS;VK$2;Q8sOMy%RKcEtqb5?}F(U8Xr%AgkWMbxik1^I98r z(p^&Yui~6F5JINyFm)q9c#rf$$mtP}73ZQwha61ZelMI!>w6tP{yyYwdvksM-Tqvk zjzm6Ry@_v?4rYYxE-uC3RACbmT}U5 zJO0*Cmv`XvWNGNi$f5lO=kg>H@SOltjfrq})RY_S)E=%QIo?Ky3nBGYd zs@qp(^*ImDWmO#70bGcSnlxb5mkFhHh-?NU>;Hlx3KVV)7+d=cJgxS(x)a;epUt#T z@qSu|l~E$AY}&{uTqU0$DDkd~v>oZ6Z9m`O$-YvSpA7LxAC&^6cXf$rEGspgWj>Eu z9YW)+6wq~VIc3R)W9SkA<%Mm%2AR9$%netL5(yHw@vIZ4l1f{p{-!^^YuVM|;_X-` zq0?_<|$JDyw4{k*TyONzhH%mCgSk*{RM@|=rrMM zpxx}Y**~OM#Cvmucc%yL(tc$P+qOi-*ek)Ci2Z1TiTa*YxX26Fnz=M%?I0>$JBM@y zo%|R^BS(#+$Fph8?fVa=RUK{z9-kj2K7{}_rfqp3g{uYt0YAa5Yd&Tiw^HHi7yrWn zdYP!xtgTjjf7Zo3EfT#Oc*)ZSNq5oLY)lwg!RIT`*>VJT!9a5W2@C^9IT3` z!TpfrH1coAn>X1x$hZB1FW5aladJx?v)WinCo}4Jl_+W*?Ugc2K#IPs5_l%Q4$l&w zIrVe>%NjPi-8s(@W2Ve*j91O`%B-#B-D(uuFa*9zpYGm1Os&zcwfW+D<`pQF!1r?M z<&|!3AxOg#`7wc;@72X?Q@t?n*0XqiYQ{AD{OpJRO?_bY*m95GsT%+R6Z%If5NF3= zDy_IZ;B1}G4P}OZ9;%FIyf|WkUI9^aMAjt_&q20;Ev~V)I(~UKSKC!GybZ9fky8R= z*rAt*7EQZGf|%8?@d<;w?Rmo4*4Yv1jYPh`+7&%Ouxb zD^KmM&nTgS8Dg_@6Z->%RAlYvko?|*8)rK|(qMO<{CxAiTJ4^>0_U1bd)n@-OrKhp#(hPvf55D{n=ljX``TVXT-Lm%*9*;pRCxXD*GxG%5>;@ zPBwcyZNv@Pt;7v9v)CI-p3tO{;4S^T^A=qGvJ>%P6wGaDP+eO&2a442q^~6Dal!CHZ21^D_Cd$xI3;Ep|D5o0LYWhG@!yXR>(b@ScQ;yM29t-$SaH;T!(F8$o(4_<4-f=JxU+g^J4j!!Jvtwo#zk;BLxs zcg%*uhafC=X^O%LDoMo~f%Ok@mt1_j*|cnia6J`yx3t^N=XB_|yfJ-Cf9Q9s4l`p2&KXaHs;T{Z&k2S&@Tr~+hv=icIGLv zNz4w>&N;Quzw7*H^OcHxtml#@?Tz^|NMy+eU%qv4?)3M15nu*OM`DX)hDl>A$8q&$ ztT6&Il}PoK_2+vC$(rOS$wY*58*aJjCfP^fTX-!MBg202VriNalV^hq5_cYqqB{0l zulCsPNWGUgW38u9espoAXE!$XF&&6DiSCO^>>W!;h^E~T3mOR2dIVnji&fRUF228*C*iI`r zyHlrH>F+msn27Ym20@;DJ#emLrassr;NVM{h<;Uwro*wX_l;bs1k=RV!#JbYdCnQC zd#{2l^Xlc4Gbn?-UOZsH3TKYIlM_G&a8YsdH_!*)s9jDN(YO`S0!e?dq4dvnI747c zfLb~|ivRA8$*}W3qzqxnFWSr!>4%jK{2}&i^GdQR$bh{%T54LFkeJoSoqMk}v+9IT zpCq{D+<*K~$t5f4_miy=tfzgYA$v~Eu^`!p1iLC@fyL^iBf-jg2oZ1SgkQbiK?dmC z+v}T6{$@GflAv-&|-T2i`DYKnBzF4+BV&|2Nes6KJ%042rwrM~xm z)}jSU3MHE}z20O5@;T6?<6&(GG$r6gJF~o~u>ncpm?2z=k8nT?AmdBj|qtdubRHF0BDh>OgxA<;5}{!5VkyxQ>f zD6_Zm8$z77sS|}~4Tr6%g0(+HSX=%nWr++;znpcH?h%_Wcs1kXq^t8AS3=BH7@eIy zyRK%?q#v`1^PxwQy^=LTj8e5nDq=Cwo@JzYr%!>aQE@@#fu2gjiKl6{<><3UTBwnk z{+v!qV$h%dLT2!$%sLDCWjxR@TRO?;~K|`;HHl*KR0uU+jqN z*IL8fICs&#oDuZZP7`L2i$`n%B4M|@7bEuEFp!n(t}^hvL?{`0Q8V=O&eHllWcoqm=|fQN8MP zu=S}NZ5h0x(L|Qi7q``-b#%0ricfeWGD>{U?EB3@=DjQL>jp|lD1Lm9VA90#ekt&| zKTWYc1HH)`>~uKaarIEnGx&z>&?W|!92aHhSqM^+_UEe|ZLtp!x#_aZ!+5~HGkEpg zC5r73)y6|AD|`;Q$;p|^HWS!`8A-64j2H)Pw4~jd|BUF?k6;hjQf!Npj!Vf&ImO?@ z)F7k%pgiDw6QQgqsr3*JG!MSGxVdIfc(nk;4Of1Eb-`|2sPFS??Pzz z6fz_}%lg&#lg03LS&UQ7o8HkaOLmPJY2RCsP9+t5Ca@~u$MPly9cf4@4|dcI?(JPE;u~26Ddlk}v z+kDecVZGv^3vdP+B-%%0hj;nLOWd+F&2FJxIEn8pcX&s1_tfJmZSh+4&8GdiiFt?Z zgN=aR-941_!L2<$$czf5xyJcKm&Q8M$`7 z=|KA1^u~dJprBna0c69_R#JK|D}DUKr17s#(A9eZ)y|I0p*1Xz__R^BX4wywWE@yh zAU;x3$E6Ihs@|cPmS-hPU*FEW)UY2XW27|X%uFqHthaP(Bq5MmqMN7 z-K=h4B7WvoTRSRYzwNz~P2^W}J&Dut0-VLAD{!rz7VHuXA{Uatp+vh{(PHim0q-Es zv-4t>F75yFqg-P7gZhjh%F0H6AQMMDG#$_^U(57?i-A(!Dv3Dz%_L=wzN$MB@ka0g ziRi1rpK8|TOxV45!(aDHlr(VkuqGKZb6%6l1 zN}cL#{!*b6;4P4|*;4rhz1{O%Gbnvhu{xa#wfKyUO_kLBNcCodrW|XEAEh@<=(BEd zw$#90AHUhtQSi;3fopn#tD?h|R4P6$2F@02W$6@hTXS*c zJ)I6!jd_~F`=K*m*}wa=Jys<$ z?B*{JLg;a6>x)X0rXs?TQv$iLJAJCgnNHgF$4=^~_hY!RCrN~h*Atw*2KKcNtjS)c-aw8yMIfk9HRl%g4^9E_e z?c}qfx8SL^+=%VrW{t#X(;hQB-jz@K@eRGRQ%YCE@bm_WmU1BGC%4@^u*B1<)V7?D z+pazuZvS?NV=H=!;;CHu{l+@PR%2T>9b3bsj#a%(*4wB0P|1xJ-;MVb4?y4yW2;@u z0`yKws);=4a<*3{3Q8>WpWMC9F?0We;oUZwh2@~j>`}|XpMGaO9&veG`D=cU zls(sh zZ+=NF8s^QwB~`CPrP-TiY^7quX@TXd9enz-=kjX(KH_S&%4d}q_`vFrx2>%A=x zk50t*n=<&DU(2aV@doqwEE}Ls49~ZExAkNMc^=!|vCT*iRn#CVWWZm$zX5+&#!g|; z+`1PTn-TkK;dZg7@y5o8{`9Yvf?XGnE0}3Lb20DiAajJQ!Kb$O=DREcNww80?q0Lw zXKfFv54#LQ_E3W4iwB=1m}d`ACW2dgu1x`_rX?mZ0;r!lY!YMrv1J}EGZ@T{j%ff} zw7c{7m-5Pj!LK9#-rQX7_p@@ZhgGZsKMntxW#$c0sNO@}Hu;?4`c;lyq>Hz)$N(Kk zwOR~Kw|dNLEv6#N{pxJ#A1%H7liz)>2bxzzIId}K=ZcvA&icsoY^Z$o zx6PBj;86F>I#ZCgF?O1(<@Q@$!W^2Y9PfXIhK>-iS`c(>3tlF$3>;k|S!su-Z`_0|a;XBDh;{5AN##?Dp9w*xj7}2wZ3l^K44EvIaWVCkRys%eGV9C zp#FT506sLK1@~Z5#zyQ_0UMo|`<8M}@0mDnTrz)ufvG17ktg+88$))*fQM?@v(-SL74w`q_-iI8@ zt~7v%QYFx}rBaS?t=?+3@q}&qghggHq}QNQc3>H^QxlIZCsa7^Av^ob;}<-y;l`oV2W#Tpx-G>e_?&e5+cq6r&1#JIblyUT z=tM0XJTdAEp{GK0Ls%tqx9z@{>uM!Y)(<)`G zT>b7#i!!g~+xTiFARoLK{IFOt2AsP-F61nWy)Fx@9P53Bcy7>ss7UYNCkN}u-f}5L z`da00sY=iCx!M~TIKF_*UI&FE<*o6~gUyG1(cATfnvvvD$K*o0nV+RgU{}wYQ_J3hOhBbqbyetQc=uJncN^)P@n_jO~gk+kI!A zE~Y`ATI}BT@9B}I+d9W`8q0QJ0UArJ@ewV1?>Be88bs%FC5G%cdwui&JCEHk{vHNp zr7uHjD<-9zysZ@+;+6eqk=Z7l9wXH6Pb5FjdsmTN>S5<0WU0|}wfV7yhRe)DLJU*c+%!G~3NGhaAZzx+f>^Ab;0rz zFJ_^pAW)C##e)N34G#&`{e!4FG#=juOSfF1#;~AD8pn)-t=9mrC#NeR;>n0`Rsays zWNialvj*n3Sz|#nrfXtO30h5txABTslzBV3R!vZ9&UVBm=>i4C`M~=41rJr#R?+oLOm({% z&I5>nv?D#5VPUrFj(^R?Md}aU!or^}gzngWG9FyZO8d~j%E@6PzJ3FoU$SX7H{lB5 zHeqDi+VNJ>y=Oga_NonHRjTI{NFkR*jS5@Htx%V7=C0hncsEoOF(WG*ncEQ?h5v?o z({}*#o$S@Gx4tF@Tuo9;Mj~&m=iLl6)7y}>8*A6cBQ-Caa(U+rKE5Llu1$BzG22;O zc)rP(9O<~hnBZh5L0?L+>Parf%V$nCBmj$e>BU+d4o^$G@n;(;6q2zemvbw_B{ciG zSc|xnC6RD%OQc81A%E4#uMfM@IlB^F$BlPA%kf!iSk#Yng*1fF;H>;Y%i(7WDJ1xs z9&ZE`RBhV_JyahM4q65gb7#Cn?ysN8^H1S!x>w`Hw^FIUBqT#4gzc z@fMiVpL(~JtEuK$m~h3AbOZxDZI|CMU8Z4gfm}+AM%{VI5Kv52`%C6zOBKxB)Cc0{ zAD!uSl3d@TtquebU)o=`PbY~X(>9Js88F*qoG~^OB2kWlpfF`6dO-xcXBzbTR zL{*2amkh5VA`xlmU+``b#4_~^CnR&MrF(&aO6h+bH7GUjeiuAv=P_}Ov|AN6o|=AR zco$)wMFxI_lA$6wUzaWr8Q(9D;+hG81pjfpVqbj1EVEm&p8@4WQ@tLUW>KZO?_*By zv5s4lD`LR~xdU_~0D!t8qDe41#W2sAY9e!sv&~u?O3sfaB4uo_*16IjLoGqzC8{@G zCY;CS-}`ada8+rfKPxM-~4YcJK~l=9_M+tu6e#+pTk z4uN5;HM$eZa64-%NlJHF?+1RKyy}Drw%FN5sL$8EK<+q>caeEb=gxAU+8dZef@K)0W5GW_#B)AgPi74)ji@*Xj z!zp+-6G{4!M^#9D?nt($U4q+h?IR}nj=I7gQ7x2VzPwUkX&&7ZFtg1=1iow26cJw_ zUUXtCJLS1;>-F_JqN`?zd{uybnl9|FHsu33?&`RCJM^60V z>&oyhL(%9HHbr93#`VuU>0MVm4WIYdXLZO5Qe^YK=)1&or}Q8prd~sB~z5T_3rM5BY;CqrRpb$zQQz z`Rxk_?S+dVTbj|cgrxUQo>*sZErx*LaxIQ8?Wp6!Ylgw0sjR!cB1<2CB+Mi?LIut& z3#-5>JLjIZd>;ZL)RSJ%1#+%2+b|4+0_=F@WSjx)p|vs{QD1YfQzlb+qUvxpR`L*@ zK6K5=due_*s36+<#ZGX0(-|HQ!+CRH!uhiriANO>1=U0Pw}<~W>-uStk3y}Zph9c8 z_^-p4f`VbvZ^wvD06xjPsFSn3hlMjg5{Vza`r7r2)qM{4r1+2~Qa5l+*^UG(P!V6@ z7h!~i(S@FWZZ&{!hR&d7zJ$(@U1QV!p_sY=jN~g;gkd2UD zSJtAHt>T#S-71^>WBUxGtnBIejn7*jXu^=M7mREXs|H?7s)!Sn_T$rKv_)Uq1ng_= z?q&1ZJLUmmj^+pcPG|4}-}GGfP(RsJlu6ojlo1KoOsE8*$~=3-ptCN@@u}qM>At-M zouUofY$;lNc%E|yc^{M7x;TH2wP1k9f8w!J$08vl`xE={Ao$&p-Z^h)Dy5hYY!zU` zCv8x;Q}c5&=med|$v_j$B0TzX9kHW(Ph^K*C58|qT;+s@7n0eK@{M5|ay^E31+&$3 zg=aK~3n{Yy@RJZBm9M=u*tQTBb93e+oz)wBQ9ciij`B6^w{`TfqWXSoBlu0ib-o$4 zE>$>7X=jc_pRBi!!QbJV+OHj$J}xPgS_=RO;mSpMYcR$Yo&AEb#935_3Dk= zSGhgS(#HlGmb8KUrv~%X8P>j)%EaC@&HF0uP((J#b5oaMDeQnPA81yXa)4)^o}QWz z-P#L6sEFqCy7;+;ft_ar-gaFcI39@N;tHSph%M*sc8D`vXOgtEF2=}K9=lH|$Mi%) zYtw$z=(0^ZU;Bky1w*y`#wD*jzg6g@_In=Th5yD}!THyI{ATjSKONT5=4gHDb;2i% zU48xG3w)q!h%BFSss~Yqr>o3$I5_BXm!j9vD95s=1HufLbLGV?3JN-%^>B0JDzqM| z(oy(XMg6vl^l^XDEhvUjA^o2A!-j5zkX(&=Oo$Ni#H6QH476l2l8;rgHd&=XAL)u^ ze%+}LkN?GF`A>}$bEUcbs|>Cbm1{HWOkgfvYR#6r#wz&uDC$*K*Mk1wE`XG>YzGtc z(-5aC&Z!~wk`_PGfo3>{nK#rAl+A1l&6P;y$%=~FHiuaQ$!evLeAR4x2%&L(Z(3Tb zq1%d6!ZLglJ84)nAv??D+5&?s(4nJBE4knU?$vmWD3>amIrjcGv{=>UP~|kI=Y7U( zRARGSO<5Xwr7N0F>V|3&bM?L}YhP?#G%loP;puN(l4Bf9}&PV;~87?aA*Gk0( zQM%!?y-a+ugHiVzIs?iQ)tC!aeD`0@oAO6BhI+as4feLIvZa^=4l>RWwZ#n(bNV4= z6_?U^?+3&Zw#d3bkuE__P`Ubrt{H`8m*G)NjDw671?v%h2XgJI*V4~Wsf|f(KyQTzmzq2 z=?*KWu+WTVL@C32*Jl5T;R%{yhUeU&<2H7TWd2+)__0vf{1~NqT(T_B?g(isigb9b zj5>x8FYtA)w+QWzVC`2jvt!a)S((TZni}!wgar@N$;OwAqL?2RnCAH#G3xWGX+E$) z#%H}41tjA@E+%a9059|N%LiB*mrsfYG1WX!y&0<*FL1LR3`&k8Als81Q#Sug&*3Vl znFP~g%`|@+3}9K_2mV2(afaQxISb1Xq?6&zb;8vl}Ewtk^;J96Yeo{izPPMQSYf6frPy?mV@7Az$ueeLj zwG4K)YG`t6uI9+{G>DE^wWb7VxS2f6-S5-GJ*D({*&a?#4C;I5o@H{`% zZyOD`8n^%kch-;)5gVV`;GRNR8#-%;@xu$x#t+26}8#aLq#sZT~` z{8eyl1pi3a9AcA8%VQ6I1l3aI!@?eaTp6;`J!2B16W(L|I{3LN+09%x;?QBwRY1+4 zsZ{aEI%I{-rm*O*eah6wueR0R0Diff^a=$TgIypvj||cTYn=z%55Zl%wOz&jfhJ$- zt3vvkABQSrq4rg_)?&Q3(s)r*JlzI#`Q~1%h%zC)6D`S$4!>0NaPyzkG`^*xX;z#C zfCIqX61?M!n|4e~*RHdMd8AUft22$lIhKHM796g6du6xQLAMGero8l@M{ZpGfPCIN zvury`YDA0@ws12CGm5$V5FnlFRv4`ibPg3)#0Z6pK~$*}f(pb)$r9!0kl0~|q8h6e z|M%P-eTxLw`gnY`v_M}5&u~5*NXpWB(%C~(>-a7ET{lauTd;t{n#a1O8s0mVT1{UA zcE#7?B)Y7>T5*-&zhx=GKl~fITxuugE70DIPL~N2az|B=+E2E{-|&5uY&PF+X2GR8 z3#CUvSC%8K_&`d4;N18l|Rz{`wzhM=lmH1V`uu z4~R74!dYz=wvYUes+(wu^d$m6Vk4E~EOSE;@`{-8npp^nd1(dT5To1{xe_4c5q~%A zle6KMG;!acM>%#R?!$pAH6@bq*B|WmTQ~&gyS)$ha{-BlXN*Gy)|auOQRqaW5s;8n z?g(TAonHktcJ)XU%g1~95e)5Zyteo#7k~WotA9Hjg@t9v-}yxn^j$lyFng%NrxQ+& zVBeb26Yq?eqVI$Oz;z_zP=vbXNB711aLI~)FUndAJQo`PRT z`=^Hf^DV)PO#ighU)=@%cY^&}Lj3mvI*0$$D*t{JiULpXZ|(ixE1$sNpL+YxXG}-_ zb}{{r%e)W!{y*>k{h-F+|4Tn(v0*ffLvL`waQKB9M=`3zFR0G-+keV;3iJQermm*1 zbpN&~TgBei#U|)ueK0-s)Ww~I0_Ci;%Gb$|z4c#KMXh3kXBj;U3?hjsYsEK7sA$k8 zR(Yrk6{GiA*#GMgnBdE*uE#DtJ>4JA@>82~{oO&#oyaK5P-RNYO*MEjp|N43dXA9ozY^u9 z%Y4gFld&2X=Z`Iy+u1(}It6;!nE93c!n_`liKRdqIWeCA)@Gx|ljj{!C^7y!2!Q16 z?PbJ`x8LW6-LTteKg3o`ed6sAx|tlnSP=~{=m)KR^sMmK9IU)o=4E;1;>DlzqX^!& zj?wrIJ2Cy3^==0U^GjKgG{vf?`T?88fD+`{m{sMcCWf#_UfZyJVBL2Rc}q;m*Zty@uNg_iXeq0 zCkUV3n{CFBt5uTMGH=y@4>|E1el&Mz$sG~vi|B@{r|vKTN$a>ZV$$Pc_Pocjx)vwh z$A%4qy8XG?VTtpuN zC^(z$MA~Ai7&mU9U3ovwqA5H%^;qUBjmVgSW9)_YRPC9!BWR@-sEj-9?grl$dlY!d zIXOEO)b|#PkURt7`!e-ziu0tkBen^+@{x%JXJ)|1BtC0%r{*1|`_Mg8z9^f?Tm7I- zF05Cl(zwBD24O+pSxYaj!ANb2ZQK(Hq7d#QCemNl;;(NXe^?{-i!VzK-m=gd*W}fg zIuqB$mvcir+PxL~%7Dem6#}J%NU$;4h1M~~?|1Sfh=N5mJJ;2n^w~23fU%UFA#9pS z;ojuL`iyh?_(Cyd@kJ4#C?Hok-o=Jf?r-JLh5BajO}~+S?JXTJ5X#c&e$+K8Kq4 zqMWsv(_pcUhLK`ViX9G4iF{cu`<+UIfQe}tqOYDX#u zeSJHK@U(=26b@etP%J@(-jbA#Y#MFM>Tp1}0i+aeac zKAEI0+I`@#N%2x@zNEh7u<2{S1D5UIkADQ)LXId39(fZ?vbX4~LX^>D)IneQ0(@JtV2>F`s5*_)bseCgt+)1zDB(2Yuw0dn3+- zs|elOc(GZYZ#Go9er&b+X|by3t+%Q%Pii~HUB$ZKUV*6yUWL|6i*ly{Drr|9)k5o| z(Di<>v(vp2vW*a0*XvCIRcAWcYdcBo$${a?J+9pI1Kt+<3Q@;!574S-c}EC&QRvn4 zZ2dAMii!9W4nr|zM+JOEV+?EE$f5L(HUo`NrRm=}9)(R5D&r;UMYDQf+3T5+(U|vf z8ETn|%P+h|f)d3AF^yuRiv>cwn9a zf0sI|s)vgF5NWag*4NJVC#ROns*3qr_wS|IuInXAAp1=0BKlVdkkhEW_7dUSt#vjV z+7Is^J7#)NA}`Nl*bbv(X7cM*zR~n;+3u!EUwl)zyBES{PzADm*3+kqq(dWccq=r) zXUW+N@synxMWNM1`9v9Ym3M0J;G{Ju-KqL>Qz3?IcFs>o82uf2P)A=IPip)L9-{C3 zZG5VceSsI3+~7L>zP^@RcZ?er!8d>e+%O4oYj z7L?Fxi5B5KT*ScCcAqf9bBAMTnD0@w+93?Do^Rls&3JAvocnII$3Cjzw{C7nAzz2` zMEbB{w>B#G%Pjj%u#Y}W*PB#WC*AvhkwHPEl@7e*FT(sJ-F@WyD5nxn>b4-}N~Pdf z(`5>V@PKXml(VY>3p-b44uPW(8&=cM!-CZOXe77uhfX%HMJIX@K$@LxWpf(L&*_(H`SIH3`+1^e1TQA1QN|A%{$a6PJDp_S3s=%`Zq5Wrs;2?J@K_~W~m zC!~!YWfmq%c`Wi2{C5>r8N^$R#zOFoVKWGrjmUCkF;i={n#bmNT7y)ddSZJ8PeX#O`;e4hKgt#oPhe z>ZjAAOB5IAX(^NF%{V%xsvgNZVF_zq^Am6^bigrx9eVP$q_)&`c8wF?m;A`$r(TBn z)=StIj9j>PqA6bYUsaH<*|k{fVty*z0qFR3KWV_)$PJ^*IKYwLVd!O$JV^<&NzCU_ z_bJC(Ok@A`ZG%-l)(3B=`i56NLr+fxa869R-P@>=D~FJLb*-c+A|HYRO@P*2i&~K) z$h~}n$%E#H7Kdeb4vg12Ed`~y$P(R_epHGk2KidHc8-~_GTUy{Pda5|U7OevFUS24 zZCp}J^NU(KmEhq(Mk^d$rvCY(O&itT;BU%l5ZV=wdZSPw>7M*Yf;wf3Z0lRM+!`pt zC}x;9cp{{H{AOnNiZhvwotNw*SW^!daaTHGkrQsp??`sv1DnthLp~WeZri&i3*sm zYP6Z%a$S%=&BI_t1s&=7BxDs>va_e3 z+JwYUU1l>;O;$CHO~Sn#^(O3$LdW&i&dX@S%8-1A!whoIM{X`7h#;x*OEJ20vwizH zcG1&cd7ockD?awYJcgK$2vJCF`y)tt=>a7%@&(33&VuKT7x7@Bnls0QXPdz9ylZP* z(Xpt^Xp`uyTb&To4(tL&B7{x6MC)JD-z)z?-X*FdIA~C%clIr8*K^Ya$YFn>eP}`{ zDmT}8&h+bS@M9_RlReaCS*Az#=u&UJ}j!f z0=B*~!jP>o8Q-!6Q`nTV+RU|srkliaxYeg?b^p-vQr;~z>0oMS!-3u|Ej<_R_nMd#W`o+z|y75_ZhEzoY+>@R)`k4Q6U;^!Qq^^uOut z3y6R*8aHA@W#CdZm~Bp5BkdQ{^-zmA8o1!B{UmX1HIEvRtyw8gjwG-@j-hj?6#xb) zz*fcm2n;$>wb3C{FtZX;;oGYNj%)?PqAyJP)SkZ%dqLS1?5(YD9*(B;ut614ZytMs zor~)I*vyJ5xSmJ`*_0_6hB|%GXf8TexDhn>N!5@Gqgt&=9mL4lIm%(#n#HgtDrvv= zX5U+`sSU$N>$G7!%)6h5?yH@@uxTae2(=0k3gnw=ve*^m9h7HczOR>jIyayYJ|zkp z+sx>gCQf&4U$7Kc&69O)pTknb;t#57YCZxz{M)BWe0_C)UbDCY_+gQ7duyA%Uy0#y zClR8o#J85ky`u+Hm=?sTzrO91V&c4E5XzEavv;O5SKHA^3+&uGlS0u4H@rMEVUW%O zox4+!M%x=A`h^Gww|M=Cm@2uCg1|Wg=SNw8+9-bmJU*XNpNAGl_~|U^HBptyeT@y? zOTB%lmfjLtEj7))%(;S$ta9OM3~O%`;EaZ3`7THk+x6T9JLy`LmewMjv*E_6Gcf5T z&{o=k9-+-k%n`S!8oy6ivE)z_l^@mvi-vzl{x{jfBD?V`nw55}^he=+V`iPiybmPN zvm&l}c-^|?Dt(gcp0n0%FUNkWs^*>Gwz>jdJ_A-Mqo77_-kx~?vt(FzwPUaRxAv3Ib*f+mnoyBz*DOOkv1^a~9C<-}di_t@ zI^Tv)3W^~9EFy{z0LeXd0sKhqI9cp?QCH_fS=2e?jZ%o-X!CB|fjp(x>d?T!xSm0F zeJ~+_wkYE`ZGf!XC!fpB_k`UBHP2q;Y4~0e z7KY0jmnXu;Z&ruF*oD>S64A3vY~71o3VZ`KOW3Zc09l?y@H4`++)f?#%P&|dtk_Eh7G4LX?Y&qhpm43fCzoTvyOswo#_jMic{Mvux9BChdLAR=>sfek+ zYU2fJdxID57&`WF%;{1zJSGr9xvSMn0Rj5SP;ArAdJ+9N89O4|gGIpv>zPqjzK1Qm?!8sUG+qB;7SV-{HtHIA?K2(eJf4)ONAM_t;mHfs zEUPW0T$ol9v8?6{7MR5md5>=L@(+sBNw7Omw@RnAN}S^UK<2tJqSzk?*nR^AReyc{ ztqcrJc`dI4<|3#=Q*)bQO4AxaLufB;M&N0*VP6l5=57D5`8tg@0dEHjvfcK;cA} zD-sgT{q$8{I>|Nj7npAN%dt2`RLmi>*>5iR3blR)tG2pU=)|H&RuRtHTZs1~t=}Pb=VHdjGBZTR3%B3#zFtGA zRX^}nmaYVfdXE(~_+45+it{Cf2cSiLy%sQomRHJJ?nU?2n7gbfFQw&qz{4L(@Xl97 z8pim$XN?3{`^{GuZv%8(tf9Bocb3*gFhN05Ny!iMpfH7?YyggY0997P9f;tQYS3d} zFsW3k@lQZDtzTSK>|jjTZQ9e#vcz47Ekj29Sqlw{sF#{>soWkvj-spxWvBeQEG4&t znCvpy>e_;2?Df{(c=e3CRMZT!=2UcBZKZ))6O|>nx>b0Z;MtWJzQ*#gGlf0hc-=g2KY24ETy0jsWnkt^1);E1sAOoF>|e*Z~rL?ylbnk zy&rZducNfIvtAzPQytm_Oh!?n`M02J>Qmh`hMEiN+XhM7lQ#)Rj=o)-R#&*>%iLfe{jc1#(p#S!Or>b`&&w%43knN5mw49&ATjp`NyoLcz*A%p zM(}A?<`i;?xgvxhpI|Z?AiGO;v0{2-TI@wf*TxTW9L{Wz_=z+X?3{@{dQOdx6)pTO zr(45yGd_NVuZR?Egg`y7jV^fEFSuI{fTW~h2^>iyI$jH%300y1!+1^yrUpzu)u#rI z?H&YI6uxPh-D{3;ymrGK9YGH?x1g-kErt%gQX`jqxV&wj{_OQl&98Xa)9jQl+h8t- zz{x@2o9QBRRnT>ya}jC}P~zVe1e5XHLS!^{cO$v4Nyvw$g!T!-v-bI)vN0@wv$n8?b}PN5a=SyO6jI9#+9q}QX_r4) zTq5ps#R!X_2j@~VNm+x8?m%Hn;w$55Nj{=^fp6$ zjoL&8kf2D@if!KyaE_m2fBsF&d7JW%nkqH9S`1>gxqH>{sc$dy@_inCVAc%fYd^Y_ zEqMi#52RCPqf5GQ=1WA*HlC$6&7v`VUV^x9T9ExoSgtYw%A}b4YqK+ihj5j0xGTol zsZ8fWtORF`2cI{;U@^rX&lJ!D6QWJUj_5Rl7ikQh5m8w6cI@Q-_zdfJ??$`w_rq^i zPZunzmBL`0ZFB8(ndO`)4I=7k)6kwcx%fQ6z892k_k_$Ou%KGeo9hzwF%PUAMum(? zJ~eU$E~5W1u(QnOZTqTv&!7f|SY)st1L%9U-uAYak@G_Z09TkDuWk`e$r|%TM_=j8 z@0-1rs%(2~OWgF&2XD@!3+oqaBVE1DNrrFE;IQ&WZS4@+yJKwhn|`|9)0dk9Szoo& zhRkBQZtT%yh=^LGc|SJa+~HG+JBZzHww5Q{-KL{~cjoqP@UrcVZj}Vel4Gw2)^`~& z&WQ0F3zC6%eA)2D@!TVPK_CjW{oKC)l0@yEa2<*BUB2sR3$apGyIPHFp4oW)bv4x& z1<5HuF|pM4)eU;Lc-4Q-JuK)i)w!SE-Cox748P*d1(o%DqnGi4OxLo{1gbO?fTFO{ zyorj8iUm=I)3sqrCyv96xC&z*oUNjhhFrpp&l})LrQ|?xi`&T|Jo~7Qn8mU|PzU1& z?15c~#E+AFo870#gw5C`cdg`YtJ93QLG=?EP^`%p=*1h(B4(ch+g*D8vkEoVnJz#q zzuAlUD^HMRmriZ`uPw;B+_)+@}Q7kj86Z^;qVGaB!b> z_5Mas>CPhgd*27vXy?hUPj8bb3po0NY<>4p0pt8S4RbK#K{2W~Xc5rE1dp z3uVIbU5_-Jfro53PPkuH_!Xh~TtFdi&Pep&UnowjXR_2h`T<>eHuCCoY|2ZW?x3e8{G+(dvA`%+%)tw4+&lTSM%}>*L)1`U1hHt*CvCfS`%bT z9gKnohzR%98MikwrO%Q%rTqG&nGPKueWE04hz;geLTBui&OYDQic70$cvJECF{Pw+ zir6UIoC!oQ4kMlY#cW*a`{zu|=x3Xgz$`E$ky%$uDAJ_Ky291o>&e^eFfCHW~w` z@!VDb3KOXMK4pKoMz?+oUFA?O$@Y=$IPsTP5jaLs183>)RT#NXYa^r~&2I8i)vbTQ z5uK4|mYFr4vBiyLQk7vrg208gCj3QI;KV|FmA@*(>aM(Mgd9>=YNmwSCHlros4t}% zYA10$;9)?#)tp_v0e8}g3GVQ>Y+F#NWksX&C+x04f#CIZ2`NO z*Y}a+9U%AyDI}!(M|bKlvw79uTcS${Zwp?+>!LhOie;y(UiAOt0{so(0-g7tx`OQJ zuTWvjlz|#0z061w)6{j7@3xKbdnfV_<~gh&s1Lnj8{deONq3|hY1)xjy)habiz!gn zFjD=^n&1OgKB>(92uvNQsyKUQ)l#@sULE`2c#Cm?>o`4Rz8W9W6S?Tt{;KrJtxO?4 z#v$Ohw=H!H&CXG;c;~RyT_I9p+B|1lqOX${sKDY)q8!zcAa&D`_-c%KJoKGXIFK7UV*V z)vRiiQ;rPCctsc>BOxrK5<5-i-{M$vNLX1M z(vR?mrk=+~`P!@o<;bB1teEC4v}V>52>4VG+bTB+Vcn8daq=??IW13sK{6R-n~}S( zxsT{?q$SsyA4^k{?|6!wxZMj>F9UOI<6;_m+$LN&pAIl- z)2`4(TN)vC!-D>nVt;kEBkwi)71IjnY@lWve7m+Bwgx<3WV8B-TN)G;bh~zWX|J@> zT4ME=oBI9n3R5(6^npc9Jlu}^A7@z!X?}At|GoZy>f^t40p39R|DJ)VK}##wpHtHU znN!oJrv;C_Y(}nbqWs%4)&EA_LKY+RI*1p292mUAIxXg^t<38Q2?-Z{hK7a|oStfH zWn_*YT$?%hq3MBPgN`7tFX*8)X&6b4n_RADOND1Kmro{kw^9>i=0YIEPo&*qj+cm} zdiurt(dnMy)XbaZ4CZyEQy-F3<-)*NQpG|)N{b4H!<#m@+OmDhOa6AH0~p|oB`7h-6!m@R^*i?>2sp=4lwWu z%xm;3rh8)2YuT^O{a+c1GP(+FE__I*F4}-nf5%b6nm;>Ir+%z-N9t8NGtpy8M0K;b(rb(#jbvoms?wSMbBYUmUwF0G@;=$h9R&Gcz&-M4E4pDM8O zbTWTnvcJpq#*ciYYkmy?#jwTcBRs96&4fp->@f8h(N<{heVB2In01BXc+9Dz#fByz z1X|zN1tYq;>4>s}+y0iGFKV!r zHn}Z?;o=L<{PUcaRS-BMc>X){&q$NPAs*Fy3fcGSl%@JqPuMmyxGuNC;qR&=R(MXi zZi;`I~h2U+)upNUfG+mKhsFt^8~M&h!Z2oItrx<7T$l>7bJ$S7TRQ z&aiB!CQghzhJF{7!-7ZdQf=`b{+Ab3d@Z~%A)k9NYY{4PK(q{cJBlSu`H z77XS=bGtB62X4J>?7fzM=To}-jz_K+Gaw%Wi{KMfjnHKM`Q=2%P7xr-``4bHZU&!xFe1gKq+2jF9 zp`Kj?POKW-0DTMvZS%rO5h>*eqF=l_vk_rHCznDtrJPi<_;_M<)&eK9!tK|u^0Gg! zU3^4Bv=;voJkzfK8Ve40H(l*X7yAxGwt3s|%(vuO!pi|J>8xO5*mlM#`gd+Iy&ZOA zzvsSwoFrsmMthl?x2OjjEvN94&1sK~g6m02tqj6kSC`O}%|C4X&k;5;8AEQt+h?o~ zt7S*=84*3Tb7+nPJrFj(HWMMzoYFu@=ip2aPF5bSL0Kl(hVZc0LM|L)T_7M^ie#KN zAj$#eqF-(p#exn8whe*?WzzuPy@Hktlc?2R?V9$&UkpSZjx(uzP3IG}=4)uwWM1^w zlyIhNWXOmT=pyQcIMqgQXq<`D5gZM9=4>IEc;SY=SSC7KgIdY4D(DhbiAP_5x}vz4 zd306U4!cqLgLT&AeO^`lofziBD>Js2yNi&CLWPQ=9Ynw@2>ZZd%iP98`JJ)YHA-6G zZ$iH{e+6hF^!Ys~Ztqo`U(V5mJ-sbOGrm4OEs%kuH@jb>-&m%d({%(d?Cs&rHc(4$ zlBqG!4qCKbnUcWeI0^SAmw)^RiyEJ@{!Nn;_j1!Fjl@2}J~&_&v?*9q&(KJz0{^ z_D+D#o~`w{qM}!a}=Y>#W3E z9netCI4F4&sM>==Z2-)$IjM#50X- z#Dl_y$jxTyoUzE7>_!L3-V9g7RiMjG_RGC|Bk0kJD=M$YZ}+U?_8>UKYgfl>}O zt86ekU1FwLo+|^=aO~(M-Ma9twG1zi-#rch&$$gLVI>wU z6}=ij>~R>DF87Ut&kUgDJ_17R7YJF|M-CJbFfTS}Lqc=)?$(mJosg$=;?HITK6Mp; zz9=$-nEe?eYmgc(N?VgX+TGV{=9-;v1z}Hmr~R$JbH_bu&nm@{a6GVL(oqF?G2{i6 zvyi=iTp8hMhM0QQbVPrxQG8g^0l72s2mP7P9BrunFY3^ybDNuz95%X_L|X^uB<1C%9nuS$*)=-Y8yuOVET&`h{H&bme<~ zNDS!+3sna=_wgpqCDegbEqW^4gV{@pNOJsqx9pK(1&0{9znqN(W;nXzAfAv>`ILC& zk-%~21t(|*dO|24T?4RXW_$XfOfM#>(u%ZMuxAi+2WE~9CaKbkSTOLK37q;3QM<8| zlo8%w6O9pIojc&9mqyfRGaqu$q>r52mOdO=kbT*VpqGI#digSK`Vp&~UD*3e0=?tZ z;fJ$|E#alwbkZlhPQdi`M~`g4an;vRcWHNZe=q8t2Y2`o;eDca@fO6W0yHxZ&`x?8 zg$`w({poa}p2d7DVUt1xB=DGwPHpd54;ximy?d$sGiF-?J>#C4!0*4oZ*c20>E{ez zbHd-S5ebIU@WqWLlxn{=y?A5-2aOR2xt)Ak-aT3P%{6KZH|Y6y!^X|xY|q6mg{eKj zX@krCKN9Ke)SF-O>6P&_@?dSz;7_w3Xia=uCeT@@V)RbjIhf=pwCQ=RQ-=4 zT2&gET}Vg7;P!hL{c-hci-D-FJUo_Pus=(olbQ$#6Rd3uH~M%DX3$v^ZQZ?!(fieQ z*D?Lh!TFDvJhM|E3zQ9Vg~0t4sc*kV0ca9Jp|z$Fby4+hoqA1bRwZ+0l@PzN!)8>{ zzpRqu+QDBaDj8Z*EfnQ#uRNN*t_&b_1M^#6wn5xkbZ{AqdJd!VFQ3&}tSTGEtfJCX z)+}%~s4-o)QzKQUz1H&-`_mrtn+8WB%m9gt7@*CF{5|Md4x4{+>bgO^uNpuk(4bEH z+-vWR4RGKU$@5+1`;Kp>PdnFM;rw2hWnyma-qPH@GTMafW1}2buAgy;g@)JY#)m<#?HmJC%I^;W3$A*qT`jgZCozqwt9_ zbjNXzd9j?QN1^yAL428t9@}m#8-p~8{uUd1eU{z9X{Pd?rmb(btr00{X-`kw$L*k= zH`L?=xxA+DdZK4l(R7qE=tHLa69*rGOA~v4PlebnzD?)Az#}7*^!w%YONOZr3 z3^T(-Tp&X8V;~&|647iY2e4qP4%eqawJ3zh)ygCvQArbM<50L3YED5 z(JH1_IZD^@u@ms9TC%~c7E=w@e}Zh+-e~(u`r&y{?iz2Cv6A^$mPFHimW{S=S6Seu zfRMamM3@Aga8vE5obbobd}}FE;_CUlYrnG@t)00L`BKz$#TGiC(0A5mE^sE7c!;;C z5bhI^FD5uW^r#7`{U6M|WmJ@b+pjC4pfm!4Fth^FD4j|RQc}{=E!`#3Ez&LBAl-v7 zz|iB+-Q7J5c^=gN`|f@A*=L=z&X>anJ`Kxpo>@=a_w~De69wDCjzpsC52W8-VjJxT zs}9N*9D*XkfKU@3Lrf*c>5K^ZaQCm8^hP#HbV@M>jSwdE<)04P1&eN$3BJHi(Td`X zIRu)Iu237&K*nM!Eh0Lc=$10goZD7#(Nc>HXioQAk^{}ysW+ESm{TIxGCIY}b zQw8CSZo#H}*?$eNYCirzrIMPFlKOypfjKKI@n4pb= zgkz}wc8i-}^jO()4tif@KSHWPC_~uIg=ui*9g&s%Ec?Q$T%x-b?bX_Y(703O79Lst zwa5)JZoO)jZN7GxYud~oLD2LQ^i!YF?s=B>?W<#kVRSnkP|bAVhq3^}zM)t(l-`JC znf6Rs7kFhq{GH1PnaeDCJDWSNV^t~R$fqN~%?v*KX|Ag0O&6-x4+)a}u4v}^3xCc~ zugYcvPKS>|Df05$;6!N7izX%OipE#ys_1nzKJPqJ&J~Bp_6M^jtV}EiMhTmJ641OG zIXw2MEL~nbH7~y;V-F{s$|V>9y?5B74A#s`={T@&;OKJMGAId-VTrnUK#&FQIvR+R zuI1d+xgodGO$=YnkhM#zL#GQdv3x1wf^iJ>iU3H1fTg2o&npwCgdy+dg724*|1uDv zaU58x&K)EnLFw$w(Iht)HXNJd_y;X|2qL0+igx;x4;r&l;*$8vi%hD|RwyGRqDLD_ zFut|wV&wmo!)iJHbrUV(n5v({!r<7uo8$rC^km-}0vpzlS7gfNI7H9v&e<)BR~M;c zZbPlaRtbMk+TdA8yyVb7h$+TIOt|m88E7hwwwEvJI;MOeBEZBs;x&s9O@8|+ z=M7>a)l=h(uvF7L9#TDb7c$A;hXntD*l;Ikx#m_bY!5K~qedP0D6j8_ADU>aMK>~a zm*vs2s8M#k$Q)WBwn3?!3nAXUusm@R(PyMkUH?T0Xqu{YR6UHil|bCM=0xff zq(l;c_6P>f@(g&=Z_lYJdwVnCu~a-B0&~(rzAA?YI-6VLu1spxN+C2c+u#S#xtHz6 za7!7F4`DeNLZ&C5E4Hh+<>t(pJu~mc>wZX>?~xi~fxnfiKf(LYG>1FbSFhN<6BYNg z(=V`-Y_@S@|NC_?Wtpe1!zQuarBp>|u=E{PWmq%#hpLhaxT7j#i_T`QfEun>d{614 zbYG!K4EjFO5untyq+QI%O&P(+CJIxeYdkCHQD|36LD5G!vd>vx+6h7LzfZnT?QOvk zFaM4XTvpZi^IiaSP?j=TvDREFK+UKgOUYkdXeCJa`>ZoQ+@m390IU}!rFHK6e z9GMI&LgyUmZ*c0scC5V@D;=cz4Q{SjD|GSmh`Ps>WdB;oCwr|vSIlP zUo<-BXIF75zk@4C91A&<)+-Lmo~IUoTPk_MMk#%B^2z zltEBaDj@n{9freJ8K{r-TRWfW3?*Z-CO)ugW-4M$uVAzF6hY4&ItWBuj*xqrdDl~G zj;+2|S*IFisfD!VJ$bCa23Jw>^qC{+)pSCw!y0}0C9Dpa8t(U7M?^hysjD+ky+R}2 zZ(DY45z=;SYi2`-kxL~Fn{?rAR|B3`u4NZB)lXNO%+Gb*g@sUAu$8wSQ}U72(vwJ_ zfO%99NyQzx1X>bJH>5tZsC&3FX}q@V*$RV!>^ys`&MK z$>GIaTzLAI1Y6n^g$Q<|hYZ@FC@V~q2!5N4&#YA@pQ^GZ2?mGAmr};%L)CQNiCt#a9oeA%#l%8%$T0 z^2Ru!s+ufo@m~h&57nMFE*h3jg_gh0Wgi=2&z*~QmFDl1Fhxw`hu6MJ8TTU5&K>tu z&1|9X;oNX>{M;r&V=&(lqB8t@20n}Hx7PLPV$tZmoXnfw$?iCtGQ0k$CIE(aGOS#2 zU24kiAnNk~n4*r4TOD!_9{-0dl=B0yrsLs(S2O%BXt(Y*1d&%dMY?t;UEkKd+Xy5b zVXxCD``QKwbirO*+Ktl~UL`$uY9iL8K>;;~$9knUT^6z0&S8uQ=hPqX=E%KIp z=#-akS2J`E>t^rCT|!K}Byk}EJ;yTs-v&Vw?KqozCx7R8j;SuOkOU0+J3rry0H3RF zfkaR!Gs>K5SrzxN}vTT zlHvs(K7M@gnyf2!Dx=Wnai_|BB#{4N_*F3g_*Tq4ej_-lUT_nyF7^F;=LO~fw6pwK zuRCGw)b0&5P-PRC!>&C4EVC%BDw(QJ!Pk@!qDF819dJkeF$(1_{>Lap;9&RlP)hB` zkkN_g>a`+i*1^r)C5$ysO#jBV=Ed5yB@U7yCf#STZ8IKL9+5ky?Z+n~ecb0Hk>HMd zJ@w%G^0!K1x#TGLA7PNSEXKE(WJ4^Uw993DuQw#1hkBH7HSL}WDoyLuNhhCSBkz9k znOM5w9V;j(l|K)1t43I-dsJAul`2F|iG$NwtG*QdU0-c-a|E5bZ~X0)j)jXLyHhad znmw=re=iV#v`L`hlP&por|KB)6!l_`8Grrs+Ui zOITNF+m>$Cgw5W%H&E4((ixYPYm4yL>AY!ESU}-{tHrL@Mf_-@b7Qj40yI+{*t}_M z17#aG?4JGWhB;?|Iny&2H+R)LK4f4wv+>`za)Y(~S9!$t2#hSSJ(e=eZaK@004`K~ z(9Bt`%Ql}!iD3hfwnQ_kj$gK#qwMT8K=Q3_y+(W0DDdsYMV3Z6nkP|$b8^+bMX9g9 zp>e4ZF7$SiWtDCaefh#KCZ%vLNJJIz@>X;X2mbjTU7Ta2?KcelodolvD{?PXcoiI~ z$Jg~DtMC8-Lp7heO3|3D@}5{lHZ*+Id4EGy$oTr@ZuKW7@E|7zCi?!(M#!7w01h-nr`#UVu;v1PN)qw(TWBxxh?B*y2Ozm z-b`w`HwlLM>08?Aw_||zDZhr0cc2!{;_&sN&3PNow<@1vGcwhk?h^Hl3Aa&x ztW#og38k%cO?{a#>6XyxK-BeMumTI=?!`-iGq&a52|D)=9J8Z*o*Y%?;*HWz*stcf zJh;Dev?&Z{25(TEniH_j2xj@UdqtoHDf^o0sS6FdMYG(p! zWo9b!P={?R^lOK)}^3`2(;J9w$b`|WKFMJwgyqnWg{g_S8xROk(k z)>uHW)L%$wLl^q19Qz__uVn#w#q58}kCh&Xf6BTv!x0%FE*^SEJjq~~{|9)A^3U!( z=)+B;@Ar3^kqi&1BjUsk&^uu${8~(kY$B#sAXTff=$V#=y~cs8Z@k8#9h>0E$WZ37 z;YAOQ>=(eAJ0#<<53VTsNn^+}_&hX{nTtZtL>fX?1oKkAf3=n&~J7JnpG5UElXlq>A(@MC-a~_7BctInz;v` z^Ku;Eh_63WI*3yEHEg3XXEJ$dLcO)m(`H&y@wH#S>x2KUW^mhFBdvxSjgH4tmX6?< z-cyo4G+L>445I?Ca4Vi4j!iqs=8QTZEb1F-;7O=QZwS;210KitW=KfmuQ1)ttg;`D zY&R;@*v}d=4W@o;cXk?V64?{~ZBTVwmTD6POg)d1&CPB*1rD=@@5gQ%ca)uy{B)&D z6)PR!DQKo2&WSwd1k##W>E%3XvDWcPZdco?YL zKtK;;*AFh(dCUi8ilP8*QHj$I1y+*ZxOmFnE5M%he-=0Y7nGN-2v+d3hkbr_d_N5H zFD>S)ThgLl3pmr>hHel9KHL@_Nd1d@iFB#x2?;vZ_54|GYo)&nn<~pZ5cv5a*%VeF zsT@Ii9ifgc#oOzGehe(JvvNZQMr3G*7jkK6aW1o%`!9(=em`5o{Sx$>;<|P3#6%c? z8fyPdWo1+r?Z`|~$7%6+jRTaA*98hJViu`d4po^h6AN~-?FvL*&qb4@vQwh$WtFQd zM_5FZZBBIV)SCf2ahIy-80L!_alo(v&TRj^Hc~7FKWAqo1zd8y&y$Ugg@?x~x}aTGv_q0aA`J zRB}MouwnaUj#(~Onw!Gz^_4f_RTTm|W?P1B|B5gaIlNYX1qBmh9h*RII7$IsSwvnmTzkF#=T5sGyj7a#$mJZsQR$2Rc-0d@_=T_ zh-?9S3n3l|^40ajPiaS2!+O;RS40*IhP;Ti>0%DqndjrT4qPAX<;tJ$dcPZ2&{+En zx>`k>Uhg8^oY^2&ZgglZ7Y4GR*2z7J3H%Sc=d}>uehh3%VFoo0ZqJ!atUMvp&yevh|3>`h==T1c&^t3ZO3z`Y<9x`A7_ZmGt2OrCi!=P- zeER)tg2Ky~;_N!Vl!JAY-JJWZB_mLDmH(BM44;UxTd$qU*(GFhX-2zQ7s@9i-n$0j z&DM@lFH^H9hV>U;s*GB6YUxIvA@>N@!CAoZQWIpA5lbzys2q-dfh{&odgT2q^ua39 z69^@_xdDkKU26KW%jR&%Y15vZ?s0s1W@WJkZx!FuY0)+6eQ73tvmSaoO|Q9z#_`-- zhw@VAeu7IrSN_3frg62}tiQIW*f77M|JFS@HAYCpAPg5T^=J`O*4D-uzH8i}4h|Kj zyXYG{dw{}=QNnJUsJBM%ug)pL9?oU9i)8zI{VkAN_?AAxY9|fL>jcD34c%g7+r>*-4oG5sN#J~!w^nTQ zA7n1)?$#LqrZV50H$Q!#<5gMoWU@(pJb6A6@V6YAt;m2h@k7xiD3kYX&4!=C{~~)? zf31Wx7N$Tc#TpmZDVG{T)s#~5;_@!Im~ig2!wQ-zZf?D%#ir~C?}A~Ax#>z>G{HY6 zvtIn$cf$S}hIXZZB{=2L`9W0KMj$B zSFMQhP@;cZt-o3*xv*b9451uCI(7YXM1J`}j;{l~fPuQ(Yf=ehmV&q=@epvmLFi?4 zq5F70%WgL@9F@ZQ7ZmO${9{G3fTS*L>^y?9HcF^@aS^<0O^HY~s`whb!CG~K%-rB{ zWk8F31S!y9Gu*t)KWuRg|9g&;{%cH{`XB90f~4yIo%qJj^i#N%x@DOX-|hOjfVbP) zK-?;^SYtWG&83Zti@V#py1H7>=%qDH_ZKz0`<<1iuBnZs?&9LO@%wFwxuDwrpA}1g zKZm>D|1V&>zbC5yPr|8}{A_dnFYidMVk5wck3%uHg!1nr%;GNlfB2#2(Vck;>ZVdY zAcjjA^WO-+#ORzF#CXqt2x_jj9z{qaud8@3b2rAG+}#^w<^xKHzioHZ)LCnsmO^BTzS2`zCt+!Krs00_mku>`UIPY(5bUeEB=$1z5vCt(OaQ;Z3S|*SFl-`jj zNW1`F9iuQ$TpR;O9|8LY!C4pW>G(ha(X}MUpuUDcwH;Okf z4OD80IC%}M;3Ma}H&~|-$w!o&S-Hx}P6&T5C*)dQ51X;sXZ5hBH7~}Q~3zbhXE4Kp~GyFN0wuzN4kK%n0=X83EU zn_sujM1JLmH0Np2v4gEn^}aB@?Q))(#jLnnx*1~;my1hxoH|XEnJs$UP|t1U7Cqd8 zG}BVl?y$Hpug@2}q;z>gvF%&$Z)yvW|K!voj)?@n9#g9G@Ett*f#{!?OE1N#AumImPV)<=^Mk^qW;-BCC;|8iJQamg*W9+p_ z2^{)+)3d7r|2i1uPksIThSJ{^danJu&!lesS}a`=(#;m<~tC1S@FH9Rh^D=g~G zW&f6(;)hIWaJhH&Rbu*krx?60%#1*(FGM@^XN&-c5dVGD`A7e>j6;<0qGEI2!^AE^oryBF+MC zq)KFAXi8kx=)JbNkFTbhovVfU_1|4FfNsSY+EHg0ha|uozIH($dL;yaOMDgE!{%)r^(0 zQP6QM<f#eKh`Y0zbrP8AvPjM4tx3BiH&r-|G^ukEv_HXw1# zKIy-P!&w*G`5bHe!Te*|3Ku_QSjT%aAmXuX`v9@UpvG`lb*J@3+qglS(R!rqp|1l# z+w%QS(x~YxKMpRgMz45cJ_qYBD@&B(vc>|{f91Z7#Ow!Eo5GHypg?+`OUCqPbHsy7 zX0xpFotv0+%YB^b>+Dxc#1|R{-oLnFZoj<9I@_m_$-R#M_CfL zaKr_#R^HH}PTaD@TDz+a``@dhI8^e;YRf@ZSX5lO(%vp2>7-Zq>B*iL*>S6d`2WJ! zkc^i)_{|IN0E+6e{jgZ=DpFWYY2Hh*pYjm$lA4$Tti>GHQrW z>ZBf_nU?rSv$p9&NZ+?Yb(+gvH)+jEB0$R?*AT8;f8)$N*!;wj--U6~L|5nYlf0RZ z2o-oUQxY~2GF#i-nT!WaFmQ1Iv>K)(Ua71R(Pu~&ohydue7!X2k#>PA-F)sAh(PKm zeN1P_NF=q=vBw~o8;on8Dti>^`5<0059bC#^?(fH9#eGVp<(mMAi4Ha%M(`0hOg@h zIn?SRXZ10}bS$+(SUrDTQj}*erv(o===`5A2N1pBji*-Q0Wj;l%#*02igT24k$=2( zmWRs!;*!e0GPUe^X0#(G8d8tBFKAAY{_IEjZMRfc(X81<>3k%FmVm^&u^~YdDaM15S^0l4dM=#540N^qGu|&7^j#>*lpQ*auET2 z8MaT%%R9!4`Zp*xVVp&KPA)AO95vPGAB!l)=al6!GF3GZJnNq; z5~d1={7^7tf75cS`8^O<1ksTbEIcJu1heiOBwnhqCYbZx5OjZV^%Zqt5=tR|i6rwPSEhI-8WvS#Otg`sFod>;^+Eh00qb08K^dIK3 zZG(1SkDNJ;iC~G8oNyy(?{hCWbd;<2m{qwP`Ojr_RtYZW0?vslDi94fp$+f&lc^Yz za{2(rNUQI#;<(*pheUk8wpPw*g;RIN)=1e5`lXZGJ;@rOau^+0a&^4$5aiyDT%BL2 zc$`;$og7Nm4dV@e%{?!BAK%tW2o3RMwmARiYfp_~mAz7#Usi{twRwZvzr%Zw-X)Nd93I} zX9bu9G$LmlQt(c9J2g?1i(P36&0|i8$GAXPe7?6&g%;K)lAb)61<3paAK@<#o2tp1 z1|lfKUR=y;ywEd*53l39eqzicouib`-tP#@Ql9?n+j=x<5o-HM|5fa*Mh%rdjV|tp zk4y!qr%$+DHYBTflxW|JUyYAAD8pb2GdG%FypDRZ(`f-rS)YDX-74Z2VYHHBir8gW zGhY&}_@pRBAG^GQ%DKCO5KlWqo`3 z^rAL{)Z1#x7H3uF@E`G}e%XXCFW7*6B7SR31|42Hju!+Gx)*>>#;+Jx-KT5t2G4f# zEp|NpJsXF&!2G;?j6VLG5U^SfNcr|U=wQhJ^RiG^;dA;y3OnU6Vz+}zK=*jSEy7~G z77HLip@3*py+-d6r`OqQ1o7QJ;sAq)$?{MPs9{-zdbmUmuL0A$+j@4hqb+;l63q1M zJM@$Ffc%8<=HdtEilJrWiQgf_F>bY+U?A_ehdh-ox96MOCxu#rhEW@n`Aq4jJZdB6 zmEhXDEaF}(Lz)QjgK*B?47BRn5AJZ$;MNBq}w5_;ml*9xsWB{O+44 zN^*o}g=f9PpxC&~NXVN%_l=GUhX37>NEKB(?wGp3q0cM0KYY5k;uHSb{G!4Ecv^SR zm-o4H%K416okbXw${%jG1wyUV5uns6Lxg20D z!NrR)_wWp&d+JE}N^g%|gZ50atF=4#2)}4+uqsI_FP5&!OWlZxyxK~bkseENgR1_y zJH+5D{-w?E&0SV;dAX12}Q*L(yt;X3VcK=ko*rj<_VfeNK^!u{cd;J53lkAo8l%$nzjRL33X z9ab%Jdumodc)o}G9l^&YkW?p<)>lJ#8(YuH@@tQZCxNDj>8CW^>W$Imh2qh?CUnq| z9s*R|8-lM}7#=L_sV>ImBV1d*Dc{;Dk^GizL}S*;-a~n$)!f_b#vhWBn^ky(@uhXt z_GkKvrM6~2E5aQKZ$D#ZH4({a6irVmsWoZXQ>`F~X!S5@p;p8AQ@!|6tmqQ&>l+AO zlsh^8!H)qwaTe2YViKZCRIyQsGScCTzq+)#Mi}sxz}3uqP7xux+-}@Y^MJp>lCs`(ObN&bb(1N;$6n zbWYOb!|YpwmMg?#JBnCi3!JjhQOzShBd34F2%t9La>YXP2ovBLMe;fvh`xRpChmyX z!f1Wmm3glmH1ow86~HjRRbr(E8D`A0t3h~A+rB*0&oXT5ljU%)&gbYT{7Yi~wo%Y{ zlGjPId3?XHz3cCyRV~aLumKI(I*y|UCzEy0;fGlR*4C7XyhbZBl2Cs;_(YX6(}&0$ zEl_*?PTXc-IS;cGTZoiu?@hAE=h{?l7Vt>X{S~ixV^?oov8P+4bC`z?UKJ|dPwht< zN_w|(&@6f}6cdvIV+Y87(p&I9iCt&eht)y>4}2tZ>@)6_N97etd2s<_yq9hB>ZvSp zD1!y-7C$HU>PLB#bP7G*uY!V6!mJ;Nh}?V`YGzKIZXycORjtPv%}UL%?t2og zOasY4mNm z(ZN*fI%xCp4GY%gUeBiotVTrHiBSw>KF7{rd;f$SGkLku2H)i#CIPyccL_|~c^5X) z`rz4m57R)WK=EqFlssf6_h%X5JSCnSrf4?mp+-By`&f}jKkOae)|+w9u*Ayd_hlz6 zVt1R#k0Hgv70;#_sEy5AI9>pNd=l_*#3I~v=kIuXqy8v#p zzcU0V@-d{|ity5Vf#yyZ^Raj$NM9l>Vw*r#;JROCa^HeE83rV_pQ<&*B|? zebi;)hVPYwEWwCkdvh@biTA6#datq@EH$__TPk2QFJNB({If0p`NLmQ*s^QbU+d~K zlWrRl^$s*2Vj&gBt<)dDF?vTp&VnE@oxC)zvbj7{=x{r+-8G%Yqj_XBdX8zhGt}S;4K+uV-nbybJ|~+;_0}0qoAGI%Y2pG zuum;3Hop)2O3_ao(m7MSjDm(n4 z-0^&%2-C@G9tXQwvKZLG+8u3a>X*mcM|h{bY!Pw0%#6xKL|@HH`#99S3n=XU$Jd3? z6W~<~K8fUJd^U}y;M&0^@l9VO4l#9y-)qHu=jwBs|FHK-Zpy-H5FBhTN7UO_X}i!N z)BO9(*SfPzf~7SP3lcSDhds`_+HZG^ef@L7uM#M)DLPFrfv(suDx>+$-L(|WH2m>| ziyoU?D?_*It}T({?|+pyFIsx2<1H}mLZZ^}8hn_A!+g+`gIt$TOslAM()brq^z`2A zT!9Anj)3j*;J*kmKX8a45Pg!3+t=`hudhA8is-=1)8bpZU$J!{A(8RWx#Qrh{>!sN ziX~I5HJMk3rvgp^6b~5$opp3fCV5(cYVfs)ip3+7VSq1YMQ9{STx9S z*P>}v!{87V5z3x+*P}_~*4x07lK#_J#b~LcuVM_ME1}WlGPK-#IV=t5OaKMNP8J_- zt|ur`>##BY4PgoAQSwG|Jmvr>Oxfw!#5fYZ4w6U}qYm2KNW>IytD&Xxcr4Wi6BYLc z2Q}sb4^>VT0TPD=S zcn3M!VT=u{c|&}X{vug3ZX%Xi2c&ahu;+1ILG|Y3MGMrO>htYKkS7vfP!XE%>`D0> zHlKgs-C<;=Bq#CG-XRV#HbX<0(qgM~Kagf`UpMa<>#r3~DH}M)nd0fnz z`_SpEDUwW1BO;HOop4q!%-3f|67w?Yi&TzfXVD57`&g-q1aZpzFcHpBfTAiL_9esS zq*Q28xmS=VyqfiKoc)+}CMkRrHtdS6M)*T9Ev14bc@>=p5~;S-CBlN+WFbmn|8#ay z-+p<%lCD)!7Q;#n!}8_$0bs8$e>e`#G7sUmTD_W_;IZS1OzUoQ+JrpN#ECq31PbCf zd`vNsd4MzBP^Dhx{Ycmha&8Se^3)Fp30r~wh8 zALPq3FfZ7Wc@4+Tk9u2qt`4U}=u3VU#;3z7$|LRQ&=H;wKj~rT9AfztQA?*fu*LQs zQ(MnlTVppgQw5PA*bQE&?J*z9t}~#XR4|kqp*Z=UOz!z}=jg9;F%;-;=@0119NPXJ zz-!JJ)17xk}wMCPSCi79o6$!W62mI~!h4Q-F7-ocCduxGx1u6J>+@ic7MiMxFp z%2}P$J4ug6U0w*E5KF`X-p!q^G;Ob6OIYmN?e;A(MdWK0Esj4= zM{|mrcO-vYjPLjX36q1={m5d;ALX1u>8tEa_Yq{hsb5IP-(dQx?BOul^2aL6Jn8=J)K0S9#2wZXOK#c)Z&M`n?>x4tmR6Cc2Cc-f2>Nz26YLM95 z;R=UqeWP{NWNQfiY>+t3(wp~WkFRMsTyr;@y*4Yj0~@%^(znx-HKj^Cb~#R-W;W9a zptgpL)};7b@^qLNU)*10iWtyJMdC82I%8nEeDruY+rCPkWo}CrrYr1gh&-C0!LhY> z2r4hnudD}pY;HI2*VrEjR_5@~50vtEJ#SF;M=eGy7fupa@QIbgXbamvgta0S3XduX z?n9dYL;jG4`Rd6YfdYM_w)baZ7u(^mxZ52%8Vl>8pYcV>d1a)sVuLG_69^#i!K|`U ze}?hv%QIjg7KBH^LpjLu>NU`@gs@1w9RznP+ z00|1Xs`$1!%;lb=opV-aL1sRu%5v#S;Rsudj`nL3rQx({2Eh$4q#-@&P@es;+Q;;~ zGxW(A=sXJlISz$`nVi#)HXAG<%$Ts6v8CD3NQ|jk+lVz_H#=o6i&9kALF2XLYL)Ud zOyPAb*j0SBpkgxm)_slPRtUc))Ek<7hOvZnHxNuNg zpAM4?D}TjyFpaxDzIWrK1n5IGliqoK5p(GGQT-A+VFnsiUs;)Z6X&M%RZRT^^fct< z8SVGk;}3GWaIn8?%C+)Q}Mj*ZJrsU$i}a^i|3pVyC=z_gp`I^RNTmG4GX{~ zOG1)hl7xO*?J_3p^_;@zUjw!>3qmG2p%&k+`)abQ62l6KY#4w8XbJRx0oI?wV z$v!c-jt_Cu8rq<>hS9ujRcKzl6omYBe=jH8XV8XSxh);+LTsGw^5axZk*h&|MZ|4JC}Bp;k_q8 zkO?$v!*zLY$61$)0A)=KliyLog;FWtd5~c8{Z!qid#224h(e&EjB{TZfT{__CmY_E z2zBX71URnp^+8N(If%<;AtFzyyix!p2kSRP*gJ!6mZtdcB;SjbL?v36)TFU_(edWAT-0D`KcBp>GG%OmBD(26nnQ& zkhbMMAtl~GSN#VRx06p$ekiXM+FbM_&1Zq>7a|j!eCN=<3g`Z5dds`BbChyIWGyig z*A*ST3Ysf&<3dQK-Wbd^e?`DnQcnB)_)PN4Niz7VybBGH_Vf7&Z>z4Iv+!AP?al<3 zxzwyS9#wK}{|>d6;~~&0_aEgcX%HZLf(w=3Q)ivSvz92o_dq$)4(_Cla6 zfWLwF-9Dw9BG*To^o<5?j2pV+vzCx6G{HJx_^A~y5P#xBZc2ZJZwm4D!!8>$k$a&m zAwAGSJN4zSY;(V^kRyub*MR|JTax%Pf~RBV+!Sw4){#^FU{NzBS%Lz) zv&>bc{7<6iWXorNlKgA2R=Nggf|tZG2R%g}JM-LXdK9i8>L0nwIlQ8HuX(~=pz#J{qwZo zZ;+^=_eRa1jY+yUoE|BBL~k9Z`Rx|W>6p_mfL9jAvvgbMLT{@!c6#%xm7p?$IXj%{ zI|Ifn)04b$&UctBv_vlDd28Qg%3G29jS}OWyK5hw`Xn5c&xvj?eK&8I{+jhY@yD~A z#}-zimHk)(y!}fXLZ)jxwk9M&`gVb@!Sm(g$I1KqE`dSosq1`Fdg~Ab0(2N~8a3YU z#qu<#Q6owr6uHfxK@*AtW|y4tlyS5;32+TsG!?&{hIWAyazb)E;A3Iz{G1;{-87j8 z_{!wPqN4P(TN5QUyt0SK!DJa8&f2NAy+6$Q(i2|TtUs_1@PPjGfJN;!l+UB&ceLJI zWb&R$K_zaVg0)pw`MeU6)^9o~Q}K1QDhIV3*5*OObgLlCGg7Y&Fv(d9Hq0fhf7{*h ztl6}zRDey!A;RbkdBMa7y(ou5yQg6v=k3OB!<@!1$Ir?zn-~*1L%A=Ad6>MYn zo?GNkAnUi6{e#LwyrI~@AA@YAPZ|%J>=qz~hWo=q+Nh1%^rArkP*4H)N!j1_}J__}cvVvCo3-TmYBkbhzmS0kDh zqk}GZWWnv4mCpP3x}mHm$+%ZBQagO26dtGioAzwl;g<766zLCfqEzVgTRsXx?|LTZxkmZg{nquW-+P4NNA& zoSjYgd_{xfbp+{#kIat9-ql3Y;r9qGRi!v^&$dcE*fLkm*u-bPcW2*k?|O7$zf4(K zw+38QAeN8Kf63hlljQfZ(N1+83Y=9x^-%~KOslMuDXKY-UgWsxZR9T=PgCgVzF-Y( zXbrQ2TJ`co<#+h9mF&A(Ht*9#F}1`uKvjxOG)freIkt|WU6-2c{bbAj@Y6K4fz-a7 zwqq?Ju5=RTp1`z3^oU5dIeV28OGgR|u_n4fSm+DOtO8fs@=3dKXvMfE-H=abvWjvN zpU9?Yfkq3%Q3GYn;nnK=M?vw)Ag4QE#(4o zaeYgpTKiG**;_ET;r*7kQF8qtJ<{rvWD8r}6gLGQmSYb&r>WIusVY*C%j?Ta_A)ry zxb_F-20ArnZBnAiW911Z=dEED{?$DXwG3mN>ceYZ2X|v^rp;-^5f}RXDq6e#OErtw0_eKha}kVRGeD0apNjsvkVQ& zcBgqpFi0WY(Glx?w$mI~o7A&f`*xzo?x+zKl#p$wK96=m3~fPxo}zQ@g_e{= z_U^dt&uoCdBq1(W$b2aCZ(m`j99-*Bw%(9b@*ADOJ1*(TR^o(i*Ll~kh7!|Fk{#yK zq}CiCnv8Z7ea}^Duld?oRx_9s1^tV-GVAFpu&>7R3I=3UD(t{>*I{tQC zxT*6CYGf$wUNf8g`KiQ!V~ku#5>%UrKv%PR5ji+Hk2bFA;47;PYrPT7)vq;NTje0` zs5SwM+Yq%jKc{GP7G*ZOYF}%XA_KX6I7ZoCt{vl=%5iF)5#xTb0*^$)o!O5mC?l)Mh8;S3Z3Q zCQKpfp+iFFR6m&1arL?Cs%4g=`>Ze&n~cc8r?n8#s7aVRFGx*s{>!i|ln65)THM+w zlun*P7c;XjqvZ(uW#Y(U(Ohk?RuA?TojHa)=5Sa{4%89dOw7C9nIdu7c*r4goT?tr zg`uf6%m!?>6k7Ro`@!A~>kQNHYCM(tJumiLHxdb!0yqe0)|jp7#0z;C-1lbd-m0tB zF29=Qs{d@cq}ja%M%dZS*d&7!bkkl|EX*h`gB@(5h;@^n<@UY4v>>!Hf+45AyKx|L zA9E~TCT(w>M>z70irj7{ZF8>ITd1*xHB7F1w-<6;-|RRcwM(>h5g$_;Zl@Bzxn&4C zLUR(6=G3u`U>avaTudGV^UrWSjg6YGiccocgjXy%J(%VE3C7aau}L{)j$oZv&}?1RuXIkpG~NkI_t^-fJgCm=akYR;H zlJ)tFH695$IhA;I@yQt^2lDWp-DCr9hc2ydWS@6U;r@@%^EM5i@a*zb!sUF{5Y<)e zTTf$T(fRtw_|g~?Ww-*l2-DuvGn9MxteoOcp0jBTIc!(v(EsEjnmtkk33x&|H3?q( zxLG&bE~C#tt@dH!`!R#TsF8C5?xoxJG@h30dW*jI5X9~w)2e;X3Y-&uN%_4HLiu8? zbsJ_dFSZ2%2amGNUbpG%jh(zyy12$%3PCqrb2Qo|X(289h5`J+Jx;L&^m|r9kV`1e z_Lz(g0cN_*BB?`|I#0cbhMXJY-AleiJUK_XNBRA;QoX~x3QxYxiSRiAoGZd&p9SH` z2)y}!uh4?^8&`10XK98V)AVrSIRTk_X1~UG}Fkiq%R(Ylw(yxPGl|lC|uE$fQ;txYk${ z8SH+SsIYP(HFew^=5cr0kCp5>Dm)A-*L{+EJe=4(v^_{~V07J(aoI%T(x2E!diUm> z;uGQ|lj#)Kq9FBl!@>E(wgwgmle7clA=Jyzkp zm1?4=ps#DU>IIe9Oa?<)S^1hK)FKMhQT1JFX7>vEm$5WzgL^tjp>WRmnY^H}P}#oS zU{|9Pe$;&9yPCA{TaJ&v73+$Tb3`iC)JD{Bf^8F~12=1L?L^=wgSb`%7Sp)%kHB9r zRsO9!!kaSR`|WARsq%ebVF!=a(tF>s4-s^Q!PDob28n@_nBd{SS_}a;tybvpn~N-O zJt6>5Kn9uLppPhKyg-0c9>!WG@cJL1J2q8aco7xfmY3_iaxQO>b946#gdBQaTclVv zBg=n_g=CbI?zzi)rI!9?-B4y%6YB(W2~Y9?V|)^$Zdj}bGRfR znCrfnv_KE?0s$a7G(Jfyn1w~9NGilP9@-dz9%CzQo~CTAvI%**t#zg*w!dR{@TAG! zchMYq$@Th#DlaT_)==H#vIz_2W{?>rU@TXelk?tfl||IyAD>e)&jyh}e(6Uc&0YFH zwU5GHj0|D%vr7ZSGO+>Wc?2k?9lyUL%NOhZ+QhgoFV81e3|um!*FT$qsiwK!EA=Kqn!5-@`5rmGmD!F zlz7b{sju!$Mk6_wj2>W0KWIZ(F;t1yjYSzh>}RoE7RDx+F-Rk7Ljfuwx+SE?V6R}1 z(zNhhM*B(WUOHD+VWwm^qu4GFU_UA2%6h0F%;V@t&~cRT6o`KJ^q@O-&DeZ>yi04{ zL+@{){&g>J2Z-BjH_Rr57mbarGk)M%*p_c+8FTo0Hvrl|?P77U@;SBm@bGZ0lCS<8 zM8pX6!w=#HAy|Dj`w(H0u9ZX>ciu2rwK0ND^?l9ftY41uIl4^@{Dd$XD_2!{DPD5h zHv5W6xib@QLK|X!;&kqEd3Zl{CemB{vK$!e<{#?*(MlWY%r%Ed^!glu?2Ds~*DZb^RQU>cK*(dyZW6-Ltw=t%+2O?7(d&w( zM9e~Nio5;yvQn~x1It6x1^lIf^sTT3ctW4p#W7Whgjb>PIuz(7L!gLhp zX}1v)1_|I(kxS)USSH5gF6ATx zRp<3q!~*94|Y=Z`Ukx+H_ZxB4|>GLr*P>X{G@$O|$iqQinCG>)F zUluNJ#&For*o^6*E=j@I9)!P66U!~r2tF9Kk;G8_{VQ^h2BjaMwZE#5`@w!k3);RD zKE~PAiUMa&r#^Y1y+Nqhw1iX0kWup;Txq)@Ay4pslHC^tNXTwMKOy0RTp)8Y;m|+K zoj4+?!Qt5$jSQe0$7}>J*FF!Pc`ub4E;9OmtZHZX$cysBmF;Bsx7=M3@Z!(oD2~00 zl%THh0Q2(!LGHgJ<5zNT9->$&$L?aD(l?LYWu{4BD}#-PF;{QQCS!J}rTRFhv#m;| z^K0s4r=MHgMR=foFmLE$_76MWr{lXrT#o~~4Pf|cwEZCBij_?bK6{)#Sv4`t>74XR z#R%jxthC*^ggAVH8G0=xl-Y#j_&Rle;&OQXMe(R^54JxJQ(tqGD)-K1wy(%{n; zGe@7n!R%+z9yjs;Jq$_kpZ@vJ$<$j`o}+Bef8?y917ixFlLP1%OnCh`BzYk{4ufOY zujaiXY6L+=SvEP;fr`a=^95-2OGwks(VJxOyCi9TGYs~Wl794%sZA;!-6o`(D;yG8vjl6U8s*6TqKG&Qf5^Z%^L&sjR_qEiwXCd2D@ux>XsyRHUxC57i6Vk|%wbq9MseIVQpM zo^P~?x5(Mc2HhFDBO%jU zZxm(1vaxHI0`>E52kv;t+U#Q-M1wWB+FvDT6c^Y2T^{`#HoG_U8eeJwarlJ zj@@z$)GAiLdE~83z{u2G#S#floq<6ZO*44PQ+(0;Pk^_6w7M6A@SNk`n_hu17%xE& zqhtHCo0gkLLr)i0B7T0Bjl9|~>EF?4(|vp^w9HhNgR^YdQ?wFqYde_KJn2}fwV!GK zWH2u?XwDBXgD)5EyFeWlO}Oo)!Vxw5zs1LbTkT0zaBAvG+~?eE#gT*-l9lus5mlUg zYL^&b`+BG6TlQ?-Dn4y1MMs&CY>JT+yorw&{X9Z==R(LmrU%Gt62kEYn+7GRG)?9k z6rlT)euuaYgTwBZx=D^}y9%T!r z5*pgY*XstYE5)}ujl2+TqchP>Hn2{#vX^hMZZeU*DOH)RannB*?qZ?+mu%kdUyIrj zx@=6Ba95~-HYKJpE^eZ?Z;O?;9yC}B}+hc5Up>Vt}jn1{g79{n@59Fkp%e0|`x@c<%a zOrhokES|2Zo1HX`y)3i3*~Z)9lUqfuwU6ppImt>Xn6GlkFGQI-MDn5?h4KdKV*bj} z3C7viPkDpB^L+Y~vI|l9dcO@kFW#yYGOCd~T_*X&hWhH*q)6Izl zS4vjJY7UC)9Tc1;g@io96%Cpo&zArg7a#La`2r<`?ca+jg~FE#&23Fu`yfp~ zX_?|~@KA2@MgR81+<0YZkGd_O;mq zsHOH796joYh3(A%ZaOTx0b`)yj&B}#&x)B$5p}m~8&PQckPk7pfC2ND75^DSxz5nz z&7(kbhBs!3aI+(ye0g{3YvwZVAh#+$d$|FJh7Js$@vwPi3ATp=qZdd6nl($UzDU#H zWPpl2qRvm5IeS%P!5g4Ot=CQnrl>9Z^8hVmxMw#QSV<#n`@Tfmxl2^=TL(`w=}i7J z;`sj={hK_%r$QaqhxvB^g5+Vyzx@!TVDtZJPKANprPfl6>eZdG*`D9b*y3v8zg)xr E4K>{XI{*Lx literal 0 HcmV?d00001 diff --git a/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/compilation_config_2.png b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/compilation_config_2.png new file mode 100644 index 0000000000000000000000000000000000000000..7bf46b2aa6472678e0a9e2dc526b239488a68a12 GIT binary patch literal 127660 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 E-|=LbRiD9oI2;M6#gHEMk_F~ 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 ZtZ3%KeA%RgO7t{~hN|vE*n`I}{s(UH3+ey> literal 0 HcmV?d00001 diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/debug.png b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/debug.png similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/debug.png rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/debug.png diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/decoration_for_files.png b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/decoration_for_files.png similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/decoration_for_files.png rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/decoration_for_files.png diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/docker_config.jpg b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/docker_config.jpg similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/docker_config.jpg rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/docker_config.jpg diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/docker_engine_config.png b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/docker_engine_config.png similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/docker_engine_config.png rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/docker_engine_config.png diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/docker_images.png b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/docker_images.png similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/docker_images.png rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/docker_images.png diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/install_from_vsix.png b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/install_from_vsix.png similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/install_from_vsix.png rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/install_from_vsix.png diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/new_project_page.png b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/new_project_page.png similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/new_project_page.png rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/new_project_page.png diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/open_project_page.png b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/open_project_page.png similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/open_project_page.png rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/open_project_page.png diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/project_template.png b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/project_template.png similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/project_template.png rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/project_template.png diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/right_click_menus_1.png b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/right_click_menus_1.png similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/right_click_menus_1.png rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/right_click_menus_1.png diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/right_click_menus_2.png b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/right_click_menus_2.png similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/right_click_menus_2.png rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/right_click_menus_2.png diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/run.png b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/run.png similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/run.png rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/run.png diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/save_configuration.png b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/save_configuration.png similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/save_configuration.png rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/save_configuration.png diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/set_up_workspace_message.png b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/set_up_workspace_message.png similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/set_up_workspace_message.png rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/set_up_workspace_message.png diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/wamr_ide_main_menu.png b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/wamr_ide_main_menu.png similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Media/wamr_ide_main_menu.png rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Media/wamr_ide_main_menu.png diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/README.md similarity index 87% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/README.md index 8a6e1509f59..77889222094 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/README.md +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/README.md @@ -14,7 +14,11 @@ The WAMR-IDE is an Integrated Development Environment to develop WebAssembly app ## How to setup WAMR IDE -Now, we have same version tagged docker images, lldb binaries and VS Code installation file(.vsix file) packed for each GitHub release. So if you simply want to use WAMR debugging features in VS Code, the ideal(and effortless) way is following the tutorial in [this section](#21-download-wamr-vs-code-extension-from-the-github-releaserecommended-approach). +Now, the most straightforward way to install the WAMR IDE extension is by searching for WAMR-IDE in the VS Code extension marketplace and installing it directly. So, if you simply want to use WAMR debugging features in VS Code, this is the ideal (and effortless) way. And you are ready to [use WAMR IDE](#how-to-use-wamr-ide). + +> It is only recommended to download versions after 1.3.2 from the marketplace. + +Also, we have same version tagged docker images, lldb binaries and VS Code installation file(.vsix file) packed for each GitHub release. You can following the tutorial in [this section](#21-download-wamr-vs-code-extension-from-the-github-releaserecommended-approach). Alternatively, if you want to build lldb, docker images, or .vsix file locally so that you can try the effect of your modification, you could refer to the tutorial in [this section](#22-build-wamr-vs-code-extension-locallyalternative-approach). @@ -93,19 +97,19 @@ We have 2 docker images which should be built or loaded on your host, `wasm-tool Windows (powershell): ```batch -$ cd .\WASM-Toolchain\Docker -$ .\build_docker_image.bat -$ cd .\WASM-Debug-Server\Docker -$ .\build_docker_image.bat +cd .\WASM-Toolchain\Docker +.\build_docker_image.bat +cd .\WASM-Debug-Server\Docker +.\build_docker_image.bat ``` Linux: ```shell -$ cd ./WASM-Toolchain/Docker -$ ./build_docker_image.sh -$ cd ./WASM-Debug-Server/Docker -$ ./build_docker_image.sh +cd ./WASM-Toolchain/Docker +./build_docker_image.sh +cd ./WASM-Debug-Server/Docker +./build_docker_image.sh ``` ##### 2.2.2 After building, you can find `wasm-toolchain` and `wasm-debug-server` docker images on your local @@ -145,11 +149,11 @@ $ docker build --no-cache --build-arg http_proxy=http://proxy.example.com:1234 `wamride-1.0.0.vsix` can be packaged by [`npm vsce`](https://code.visualstudio.com/api/working-with-extensions/publishing-extension). ```shell -$ npm install -g vsce -$ cd VSCode-Extension -$ rm -rf node_modules -$ npm install -$ vsce package +npm install -g vsce +cd VSCode-Extension +rm -rf node_modules +npm install +vsce package ``` ##### 2.2.7 Enable VS Code debugging feature @@ -171,7 +175,6 @@ $ cp inst/* /home/{usrname}/.vscode-server/extensions/wamr.wamride-1.0.0/resourc If you want to use your own patched `lldb`, you could follow this [instruction](../../doc/source_debugging.md#debugging-with-interpreter) to build `lldb`. And follow this [instruction](./VSCode-Extension/resource/debug/README.md) to copy the binaries to replace the existing ones. - > **You can also debug the extension directly follow this [instruction](./VSCode-Extension/README.md) without packing the extension.** ##### 2.2.7 Install extension from vsix @@ -184,7 +187,7 @@ select `wamride-1.0.0.vsix` which you have packed on your host. ## How to use `wamr-ide` -#### `WAMR-IDE` extension contains 2 components as following picture showing. `WAMR IDE` for workspace and project management and `Current Project` for project's execution. +#### `WAMR-IDE` extension contains 2 components as following picture showing. `WAMR IDE` for workspace and project management and `Current Project` for project's execution ![wamr_ide_main_menu](./Media/wamr_ide_main_menu.png "wamr-ide main menu") @@ -254,7 +257,7 @@ Click `Change workspace` button, a dialog will show as following. You can select At the same time, all added `include path` and `exclude files` will be saved in `.wamr/compilation_config.json` as json array. - ![compilation config](./Media/compilation_config_2.png "compilation config") + ![compilation config](./Media/compilation_config.png "compilation config") > `Toggle state of path including` just shows when selecting `folder` and hides with other resources. > @@ -268,13 +271,22 @@ Click `Configuration` button, a new page will be shown as following. You can con ![config building target](./Media/Config_building_target.png "config building target") +Short Explanation of the Fields Above: + +- Output file name: The compiled wasm file name of your program. +- Initial linear memory size, Max linear memory size, Stack size: The wasi-sdk clang compile options. +- Exported symbols: The symbols your wasm program wants to export. **Multiple symbols are separated by commas without spaces**. +- Host managed heap size: The running configuration for the host managed heap size of iwasm. In most cases, the default size would be fine, but in some scenarios, let's say you want to allocate more memory using `malloc`, you should increase it here accordingly. + +> Note that due to the current implementation limitation, after changing the `Output file name` or `Host managed heap size`, you need to close and reopen VSCode (to reactivate the extension) so that the running config will be correctly updated. + Then click `Modify` button to confirm, if configurations are modified successfully and following message will pop. Click `OK`, the page will be auto closed. ![save configuration](./Media/save_configuration.png "save configuration") And all configuration will be saved in `.wamr/compilation_config.json`. -![configuration file](./Media/compilation_config.png "configuration file") +![configuration file](./Media/compilation_config_2.png "configuration file") #### 2. `Build` diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Script/build.bat b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Script/build.bat similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Script/build.bat rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Script/build.bat diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Script/build.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Script/build.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/Script/build.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/Script/build.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/.eslintrc.json b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/.eslintrc.json similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/.eslintrc.json rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/.eslintrc.json diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/.gitignore b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/.gitignore similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/.gitignore rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/.gitignore diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/.npmrc b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/.npmrc similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/.npmrc rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/.npmrc diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/.prettierrc.json b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/.prettierrc.json similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/.prettierrc.json rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/.prettierrc.json diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/.vscodeignore b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/.vscodeignore similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/.vscodeignore rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/.vscodeignore diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/CONTRIBUTING.md b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/CONTRIBUTING.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/CONTRIBUTING.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/CONTRIBUTING.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/LICENSE b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/LICENSE similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/LICENSE rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/LICENSE diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/formatters/rust.py b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/formatters/rust.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/formatters/rust.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/formatters/rust.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/package.json b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/package.json similarity index 99% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/package.json rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/package.json index d7cc20595f4..77f96537cc0 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/package.json +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/package.json @@ -6,7 +6,7 @@ }, "displayName": "WAMR-IDE", "description": "An Integrated Development Environment for WASM", - "version": "1.2.2", + "version": "1.3.2", "engines": { "vscode": "^1.59.0", "node": ">=16.0.0" diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/scripts/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/scripts/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/scripts/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/scripts/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/scripts/boot_debugger_server.bat b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/scripts/boot_debugger_server.bat similarity index 86% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/scripts/boot_debugger_server.bat rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/scripts/boot_debugger_server.bat index 7fd1f024aad..4d3a2c3ec23 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/scripts/boot_debugger_server.bat +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/scripts/boot_debugger_server.bat @@ -7,4 +7,4 @@ docker run --rm -it --name=wasm-debug-server-ctr ^ -v "%cd%":/mnt ^ -p 1234:1234 ^ wasm-debug-server:%2 ^ - /bin/bash -c "./debug.sh %1" + /bin/bash -c "./debug.sh %1 %3" diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/scripts/boot_debugger_server.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/scripts/boot_debugger_server.sh similarity index 86% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/scripts/boot_debugger_server.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/scripts/boot_debugger_server.sh index 169fb7e5f43..e0658659356 100755 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/scripts/boot_debugger_server.sh +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/scripts/boot_debugger_server.sh @@ -9,4 +9,4 @@ docker run --rm -it --name=wasm-debug-server-ctr \ -v "$(pwd)":/mnt \ -p 1234:1234 \ wasm-debug-server:$2 \ - /bin/bash -c "./debug.sh $1" + /bin/bash -c "./debug.sh $1 $3" diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/scripts/build.bat b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/scripts/build.bat similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/scripts/build.bat rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/scripts/build.bat diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/scripts/build.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/scripts/build.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/scripts/build.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/scripts/build.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/scripts/destroy.bat b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/scripts/destroy.bat similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/scripts/destroy.bat rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/scripts/destroy.bat diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/scripts/destroy.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/scripts/destroy.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/scripts/destroy.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/scripts/destroy.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/scripts/project.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/scripts/project.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/scripts/project.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/scripts/project.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/scripts/run.bat b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/scripts/run.bat similarity index 85% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/scripts/run.bat rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/scripts/run.bat index af47f35baeb..387a8e629c8 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/scripts/run.bat +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/scripts/run.bat @@ -6,4 +6,4 @@ docker run --rm -it --name=wasm-debug-server-ctr ^ -v "%cd%":/mnt ^ wasm-debug-server:%2 ^ - /bin/bash -c "./run.sh %1" + /bin/bash -c "./run.sh %1 %3" diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/scripts/run.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/scripts/run.sh similarity index 86% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/scripts/run.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/scripts/run.sh index 670e57c1e78..2526b95462c 100755 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/scripts/run.sh +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/scripts/run.sh @@ -8,4 +8,4 @@ set -e docker run --rm -it --name=wasm-debug-server-ctr \ -v "$(pwd)":/mnt \ wasm-debug-server:$2 \ - /bin/bash -c "./run.sh $1" + /bin/bash -c "./run.sh $1 $3" diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/test/build.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/test/build.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/test/build.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/test/build.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/test/test.rs b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/test/test.rs similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/test/test.rs rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/test/test.rs diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/assert.h b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/assert.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/assert.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/assert.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/ctype.h b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/ctype.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/ctype.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/ctype.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/errno.h b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/errno.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/errno.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/errno.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/fcntl.h b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/fcntl.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/fcntl.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/fcntl.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/inttypes.h b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/inttypes.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/inttypes.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/inttypes.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/limits.h b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/limits.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/limits.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/limits.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/pthread.h b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/pthread.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/pthread.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/pthread.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/stdarg.h b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/stdarg.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/stdarg.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/stdarg.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/stdbool.h b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/stdbool.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/stdbool.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/stdbool.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/stdint.h b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/stdint.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/stdint.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/stdint.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/stdio.h b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/stdio.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/stdio.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/stdio.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/stdlib.h b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/stdlib.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/stdlib.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/stdlib.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/string.h b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/string.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/string.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/string.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/strings.h b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/strings.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/strings.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/wamr-sdk/libc-builtin-sysroot/include/strings.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/webview/css/style.css b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/webview/css/style.css similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/webview/css/style.css rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/webview/css/style.css diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/webview/js/configbuildtarget.js b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/webview/js/configbuildtarget.js similarity index 86% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/webview/js/configbuildtarget.js rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/webview/js/configbuildtarget.js index 837f384bcd5..1c146d93364 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/webview/js/configbuildtarget.js +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/webview/js/configbuildtarget.js @@ -15,6 +15,7 @@ function submitFunc() { let maxMemSize = document.getElementById('max_mem_size').value; let stackSize = document.getElementById('stack_size').value; let exportedSymbols = document.getElementById('exported_symbols').value; + let hostManagedHeapSize = document.getElementById('host_managed_heap_size').value; vscode.postMessage({ command: 'config_build_target', @@ -23,5 +24,6 @@ function submitFunc() { maxMemSize: maxMemSize, stackSize: stackSize, exportedSymbols: exportedSymbols, + hostManagedHeapSize: hostManagedHeapSize, }); } diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/webview/js/newproj.js b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/webview/js/newproj.js similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/webview/js/newproj.js rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/webview/js/newproj.js diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/webview/page/configBuildTarget.html b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/webview/page/configBuildTarget.html similarity index 77% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/webview/page/configBuildTarget.html rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/webview/page/configBuildTarget.html index b4c43151129..877356a4215 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/webview/page/configBuildTarget.html +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/webview/page/configBuildTarget.html @@ -41,12 +41,30 @@

Config building target

- +
+
+
+

Config iwasm running option

+ +
+
+ +
+
+
+ + +
+
+
+
diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/webview/page/newProject.html b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/webview/page/newProject.html similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/resource/webview/page/newProject.html rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/resource/webview/page/newProject.html diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/constants.ts b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/constants.ts similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/constants.ts rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/constants.ts diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/debugConfigurationProvider.ts b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/debugConfigurationProvider.ts similarity index 69% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/debugConfigurationProvider.ts rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/debugConfigurationProvider.ts index 657cf59c766..d24abe6a288 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/debugConfigurationProvider.ts +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/debugConfigurationProvider.ts @@ -8,23 +8,24 @@ import * as os from 'os'; /* see https://github.com/llvm/llvm-project/tree/main/lldb/tools/lldb-vscode#attaching-settings */ export interface WasmDebugConfig { - type: string, - name: string, - request: string, - program? : string, - pid?: string, - stopOnEntry?: boolean, - waitFor?: boolean, - initCommands?: string[], - preRunCommands?: string[], - stopCommands?: string[], - exitCommands?: string[], - terminateCommands?: string[], - attachCommands?: string[] + type: string; + name: string; + request: string; + program?: string; + pid?: string; + stopOnEntry?: boolean; + waitFor?: boolean; + initCommands?: string[]; + preRunCommands?: string[]; + stopCommands?: string[]; + exitCommands?: string[]; + terminateCommands?: string[]; + attachCommands?: string[]; } export class WasmDebugConfigurationProvider - implements vscode.DebugConfigurationProvider { + implements vscode.DebugConfigurationProvider +{ private wasmDebugConfig: WasmDebugConfig = { type: 'wamr-debug', name: 'Attach', @@ -33,28 +34,29 @@ export class WasmDebugConfigurationProvider attachCommands: [ /* default port 1234 */ 'process connect -p wasm connect://127.0.0.1:1234', - ] + ], }; constructor(extensionPath: string) { this.wasmDebugConfig.initCommands = [ /* Add rust formatters -> https://lldb.llvm.org/use/variable.html */ - `command script import ${extensionPath}/formatters/rust.py` + `command script import ${extensionPath}/formatters/rust.py`, ]; if (os.platform() === 'win32' || os.platform() === 'darwin') { - this.wasmDebugConfig.initCommands.push('platform select remote-linux'); + this.wasmDebugConfig.initCommands.push( + 'platform select remote-linux' + ); } } public resolveDebugConfiguration( _: vscode.WorkspaceFolder | undefined, - debugConfiguration: vscode.DebugConfiguration, + debugConfiguration: vscode.DebugConfiguration ): vscode.ProviderResult { - this.wasmDebugConfig = { ...this.wasmDebugConfig, - ...debugConfiguration + ...debugConfiguration, }; return this.wasmDebugConfig; diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/decorationProvider.ts b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/decorationProvider.ts similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/decorationProvider.ts rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/decorationProvider.ts diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/extension.ts b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/extension.ts similarity index 99% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/extension.ts rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/extension.ts index 419f730c884..ab549fc2d22 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/extension.ts +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/extension.ts @@ -170,7 +170,9 @@ export async function activate(context: vscode.ExtensionContext) { } /* register debug configuration */ - wasmDebugConfigProvider = new WasmDebugConfigurationProvider(context.extensionPath); + wasmDebugConfigProvider = new WasmDebugConfigurationProvider( + context.extensionPath + ); vscode.debug.registerDebugConfigurationProvider( 'wamr-debug', @@ -811,6 +813,7 @@ interface BuildArgs { maxMemorySize: string; stackSize: string; exportedSymbols: string; + hostManagedHeapSize: string; } /** diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/taskProvider.ts b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/taskProvider.ts similarity index 98% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/taskProvider.ts rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/taskProvider.ts index 9b9b75f9a02..ee8ba5d1dfc 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/taskProvider.ts +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/taskProvider.ts @@ -31,6 +31,7 @@ export class WasmTaskProvider implements vscode.TaskProvider { /* target name is used for generated aot target */ const targetName = TargetConfigPanel.buildArgs.outputFileName.split('.')[0]; + const heapSize = TargetConfigPanel.buildArgs.hostManagedHeapSize; if ( os.platform() === 'linux' || @@ -57,7 +58,7 @@ export class WasmTaskProvider implements vscode.TaskProvider { : (this._script.get('debugScript') as string), options: { executable: this._script.get('debugScript'), - shellArgs: [targetName, this._wamrVersion], + shellArgs: [targetName, this._wamrVersion, heapSize], }, }; @@ -69,7 +70,7 @@ export class WasmTaskProvider implements vscode.TaskProvider { : (this._script.get('runScript') as string), options: { executable: this._script.get('runScript'), - shellArgs: [targetName, this._wamrVersion], + shellArgs: [targetName, this._wamrVersion, heapSize], }, }; diff --git a/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/test/runTest.ts b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/test/runTest.ts new file mode 100644 index 00000000000..635e02ede8f --- /dev/null +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/test/runTest.ts @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + */ + +import * as path from 'path'; +import * as os from 'os'; + +import { runTests } from '@vscode/test-electron'; + +async function main() { + try { + // The folder containing the Extension Manifest package.json + // Passed to `--extensionDevelopmentPath` + const extensionDevelopmentPath = path.resolve(__dirname, '../../'); + + // The path to the extension test script + // Passed to --extensionTestsPath + const extensionTestsPath = path.resolve(__dirname, './suite/index'); + + // Download VS Code, unzip it and run the integration test + await runTests({ + extensionDevelopmentPath, + extensionTestsPath, + launchArgs: ['--user-data-dir', `${os.tmpdir()}`], + }); + } catch (err) { + console.error('Failed to run tests'); + process.exit(1); + } +} + +main(); diff --git a/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/test/suite/extension.test.ts b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/test/suite/extension.test.ts new file mode 100644 index 00000000000..d1420dfa5eb --- /dev/null +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/test/suite/extension.test.ts @@ -0,0 +1,243 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + */ + +import { DebugProtocol } from '@vscode/debugprotocol'; +import { after, before, test, suite } from 'mocha'; +import { assert } from 'chai'; +import * as vscode from 'vscode'; +import * as cp from 'child_process'; +import * as path from 'path'; +import * as os from 'os'; +import { + WasmDebugConfig, + WasmDebugConfigurationProvider, +} from '../../debugConfigurationProvider'; +import { + EXTENSION_PATH, + clearAllBp, + setBpAtMarker, + compileRustToWasm, +} from './utils'; +import { downloadLldb, isLLDBInstalled } from '../../utilities/lldbUtilities'; + +suite('Unit Tests', function () { + test('DebugConfigurationProvider init commands', function () { + const testExtensionPath = '/test/path/'; + const provider = new WasmDebugConfigurationProvider(testExtensionPath); + + assert.includeMembers( + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + provider.getDebugConfig().initCommands!, + [`command script import ${testExtensionPath}/formatters/rust.py`], + 'Debugger init commands did not contain ' + ); + }); + + test('DebugConfigurationProvider resolve configuration', function () { + const testExtensionPath = '/test/path/'; + const provider = new WasmDebugConfigurationProvider(testExtensionPath); + + const actual = provider.resolveDebugConfiguration(undefined, { + type: 'wamr-debug', + name: 'Attach', + request: 'attach', + initCommands: [], + attachCommands: [ + 'process connect -p wasm connect://123.456.789.1:1237', + ], + }); + + assert.deepEqual( + actual, + { + type: 'wamr-debug', + name: 'Attach', + request: 'attach', + stopOnEntry: true, + initCommands: [], + attachCommands: [ + 'process connect -p wasm connect://123.456.789.1:1237', + ], + }, + 'Configuration did not match the expected configuration after calling resolveDebugConfiguration()' + ); + }); +}); + +suite('Inegration Tests', function () { + let debuggerProcess: cp.ChildProcessWithoutNullStreams; + const port = 1239; + const downloadTimeout = 60 * 1000; + + before(async function () { + // timeout of 20 seconds + this.timeout(20 * 1000); + // Download LLDB if necessary. Should be available in the CI. Only for local execution. + if (!isLLDBInstalled(EXTENSION_PATH)) { + this.timeout(downloadTimeout); + console.log('Downloading LLDB. This might take a moment...'); + await downloadLldb(EXTENSION_PATH); + assert.isTrue( + isLLDBInstalled(EXTENSION_PATH), + 'LLDB was not installed correctly' + ); + } + + compileRustToWasm(); + + const platform = os.platform(); + assert.isTrue( + platform === 'darwin' || platform === 'linux', + `Tests do not support your platform: ${platform}` + ); + const iWasmPath = path.resolve( + `${EXTENSION_PATH}/../../../product-mini/platforms/${platform}/build/iwasm` + ); + const testWasmFilePath = `${EXTENSION_PATH}/resource/test/test.wasm`; + + debuggerProcess = cp.spawn( + iWasmPath, + [`-g=127.0.0.1:${port}`, testWasmFilePath], + {} + ); + + debuggerProcess.stderr.on('data', data => { + console.log(`Error from debugger process: ${data}`); + }); + }); + + after(async function () { + await vscode.debug.stopDebugging(); + debuggerProcess.kill(); + }); + + test('Rust formatters', async function () { + // timeout of 1 minutes + this.timeout(60 * 1000); + clearAllBp(); + setBpAtMarker(`${EXTENSION_PATH}/resource/test/test.rs`, 'BP_MARKER_1'); + + const getVariables = new Promise( + (resolve, reject) => { + vscode.debug.registerDebugAdapterTrackerFactory('wamr-debug', { + createDebugAdapterTracker: function () { + return { + // The debug adapter has sent a Debug Adapter Protocol message to the editor. + onDidSendMessage: ( + message: DebugProtocol.ProtocolMessage + ) => { + if (message.type === 'response') { + const m = message as DebugProtocol.Response; + if (m.command === 'variables') { + const res = + m as DebugProtocol.VariablesResponse; + resolve(res.body.variables); + } + } + }, + onError: (error: Error) => { + reject( + 'An error occurred before vscode reached the breakpoint: ' + + error + ); + }, + onExit: (code: number | undefined) => { + reject( + `Debugger exited before vscode reached the breakpoint with code: ${code}` + ); + }, + }; + }, + }); + } + ); + + const config: WasmDebugConfig = { + type: 'wamr-debug', + request: 'attach', + name: 'Attach Debugger', + stopOnEntry: false, + initCommands: [ + `command script import ${EXTENSION_PATH}/formatters/rust.py`, + ], + attachCommands: [ + `process connect -p wasm connect://127.0.0.1:${port}`, + ], + }; + + if (os.platform() === 'win32' || os.platform() === 'darwin') { + config.initCommands?.push('platform select remote-linux'); + } + + try { + await vscode.debug.startDebugging(undefined, config); + } catch (e) { + assert.fail('Could not connect to debug adapter'); + } + + // wait until vs code has reached breakpoint and has requested the variables. + const variables = await getVariables; + const namesToVariables = variables.reduce( + (acc: { [name: string]: DebugProtocol.Variable }, c) => { + if (c.evaluateName) { + acc[c.evaluateName] = c; + } + return acc; + }, + {} + ); + + assert.includeMembers( + Object.keys(namesToVariables), + ['vector', 'map', 'string', 'slice', 'deque', 'ref_cell'], + 'The Debugger did not return all expected debugger variables.' + ); + + // Vector + assert.equal( + namesToVariables['vector'].value, + ' (5) vec![1, 2, 3, 4, 12]', + 'The Vector summary string looks different than expected' + ); + + // Map + assert.equal( + namesToVariables['map'].value, + ' size=5, capacity=8', + 'The Map summary string looks different than expected' + ); + + // String + assert.equal( + namesToVariables['string'].value, + ' "this is a string"', + 'The String summary string looks different than expected' + ); + + // Slice + assert.equal( + namesToVariables['slice'].value, + ' "ello"', + 'The Slice summary string looks different than expected' + ); + + // Deque + // TODO: The deque format conversion have some problem now + // -alloc::collections::vec_deque::VecDeque @ 0xfff1c + // + (5) VecDeque[1, 2, 3, 4, 5] + // assert.equal( + // namesToVariables['deque'].value, + // ' (5) VecDeque[1, 2, 3, 4, 5]', + // 'The Deque summary string looks different than expected' + // ); + + // RefCell + assert.equal( + namesToVariables['ref_cell'].value, + ' 5', + 'The RefCell summary string looks different than expected' + ); + }); +}); diff --git a/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/test/suite/index.ts b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/test/suite/index.ts new file mode 100644 index 00000000000..3b7d271b14c --- /dev/null +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/test/suite/index.ts @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + */ + +import * as path from 'path'; +import * as Mocha from 'mocha'; +import * as glob from 'glob'; + +export function run(): Promise { + // Create the mocha test + const mocha = new Mocha({ + ui: 'tdd', + }); + + const testsRoot = path.resolve(__dirname, '..'); + + return new Promise((c, e) => { + glob('**/**.test.js', { cwd: testsRoot }, (err, files) => { + if (err) { + return e(err); + } + + // Add files to the test suite + files.forEach(f => mocha.addFile(path.resolve(testsRoot, f))); + + try { + // Run the mocha test + mocha.run(failures => { + if (failures > 0) { + e(new Error(`${failures} tests failed.`)); + } else { + c(); + } + }); + } catch (err) { + console.error(err); + e(err); + } + }); + }); +} diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/test/suite/utils.ts b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/test/suite/utils.ts similarity index 63% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/test/suite/utils.ts rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/test/suite/utils.ts index 87cb04b3b1c..3f40596c3d1 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/test/suite/utils.ts +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/test/suite/utils.ts @@ -3,10 +3,10 @@ * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception */ -import {assert} from 'chai'; +import { assert } from 'chai'; import * as vscode from 'vscode'; -import {Range, SourceBreakpoint} from "vscode"; -import * as fs from "fs"; +import { Range, SourceBreakpoint } from 'vscode'; +import * as fs from 'fs'; import path = require('path'); import * as cp from 'child_process'; @@ -20,11 +20,18 @@ export function clearAllBp(): void { // Inserts a breakpoint in a file at the first occurrence of bpMarker export function setBpAtMarker(file: string, bpMarker: string): void { const uri = vscode.Uri.file(file); - const data = fs.readFileSync(uri.path, "utf8"); - const line = data.split("\n").findIndex(line => line.includes(bpMarker)); - assert.notStrictEqual(line, -1, "Could not find breakpoint marker in source file"); + const data = fs.readFileSync(uri.path, 'utf8'); + const line = data.split('\n').findIndex(line => line.includes(bpMarker)); + assert.notStrictEqual( + line, + -1, + 'Could not find breakpoint marker in source file' + ); const position = new vscode.Position(line, 0); - const bp = new SourceBreakpoint(new vscode.Location(uri, new Range(position, position)), true); + const bp = new SourceBreakpoint( + new vscode.Location(uri, new Range(position, position)), + true + ); vscode.debug.addBreakpoints([bp]); } @@ -35,9 +42,12 @@ export function compileRustToWasm(): void { const cmd = `rustc --target wasm32-wasi ${testResourceFolder}/test.rs -g -C opt-level=0 -o ${testResourceFolder}/test.wasm`; try { - cp.execSync(cmd, {stdio: [null, null, process.stderr]}); + cp.execSync(cmd, { stdio: [null, null, process.stderr] }); } catch (e) { assert.fail(`Compilation of example rust file failed with error: ${e}`); } - assert.isTrue(fs.existsSync(`${testResourceFolder}/test.wasm`), "Could not find wasm file WASM file to run debugger on."); + assert.isTrue( + fs.existsSync(`${testResourceFolder}/test.wasm`), + 'Could not find wasm file WASM file to run debugger on.' + ); } diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/utilities/directoryUtilities.ts b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/utilities/directoryUtilities.ts similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/utilities/directoryUtilities.ts rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/utilities/directoryUtilities.ts diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/utilities/dockerUtilities.ts b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/utilities/dockerUtilities.ts similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/utilities/dockerUtilities.ts rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/utilities/dockerUtilities.ts diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/utilities/getUri.ts b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/utilities/getUri.ts similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/utilities/getUri.ts rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/utilities/getUri.ts diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/utilities/lldbUtilities.ts b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/utilities/lldbUtilities.ts similarity index 95% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/utilities/lldbUtilities.ts rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/utilities/lldbUtilities.ts index b6553acbc7e..95447666679 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/utilities/lldbUtilities.ts +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/utilities/lldbUtilities.ts @@ -35,9 +35,7 @@ function getLLDBUnzipFilePath(destinationFolder: string, filename: string) { return path.join(destinationFolder, ...dirs); } -export function getWAMRExtensionVersion( - extensionPath: string -): string { +export function getWAMRExtensionVersion(extensionPath: string): string { // eslint-disable-next-line @typescript-eslint/no-var-requires return require(path.join(extensionPath, 'package.json')).version; } @@ -68,7 +66,6 @@ export function isLLDBInstalled(extensionPath: string): boolean { export async function promptInstallLLDB( extensionPath: string ): Promise { - const response = await vscode.window.showWarningMessage( 'No LLDB instance found. Setup now?', SelectionOfPrompt.setUp, @@ -84,9 +81,7 @@ export async function promptInstallLLDB( return SelectionOfPrompt.setUp; } -export async function downloadLldb( - extensionPath: string -): Promise { +export async function downloadLldb(extensionPath: string): Promise { const downloadUrl = getLLDBDownloadUrl(extensionPath); const destinationDir = os.platform(); diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/view/NewProjectPanel.ts b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/view/NewProjectPanel.ts similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/view/NewProjectPanel.ts rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/view/NewProjectPanel.ts diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/view/TargetConfigPanel.ts b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/view/TargetConfigPanel.ts similarity index 92% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/view/TargetConfigPanel.ts rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/view/TargetConfigPanel.ts index f2e1343a590..8efa2455cdb 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/src/view/TargetConfigPanel.ts +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/src/view/TargetConfigPanel.ts @@ -20,6 +20,7 @@ export class TargetConfigPanel { maxMemorySize: '131072', stackSize: '4096', exportedSymbols: 'main', + hostManagedHeapSize: '4096', }; private static readonly userInputError: number = -2; @@ -74,14 +75,16 @@ export class TargetConfigPanel { initMemSize: string, maxMemSize: string, stackSize: string, - exportedSymbols: string + exportedSymbols: string, + hostManagedHeapSize: string ): number { if ( outputFileName === '' || initMemSize === '' || maxMemSize === '' || stackSize === '' || - exportedSymbols === '' + exportedSymbols === '' || + hostManagedHeapSize === '' ) { return TargetConfigPanel.userInputError; } @@ -95,6 +98,7 @@ export class TargetConfigPanel { maxMemorySize: maxMemSize, stackSize: stackSize, exportedSymbols: exportedSymbols, + hostManagedHeapSize: hostManagedHeapSize, }; const configStr = readFromConfigFile(); @@ -174,6 +178,10 @@ export class TargetConfigPanel { .replace( /(\${exported_symbols_val})/, TargetConfigPanel.buildArgs.exportedSymbols + ) + .replace( + /(\${host_managed_heap_size_val})/, + TargetConfigPanel.buildArgs.hostManagedHeapSize ); return html; @@ -189,7 +197,8 @@ export class TargetConfigPanel { message.initMemSize === '' || message.maxMemSize === '' || message.stackSize === '' || - message.exportedSymbols === '' + message.exportedSymbols === '' || + message.hostManagedHeapSize === '' ) { vscode.window.showErrorMessage( 'Please fill chart before your submit!' @@ -201,7 +210,8 @@ export class TargetConfigPanel { message.initMemSize, message.maxMemSize, message.stackSize, - message.exportedSymbols + message.exportedSymbols, + message.hostManagedHeapSize ) === TargetConfigPanel.executionSuccess ) { vscode.window diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/tsconfig.json b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/tsconfig.json similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/VSCode-Extension/tsconfig.json rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/VSCode-Extension/tsconfig.json diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/WASM-Debug-Server/Docker/Dockerfile b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/WASM-Debug-Server/Docker/Dockerfile similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/WASM-Debug-Server/Docker/Dockerfile rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/WASM-Debug-Server/Docker/Dockerfile diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/WASM-Debug-Server/Docker/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/WASM-Debug-Server/Docker/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/WASM-Debug-Server/Docker/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/WASM-Debug-Server/Docker/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/WASM-Debug-Server/Docker/build_docker_image.bat b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/WASM-Debug-Server/Docker/build_docker_image.bat similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/WASM-Debug-Server/Docker/build_docker_image.bat rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/WASM-Debug-Server/Docker/build_docker_image.bat diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/WASM-Debug-Server/Docker/build_docker_image.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/WASM-Debug-Server/Docker/build_docker_image.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/WASM-Debug-Server/Docker/build_docker_image.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/WASM-Debug-Server/Docker/build_docker_image.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/WASM-Debug-Server/Docker/resource/debug.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/WASM-Debug-Server/Docker/resource/debug.sh similarity index 61% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/WASM-Debug-Server/Docker/resource/debug.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/WASM-Debug-Server/Docker/resource/debug.sh index 48458870f33..33cdb58447c 100755 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/WASM-Debug-Server/Docker/resource/debug.sh +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/WASM-Debug-Server/Docker/resource/debug.sh @@ -3,4 +3,5 @@ #!/bin/bash TARGET=$1 -./iwasm -g=0.0.0.0:1234 /mnt/build/${TARGET}.wasm \ No newline at end of file +HEAP_SIZE=$2 +./iwasm -g=0.0.0.0:1234 --heap-size=${HEAP_SIZE} /mnt/build/${TARGET}.wasm diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/WASM-Debug-Server/Docker/resource/run.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/WASM-Debug-Server/Docker/resource/run.sh similarity index 66% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/WASM-Debug-Server/Docker/resource/run.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/WASM-Debug-Server/Docker/resource/run.sh index 4e3acecbaa3..f652cfc2eab 100755 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/WASM-Debug-Server/Docker/resource/run.sh +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/WASM-Debug-Server/Docker/resource/run.sh @@ -3,4 +3,5 @@ #!/bin/bash TARGET=$1 -./iwasm /mnt/build/${TARGET}.wasm \ No newline at end of file +HEAP_SIZE=$2 +./iwasm --heap-size=${HEAP_SIZE} /mnt/build/${TARGET}.wasm diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/WASM-Toolchain/Docker/.dockerignore b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/WASM-Toolchain/Docker/.dockerignore similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/WASM-Toolchain/Docker/.dockerignore rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/WASM-Toolchain/Docker/.dockerignore diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/WASM-Toolchain/Docker/Dockerfile b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/WASM-Toolchain/Docker/Dockerfile similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/WASM-Toolchain/Docker/Dockerfile rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/WASM-Toolchain/Docker/Dockerfile diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/WASM-Toolchain/Docker/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/WASM-Toolchain/Docker/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/WASM-Toolchain/Docker/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/WASM-Toolchain/Docker/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/WASM-Toolchain/Docker/build_docker_image.bat b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/WASM-Toolchain/Docker/build_docker_image.bat similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/WASM-Toolchain/Docker/build_docker_image.bat rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/WASM-Toolchain/Docker/build_docker_image.bat diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/WASM-Toolchain/Docker/build_docker_image.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/WASM-Toolchain/Docker/build_docker_image.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/WASM-Toolchain/Docker/build_docker_image.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/WASM-Toolchain/Docker/build_docker_image.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/WASM-Toolchain/Docker/resource/build_wasm.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/WASM-Toolchain/Docker/resource/build_wasm.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/WASM-Toolchain/Docker/resource/build_wasm.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/WASM-Toolchain/Docker/resource/build_wasm.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/WASM-Toolchain/Docker/resource/wamr_toolchain.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/WASM-Toolchain/Docker/resource/wamr_toolchain.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/test-tools/wamr-ide/WASM-Toolchain/Docker/resource/wamr_toolchain.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/test-tools/wamr-ide/WASM-Toolchain/Docker/resource/wamr_toolchain.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/coremark/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/coremark/README.md similarity index 92% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/coremark/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/coremark/README.md index 4e88069f851..5b874e9889a 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/coremark/README.md +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/coremark/README.md @@ -10,7 +10,7 @@ Please build iwasm and wamrc, refer to: - [Build iwasm on Linux](../../../doc/build_wamr.md#linux), or [Build iwasm on MacOS](../../../doc/build_wamr.md#macos) - [Build wamrc AOT compiler](../../../README.md#build-wamrc-aot-compiler) -And install WASI SDK, please download the [wasi-sdk release](https://github.com/CraneStation/wasi-sdk/releases) and extract the archive to default path `/opt/wasi-sdk`. +And install WASI SDK, please download the [wasi-sdk release](https://github.com/WebAssembly/wasi-sdk/releases) and extract the archive to default path `/opt/wasi-sdk`. And then run `./build.sh` to build the source code, file `coremark.exe`, `coremark.wasm` and `coremark.aot` will be generated. diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/coremark/build.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/coremark/build.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/coremark/build.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/coremark/build.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/coremark/run.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/coremark/run.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/coremark/run.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/coremark/run.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/coremark/test_pgo.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/coremark/test_pgo.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/coremark/test_pgo.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/coremark/test_pgo.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/dhrystone/LICENSE b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/dhrystone/LICENSE similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/dhrystone/LICENSE rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/dhrystone/LICENSE diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/dhrystone/build.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/dhrystone/build.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/dhrystone/build.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/dhrystone/build.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/dhrystone/include/dhry.h b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/dhrystone/include/dhry.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/dhrystone/include/dhry.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/dhrystone/include/dhry.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/dhrystone/run.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/dhrystone/run.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/dhrystone/run.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/dhrystone/run.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/dhrystone/src/dhry_1.c b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/dhrystone/src/dhry_1.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/dhrystone/src/dhry_1.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/dhrystone/src/dhry_1.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/dhrystone/src/dhry_2.c b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/dhrystone/src/dhry_2.c similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/dhrystone/src/dhry_2.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/dhrystone/src/dhry_2.c diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/dhrystone/test_pgo.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/dhrystone/test_pgo.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/dhrystone/test_pgo.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/dhrystone/test_pgo.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/jetstream/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/jetstream/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/jetstream/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/jetstream/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/jetstream/build.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/jetstream/build.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/jetstream/build.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/jetstream/build.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/jetstream/jetstream.patch b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/jetstream/jetstream.patch similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/jetstream/jetstream.patch rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/jetstream/jetstream.patch diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/jetstream/run_aot.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/jetstream/run_aot.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/jetstream/run_aot.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/jetstream/run_aot.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/jetstream/test_pgo.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/jetstream/test_pgo.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/jetstream/test_pgo.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/jetstream/test_pgo.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/jetstream/tsf.patch b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/jetstream/tsf.patch similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/jetstream/tsf.patch rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/jetstream/tsf.patch diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/libsodium/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/libsodium/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/libsodium/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/libsodium/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/libsodium/build.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/libsodium/build.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/libsodium/build.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/libsodium/build.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/libsodium/run_aot.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/libsodium/run_aot.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/libsodium/run_aot.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/libsodium/run_aot.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/libsodium/test_pgo.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/libsodium/test_pgo.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/libsodium/test_pgo.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/libsodium/test_pgo.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/polybench/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/polybench/README.md similarity index 94% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/polybench/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/polybench/README.md index d8b3db96197..7b6623f2215 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/polybench/README.md +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/polybench/README.md @@ -10,7 +10,7 @@ Please build iwasm and wamrc, refer to: - [Build iwasm on Linux](../../../doc/build_wamr.md#linux), or [Build iwasm on MacOS](../../../doc/build_wamr.md#macos) - [Build wamrc AOT compiler](../../../README.md#build-wamrc-aot-compiler) -And install WASI SDK, please download the [wasi-sdk release](https://github.com/CraneStation/wasi-sdk/releases) and extract the archive to default path `/opt/wasi-sdk`. +And install WASI SDK, please download the [wasi-sdk release](https://github.com/WebAssembly/wasi-sdk/releases) and extract the archive to default path `/opt/wasi-sdk`. And then run `./build.sh` to build the source code, the folder `out` will be created and files will be generated under it. diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/polybench/build.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/polybench/build.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/polybench/build.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/polybench/build.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/polybench/run_aot.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/polybench/run_aot.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/polybench/run_aot.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/polybench/run_aot.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/polybench/run_interp.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/polybench/run_interp.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/polybench/run_interp.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/polybench/run_interp.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/polybench/test_pgo.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/polybench/test_pgo.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/polybench/test_pgo.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/polybench/test_pgo.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/sightglass/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/sightglass/README.md similarity index 93% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/sightglass/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/sightglass/README.md index ff34c7d700b..3f54fda1bcd 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/sightglass/README.md +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/sightglass/README.md @@ -10,7 +10,7 @@ Please build iwasm and wamrc, refer to: - [Build iwasm on Linux](../../../doc/build_wamr.md#linux), or [Build iwasm on MacOS](../../../doc/build_wamr.md#macos) - [Build wamrc AOT compiler](../../../README.md#build-wamrc-aot-compiler) -And install WASI SDK, please download the [wasi-sdk release](https://github.com/CraneStation/wasi-sdk/releases) and extract the archive to default path `/opt/wasi-sdk`. +And install WASI SDK, please download the [wasi-sdk release](https://github.com/WebAssembly/wasi-sdk/releases) and extract the archive to default path `/opt/wasi-sdk`. And then run `./build.sh` to build the source code, the folder `out` will be created and files will be generated under it. diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/sightglass/build.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/sightglass/build.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/sightglass/build.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/sightglass/build.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/sightglass/run_aot.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/sightglass/run_aot.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/sightglass/run_aot.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/sightglass/run_aot.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/sightglass/run_interp.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/sightglass/run_interp.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/sightglass/run_interp.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/sightglass/run_interp.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/sightglass/test_pgo.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/sightglass/test_pgo.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/benchmarks/sightglass/test_pgo.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/benchmarks/sightglass/test_pgo.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/unit/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/unit/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/unit/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/unit/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/unit/main.cpp b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/unit/main.cpp similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/unit/main.cpp rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/unit/main.cpp diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-compiler/.gitignore b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-compiler/.gitignore similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-compiler/.gitignore rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-compiler/.gitignore diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-compiler/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-compiler/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-compiler/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-compiler/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-compiler/test_shift_negative_constants.wat b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-compiler/test_shift_negative_constants.wat similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-compiler/test_shift_negative_constants.wat rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-compiler/test_shift_negative_constants.wat diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/spec-test-script/CHANGES b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/spec-test-script/CHANGES similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/spec-test-script/CHANGES rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/spec-test-script/CHANGES diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/spec-test-script/all.py b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/spec-test-script/all.py similarity index 92% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/spec-test-script/all.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/spec-test-script/all.py index 551a3176c61..7aa47cf413c 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/spec-test-script/all.py +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/spec-test-script/all.py @@ -47,6 +47,7 @@ def get_iwasm_cmd(platform: str) -> str: IWASM_SGX_CMD = "../../../product-mini/platforms/linux-sgx/enclave-sample/iwasm" IWASM_QEMU_CMD = "iwasm" SPEC_TEST_DIR = "spec/test/core" +EXCE_HANDLING_DIR = "exception-handling/test/core" WAST2WASM_CMD = exe_file_path("./wabt/out/gcc/Release/wat2wasm") SPEC_INTERPRETER_CMD = "spec/interpreter/wasm" WAMRC_CMD = "../../../wamr-compiler/build/wamrc" @@ -78,8 +79,10 @@ def ignore_the_case( simd_flag=False, gc_flag=False, xip_flag=False, + eh_flag=False, qemu_flag=False, ): + if case_name in ["comments", "inline-module", "names"]: return True @@ -126,7 +129,7 @@ def ignore_the_case( return False -def preflight_check(aot_flag): +def preflight_check(aot_flag, eh_flag): if not pathlib.Path(SPEC_TEST_DIR).resolve().exists(): print(f"Can not find {SPEC_TEST_DIR}") return False @@ -139,6 +142,10 @@ def preflight_check(aot_flag): print(f"Can not find {WAMRC_CMD}") return False + if eh_flag and not pathlib.Path(EXCE_HANDLING_DIR).resolve().exists(): + print(f"Can not find {EXCE_HANDLING_DIR}") + return False + return True @@ -151,6 +158,7 @@ def test_case( multi_thread_flag=False, simd_flag=False, xip_flag=False, + eh_flag=False, clean_up_flag=True, verbose_flag=True, gc_flag=False, @@ -195,6 +203,9 @@ def test_case( if xip_flag: CMD.append("--xip") + if eh_flag: + CMD.append("--eh") + if qemu_flag: CMD.append("--qemu") CMD.append("--qemu-firmware") @@ -268,6 +279,7 @@ def test_suite( multi_thread_flag=False, simd_flag=False, xip_flag=False, + eh_flag=False, clean_up_flag=True, verbose_flag=True, gc_flag=False, @@ -291,6 +303,15 @@ def test_suite( gc_case_list = sorted(suite_path.glob("gc/*.wast")) case_list.extend(gc_case_list) + if eh_flag: + eh_path = pathlib.Path(EXCE_HANDLING_DIR).resolve() + if not eh_path.exists(): + print(f"can not find spec test cases at {eh_path}") + return False + eh_case_list = sorted(eh_path.glob("*.wast")) + eh_case_list_include = [test for test in eh_case_list if test.stem in ["throw", "tag", "try_catch", "rethrow", "try_delegate"]] + case_list.extend(eh_case_list_include) + # ignore based on command line options filtered_case_list = [] for case_path in case_list: @@ -305,6 +326,7 @@ def test_suite( simd_flag, gc_flag, xip_flag, + eh_flag, qemu_flag, ): filtered_case_list.append(case_path) @@ -331,6 +353,7 @@ def test_suite( multi_thread_flag, simd_flag, xip_flag, + eh_flag, clean_up_flag, verbose_flag, gc_flag, @@ -369,6 +392,7 @@ def test_suite( multi_thread_flag, simd_flag, xip_flag, + eh_flag, clean_up_flag, verbose_flag, gc_flag, @@ -428,6 +452,14 @@ def main(): dest="xip_flag", help="Running with the XIP feature", ) + # added to support WASM_ENABLE_EXCE_HANDLING + parser.add_argument( + "-e", + action="store_true", + default=False, + dest="eh_flag", + help="Running with the exception-handling feature", + ) parser.add_argument( "-t", action="store_true", @@ -508,7 +540,7 @@ def main(): if options.target == "x86_32": options.target = "i386" - if not preflight_check(options.aot_flag): + if not preflight_check(options.aot_flag, options.eh_flag): return False if not options.cases: @@ -527,6 +559,7 @@ def main(): options.multi_thread_flag, options.simd_flag, options.xip_flag, + options.eh_flag, options.clean_up_flag, options.verbose_flag, options.gc_flag, @@ -552,6 +585,7 @@ def main(): options.multi_thread_flag, options.simd_flag, options.xip_flag, + options.eh_flag, options.clean_up_flag, options.verbose_flag, options.gc_flag, diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/spec-test-script/all.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/spec-test-script/all.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/spec-test-script/all.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/spec-test-script/all.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/spec-test-script/collect_coverage.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/spec-test-script/collect_coverage.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/spec-test-script/collect_coverage.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/spec-test-script/collect_coverage.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/spec-test-script/exception_handling.patch b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/spec-test-script/exception_handling.patch new file mode 100644 index 00000000000..0c9e8d40f5c --- /dev/null +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/spec-test-script/exception_handling.patch @@ -0,0 +1,20 @@ +diff --git a/test/core/try_catch.wast b/test/core/try_catch.wast +index 2a0e9ff6..f243489d 100644 +--- a/test/core/try_catch.wast ++++ b/test/core/try_catch.wast +@@ -203,7 +203,6 @@ + + (assert_return (invoke "catch-param-i32" (i32.const 5)) (i32.const 5)) + +-(assert_return (invoke "catch-imported") (i32.const 2)) + + (assert_return (invoke "catchless-try" (i32.const 0)) (i32.const 0)) + (assert_return (invoke "catchless-try" (i32.const 1)) (i32.const 1)) +@@ -231,7 +230,6 @@ + ) + ) + +-(assert_return (invoke "imported-mismatch") (i32.const 3)) + + (assert_malformed + (module quote "(module (func (catch_all)))") diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/spec-test-script/ignore_cases.patch b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/spec-test-script/ignore_cases.patch similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/spec-test-script/ignore_cases.patch rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/spec-test-script/ignore_cases.patch diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/spec-test-script/multi_module_aot_ignore_cases.patch b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/spec-test-script/multi_module_aot_ignore_cases.patch similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/spec-test-script/multi_module_aot_ignore_cases.patch rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/spec-test-script/multi_module_aot_ignore_cases.patch diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/spec-test-script/runtest.py b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/spec-test-script/runtest.py similarity index 96% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/spec-test-script/runtest.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/spec-test-script/runtest.py index dcc0c3361db..60d4607e9b5 100755 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/spec-test-script/runtest.py +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/spec-test-script/runtest.py @@ -301,6 +301,9 @@ def assert_prompt(runner, prompts, timeout, is_need_execute_result): parser.add_argument('--xip', default=False, action='store_true', help="Enable XIP") +parser.add_argument('--eh', default=False, action='store_true', + help="Enable Exception Handling") + parser.add_argument('--multi-module', default=False, action='store_true', help="Enable Multi-thread") @@ -762,6 +765,13 @@ def test_assert(r, opts, mode, cmd, expected): if o.find(e) >= 0 or e.find(o) >= 0: return True + # wasm-exception thrown out of function call, not a trap + if mode=='wasmexception': + o = re.sub('^Exception: ', '', out) + e = re.sub('^Exception: ', '', expected) + if o.find(e) >= 0 or e.find(o) >= 0: + return True + ## 0x9:i32,-0x1:i32 -> ['0x9:i32', '-0x1:i32'] expected_list = re.split(',', expected) out_list = re.split(',', out) @@ -987,6 +997,42 @@ def test_assert_exhaustion(r,opts,form): expected = "Exception: %s\n" % m.group(3) test_assert(r, opts, "exhaustion", "%s %s" % (func, " ".join(args)), expected) + +# added to support WASM_ENABLE_EXCE_HANDLING +def test_assert_wasmexception(r,opts,form): + # params + + # ^ + # \(assert_exception\s+ + # \(invoke\s+"([^"]+)"\s+ + # (\(.*\))\s* + # () + # \)\s* + # \)\s* + # $ + m = re.search('^\(assert_exception\s+\(invoke\s+"([^"]+)"\s+(\(.*\))\s*\)\s*\)\s*$', form) + if not m: + # no params + + # ^ + # \(assert_exception\s+ + # \(invoke\s+"([^"]+)"\s* + # () + # \)\s* + # \)\s* + # $ + m = re.search('^\(assert_exception\s+\(invoke\s+"([^"]+)"\s*()\)\s*\)\s*$', form) + if not m: + raise Exception("unparsed assert_exception: '%s'" % form) + func = m.group(1) # function name + if m.group(2) == '': # arguments + args = [] + else: + args = [re.split(' +', v)[1] for v in re.split("\)\s*\(", m.group(2)[1:-1])] + + expected = "Exception: uncaught wasm exception\n" + test_assert(r, opts, "wasmexception", "%s %s" % (func, " ".join(args)), expected) + def do_invoke(r, opts, form): # params m = re.search('^\(invoke\s+"([^"]+)"\s+(\(.*\))\s*\)\s*$', form) @@ -1025,6 +1071,8 @@ def compile_wast_to_wasm(form, wast_tempfile, wasm_tempfile, opts): # default arguments if opts.gc: cmd = [opts.wast2wasm, "-u", "-d", wast_tempfile, "-o", wasm_tempfile] + elif opts.eh: + cmd = [opts.wast2wasm, "--enable-thread", "--no-check", "--enable-exceptions", "--enable-tail-call", wast_tempfile, "-o", wasm_tempfile ] else: cmd = [opts.wast2wasm, "--enable-thread", "--no-check", wast_tempfile, "-o", wasm_tempfile ] @@ -1236,6 +1284,8 @@ def test_assert_with_exception(form, wast_tempfile, wasm_tempfile, aot_tempfile, test_assert_with_exception(form, wast_tempfile, wasm_tempfile, aot_tempfile if test_aot else None, opts, r) elif re.match("^\(assert_exhaustion\\b.*", form): test_assert_exhaustion(r, opts, form) + elif re.match("^\(assert_exception\\b.*", form): + test_assert_wasmexception(r, opts, form) elif re.match("^\(assert_unlinkable\\b.*", form): test_assert_with_exception(form, wast_tempfile, wasm_tempfile, aot_tempfile if test_aot else None, opts, r, False) elif re.match("^\(assert_malformed\\b.*", form): diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/spec-test-script/simd_ignore_cases.patch b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/spec-test-script/simd_ignore_cases.patch similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/spec-test-script/simd_ignore_cases.patch rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/spec-test-script/simd_ignore_cases.patch diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/spec-test-script/tail-call/return_call.wast b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/spec-test-script/tail-call/return_call.wast similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/spec-test-script/tail-call/return_call.wast rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/spec-test-script/tail-call/return_call.wast diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/spec-test-script/tail-call/return_call_indirect.wast b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/spec-test-script/tail-call/return_call_indirect.wast similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/spec-test-script/tail-call/return_call_indirect.wast rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/spec-test-script/tail-call/return_call_indirect.wast diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/spec-test-script/thread_proposal_fix_atomic_case.patch b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/spec-test-script/thread_proposal_fix_atomic_case.patch similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/spec-test-script/thread_proposal_fix_atomic_case.patch rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/spec-test-script/thread_proposal_fix_atomic_case.patch diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/spec-test-script/thread_proposal_ignore_cases.patch b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/spec-test-script/thread_proposal_ignore_cases.patch similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/spec-test-script/thread_proposal_ignore_cases.patch rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/spec-test-script/thread_proposal_ignore_cases.patch diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/test_wamr.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/test_wamr.sh similarity index 96% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/test_wamr.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/test_wamr.sh index 76b235d499e..7f41fc43dfd 100755 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/test_wamr.sh +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/test_wamr.sh @@ -24,6 +24,7 @@ function help() echo "-S enable SIMD feature" echo "-G enable GC feature" echo "-X enable XIP feature" + echo "-e enable exception handling" echo "-x test SGX" echo "-w enable WASI threads" echo "-b use the wabt binary release package instead of compiling from the source code" @@ -50,6 +51,7 @@ COLLECT_CODE_COVERAGE=0 ENABLE_SIMD=0 ENABLE_GC=0 ENABLE_XIP=0 +ENABLE_EH=0 ENABLE_DEBUG_VERSION=0 ENABLE_GC_HEAP_VERIFY=0 #unit test case arrary @@ -70,7 +72,7 @@ WASI_TESTSUITE_COMMIT="ee807fc551978490bf1c277059aabfa1e589a6c2" TARGET_LIST=("AARCH64" "AARCH64_VFP" "ARMV7" "ARMV7_VFP" "THUMBV7" "THUMBV7_VFP" \ "RISCV32" "RISCV32_ILP32F" "RISCV32_ILP32D" "RISCV64" "RISCV64_LP64F" "RISCV64_LP64D") -while getopts ":s:cabgvt:m:MCpSXxwPGQF:j:T:" opt +while getopts ":s:cabgvt:m:MCpSXexwPGQF:j:T:" opt do OPT_PARSED="TRUE" case $opt in @@ -119,7 +121,7 @@ do ;; m) echo "set compile target of wamr" ${OPTARG} - TARGET=${OPTARG^^} # set target to uppercase if input x86_32 or x86_64 --> X86_32 and X86_64 + TARGET=$(echo "$OPTARG" | tr '[a-z]' '[A-Z]') # set target to uppercase if input x86_32 or x86_64 --> X86_32 and X86_64 ;; w) echo "enable WASI threads" @@ -145,6 +147,10 @@ do echo "enable XIP feature" ENABLE_XIP=1 ;; + e) + echo "enable exception handling feature" + ENABLE_EH=1 + ;; x) echo "test SGX" SGX_OPT="--sgx" @@ -425,6 +431,26 @@ function spec_test() git apply ../../spec-test-script/thread_proposal_fix_atomic_case.patch fi + if [ ${ENABLE_EH} == 1 ]; then + echo "checkout exception-handling test cases" + popd + if [ ! -d "exception-handling" ];then + echo "exception-handling not exist, clone it from github" + git clone -b master --single-branch https://github.com/WebAssembly/exception-handling + fi + pushd exception-handling + + # restore and clean everything + git reset --hard 51c721661b671bb7dc4b3a3acb9e079b49778d36 + + if [[ ${ENABLE_MULTI_MODULE} == 0 ]]; then + git apply ../../spec-test-script/exception_handling.patch + fi + + popd + echo $(pwd) + fi + # update GC cases if [[ ${ENABLE_GC} == 1 ]]; then echo "checkout spec for GC proposal" @@ -463,6 +489,10 @@ function spec_test() fi fi + if [[ 1 == ${ENABLE_EH} ]]; then + ARGS_FOR_SPEC_TEST+="-e " + fi + # sgx only enable in interp mode and aot mode if [[ ${SGX_OPT} == "--sgx" ]];then if [[ $1 == 'classic-interp' || $1 == 'fast-interp' || $1 == 'aot' || $1 == 'fast-jit' ]]; then @@ -827,6 +857,10 @@ function trigger() EXTRA_COMPILE_FLAGS+=" -DWAMR_BUILD_LIB_WASI_THREADS=1" fi + if [[ ${ENABLE_EH} == 1 ]]; then + EXTRA_COMPILE_FLAGS+=" -DWAMR_BUILD_EXCE_HANDLING=1" + EXTRA_COMPILE_FLAGS+=" -DWAMR_BUILD_TAIL_CALL=1" + fi echo "SANITIZER IS" $WAMR_BUILD_SANITIZER if [[ "$WAMR_BUILD_SANITIZER" == "ubsan" ]]; then diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/tsan_suppressions.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/tsan_suppressions.txt similarity index 96% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/tsan_suppressions.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/tsan_suppressions.txt index d79eafddc56..dd903a60577 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/tsan_suppressions.txt +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/tsan_suppressions.txt @@ -1,6 +1,7 @@ # Proposing to accept this risk for now. It might be wasi-libc related. # https://github.com/bytecodealliance/wasm-micro-runtime/pull/1963#issuecomment-1455342931 race:STORE_U32 +race:STORE_U8 # Suppressing signal-unsafe inside of a signal for AOT mode # see https://github.com/bytecodealliance/wasm-micro-runtime/issues/2248#issuecomment-1630189656 diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/wamr-compiler-test-script/run_wamr_compiler_tests.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/wamr-compiler-test-script/run_wamr_compiler_tests.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/wamr-compiler-test-script/run_wamr_compiler_tests.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/wamr-compiler-test-script/run_wamr_compiler_tests.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/wasi-test-script/pipe.py b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/wasi-test-script/pipe.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/wasi-test-script/pipe.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/wasi-test-script/pipe.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/wasi-test-script/run_wasi_tests.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/wasi-test-script/run_wasi_tests.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/tests/wamr-test-suites/wasi-test-script/run_wasi_tests.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/tests/wamr-test-suites/wasi-test-script/run_wasi_tests.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-compiler/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-compiler/CMakeLists.txt similarity index 75% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-compiler/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-compiler/CMakeLists.txt index 5fe8fae16f2..84e8b524c59 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-compiler/CMakeLists.txt +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-compiler/CMakeLists.txt @@ -44,36 +44,53 @@ add_definitions(-DWASM_ENABLE_CUSTOM_NAME_SECTION=1) add_definitions(-DWASM_ENABLE_DUMP_CALL_STACK=1) add_definitions(-DWASM_ENABLE_PERF_PROFILING=1) add_definitions(-DWASM_ENABLE_LOAD_CUSTOM_SECTION=1) -add_definitions(-DWASM_ENABLE_LIB_WASI_THREADS=1) add_definitions(-DWASM_ENABLE_MODULE_INST_CONTEXT=1) if (WAMR_BUILD_LLVM_LEGACY_PM EQUAL 1) add_definitions(-DWASM_ENABLE_LLVM_LEGACY_PM=1) -endif() +endif () + +if (LINUX) + add_definitions(-DWASM_ENABLE_LINUX_PERF=1) +endif () if (DEFINED WAMR_BUILD_AOT_FUNC_PREFIX) add_definitions(-DAOT_FUNC_PREFIX="${WAMR_BUILD_AOT_FUNC_PREFIX}") endif () -# Set WAMR_BUILD_TARGET, currently values supported: -# "X86_64", "AMD_64", "X86_32", "ARM_32", "MIPS_32", "XTENSA_32" if (NOT WAMR_BUILD_TARGET) - if (CMAKE_SIZEOF_VOID_P EQUAL 8) - # Build as X86_64 by default in 64-bit platform + string(TOLOWER "${CMAKE_HOST_SYSTEM_PROCESSOR}" HOST_SYSTEM_PROCESSOR) + if (${HOST_SYSTEM_PROCESSOR} STREQUAL "x86_64") set (WAMR_BUILD_TARGET "X86_64") - else () - # Build as X86_32 by default in 32-bit platform + elseif (${HOST_SYSTEM_PROCESSOR} STREQUAL "i686") set (WAMR_BUILD_TARGET "X86_32") - endif () + elseif (${HOST_SYSTEM_PROCESSOR} STREQUAL "amd64") + set (WAMR_BUILD_TARGET "AMD_64") + elseif (${HOST_SYSTEM_PROCESSOR} STREQUAL "aarch64" + OR ${HOST_SYSTEM_PROCESSOR} STREQUAL "arm64") + set (WAMR_BUILD_TARGET "AARCH64") + elseif (${HOST_SYSTEM_PROCESSOR} MATCHES "arm.*") + message(STATUS "Assuming ${CMAKE_HOST_SYSTEM_PROCESSOR} as ARM_32") + set (WAMR_BUILD_TARGET "ARM_32") + elseif (${HOST_SYSTEM_PROCESSOR} STREQUAL "mips") + set (WAMR_BUILD_TARGET "MIPS_32") + elseif (${HOST_SYSTEM_PROCESSOR} STREQUAL "xtensa") + set (WAMR_BUILD_TARGET "XTENSA_32") + elseif (${HOST_SYSTEM_PROCESSOR} STREQUAL "riscv64") + set (WAMR_BUILD_TARGET "RISCV64") + elseif (${HOST_SYSTEM_PROCESSOR} STREQUAL "riscv") + message(STATUS "Assuming ${CMAKE_HOST_SYSTEM_PROCESSOR} as RISCV32") + set (WAMR_BUILD_TARGET "RISCV32") + else () + message (FATAL_ERROR "Unsupported CMAKE_HOST_SYSTEM_PROCESSOR " + "${CMAKE_HOST_SYSTEM_PROCESSOR}") + endif() + if (WAMR_BUILD_PLATFORM STREQUAL "windows") if (("${CMAKE_GENERATOR_PLATFORM}" STREQUAL "Win32")) set (WAMR_BUILD_TARGET "X86_32") endif() - elseif (WAMR_BUILD_PLATFORM STREQUAL "darwin") - if (CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "arm64") - set (WAMR_BUILD_TARGET "AARCH64") - endif () - endif() + endif () endif () string(TOUPPER ${WAMR_BUILD_TARGET} WAMR_BUILD_TARGET) @@ -199,31 +216,97 @@ include_directories (${SHARED_DIR}/include enable_language (ASM) if (NOT MINGW AND NOT MSVC) - set(WAMR_BUILD_LIBC_WASI 1) -else() - set(WAMR_BUILD_LIBC_UVWASI 1) -endif() + if ((NOT DEFINED WAMR_BUILD_LIBC_WASI) AND (NOT DEFINED WAMR_BUILD_LIBC_UVWASI)) + set (WAMR_BUILD_LIBC_WASI 1) + endif () + + if ((WAMR_BUILD_LIBC_WASI EQUAL 1) AND (WAMR_BUILD_LIBC_UVWASI EQUAL 1)) + message (WARNING "-- pick WAMR_BULID_LIBC_UVWASI when both are enabled") + set (WAMR_BUILD_LIBC_WASI 0) + endif () +else () + if (NOT DEFINED WAMR_BUILD_LIBC_UVWASI) + set (WAMR_BUILD_LIBC_UVWASI 1) + endif () + + if (WAMR_BUILD_LIBC_WASI EQUAL 1) + message (WARNING "-- don't accept WAMR_BUILD_LIBC_WASI=1 on MINGW or MSVC") + set (WAMR_BUILD_LIBC_WASI 0) + endif () +endif () + +if (NOT DEFINED WAMR_BUILD_LIBC_BUILTIN) + set (WAMR_BUILD_LIBC_BUILTIN 1) +endif () + +if (NOT DEFINED WAMR_BUILD_LIB_PTHREAD) + set (WAMR_BUILD_LIB_PTHREAD 1) +endif () + +if (NOT DEFINED WAMR_BUILD_LIB_WASI_THREADS) + set (WAMR_BUILD_LIB_WASI_THREADS 1) +endif () + +if (WAMR_BUILD_LIBC_UVWASI EQUAL 1) + message ("-- Libc WASI enabled with uvwasi implementation") +endif () + +if (WAMR_BUILD_LIBC_WASI EQUAL 1) + message ("-- Libc WASI enabled") +endif () + +if ((NOT WAMR_BUILD_LIBC_WASI) AND (NOT WAMR_BUILD_LIBC_UVWASI)) + message ("-- Libc WASI disabled") +endif () + +if (WAMR_BUILD_LIBC_BUILTIN EQUAL 1) + message ("-- Libc builtin enabled") +else () + message ("-- Libc builtin disabled") +endif () + +if (WAMR_BUILD_LIB_PTHREAD EQUAL 1) + message ("-- Lib pthread enabled") +else () + message ("-- Lib pthread disabled") +endif () + +if (WAMR_BUILD_LIB_WASI_THREADS EQUAL 1) + message ("-- Lib wasi-threads enabled") +else () + message ("-- Lib wasi-threads disabled") +endif () include (${SHARED_DIR}/platform/${WAMR_BUILD_PLATFORM}/shared_platform.cmake) include (${SHARED_DIR}/mem-alloc/mem_alloc.cmake) include (${SHARED_DIR}/utils/shared_utils.cmake) include (${SHARED_DIR}/utils/uncommon/shared_uncommon.cmake) include (${IWASM_DIR}/libraries/thread-mgr/thread_mgr.cmake) -include (${IWASM_DIR}/libraries/libc-builtin/libc_builtin.cmake) -if (NOT MINGW) - if (NOT MSVC) - include (${IWASM_DIR}/libraries/libc-wasi/libc_wasi.cmake) - else() - include (${IWASM_DIR}/libraries/libc-uvwasi/libc_uvwasi.cmake) - endif() -endif() -include (${IWASM_DIR}/libraries/lib-pthread/lib_pthread.cmake) -include (${IWASM_DIR}/libraries/lib-wasi-threads/lib_wasi_threads.cmake) include (${IWASM_DIR}/common/iwasm_common.cmake) include (${IWASM_DIR}/interpreter/iwasm_interp.cmake) include (${IWASM_DIR}/aot/iwasm_aot.cmake) include (${IWASM_DIR}/compilation/iwasm_compl.cmake) +if (WAMR_BUILD_LIBC_BUILTIN EQUAL 1) + include (${IWASM_DIR}/libraries/libc-builtin/libc_builtin.cmake) +endif () + +if (WAMR_BUILD_LIBC_UVWASI EQUAL 1) + include (${IWASM_DIR}/libraries/libc-uvwasi/libc_uvwasi.cmake) +endif () + +if (WAMR_BUILD_LIBC_WASI EQUAL 1) + include (${IWASM_DIR}/libraries/libc-wasi/libc_wasi.cmake) +endif () + +if (WAMR_BUILD_LIB_PTHREAD EQUAL 1) + include (${IWASM_DIR}/libraries/lib-pthread/lib_pthread.cmake) +endif () + +if (WAMR_BUILD_LIB_WASI_THREADS EQUAL 1) + include (${IWASM_DIR}/libraries/lib-wasi-threads/lib_wasi_threads.cmake) +endif () + # set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wconversion -Wsign-conversion") if (WAMR_BUILD_TARGET MATCHES "X86_.*" OR WAMR_BUILD_TARGET STREQUAL "AMD_64") if (NOT (CMAKE_C_COMPILER MATCHES ".*clang.*" OR CMAKE_C_COMPILER_ID MATCHES ".*Clang" OR MSVC)) diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-compiler/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-compiler/README.md similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-compiler/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-compiler/README.md diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-compiler/build_llvm.py b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-compiler/build_llvm.py similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-compiler/build_llvm.py rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-compiler/build_llvm.py diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-compiler/build_llvm.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-compiler/build_llvm.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-compiler/build_llvm.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-compiler/build_llvm.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-compiler/build_llvm_arc.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-compiler/build_llvm_arc.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-compiler/build_llvm_arc.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-compiler/build_llvm_arc.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-compiler/build_llvm_xtensa.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-compiler/build_llvm_xtensa.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-compiler/build_llvm_xtensa.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-compiler/build_llvm_xtensa.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-compiler/main.c b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-compiler/main.c similarity index 95% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-compiler/main.c rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-compiler/main.c index 0d85b99ce92..0a94175dc93 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-compiler/main.c +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-compiler/main.c @@ -174,7 +174,7 @@ print_help() printf(" Enable the specified LLVM passes, using comma to separate\n"); printf(" --use-prof-file= Use profile file collected by LLVM PGO (Profile-Guided Optimization)\n"); printf(" --enable-segue[=] Enable using segment register GS as the base address of linear memory,\n"); - printf(" only available on linux/linux-sgx x86-64, which may improve performance,\n"); + printf(" only available on linux x86-64, which may improve performance,\n"); printf(" flags can be: i32.load, i64.load, f32.load, f64.load, v128.load,\n"); printf(" i32.store, i64.store, f32.store, f64.store, v128.store\n"); printf(" Use comma to separate, e.g. --enable-segue=i32.load,i64.store\n"); @@ -184,9 +184,14 @@ print_help() printf(" multiple names, e.g.\n"); printf(" --emit-custom-sections=section1,section2,sectionN\n"); #if BH_HAS_DLFCN - printf(" --native-lib= Register native libraries to the WASM module, which\n"); - printf(" are shared object (.so) files, for example:\n"); - printf(" --native-lib=test1.so --native-lib=test2.so\n"); + printf(" --native-lib= Register native libraries to the WASM module, which\n"); + printf(" are shared object (.so) files, for example:\n"); + printf(" --native-lib=test1.so --native-lib=test2.so\n"); +#endif + printf(" --invoke-c-api-import Treat unknown import function as wasm-c-api import function and\n"); + printf(" quick call it from AOT code\n"); +#if WASM_ENABLE_LINUX_PERF != 0 + printf(" --enable-linux-perf Enable linux perf support\n"); #endif printf(" -v=n Set log verbose level (0 to 5, default is 2), larger with more log\n"); printf(" --version Show version information\n"); @@ -325,6 +330,9 @@ main(int argc, char *argv[]) void *native_handle_list[8] = { NULL }; uint32 native_handle_count = 0; #endif +#if WASM_ENABLE_LINUX_PERF != 0 + bool enable_linux_perf = false; +#endif option.opt_level = 3; option.size_level = 3; @@ -526,7 +534,15 @@ main(int argc, char *argv[]) native_lib_list[native_lib_count++] = argv[0] + 13; } #endif - else if (!strncmp(argv[0], "--version", 9)) { + else if (!strcmp(argv[0], "--invoke-c-api-import")) { + option.quick_invoke_c_api_import = true; + } +#if WASM_ENABLE_LINUX_PERF != 0 + else if (!strcmp(argv[0], "--enable-linux-perf")) { + enable_linux_perf = true; + } +#endif + else if (!strcmp(argv[0], "--version")) { uint32 major, minor, patch; wasm_runtime_get_version(&major, &minor, &patch); printf("wamrc %u.%u.%u\n", major, minor, patch); @@ -579,6 +595,9 @@ main(int argc, char *argv[]) init_args.mem_alloc_option.allocator.malloc_func = malloc; init_args.mem_alloc_option.allocator.realloc_func = realloc; init_args.mem_alloc_option.allocator.free_func = free; +#if WASM_ENABLE_LINUX_PERF != 0 + init_args.enable_linux_perf = enable_linux_perf; +#endif /* initialize runtime environment */ if (!wasm_runtime_full_init(&init_args)) { @@ -608,8 +627,10 @@ main(int argc, char *argv[]) goto fail1; } - if (get_package_type(wasm_file, wasm_file_size) != Wasm_Module_Bytecode) { - printf("Invalid file type: expected wasm file but got other\n"); + if (wasm_file_size >= 4 /* length of MAGIC NUMBER */ + && get_package_type(wasm_file, wasm_file_size) + != Wasm_Module_Bytecode) { + printf("Invalid wasm file: magic header not detected\n"); goto fail2; } diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/Kconfig b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/Kconfig similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/Kconfig rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/Kconfig diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/Makefile b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/Makefile similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/Makefile rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/Makefile diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/README.md b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/README.md similarity index 97% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/README.md rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/README.md index 14b172e0289..fd926af8624 100644 --- a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/README.md +++ b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/README.md @@ -8,7 +8,7 @@ Usually there are two tasks for integrating the WAMR into a particular project: The **[WAMR SDK](./wamr-sdk)** tools is helpful to finish the two tasks quickly. It supports menu configuration for selecting WAMR components and builds the WAMR to a SDK package that includes **runtime SDK** and **APP SDK**. The runtime SDK is used for building the native application and the APP SDK should be shipped to WASM application developers. -**Note**: [WASI-SDK](https://github.com/CraneStation/wasi-sdk/releases) version 7 and above should be installed before building the WAMR SDK. +**Note**: [WASI-SDK](https://github.com/WebAssembly/wasi-sdk/releases) version 7 and above should be installed before building the WAMR SDK. diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/libc-builtin-sysroot/include/assert.h b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/libc-builtin-sysroot/include/assert.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/libc-builtin-sysroot/include/assert.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/libc-builtin-sysroot/include/assert.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/libc-builtin-sysroot/include/ctype.h b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/libc-builtin-sysroot/include/ctype.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/libc-builtin-sysroot/include/ctype.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/libc-builtin-sysroot/include/ctype.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/libc-builtin-sysroot/include/errno.h b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/libc-builtin-sysroot/include/errno.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/libc-builtin-sysroot/include/errno.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/libc-builtin-sysroot/include/errno.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/libc-builtin-sysroot/include/fcntl.h b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/libc-builtin-sysroot/include/fcntl.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/libc-builtin-sysroot/include/fcntl.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/libc-builtin-sysroot/include/fcntl.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/libc-builtin-sysroot/include/inttypes.h b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/libc-builtin-sysroot/include/inttypes.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/libc-builtin-sysroot/include/inttypes.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/libc-builtin-sysroot/include/inttypes.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/libc-builtin-sysroot/include/limits.h b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/libc-builtin-sysroot/include/limits.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/libc-builtin-sysroot/include/limits.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/libc-builtin-sysroot/include/limits.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/libc-builtin-sysroot/include/pthread.h b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/libc-builtin-sysroot/include/pthread.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/libc-builtin-sysroot/include/pthread.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/libc-builtin-sysroot/include/pthread.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/libc-builtin-sysroot/include/semaphore.h b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/libc-builtin-sysroot/include/semaphore.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/libc-builtin-sysroot/include/semaphore.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/libc-builtin-sysroot/include/semaphore.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/libc-builtin-sysroot/include/stdarg.h b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/libc-builtin-sysroot/include/stdarg.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/libc-builtin-sysroot/include/stdarg.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/libc-builtin-sysroot/include/stdarg.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/libc-builtin-sysroot/include/stdbool.h b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/libc-builtin-sysroot/include/stdbool.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/libc-builtin-sysroot/include/stdbool.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/libc-builtin-sysroot/include/stdbool.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/libc-builtin-sysroot/include/stdint.h b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/libc-builtin-sysroot/include/stdint.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/libc-builtin-sysroot/include/stdint.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/libc-builtin-sysroot/include/stdint.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/libc-builtin-sysroot/include/stdio.h b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/libc-builtin-sysroot/include/stdio.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/libc-builtin-sysroot/include/stdio.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/libc-builtin-sysroot/include/stdio.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/libc-builtin-sysroot/include/stdlib.h b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/libc-builtin-sysroot/include/stdlib.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/libc-builtin-sysroot/include/stdlib.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/libc-builtin-sysroot/include/stdlib.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/libc-builtin-sysroot/include/string.h b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/libc-builtin-sysroot/include/string.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/libc-builtin-sysroot/include/string.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/libc-builtin-sysroot/include/string.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/libc-builtin-sysroot/include/strings.h b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/libc-builtin-sysroot/include/strings.h similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/libc-builtin-sysroot/include/strings.h rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/libc-builtin-sysroot/include/strings.h diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/libc-builtin-sysroot/share/defined-symbols.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/libc-builtin-sysroot/share/defined-symbols.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/libc-builtin-sysroot/share/defined-symbols.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/libc-builtin-sysroot/share/defined-symbols.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/wamr_toolchain.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/wamr_toolchain.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/wamr_toolchain.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/wamr_toolchain.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/wasi_toolchain.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/wasi_toolchain.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/app/wasi_toolchain.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/app/wasi_toolchain.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/build_sdk.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/build_sdk.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/build_sdk.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/build_sdk.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/menuconfig.sh b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/menuconfig.sh similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/menuconfig.sh rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/menuconfig.sh diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/runtime/CMakeLists.txt b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/runtime/CMakeLists.txt similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/runtime/CMakeLists.txt rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/runtime/CMakeLists.txt diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/wamr_config_default.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/wamr_config_default.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/wamr_config_default.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/wamr_config_default.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/wamr_config_macos_release.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/wamr_config_macos_release.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/wamr_config_macos_release.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/wamr_config_macos_release.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/wamr_config_ubuntu_release.cmake b/lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/wamr_config_ubuntu_release.cmake similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/wamr-sdk/wamr_config_ubuntu_release.cmake rename to lib/wasm-micro-runtime-WAMR-1.3.3/wamr-sdk/wamr_config_ubuntu_release.cmake diff --git a/lib/wasm-micro-runtime-WAMR-1.3.0/zephyr/module.yml b/lib/wasm-micro-runtime-WAMR-1.3.3/zephyr/module.yml similarity index 100% rename from lib/wasm-micro-runtime-WAMR-1.3.0/zephyr/module.yml rename to lib/wasm-micro-runtime-WAMR-1.3.3/zephyr/module.yml