[instantiation linking] Create and import WASMTableInstance (#3898)
Some checks failed
compilation on android, ubuntu-22.04 / build_llvm_libraries_on_ubuntu_2204 (push) Has been cancelled
compilation on macos / build_llvm_libraries_on_intel_macos (push) Has been cancelled
compilation on macos / build_llvm_libraries_on_arm_macos (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/arm/rp2040/raspberrypi-pico/configs/nsh, CONFIG_INTERPRETERS_WAMR_AOT CONFIG_INTERPRETERS_WAMR_CLASSIC CONFIG_INTERPRETERS_WAMR_LIBC_WASI) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/arm/rp2040/raspberrypi-pico/configs/nsh, CONFIG_INTERPRETERS_WAMR_AOT CONFIG_INTERPRETERS_WAMR_CLASSIC) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/arm/rp2040/raspberrypi-pico/configs/nsh, CONFIG_INTERPRETERS_WAMR_AOT CONFIG_INTERPRETERS_WAMR_FAST CONFIG_INTERPRETERS_WAMR_LIBC_BUILTIN) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/arm/rp2040/raspberrypi-pico/configs/nsh, CONFIG_INTERPRETERS_WAMR_AOT CONFIG_INTERPRETERS_WAMR_FAST CONFIG_INTERPRETERS_WAMR_LIBC_WASI) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/arm/rp2040/raspberrypi-pico/configs/nsh, CONFIG_INTERPRETERS_WAMR_AOT CONFIG_INTERPRETERS_WAMR_FAST) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/arm/rp2040/raspberrypi-pico/configs/nsh, CONFIG_INTERPRETERS_WAMR_AOT) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/arm/rp2040/raspberrypi-pico/configs/nsh, CONFIG_INTERPRETERS_WAMR_CLASSIC) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/arm/rp2040/raspberrypi-pico/configs/nsh, CONFIG_INTERPRETERS_WAMR_FAST) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/arm/stm32h7/nucleo-h743zi/configs/nsh, CONFIG_INTERPRETERS_WAMR_AOT CONFIG_INTERPRETERS_WAMR_CLASSIC CONFIG_INTERPRETERS_WAMR_LIBC_WASI) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/arm/stm32h7/nucleo-h743zi/configs/nsh, CONFIG_INTERPRETERS_WAMR_AOT CONFIG_INTERPRETERS_WAMR_CLASSIC) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/arm/stm32h7/nucleo-h743zi/configs/nsh, CONFIG_INTERPRETERS_WAMR_AOT CONFIG_INTERPRETERS_WAMR_FAST CONFIG_INTERPRETERS_WAMR_LIBC_BUILTIN) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/arm/stm32h7/nucleo-h743zi/configs/nsh, CONFIG_INTERPRETERS_WAMR_AOT CONFIG_INTERPRETERS_WAMR_FAST CONFIG_INTERPRETERS_WAMR_LIBC_WASI) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/arm/stm32h7/nucleo-h743zi/configs/nsh, CONFIG_INTERPRETERS_WAMR_AOT CONFIG_INTERPRETERS_WAMR_FAST) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/arm/stm32h7/nucleo-h743zi/configs/nsh, CONFIG_INTERPRETERS_WAMR_AOT) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/arm/stm32h7/nucleo-h743zi/configs/nsh, CONFIG_INTERPRETERS_WAMR_CLASSIC) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/arm/stm32h7/nucleo-h743zi/configs/nsh, CONFIG_INTERPRETERS_WAMR_FAST) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/arm64/qemu/qemu-armv8a/configs/nsh, CONFIG_INTERPRETERS_WAMR_AOT CONFIG_INTERPRETERS_WAMR_CLASSIC CONFIG_INTERPRETERS_WAMR_LIBC_WASI) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/arm64/qemu/qemu-armv8a/configs/nsh, CONFIG_INTERPRETERS_WAMR_AOT CONFIG_INTERPRETERS_WAMR_CLASSIC) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/arm64/qemu/qemu-armv8a/configs/nsh, CONFIG_INTERPRETERS_WAMR_AOT CONFIG_INTERPRETERS_WAMR_FAST CONFIG_INTERPRETERS_WAMR_LIBC_BUILTIN) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/arm64/qemu/qemu-armv8a/configs/nsh, CONFIG_INTERPRETERS_WAMR_AOT CONFIG_INTERPRETERS_WAMR_FAST CONFIG_INTERPRETERS_WAMR_LIBC_WASI) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/arm64/qemu/qemu-armv8a/configs/nsh, CONFIG_INTERPRETERS_WAMR_AOT CONFIG_INTERPRETERS_WAMR_FAST) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/arm64/qemu/qemu-armv8a/configs/nsh, CONFIG_INTERPRETERS_WAMR_AOT) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/arm64/qemu/qemu-armv8a/configs/nsh, CONFIG_INTERPRETERS_WAMR_CLASSIC) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/arm64/qemu/qemu-armv8a/configs/nsh, CONFIG_INTERPRETERS_WAMR_FAST) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/risc-v/qemu-rv/rv-virt/configs/nsh, CONFIG_INTERPRETERS_WAMR_AOT CONFIG_INTERPRETERS_WAMR_CLASSIC CONFIG_INTERPRETERS_WAMR_LIBC_WASI) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/risc-v/qemu-rv/rv-virt/configs/nsh, CONFIG_INTERPRETERS_WAMR_AOT CONFIG_INTERPRETERS_WAMR_CLASSIC) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/risc-v/qemu-rv/rv-virt/configs/nsh, CONFIG_INTERPRETERS_WAMR_AOT CONFIG_INTERPRETERS_WAMR_FAST CONFIG_INTERPRETERS_WAMR_LIBC_BUILTIN) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/risc-v/qemu-rv/rv-virt/configs/nsh, CONFIG_INTERPRETERS_WAMR_AOT CONFIG_INTERPRETERS_WAMR_FAST CONFIG_INTERPRETERS_WAMR_LIBC_WASI) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/risc-v/qemu-rv/rv-virt/configs/nsh, CONFIG_INTERPRETERS_WAMR_AOT CONFIG_INTERPRETERS_WAMR_FAST) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/risc-v/qemu-rv/rv-virt/configs/nsh, CONFIG_INTERPRETERS_WAMR_AOT) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/risc-v/qemu-rv/rv-virt/configs/nsh, CONFIG_INTERPRETERS_WAMR_CLASSIC) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/risc-v/qemu-rv/rv-virt/configs/nsh, CONFIG_INTERPRETERS_WAMR_FAST) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/risc-v/qemu-rv/rv-virt/configs/nsh64, CONFIG_INTERPRETERS_WAMR_AOT CONFIG_INTERPRETERS_WAMR_CLASSIC CONFIG_INTERPRETERS_WAMR_LIBC_WASI) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/risc-v/qemu-rv/rv-virt/configs/nsh64, CONFIG_INTERPRETERS_WAMR_AOT CONFIG_INTERPRETERS_WAMR_CLASSIC) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/risc-v/qemu-rv/rv-virt/configs/nsh64, CONFIG_INTERPRETERS_WAMR_AOT CONFIG_INTERPRETERS_WAMR_FAST CONFIG_INTERPRETERS_WAMR_LIBC_BUILTIN) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/risc-v/qemu-rv/rv-virt/configs/nsh64, CONFIG_INTERPRETERS_WAMR_AOT CONFIG_INTERPRETERS_WAMR_FAST CONFIG_INTERPRETERS_WAMR_LIBC_WASI) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/risc-v/qemu-rv/rv-virt/configs/nsh64, CONFIG_INTERPRETERS_WAMR_AOT CONFIG_INTERPRETERS_WAMR_FAST) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/risc-v/qemu-rv/rv-virt/configs/nsh64, CONFIG_INTERPRETERS_WAMR_AOT) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/risc-v/qemu-rv/rv-virt/configs/nsh64, CONFIG_INTERPRETERS_WAMR_CLASSIC) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/risc-v/qemu-rv/rv-virt/configs/nsh64, CONFIG_INTERPRETERS_WAMR_FAST) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/sim/sim/sim/configs/nsh, CONFIG_INTERPRETERS_WAMR_AOT CONFIG_INTERPRETERS_WAMR_CLASSIC CONFIG_INTERPRETERS_WAMR_LIBC_WASI) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/sim/sim/sim/configs/nsh, CONFIG_INTERPRETERS_WAMR_AOT CONFIG_INTERPRETERS_WAMR_CLASSIC) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/sim/sim/sim/configs/nsh, CONFIG_INTERPRETERS_WAMR_AOT CONFIG_INTERPRETERS_WAMR_FAST CONFIG_INTERPRETERS_WAMR_LIBC_BUILTIN) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/sim/sim/sim/configs/nsh, CONFIG_INTERPRETERS_WAMR_AOT CONFIG_INTERPRETERS_WAMR_FAST CONFIG_INTERPRETERS_WAMR_LIBC_WASI) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/sim/sim/sim/configs/nsh, CONFIG_INTERPRETERS_WAMR_AOT CONFIG_INTERPRETERS_WAMR_FAST) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/sim/sim/sim/configs/nsh, CONFIG_INTERPRETERS_WAMR_AOT) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/sim/sim/sim/configs/nsh, CONFIG_INTERPRETERS_WAMR_CLASSIC) (push) Has been cancelled
compilation on nuttx / build_iwasm_on_nuttx (boards/sim/sim/sim/configs/nsh, CONFIG_INTERPRETERS_WAMR_FAST) (push) Has been cancelled
compilation on SGX / build_llvm_libraries (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_CUSTOM_NAME_SECTION=1, $AOT_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_CUSTOM_NAME_SECTION=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_CUSTOM_NAME_SECTION=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_CUSTOM_NAME_SECTION=1, $FAST_JIT_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_DUMP_CALL_STACK=1, $AOT_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_DUMP_CALL_STACK=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_DUMP_CALL_STACK=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_DUMP_CALL_STACK=1, $FAST_JIT_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_LIB_PTHREAD=1, $AOT_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_LIB_PTHREAD=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_LIB_PTHREAD=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_LIB_PTHREAD=1, $FAST_JIT_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_LIB_WASI_THREADS=1, $AOT_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_LIB_WASI_THREADS=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_LIB_WASI_THREADS=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_LIB_WASI_THREADS=1, $FAST_JIT_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_LOAD_CUSTOM_SECTION=1, $AOT_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_LOAD_CUSTOM_SECTION=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_LOAD_CUSTOM_SECTION=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_LOAD_CUSTOM_SECTION=1, $FAST_JIT_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_MEMORY_PROFILING=1, $AOT_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_MEMORY_PROFILING=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_MEMORY_PROFILING=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_MEMORY_PROFILING=1, $FAST_JIT_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_MINI_LOADER=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_MINI_LOADER=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_MINI_LOADER=1, $FAST_JIT_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_MULTI_MODULE=1, $AOT_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_MULTI_MODULE=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_MULTI_MODULE=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_MULTI_MODULE=1, $FAST_JIT_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_PERF_PROFILING=1, $AOT_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_PERF_PROFILING=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_PERF_PROFILING=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_PERF_PROFILING=1, $FAST_JIT_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_REF_TYPES=1, $AOT_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_REF_TYPES=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_REF_TYPES=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_REF_TYPES=1, $FAST_JIT_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_SGX_IPFS=1, $AOT_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_SGX_IPFS=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_SGX_IPFS=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_SGX_IPFS=1, $FAST_JIT_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_TAIL_CALL=1, $AOT_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_TAIL_CALL=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_TAIL_CALL=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_BUILD_TAIL_CALL=1, $FAST_JIT_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_DISABLE_HW_BOUND_CHECK=1, $AOT_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_DISABLE_HW_BOUND_CHECK=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_DISABLE_HW_BOUND_CHECK=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on SGX / build_iwasm (-DWAMR_DISABLE_HW_BOUND_CHECK=1, $FAST_JIT_BUILD_OPTIONS, ubuntu-20.04, linux-sgx) (push) Has been cancelled
compilation on windows-latest / build (-DWAMR_BUILD_AOT=0) (push) Has been cancelled
compilation on windows-latest / build (-DWAMR_BUILD_AOT=1 -DWAMR_BUILD_INTERP=0) (push) Has been cancelled
compilation on windows-latest / build (-DWAMR_BUILD_CUSTOM_NAME_SECTION=1) (push) Has been cancelled
compilation on windows-latest / build (-DWAMR_BUILD_DEBUG_INTERP=1) (push) Has been cancelled
compilation on windows-latest / build (-DWAMR_BUILD_LIBC_UVWASI=0 -DWAMR_BUILD_LIBC_WASI=1) (push) Has been cancelled
compilation on windows-latest / build (-DWAMR_BUILD_LIB_PTHREAD=1) (push) Has been cancelled
compilation on windows-latest / build (-DWAMR_BUILD_LIB_WASI_THREADS=1) (push) Has been cancelled
compilation on windows-latest / build (-DWAMR_BUILD_REF_TYPES=1) (push) Has been cancelled
compilation on windows-latest / build (-DWAMR_BUILD_SIMD=1) (push) Has been cancelled
compilation on windows-latest / build (-DWAMR_BUILD_TAIL_CALL=1) (push) Has been cancelled
compilation on windows-latest / build (-DWAMR_DISABLE_HW_BOUND_CHECK=1) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_wamrc (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, ubuntu-22.04) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_CUSTOM_NAME_SECTION=1, $AOT_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_CUSTOM_NAME_SECTION=1, $AOT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_CUSTOM_NAME_SECTION=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_CUSTOM_NAME_SECTION=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_CUSTOM_NAME_SECTION=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_CUSTOM_NAME_SECTION=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_CUSTOM_NAME_SECTION=1, $FAST_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_CUSTOM_NAME_SECTION=1, $LLVM_EAGER_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_CUSTOM_NAME_SECTION=1, $LLVM_LAZY_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_CUSTOM_NAME_SECTION=1, $MULTI_TIER_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_DEBUG_AOT=1, $AOT_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_DEBUG_AOT=1, $AOT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_DEBUG_INTERP=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_DEBUG_INTERP=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_DUMP_CALL_STACK=1, $AOT_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_DUMP_CALL_STACK=1, $AOT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_DUMP_CALL_STACK=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_DUMP_CALL_STACK=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_DUMP_CALL_STACK=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_DUMP_CALL_STACK=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_DUMP_CALL_STACK=1, $FAST_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_DUMP_CALL_STACK=1, $LLVM_EAGER_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_DUMP_CALL_STACK=1, $LLVM_LAZY_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_DUMP_CALL_STACK=1, $MULTI_TIER_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_LIB_PTHREAD=1, $AOT_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_LIB_PTHREAD=1, $AOT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_LIB_PTHREAD=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_LIB_PTHREAD=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_LIB_PTHREAD=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_LIB_PTHREAD=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_LIB_PTHREAD=1, $FAST_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_LIB_PTHREAD=1, $LLVM_EAGER_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_LIB_PTHREAD=1, $LLVM_LAZY_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_LIB_PTHREAD=1, $MULTI_TIER_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_LIB_WASI_THREADS=1, $AOT_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_LIB_WASI_THREADS=1, $AOT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_LIB_WASI_THREADS=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_LIB_WASI_THREADS=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_LIB_WASI_THREADS=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_LIB_WASI_THREADS=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_LIB_WASI_THREADS=1, $FAST_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_LIB_WASI_THREADS=1, $LLVM_EAGER_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_LIB_WASI_THREADS=1, $LLVM_LAZY_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_LIB_WASI_THREADS=1, $MULTI_TIER_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_LOAD_CUSTOM_SECTION=1, $AOT_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_LOAD_CUSTOM_SECTION=1, $AOT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_LOAD_CUSTOM_SECTION=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_LOAD_CUSTOM_SECTION=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_LOAD_CUSTOM_SECTION=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_LOAD_CUSTOM_SECTION=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_LOAD_CUSTOM_SECTION=1, $FAST_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_LOAD_CUSTOM_SECTION=1, $LLVM_EAGER_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_LOAD_CUSTOM_SECTION=1, $LLVM_LAZY_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_LOAD_CUSTOM_SECTION=1, $MULTI_TIER_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_MEMORY64=1, $AOT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_MEMORY64=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_MEMORY_PROFILING=1, $AOT_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_MEMORY_PROFILING=1, $AOT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_MEMORY_PROFILING=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_MEMORY_PROFILING=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_MEMORY_PROFILING=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_MEMORY_PROFILING=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_MEMORY_PROFILING=1, $FAST_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_MEMORY_PROFILING=1, $LLVM_EAGER_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_MEMORY_PROFILING=1, $LLVM_LAZY_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_MEMORY_PROFILING=1, $MULTI_TIER_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_MINI_LOADER=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_MINI_LOADER=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_MINI_LOADER=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_MINI_LOADER=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_MULTI_MEMORY=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_MULTI_MEMORY=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_MULTI_MODULE=1, $AOT_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_MULTI_MODULE=1, $AOT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_MULTI_MODULE=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_MULTI_MODULE=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_MULTI_MODULE=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_MULTI_MODULE=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_PERF_PROFILING=1, $AOT_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_PERF_PROFILING=1, $AOT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_PERF_PROFILING=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_PERF_PROFILING=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_PERF_PROFILING=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_PERF_PROFILING=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_PERF_PROFILING=1, $FAST_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_PERF_PROFILING=1, $LLVM_EAGER_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_PERF_PROFILING=1, $LLVM_LAZY_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_PERF_PROFILING=1, $MULTI_TIER_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_REF_TYPES=1, $AOT_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_REF_TYPES=1, $AOT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_REF_TYPES=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_REF_TYPES=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_REF_TYPES=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_REF_TYPES=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_REF_TYPES=1, $FAST_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_REF_TYPES=1, $LLVM_EAGER_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_REF_TYPES=1, $LLVM_LAZY_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_REF_TYPES=1, $MULTI_TIER_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_SIMD=1, $AOT_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_SIMD=1, $AOT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_SIMD=1, $FAST_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_SIMD=1, $LLVM_EAGER_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_SIMD=1, $LLVM_LAZY_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_SIMD=1, $MULTI_TIER_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_TAIL_CALL=1, $AOT_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_TAIL_CALL=1, $AOT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_TAIL_CALL=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_TAIL_CALL=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_TAIL_CALL=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_TAIL_CALL=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_TAIL_CALL=1, $FAST_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_TAIL_CALL=1, $LLVM_EAGER_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_TAIL_CALL=1, $LLVM_LAZY_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_BUILD_TAIL_CALL=1, $MULTI_TIER_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_DISABLE_HW_BOUND_CHECK=1, $AOT_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_DISABLE_HW_BOUND_CHECK=1, $AOT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_DISABLE_HW_BOUND_CHECK=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_DISABLE_HW_BOUND_CHECK=1, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_DISABLE_HW_BOUND_CHECK=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-22.04, android) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_DISABLE_HW_BOUND_CHECK=1, $FAST_INTERP_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_DISABLE_HW_BOUND_CHECK=1, $FAST_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_DISABLE_HW_BOUND_CHECK=1, $LLVM_EAGER_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_DISABLE_HW_BOUND_CHECK=1, $LLVM_LAZY_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_iwasm (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, -DWAMR_DISABLE_HW_BOUND_CHECK=1, $MULTI_TIER_JIT_BUILD_OPTIONS, ubuntu-22.04, linux) (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_unit_tests (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, ubuntu-22.04, https://github.com/WebAssembly/wabt/releases/download/1.0.31/wabt-1.0.31-ubuntu.tar.gz, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-s… (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_samples_wasm_c_api (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, $AOT_BUILD_OPTIONS, ubuntu-22.04, https://github.com/WebAssembly/wabt/releases/download/1.0.31/wabt-1.0.31-ubuntu.tar.gz, https://github.com/WebAssembly/wasi-… (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_samples_wasm_c_api (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, $CLASSIC_INTERP_BUILD_OPTIONS, ubuntu-22.04, https://github.com/WebAssembly/wabt/releases/download/1.0.31/wabt-1.0.31-ubuntu.tar.gz, https://github.com/WebAss… (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_samples_wasm_c_api (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, $FAST_INTERP_BUILD_OPTIONS, ubuntu-22.04, https://github.com/WebAssembly/wabt/releases/download/1.0.31/wabt-1.0.31-ubuntu.tar.gz, https://github.com/WebAssemb… (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_samples_wasm_c_api (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, $FAST_JIT_BUILD_OPTIONS, ubuntu-22.04, https://github.com/WebAssembly/wabt/releases/download/1.0.31/wabt-1.0.31-ubuntu.tar.gz, https://github.com/WebAssembly/… (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_samples_wasm_c_api (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, $LLVM_EAGER_JIT_BUILD_OPTIONS, ubuntu-22.04, https://github.com/WebAssembly/wabt/releases/download/1.0.31/wabt-1.0.31-ubuntu.tar.gz, https://github.com/WebAss… (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_samples_wasm_c_api (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, $LLVM_LAZY_JIT_BUILD_OPTIONS, ubuntu-22.04, https://github.com/WebAssembly/wabt/releases/download/1.0.31/wabt-1.0.31-ubuntu.tar.gz, https://github.com/WebAsse… (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_samples_wasm_c_api (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, $MULTI_TIER_JIT_BUILD_OPTIONS, ubuntu-22.04, https://github.com/WebAssembly/wabt/releases/download/1.0.31/wabt-1.0.31-ubuntu.tar.gz, https://github.com/WebAss… (push) Has been cancelled
compilation on android, ubuntu-22.04 / build_samples_others (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, ubuntu-22.04, https://github.com/WebAssembly/wabt/releases/download/1.0.31/wabt-1.0.31-ubuntu.tar.gz, https://github.com/WebAssembly/wasi-sdk/releases/download/wa… (push) Has been cancelled
compilation on android, ubuntu-22.04 / test (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, ubuntu-22.04, aot, $DEFAULT_TEST_OPTIONS, 22.04, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz) (push) Has been cancelled
compilation on android, ubuntu-22.04 / test (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, ubuntu-22.04, aot, $GC_TEST_OPTIONS, 22.04, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz) (push) Has been cancelled
compilation on android, ubuntu-22.04 / test (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, ubuntu-22.04, aot, $MEMORY64_TEST_OPTIONS, 22.04, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz) (push) Has been cancelled
compilation on android, ubuntu-22.04 / test (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, ubuntu-22.04, aot, $MULTI_MODULES_TEST_OPTIONS, 22.04, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz) (push) Has been cancelled
compilation on android, ubuntu-22.04 / test (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, ubuntu-22.04, aot, $SIMD_TEST_OPTIONS, 22.04, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz) (push) Has been cancelled
compilation on android, ubuntu-22.04 / test (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, ubuntu-22.04, aot, $THREADS_TEST_OPTIONS, 22.04, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz) (push) Has been cancelled
compilation on android, ubuntu-22.04 / test (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, ubuntu-22.04, aot, $WAMR_COMPILER_TEST_OPTIONS) (push) Has been cancelled
compilation on android, ubuntu-22.04 / test (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, ubuntu-22.04, aot, $WASI_TEST_OPTIONS, 22.04, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz) (push) Has been cancelled
compilation on android, ubuntu-22.04 / test (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, ubuntu-22.04, classic-interp, $DEFAULT_TEST_OPTIONS, 22.04, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz) (push) Has been cancelled
compilation on android, ubuntu-22.04 / test (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, ubuntu-22.04, classic-interp, $GC_TEST_OPTIONS, 22.04, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz) (push) Has been cancelled
compilation on android, ubuntu-22.04 / test (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, ubuntu-22.04, classic-interp, $MEMORY64_TEST_OPTIONS, 22.04, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz) (push) Has been cancelled
compilation on android, ubuntu-22.04 / test (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, ubuntu-22.04, classic-interp, $MULTI_MEMORY_TEST_OPTIONS, 22.04, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz) (push) Has been cancelled
compilation on android, ubuntu-22.04 / test (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, ubuntu-22.04, classic-interp, $MULTI_MODULES_TEST_OPTIONS, 22.04, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz) (push) Has been cancelled
compilation on android, ubuntu-22.04 / test (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, ubuntu-22.04, classic-interp, $THREADS_TEST_OPTIONS, 22.04, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz) (push) Has been cancelled
compilation on android, ubuntu-22.04 / test (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, ubuntu-22.04, classic-interp, $WASI_TEST_OPTIONS, 22.04, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz) (push) Has been cancelled
compilation on android, ubuntu-22.04 / test (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, ubuntu-22.04, fast-interp, $DEFAULT_TEST_OPTIONS, 22.04, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz) (push) Has been cancelled
compilation on android, ubuntu-22.04 / test (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, ubuntu-22.04, fast-interp, $GC_TEST_OPTIONS, 22.04, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz) (push) Has been cancelled
compilation on android, ubuntu-22.04 / test (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, ubuntu-22.04, fast-interp, $MULTI_MODULES_TEST_OPTIONS, 22.04, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz) (push) Has been cancelled
compilation on android, ubuntu-22.04 / test (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, ubuntu-22.04, fast-interp, $THREADS_TEST_OPTIONS, 22.04, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz) (push) Has been cancelled
compilation on android, ubuntu-22.04 / test (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, ubuntu-22.04, fast-interp, $WASI_TEST_OPTIONS, 22.04, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz) (push) Has been cancelled
compilation on android, ubuntu-22.04 / test (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, ubuntu-22.04, fast-jit, $DEFAULT_TEST_OPTIONS, 22.04, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz) (push) Has been cancelled
compilation on android, ubuntu-22.04 / test (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, ubuntu-22.04, fast-jit, $THREADS_TEST_OPTIONS, 22.04, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz) (push) Has been cancelled
compilation on android, ubuntu-22.04 / test (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, ubuntu-22.04, fast-jit, $WASI_TEST_OPTIONS, 22.04, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz) (push) Has been cancelled
compilation on android, ubuntu-22.04 / test (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, ubuntu-22.04, jit, $DEFAULT_TEST_OPTIONS, 22.04, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz) (push) Has been cancelled
compilation on android, ubuntu-22.04 / test (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, ubuntu-22.04, jit, $GC_TEST_OPTIONS, 22.04, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz) (push) Has been cancelled
compilation on android, ubuntu-22.04 / test (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, ubuntu-22.04, jit, $SIMD_TEST_OPTIONS, 22.04, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz) (push) Has been cancelled
compilation on android, ubuntu-22.04 / test (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, ubuntu-22.04, jit, $THREADS_TEST_OPTIONS, 22.04, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz) (push) Has been cancelled
compilation on android, ubuntu-22.04 / test (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, ubuntu-22.04, jit, $WASI_TEST_OPTIONS, 22.04, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz) (push) Has been cancelled
compilation on android, ubuntu-22.04 / test (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, ubuntu-22.04, multi-tier-jit, $DEFAULT_TEST_OPTIONS, 22.04, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz) (push) Has been cancelled
compilation on android, ubuntu-22.04 / test (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, ubuntu-22.04, multi-tier-jit, $THREADS_TEST_OPTIONS, 22.04, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz) (push) Has been cancelled
compilation on android, ubuntu-22.04 / test (${{ needs.build_llvm_libraries_on_ubuntu_2204.outputs.cache_key }}, ubuntu-22.04, multi-tier-jit, $WASI_TEST_OPTIONS, 22.04, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz) (push) Has been cancelled
compilation on android, ubuntu-22.04 / test-wamr-ide (push) Has been cancelled
compilation on macos / build_wamrc (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, macos-13) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_CUSTOM_NAME_SECTION=1, $AOT_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_CUSTOM_NAME_SECTION=1, $CLASSIC_INTERP_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_CUSTOM_NAME_SECTION=1, $FAST_INTERP_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_CUSTOM_NAME_SECTION=1, $LLVM_EAGER_JIT_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_CUSTOM_NAME_SECTION=1, $LLVM_LAZY_JIT_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_DEBUG_INTERP=1, $CLASSIC_INTERP_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_DUMP_CALL_STACK=1, $AOT_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_DUMP_CALL_STACK=1, $CLASSIC_INTERP_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_DUMP_CALL_STACK=1, $FAST_INTERP_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_DUMP_CALL_STACK=1, $LLVM_EAGER_JIT_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_DUMP_CALL_STACK=1, $LLVM_LAZY_JIT_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_LIB_PTHREAD=1, $AOT_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_LIB_PTHREAD=1, $CLASSIC_INTERP_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_LIB_PTHREAD=1, $FAST_INTERP_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_LIB_PTHREAD=1, $LLVM_EAGER_JIT_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_LIB_PTHREAD=1, $LLVM_LAZY_JIT_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_LIB_WASI_THREADS=1, $AOT_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_LIB_WASI_THREADS=1, $CLASSIC_INTERP_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_LIB_WASI_THREADS=1, $FAST_INTERP_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_LIB_WASI_THREADS=1, $LLVM_EAGER_JIT_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_LIB_WASI_THREADS=1, $LLVM_LAZY_JIT_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_LOAD_CUSTOM_SECTION=1, $AOT_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_LOAD_CUSTOM_SECTION=1, $CLASSIC_INTERP_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_LOAD_CUSTOM_SECTION=1, $FAST_INTERP_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_LOAD_CUSTOM_SECTION=1, $LLVM_EAGER_JIT_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_LOAD_CUSTOM_SECTION=1, $LLVM_LAZY_JIT_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_MEMORY_PROFILING=1, $AOT_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_MEMORY_PROFILING=1, $CLASSIC_INTERP_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_MEMORY_PROFILING=1, $FAST_INTERP_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_MEMORY_PROFILING=1, $LLVM_EAGER_JIT_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_MEMORY_PROFILING=1, $LLVM_LAZY_JIT_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_MINI_LOADER=1, $CLASSIC_INTERP_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_MINI_LOADER=1, $FAST_INTERP_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_MULTI_MODULE=1, $AOT_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_MULTI_MODULE=1, $CLASSIC_INTERP_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_MULTI_MODULE=1, $FAST_INTERP_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_PERF_PROFILING=1, $AOT_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_PERF_PROFILING=1, $CLASSIC_INTERP_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_PERF_PROFILING=1, $FAST_INTERP_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_PERF_PROFILING=1, $LLVM_EAGER_JIT_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_PERF_PROFILING=1, $LLVM_LAZY_JIT_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_REF_TYPES=1, $AOT_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_REF_TYPES=1, $CLASSIC_INTERP_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_REF_TYPES=1, $FAST_INTERP_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_REF_TYPES=1, $LLVM_EAGER_JIT_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_REF_TYPES=1, $LLVM_LAZY_JIT_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_SIMD=1, $AOT_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_SIMD=1, $LLVM_EAGER_JIT_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_SIMD=1, $LLVM_LAZY_JIT_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_TAIL_CALL=1, $AOT_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_TAIL_CALL=1, $CLASSIC_INTERP_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_TAIL_CALL=1, $FAST_INTERP_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_TAIL_CALL=1, $LLVM_EAGER_JIT_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_BUILD_TAIL_CALL=1, $LLVM_LAZY_JIT_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_DISABLE_HW_BOUND_CHECK=1, $AOT_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_DISABLE_HW_BOUND_CHECK=1, $CLASSIC_INTERP_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_DISABLE_HW_BOUND_CHECK=1, $FAST_INTERP_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_DISABLE_HW_BOUND_CHECK=1, $LLVM_EAGER_JIT_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_iwasm (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, -DWAMR_DISABLE_HW_BOUND_CHECK=1, $LLVM_LAZY_JIT_BUILD_OPTIONS, macos-13, darwin) (push) Has been cancelled
compilation on macos / build_samples_wasm_c_api ($CLASSIC_INTERP_BUILD_OPTIONS, macos-13, https://github.com/WebAssembly/wabt/releases/download/1.0.31/wabt-1.0.31-macos-12.tar.gz, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-macos.tar.gz) (push) Has been cancelled
compilation on macos / build_samples_wasm_c_api ($FAST_INTERP_BUILD_OPTIONS, macos-13, https://github.com/WebAssembly/wabt/releases/download/1.0.31/wabt-1.0.31-macos-12.tar.gz, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-macos.tar.gz) (push) Has been cancelled
compilation on macos / build_samples_others (${{ needs.build_llvm_libraries_on_arm_macos.outputs.cache_key }}, macos-14, https://github.com/WebAssembly/wabt/releases/download/1.0.31/wabt-1.0.31-macos-12.tar.gz, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-s… (push) Has been cancelled
compilation on macos / build_samples_others (${{ needs.build_llvm_libraries_on_intel_macos.outputs.cache_key }}, macos-13, https://github.com/WebAssembly/wabt/releases/download/1.0.31/wabt-1.0.31-macos-12.tar.gz, https://github.com/WebAssembly/wasi-sdk/releases/download/wasi… (push) Has been cancelled
compilation on SGX / run_samples_file (-DWAMR_BUILD_SGX_IPFS=1, $AOT_BUILD_OPTIONS, ${{ needs.build_llvm_libraries.outputs.cache_key }}, ubuntu-20.04, linux-sgx, https://github.com/WebAssembly/wabt/releases/download/1.0.31/wabt-1.0.31-ubuntu.tar.gz, https://github.com/WebA… (push) Has been cancelled
compilation on SGX / run_samples_file (-DWAMR_BUILD_SGX_IPFS=1, $CLASSIC_INTERP_BUILD_OPTIONS, ${{ needs.build_llvm_libraries.outputs.cache_key }}, ubuntu-20.04, linux-sgx, https://github.com/WebAssembly/wabt/releases/download/1.0.31/wabt-1.0.31-ubuntu.tar.gz, https://gith… (push) Has been cancelled
compilation on SGX / run_samples_file (-DWAMR_BUILD_SGX_IPFS=1, $FAST_INTERP_BUILD_OPTIONS, ${{ needs.build_llvm_libraries.outputs.cache_key }}, ubuntu-20.04, linux-sgx, https://github.com/WebAssembly/wabt/releases/download/1.0.31/wabt-1.0.31-ubuntu.tar.gz, https://github.… (push) Has been cancelled
compilation on SGX / run_samples_file (-DWAMR_BUILD_SGX_IPFS=1, $FAST_JIT_BUILD_OPTIONS, ${{ needs.build_llvm_libraries.outputs.cache_key }}, ubuntu-20.04, linux-sgx, https://github.com/WebAssembly/wabt/releases/download/1.0.31/wabt-1.0.31-ubuntu.tar.gz, https://github.com… (push) Has been cancelled
compilation on SGX / spec_test_default (${{ needs.build_llvm_libraries.outputs.cache_key }}, aot, -x -p -s spec -P) (push) Has been cancelled
compilation on SGX / spec_test_default (${{ needs.build_llvm_libraries.outputs.cache_key }}, aot, -x -p -s spec -S -P) (push) Has been cancelled
compilation on SGX / spec_test_default (${{ needs.build_llvm_libraries.outputs.cache_key }}, aot, -x -p -s spec -X -P) (push) Has been cancelled
compilation on SGX / spec_test_default (${{ needs.build_llvm_libraries.outputs.cache_key }}, classic-interp, -x -p -s spec -P) (push) Has been cancelled
compilation on SGX / spec_test_default (${{ needs.build_llvm_libraries.outputs.cache_key }}, fast-interp, -x -p -s spec -P) (push) Has been cancelled
compilation on SGX / spec_test_default (${{ needs.build_llvm_libraries.outputs.cache_key }}, fast-jit, -x -p -s spec -P) (push) Has been cancelled
compilation on windows-latest / test (classic-interp, $DEFAULT_TEST_OPTIONS) (push) Has been cancelled
compilation on windows-latest / test (classic-interp, $MULTI_MODULES_TEST_OPTIONS) (push) Has been cancelled
compilation on windows-latest / test (classic-interp, $THREADS_TEST_OPTIONS) (push) Has been cancelled
compilation on windows-latest / test (classic-interp, $WASI_TEST_OPTIONS) (push) Has been cancelled
compilation on windows-latest / test (fast-interp, $DEFAULT_TEST_OPTIONS) (push) Has been cancelled
compilation on windows-latest / test (fast-interp, $MULTI_MODULES_TEST_OPTIONS) (push) Has been cancelled
compilation on windows-latest / test (fast-interp, $THREADS_TEST_OPTIONS) (push) Has been cancelled
compilation on windows-latest / test (fast-interp, $WASI_TEST_OPTIONS) (push) Has been cancelled

- Implement import table and table creation
- Enhance memory de-instantiation checks and adjust stack size for wasm execution environment
- Improve shared memory reference handling and enhance table de-instantiation checks
This commit is contained in:
liang.he 2024-12-06 10:13:53 +08:00 committed by GitHub
parent 8c48d717fc
commit ee2d60bf62
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
39 changed files with 1653 additions and 637 deletions

View File

@ -84,6 +84,7 @@
#endif #endif
#define AOT_MAGIC_NUMBER 0x746f6100 #define AOT_MAGIC_NUMBER 0x746f6100
/* FIXME: maybe 5? need a discussion */
#define AOT_CURRENT_VERSION 4 #define AOT_CURRENT_VERSION 4
#ifndef WASM_ENABLE_JIT #ifndef WASM_ENABLE_JIT

View File

@ -507,6 +507,14 @@ check_feature_flags(char *error_buf, uint32 error_buf_size,
} }
#endif #endif
#if WASM_ENABLE_MULTI_MODULE == 0
if (feature_flags & WASM_FEATURE_MULTI_MODULE) {
set_error_buf(error_buf, error_buf_size,
"multi-module is not enabled in this build");
return false;
}
#endif
return true; return true;
} }
@ -530,7 +538,7 @@ load_target_info_section(const uint8 *buf, const uint8 *buf_end,
AOTModule *module, char *error_buf, AOTModule *module, char *error_buf,
uint32 error_buf_size) uint32 error_buf_size)
{ {
AOTTargetInfo target_info; AOTTargetInfo target_info = { 0 };
const uint8 *p = buf, *p_end = buf_end; const uint8 *p = buf, *p_end = buf_end;
bool is_target_little_endian, is_target_64_bit; bool is_target_little_endian, is_target_64_bit;
@ -1364,8 +1372,8 @@ fail:
static bool static bool
load_import_table_list(const uint8 **p_buf, const uint8 *buf_end, load_import_table_list(const uint8 **p_buf, const uint8 *buf_end,
AOTModule *module, char *error_buf, AOTModule *module, bool is_load_from_file_buf,
uint32 error_buf_size) char *error_buf, uint32 error_buf_size)
{ {
const uint8 *buf = *p_buf; const uint8 *buf = *p_buf;
AOTImportTable *import_table; AOTImportTable *import_table;
@ -1382,7 +1390,7 @@ load_import_table_list(const uint8 **p_buf, const uint8 *buf_end,
return false; return false;
} }
/* keep sync with aot_emit_table_info() aot_emit_aot_file */ /* keep sync with aot_emit_import_table_info() aot_emit_aot_file */
for (i = 0; i < module->import_table_count; i++, import_table++) { for (i = 0; i < module->import_table_count; i++, import_table++) {
read_uint8(buf, buf_end, import_table->table_type.elem_type); read_uint8(buf, buf_end, import_table->table_type.elem_type);
read_uint8(buf, buf_end, import_table->table_type.flags); read_uint8(buf, buf_end, import_table->table_type.flags);
@ -1391,7 +1399,13 @@ load_import_table_list(const uint8 **p_buf, const uint8 *buf_end,
if (wasm_is_type_multi_byte_type(import_table->table_type.elem_type)) { if (wasm_is_type_multi_byte_type(import_table->table_type.elem_type)) {
read_uint8(buf, buf_end, ref_type.ref_ht_common.nullable); read_uint8(buf, buf_end, ref_type.ref_ht_common.nullable);
} }
else
#endif #endif
{
/* Skip 1 byte */
buf += 1;
}
read_uint32(buf, buf_end, import_table->table_type.init_size); read_uint32(buf, buf_end, import_table->table_type.init_size);
read_uint32(buf, buf_end, import_table->table_type.max_size); read_uint32(buf, buf_end, import_table->table_type.max_size);
#if WASM_ENABLE_GC != 0 #if WASM_ENABLE_GC != 0
@ -1409,6 +1423,9 @@ load_import_table_list(const uint8 **p_buf, const uint8 *buf_end,
} }
} }
#endif #endif
read_string(buf, buf_end, import_table->module_name);
read_string(buf, buf_end, import_table->table_name);
} }
*p_buf = buf; *p_buf = buf;
@ -1451,7 +1468,13 @@ load_table_list(const uint8 **p_buf, const uint8 *buf_end, AOTModule *module,
if (wasm_is_type_multi_byte_type(table->table_type.elem_type)) { if (wasm_is_type_multi_byte_type(table->table_type.elem_type)) {
read_uint8(buf, buf_end, ref_type.ref_ht_common.nullable); read_uint8(buf, buf_end, ref_type.ref_ht_common.nullable);
} }
else
#endif #endif
{
/* Skip 1 byte */
buf += 1;
}
read_uint32(buf, buf_end, table->table_type.init_size); read_uint32(buf, buf_end, table->table_type.init_size);
read_uint32(buf, buf_end, table->table_type.max_size); read_uint32(buf, buf_end, table->table_type.max_size);
#if WASM_ENABLE_GC != 0 #if WASM_ENABLE_GC != 0
@ -1582,14 +1605,15 @@ fail:
static bool static bool
load_table_info(const uint8 **p_buf, const uint8 *buf_end, AOTModule *module, load_table_info(const uint8 **p_buf, const uint8 *buf_end, AOTModule *module,
char *error_buf, uint32 error_buf_size) bool is_load_from_file_buf, char *error_buf,
uint32 error_buf_size)
{ {
const uint8 *buf = *p_buf; const uint8 *buf = *p_buf;
read_uint32(buf, buf_end, module->import_table_count); read_uint32(buf, buf_end, module->import_table_count);
if (module->import_table_count > 0 if (module->import_table_count > 0
&& !load_import_table_list(&buf, buf_end, module, error_buf, && !load_import_table_list(&buf, buf_end, module, is_load_from_file_buf,
error_buf_size)) error_buf, error_buf_size))
return false; return false;
read_uint32(buf, buf_end, module->table_count); read_uint32(buf, buf_end, module->table_count);
@ -2475,7 +2499,8 @@ load_init_data_section(const uint8 *buf, const uint8 *buf_end,
if (!load_memory_info(&p, p_end, module, is_load_from_file_buf, error_buf, if (!load_memory_info(&p, p_end, module, is_load_from_file_buf, error_buf,
error_buf_size) error_buf_size)
|| !load_table_info(&p, p_end, module, error_buf, error_buf_size) || !load_table_info(&p, p_end, module, is_load_from_file_buf, error_buf,
error_buf_size)
|| !load_type_info(&p, p_end, module, error_buf, error_buf_size) || !load_type_info(&p, p_end, module, error_buf, error_buf_size)
|| !load_import_global_info(&p, p_end, module, is_load_from_file_buf, || !load_import_global_info(&p, p_end, module, is_load_from_file_buf,
error_buf, error_buf_size) error_buf, error_buf_size)

View File

@ -662,73 +662,151 @@ global_instantiate(AOTModuleInstance *module_inst, AOTModule *module,
return true; return true;
} }
/**
* Destroy table instances.
*/
static void
tables_deinstantiate(AOTModuleInstance *inst)
{
if (!inst || !inst->tables) {
return;
}
#if WASM_ENABLE_MULTI_MODULE == 0
AOTModule *module = (AOTModule *)inst->module;
/* only imported tables */
for (uint32 i = 0; i < module->import_table_count; i++) {
WASMTableInstance *table = inst->tables[i];
if (!table) {
continue;
}
table_elem_type_t *table_elems =
aot_locate_table_elems(module, table, i);
if (!table_elems) {
continue;
}
void *table_imported =
((uint8 *)(table_elems)) - offsetof(WASMTableInstance, elems);
wasm_runtime_free(table_imported);
}
#endif
wasm_runtime_free(inst->tables);
}
static bool static bool
tables_instantiate(AOTModuleInstance *module_inst, AOTModule *module, tables_instantiate(AOTModuleInstance *module_inst, AOTModule *module,
AOTTableInstance *first_tbl_inst, char *error_buf, AOTTableInstance *tables_data,
uint32 error_buf_size) const WASMExternInstance *imports, uint32 import_count,
char *error_buf, uint32 error_buf_size)
{ {
uint32 i, global_index, global_data_offset, base_offset, length; uint64 total_size =
uint64 total_size; (uint64)sizeof(AOTTableInstance *) * module_inst->table_count;
AOTTableInitData *table_seg;
AOTTableInstance *tbl_inst = first_tbl_inst;
total_size = (uint64)sizeof(AOTTableInstance *) * module_inst->table_count;
if (total_size > 0 if (total_size > 0
&& !(module_inst->tables = && !(module_inst->tables =
runtime_malloc(total_size, error_buf, error_buf_size))) { runtime_malloc(total_size, error_buf, error_buf_size))) {
return false; return false;
} }
/* AOTTableInstance *table = tables_data;
* treat import table like a local one until we enable module linking uint32 table_index;
* in AOT mode for (table_index = 0; table_index < module->import_table_count;
*/ table_index++) {
for (i = 0; i != module_inst->table_count; ++i) { AOTTableType *table_type =
if (i < module->import_table_count) { &((module->import_tables + table_index)->table_type);
AOTImportTable *import_table = module->import_tables + i;
tbl_inst->cur_size = import_table->table_type.init_size; table->cur_size = table_type->init_size;
tbl_inst->max_size = table->max_size = aot_get_tbl_data_slots(table_type, false);
aot_get_imp_tbl_data_slots(import_table, false); table->elem_type = table_type->elem_type;
tbl_inst->elem_type = module->tables[i].table_type.elem_type;
#if WASM_ENABLE_GC != 0 #if WASM_ENABLE_GC != 0
tbl_inst->elem_ref_type.elem_ref_type = table->elem_ref_type.elem_ref_type = table_type->elem_ref_type;
module->tables[i].table_type.elem_ref_type;
#endif #endif
#if WASM_ENABLE_MULTI_MODULE != 0
/* Set all elements to -1 or NULL_REF to mark them as uninitialized
* elements */
memset(table->elems,
#if WASM_ENABLE_GC == 0
0xff,
#else
0x00,
#endif
sizeof(table_elem_type_t) * table->max_size);
#else
/* use import table elem */
AOTImportTable *import_table_type = module->import_tables + table_index;
const WASMExternInstance *extern_inst =
wasm_runtime_get_extern_instance(imports, import_count,
WASM_IMPORT_EXPORT_KIND_TABLE,
table_index);
if (!extern_inst) {
LOG_ERROR("missing an import table(%s, %s)",
import_table_type->module_name,
import_table_type->table_name);
return false;
} }
else {
AOTTable *table = module->tables + (i - module->import_table_count); /* just in case */
tbl_inst->cur_size = table->table_type.init_size; #ifndef NDEBUG
tbl_inst->max_size = aot_get_tbl_data_slots(table, false); if (strcmp(import_table_type->table_name, extern_inst->field_name)) {
tbl_inst->elem_type = module->tables[i].table_type.elem_type; LOG_ERROR("mismatched import table name: expect \"%s\", got \"%s\"",
import_table_type->table_name, extern_inst->field_name);
return false;
}
#endif
/* store the pointer value */
table->elems[0] = (table_elem_type_t)extern_inst->u.table->elems;
#endif /* WASM_ENABLE_MULTI_MODULE != 0 */
module_inst->tables[table_index] = table;
#if WASM_ENABLE_MULTI_MODULE != 0
table =
(AOTTableInstance *)((uint8 *)table
+ offsetof(AOTTableInstance, elems)
+ sizeof(table_elem_type_t) * table->max_size);
#else
table = (AOTTableInstance *)((uint8 *)table
+ offsetof(AOTTableInstance, elems)
+ sizeof(table_elem_type_t));
#endif
}
for (table_index = 0; table_index < module->table_count; table_index++) {
AOTTableType *table_type =
&((module->tables + table_index)->table_type);
table->cur_size = table_type->init_size;
table->max_size = aot_get_tbl_data_slots(table_type, false);
table->elem_type = table_type->elem_type;
#if WASM_ENABLE_GC != 0 #if WASM_ENABLE_GC != 0
tbl_inst->elem_ref_type.elem_ref_type = table->elem_ref_type.elem_ref_type = table_type->elem_ref_type;
module->tables[i].table_type.elem_ref_type;
#endif #endif
}
/* Set all elements to -1 or NULL_REF to mark them as uninitialized /* Set all elements to -1 or NULL_REF to mark them as uninitialized
* elements */ * elements */
#if WASM_ENABLE_GC == 0 #if WASM_ENABLE_GC == 0
memset(tbl_inst->elems, 0xff, memset(table->elems, 0xff, sizeof(table_elem_type_t) * table->max_size);
sizeof(table_elem_type_t) * tbl_inst->max_size);
#else #else
memset(tbl_inst->elems, 0x00, memset(table->elems, 0x00, sizeof(table_elem_type_t) * table->max_size);
sizeof(table_elem_type_t) * tbl_inst->max_size);
#endif #endif
module_inst->tables[i] = tbl_inst; module_inst->tables[table_index] = table;
tbl_inst = (AOTTableInstance *)((uint8 *)tbl_inst table =
+ offsetof(AOTTableInstance, elems) (AOTTableInstance *)((uint8 *)table
+ sizeof(table_elem_type_t) + offsetof(AOTTableInstance, elems)
* tbl_inst->max_size); + sizeof(table_elem_type_t) * table->max_size);
} }
/* fill table with element segment content */ /* fill table with element segment content */
for (i = 0; i < module->table_init_data_count; i++) { for (uint32 i = 0; i < module->table_init_data_count; i++) {
#if WASM_ENABLE_GC == 0 AOTTableInitData *table_seg = module->table_init_data_list[i];
uint32 j;
#endif
table_seg = module->table_init_data_list[i];
#if WASM_ENABLE_REF_TYPES != 0 || WASM_ENABLE_GC != 0 #if WASM_ENABLE_REF_TYPES != 0 || WASM_ENABLE_GC != 0
if (!wasm_elem_is_active(table_seg->mode)) if (!wasm_elem_is_active(table_seg->mode))
@ -737,31 +815,32 @@ tables_instantiate(AOTModuleInstance *module_inst, AOTModule *module,
bh_assert(table_seg->table_index < module_inst->table_count); bh_assert(table_seg->table_index < module_inst->table_count);
tbl_inst = module_inst->tables[table_seg->table_index]; table = module_inst->tables[table_seg->table_index];
bh_assert(tbl_inst);
#if WASM_ENABLE_REF_TYPES != 0 #if WASM_ENABLE_REF_TYPES != 0
bh_assert( bh_assert(
table_seg->offset.init_expr_type table_seg->offset.init_expr_type
== (tbl_inst->is_table64 ? INIT_EXPR_TYPE_I64_CONST == (table->is_table64 ? INIT_EXPR_TYPE_I64_CONST
: INIT_EXPR_TYPE_I32_CONST) : INIT_EXPR_TYPE_I32_CONST)
|| table_seg->offset.init_expr_type == INIT_EXPR_TYPE_GET_GLOBAL || table_seg->offset.init_expr_type == INIT_EXPR_TYPE_GET_GLOBAL
|| table_seg->offset.init_expr_type == INIT_EXPR_TYPE_FUNCREF_CONST || table_seg->offset.init_expr_type == INIT_EXPR_TYPE_FUNCREF_CONST
|| table_seg->offset.init_expr_type || table_seg->offset.init_expr_type
== INIT_EXPR_TYPE_REFNULL_CONST); == INIT_EXPR_TYPE_REFNULL_CONST);
#else #else
bh_assert(table_seg->offset.init_expr_type bh_assert(table_seg->offset.init_expr_type
== (tbl_inst->is_table64 ? INIT_EXPR_TYPE_I64_CONST == (table->is_table64 ? INIT_EXPR_TYPE_I64_CONST
: INIT_EXPR_TYPE_I32_CONST) : INIT_EXPR_TYPE_I32_CONST)
|| table_seg->offset.init_expr_type || table_seg->offset.init_expr_type
== INIT_EXPR_TYPE_GET_GLOBAL); == INIT_EXPR_TYPE_GET_GLOBAL);
#endif #endif
bh_assert(table);
/* Resolve table data base offset */ /* Resolve table data base offset */
/* TODO: The table64 current implementation assumes table max size /* TODO: The table64 current implementation assumes table max size
* UINT32_MAX, so the offset conversion here is safe */ * UINT32_MAX, so the offset conversion here is safe */
uint32 base_offset;
if (table_seg->offset.init_expr_type == INIT_EXPR_TYPE_GET_GLOBAL) { if (table_seg->offset.init_expr_type == INIT_EXPR_TYPE_GET_GLOBAL) {
global_index = table_seg->offset.u.global_index; uint32 global_index = table_seg->offset.u.global_index;
uint32 global_data_offset;
if (!check_global_init_expr(module, global_index, error_buf, if (!check_global_init_expr(module, global_index, error_buf,
error_buf_size)) { error_buf_size)) {
@ -784,7 +863,7 @@ tables_instantiate(AOTModuleInstance *module_inst, AOTModule *module,
/* Copy table data */ /* Copy table data */
/* base_offset only since length might negative */ /* base_offset only since length might negative */
if (base_offset > tbl_inst->cur_size) { if (base_offset > table->cur_size) {
#if WASM_ENABLE_REF_TYPES != 0 #if WASM_ENABLE_REF_TYPES != 0
set_error_buf(error_buf, error_buf_size, set_error_buf(error_buf, error_buf_size,
"out of bounds table access"); "out of bounds table access");
@ -796,8 +875,8 @@ tables_instantiate(AOTModuleInstance *module_inst, AOTModule *module,
} }
/* base_offset + length(could be zero) */ /* base_offset + length(could be zero) */
length = table_seg->value_count; uint32 length = table_seg->value_count;
if (base_offset + length > tbl_inst->cur_size) { if (base_offset + length > table->cur_size) {
#if WASM_ENABLE_REF_TYPES != 0 #if WASM_ENABLE_REF_TYPES != 0
set_error_buf(error_buf, error_buf_size, set_error_buf(error_buf, error_buf_size,
"out of bounds table access"); "out of bounds table access");
@ -813,8 +892,10 @@ tables_instantiate(AOTModuleInstance *module_inst, AOTModule *module,
* will check the linked table inst owner in future * will check the linked table inst owner in future
*/ */
#if WASM_ENABLE_GC == 0 #if WASM_ENABLE_GC == 0
for (j = 0; j < length; j++) { table_elem_type_t *table_elems =
tbl_inst->elems[base_offset + j] = aot_locate_table_elems(module, table, table_seg->table_index);
for (uint32 j = 0; j < length; j++) {
table_elems[base_offset + j] =
table_seg->init_values[j].u.ref_index; table_seg->init_values[j].u.ref_index;
} }
#endif #endif
@ -856,11 +937,34 @@ memory_deinstantiate(AOTMemoryInstance *memory)
static void static void
memories_deinstantiate(AOTModuleInstance *module_inst) memories_deinstantiate(AOTModuleInstance *module_inst)
{ {
if (!module_inst->memories) if (!module_inst->memories) {
return; return;
}
for (uint32 i = 0; i < module_inst->memory_count; i++) { uint32 mem_index = 0;
memory_deinstantiate(module_inst->memories[i]); AOTModule *module = (AOTModule *)module_inst->module;
for (; mem_index < module->import_memory_count; mem_index++) {
AOTMemoryInstance *memory = module_inst->memories[mem_index];
if (!memory) {
continue;
}
memory_deinstantiate(memory);
#if WASM_ENABLE_MULTI_MODULE == 0 && WASM_ENABLE_SHARED_MEMORY != 0
/* for spawned only */
if (!shared_memory_is_shared(memory)) {
continue;
}
if (shared_memory_get_reference(memory) == 0) {
wasm_runtime_free(memory);
}
#endif
}
for (; mem_index < module->memory_count; mem_index++) {
memory_deinstantiate(module_inst->memories[mem_index]);
} }
wasm_runtime_free(module_inst->memories); wasm_runtime_free(module_inst->memories);
@ -958,7 +1062,7 @@ memory_instantiate(const AOTModule *module, AOTModuleInstance *parent,
< (uint64)num_bytes_per_page * init_page_count) { < (uint64)num_bytes_per_page * init_page_count) {
/* Insert app heap before __heap_base */ /* Insert app heap before __heap_base */
aux_heap_base = module->aux_heap_base; aux_heap_base = module->aux_heap_base;
bytes_of_last_page = aux_heap_base % num_bytes_per_page; bytes_of_last_page = (uint32)(aux_heap_base % num_bytes_per_page);
if (bytes_of_last_page == 0) if (bytes_of_last_page == 0)
bytes_of_last_page = num_bytes_per_page; bytes_of_last_page = num_bytes_per_page;
bytes_to_page_end = num_bytes_per_page - bytes_of_last_page; bytes_to_page_end = num_bytes_per_page - bytes_of_last_page;
@ -968,7 +1072,7 @@ memory_instantiate(const AOTModule *module, AOTModuleInstance *parent,
heap_offset = aux_heap_base; heap_offset = aux_heap_base;
aux_heap_base += heap_size; aux_heap_base += heap_size;
bytes_of_last_page = aux_heap_base % num_bytes_per_page; bytes_of_last_page = (uint32)(aux_heap_base % num_bytes_per_page);
if (bytes_of_last_page == 0) if (bytes_of_last_page == 0)
bytes_of_last_page = num_bytes_per_page; bytes_of_last_page = num_bytes_per_page;
bytes_to_page_end = num_bytes_per_page - bytes_of_last_page; bytes_to_page_end = num_bytes_per_page - bytes_of_last_page;
@ -1959,21 +2063,26 @@ aot_instantiate(AOTModule *module, AOTModuleInstance *parent,
*/ */
for (i = 0; i != module->import_table_count; ++i) { for (i = 0; i != module->import_table_count; ++i) {
table_size += offsetof(AOTTableInstance, elems); table_size += offsetof(AOTTableInstance, elems);
#if WASM_ENABLE_MULTI_MODULE != 0
table_size += (uint64)sizeof(table_elem_type_t) table_size += (uint64)sizeof(table_elem_type_t)
* (uint64)aot_get_imp_tbl_data_slots( * (uint64)aot_get_tbl_data_slots(
module->import_tables + i, false); &(module->import_tables + i)->table_type, false);
#else
/* keep a reference to the imported table's elem */
table_size += sizeof(void *);
#endif
} }
for (i = 0; i != module->table_count; ++i) { for (i = 0; i != module->table_count; ++i) {
table_size += offsetof(AOTTableInstance, elems); table_size += offsetof(AOTTableInstance, elems);
table_size += table_size += (uint64)sizeof(table_elem_type_t)
(uint64)sizeof(table_elem_type_t) * (uint64)aot_get_tbl_data_slots(
* (uint64)aot_get_tbl_data_slots(module->tables + i, false); &((module->tables + i)->table_type), false);
} }
total_size += table_size; total_size += table_size;
/* The offset of AOTModuleInstanceExtra, make it 8-byte aligned */ /* The offset of AOTModuleInstanceExtra, make it 8-byte aligned */
total_size = (total_size + 7LL) & ~7LL; total_size = (total_size + 7ULL) & ~7ULL;
extra_info_offset = (uint32)total_size; extra_info_offset = (uint32)total_size;
total_size += sizeof(AOTModuleInstanceExtra); total_size += sizeof(AOTModuleInstanceExtra);
@ -2093,8 +2202,8 @@ aot_instantiate(AOTModule *module, AOTModuleInstance *parent,
/* Initialize table info */ /* Initialize table info */
p += module->global_data_size; p += module->global_data_size;
module_inst->table_count = module->table_count + module->import_table_count; module_inst->table_count = module->table_count + module->import_table_count;
if (!tables_instantiate(module_inst, module, (AOTTableInstance *)p, if (!tables_instantiate(module_inst, module, (AOTTableInstance *)p, imports,
error_buf, error_buf_size)) import_count, error_buf, error_buf_size))
goto fail; goto fail;
/* Initialize memory space */ /* Initialize memory space */
@ -2187,7 +2296,7 @@ aot_instantiate(AOTModule *module, AOTModuleInstance *parent,
table_inst = module_inst->tables[i]; table_inst = module_inst->tables[i];
bh_assert(table_inst); bh_assert(table_inst);
table_data = table_inst->elems; table_data = aot_locate_table_elems(module, table_inst, i);
bh_assert(table_data); bh_assert(table_data);
for (j = 0; j < table_inst->cur_size; j++) { for (j = 0; j < table_inst->cur_size; j++) {
@ -2217,7 +2326,8 @@ aot_instantiate(AOTModule *module, AOTModuleInstance *parent,
table = module_inst->tables[table_init_data->table_index]; table = module_inst->tables[table_init_data->table_index];
bh_assert(table); bh_assert(table);
table_data = table->elems; table_data =
aot_locate_table_elems(module, table, table_init_data->table_index);
bh_assert(table_data); bh_assert(table_data);
wasm_runtime_get_table_inst_elem_type( wasm_runtime_get_table_inst_elem_type(
@ -2392,8 +2502,7 @@ aot_deinstantiate(AOTModuleInstance *module_inst, bool is_sub_inst)
wasm_runtime_free(extra->import_func_module_insts); wasm_runtime_free(extra->import_func_module_insts);
#endif #endif
if (module_inst->tables) tables_deinstantiate(module_inst);
wasm_runtime_free(module_inst->tables);
if (module_inst->memories) if (module_inst->memories)
memories_deinstantiate(module_inst); memories_deinstantiate(module_inst);
@ -2451,6 +2560,7 @@ aot_deinstantiate(AOTModuleInstance *module_inst, bool is_sub_inst)
#if WASM_ENABLE_REF_TYPES != 0 #if WASM_ENABLE_REF_TYPES != 0
bh_bitmap_delete(common->elem_dropped); bh_bitmap_delete(common->elem_dropped);
#endif #endif
(void)common;
wasm_runtime_free(module_inst); wasm_runtime_free(module_inst);
} }
@ -3372,7 +3482,10 @@ aot_call_indirect(WASMExecEnv *exec_env, uint32 tbl_idx, uint32 table_elem_idx,
goto fail; goto fail;
} }
tbl_elem_val = ((table_elem_type_t *)tbl_inst->elems)[table_elem_idx]; table_elem_type_t *table_elems =
aot_locate_table_elems(aot_module, tbl_inst, tbl_idx);
tbl_elem_val = table_elems[table_elem_idx];
if (tbl_elem_val == NULL_REF) { if (tbl_elem_val == NULL_REF) {
aot_set_exception_with_id(module_inst, EXCE_UNINITIALIZED_ELEMENT); aot_set_exception_with_id(module_inst, EXCE_UNINITIALIZED_ELEMENT);
goto fail; goto fail;
@ -3793,6 +3906,7 @@ aot_get_module_inst_mem_consumption(const AOTModuleInstance *module_inst,
for (i = 0; i < module_inst->table_count; i++) { for (i = 0; i < module_inst->table_count; i++) {
tbl_inst = module_inst->tables[i]; tbl_inst = module_inst->tables[i];
mem_conspn->tables_size += offsetof(AOTTableInstance, elems); mem_conspn->tables_size += offsetof(AOTTableInstance, elems);
/*TODO: correct import tables' elems */
mem_conspn->tables_size += sizeof(uint32) * tbl_inst->max_size; mem_conspn->tables_size += sizeof(uint32) * tbl_inst->max_size;
} }
@ -3834,7 +3948,6 @@ aot_table_init(AOTModuleInstance *module_inst, uint32 tbl_idx,
AOTTableInstance *tbl_inst; AOTTableInstance *tbl_inst;
AOTTableInitData *tbl_seg; AOTTableInitData *tbl_seg;
const AOTModule *module = (AOTModule *)module_inst->module; const AOTModule *module = (AOTModule *)module_inst->module;
table_elem_type_t *table_elems;
InitializerExpression *tbl_seg_init_values = NULL, *init_values; InitializerExpression *tbl_seg_init_values = NULL, *init_values;
uint32 i, tbl_seg_len = 0; uint32 i, tbl_seg_len = 0;
#if WASM_ENABLE_GC != 0 #if WASM_ENABLE_GC != 0
@ -3865,7 +3978,9 @@ aot_table_init(AOTModuleInstance *module_inst, uint32 tbl_idx,
return; return;
} }
table_elems = tbl_inst->elems + dst_offset; table_elem_type_t *table_elems =
aot_locate_table_elems(module, tbl_inst, tbl_idx);
table_elems += dst_offset;
init_values = tbl_seg_init_values + src_offset; init_values = tbl_seg_init_values + src_offset;
for (i = 0; i < length; i++) { for (i = 0; i < length; i++) {
@ -3909,16 +4024,21 @@ aot_table_copy(AOTModuleInstance *module_inst, uint32 src_tbl_idx,
return; return;
} }
table_elem_type_t *src_table_elems = aot_locate_table_elems(
(AOTModule *)module_inst->module, src_tbl_inst, src_tbl_idx);
src_table_elems += src_offset;
table_elem_type_t *dst_table_elems = aot_locate_table_elems(
(AOTModule *)module_inst->module, dst_tbl_inst, dst_tbl_idx);
dst_table_elems += dst_offset;
/* if src_offset >= dst_offset, copy from front to back */ /* if src_offset >= dst_offset, copy from front to back */
/* if src_offset < dst_offset, copy from back to front */ /* if src_offset < dst_offset, copy from back to front */
/* merge all together */ /* merge all together */
bh_memmove_s((uint8 *)dst_tbl_inst + offsetof(AOTTableInstance, elems) bh_memmove_s(dst_table_elems,
+ dst_offset * sizeof(table_elem_type_t),
(dst_tbl_inst->cur_size - dst_offset) (dst_tbl_inst->cur_size - dst_offset)
* sizeof(table_elem_type_t), * sizeof(table_elem_type_t),
(uint8 *)src_tbl_inst + offsetof(AOTTableInstance, elems) src_table_elems, length * sizeof(table_elem_type_t));
+ src_offset * sizeof(table_elem_type_t),
length * sizeof(table_elem_type_t));
} }
void void
@ -3935,8 +4055,11 @@ aot_table_fill(AOTModuleInstance *module_inst, uint32 tbl_idx, uint32 length,
return; return;
} }
table_elem_type_t *table_elems = aot_locate_table_elems(
(AOTModule *)module_inst->module, tbl_inst, tbl_idx);
for (; length != 0; data_offset++, length--) { for (; length != 0; data_offset++, length--) {
tbl_inst->elems[data_offset] = val; table_elems[data_offset] = val;
} }
} }
@ -3978,8 +4101,11 @@ aot_table_grow(AOTModuleInstance *module_inst, uint32 tbl_idx, uint32 inc_size,
} }
/* fill in */ /* fill in */
table_elem_type_t *table_elems = aot_locate_table_elems(
(AOTModule *)module_inst->module, tbl_inst, tbl_idx);
for (i = 0; i < inc_size; ++i) { for (i = 0; i < inc_size; ++i) {
tbl_inst->elems[tbl_inst->cur_size + i] = init_val; table_elems[tbl_inst->cur_size + i] = init_val;
} }
tbl_inst->cur_size = total_size; tbl_inst->cur_size = total_size;
@ -5199,6 +5325,7 @@ aot_global_traverse_gc_rootset(AOTModuleInstance *module_inst, void *heap)
static bool static bool
aot_table_traverse_gc_rootset(WASMModuleInstance *module_inst, void *heap) aot_table_traverse_gc_rootset(WASMModuleInstance *module_inst, void *heap)
{ {
AOTModule *module = (AOTModule *)module_inst->module;
AOTTableInstance **tables = (AOTTableInstance **)module_inst->tables; AOTTableInstance **tables = (AOTTableInstance **)module_inst->tables;
AOTTableInstance *table; AOTTableInstance *table;
uint32 table_count = module_inst->table_count, i, j; uint32 table_count = module_inst->table_count, i, j;
@ -5206,7 +5333,9 @@ aot_table_traverse_gc_rootset(WASMModuleInstance *module_inst, void *heap)
for (i = 0; i < table_count; i++) { for (i = 0; i < table_count; i++) {
table = tables[i]; table = tables[i];
table_elems = (WASMObjectRef *)table->elems;
table_elems = (WASMObjectRef *)aot_locate_table_elems(module, table, i);
for (j = 0; j < table->cur_size; j++) { for (j = 0; j < table->cur_size; j++) {
gc_obj = table_elems[j]; gc_obj = table_elems[j];
if (wasm_obj_is_created_from_heap(gc_obj)) { if (wasm_obj_is_created_from_heap(gc_obj)) {
@ -5343,7 +5472,7 @@ aot_const_str_set_insert(const uint8 *str, int32 len, AOTModule *module,
else else
#endif #endif
{ {
bh_memcpy_s(c_str, len, str, (uint32)len); bh_memcpy_s(c_str, (uint32)len, str, (uint32)len);
} }
if ((value = bh_hash_map_find(set, c_str))) { if ((value = bh_hash_map_find(set, c_str))) {
@ -5381,7 +5510,7 @@ aot_set_module_name(AOTModule *module, const char *name, char *error_buf,
return false; return false;
module->name = aot_const_str_set_insert((const uint8 *)name, module->name = aot_const_str_set_insert((const uint8 *)name,
(uint32)(strlen(name) + 1), module, (int32)(strlen(name) + 1), module,
#if (WASM_ENABLE_WORD_ALIGN_READ != 0) #if (WASM_ENABLE_WORD_ALIGN_READ != 0)
false, false,
#endif #endif
@ -5535,20 +5664,25 @@ aot_resolve_import_func(AOTModule *module, AOTImportFunc *import_func)
*/ */
int32 int32
aot_inherit_imports(AOTModule *module, AOTModuleInstance *inst, aot_inherit_imports(AOTModule *module, AOTModuleInstance *inst,
WASMExternInstance *out, int32 out_len) WASMExternInstance *out, uint32 out_len)
{ {
if (!module || !inst || !out) if (!module || !inst || !out)
return -1; return -1;
int32 spawned_import_count = int32 spawned_import_count_s =
wasm_runtime_get_import_count((WASMModuleCommon *)module); wasm_runtime_get_import_count((WASMModuleCommon *)module);
if (spawned_import_count_s < 0) {
return -1;
}
uint32 spawned_import_count = spawned_import_count_s;
if (spawned_import_count > out_len) { if (spawned_import_count > out_len) {
LOG_WARNING("The number of imported functions is more than the " LOG_WARNING("The number of imported functions is more than the "
"length of provided buffer "); "length of provided buffer ");
return -1; return -1;
} }
for (int32 i = 0, import_memory_index = 0; i < spawned_import_count; i++) { for (uint32 i = 0, import_memory_index = 0; i < spawned_import_count; i++) {
wasm_import_t import_type = { 0 }; wasm_import_t import_type = { 0 };
wasm_runtime_get_import_type((WASMModuleCommon *)module, i, wasm_runtime_get_import_type((WASMModuleCommon *)module, i,
@ -5577,20 +5711,21 @@ aot_inherit_imports(AOTModule *module, AOTModuleInstance *inst,
void void
aot_disinherit_imports(AOTModule *module, WASMExternInstance *imports, aot_disinherit_imports(AOTModule *module, WASMExternInstance *imports,
int32 import_count) uint32 import_count)
{ {
if (!module || !imports) if (!module || !imports)
return; return;
int32 spawned_import_count = int32 spawned_import_count =
wasm_runtime_get_import_count((WASMModuleCommon *)module); wasm_runtime_get_import_count((WASMModuleCommon *)module);
if (spawned_import_count > import_count) { if (spawned_import_count < 0
|| (uint32)spawned_import_count > import_count) {
LOG_WARNING("The number of imported functions is more than the " LOG_WARNING("The number of imported functions is more than the "
"length of provided buffer "); "length of provided buffer ");
return; return;
} }
for (int32 i = 0; i < import_count; i++) { for (uint32 i = 0; i < import_count; i++) {
WASMExternInstance *import = imports + i; WASMExternInstance *import = imports + i;
if (import->kind == WASM_IMPORT_EXPORT_KIND_MEMORY) { if (import->kind == WASM_IMPORT_EXPORT_KIND_MEMORY) {
@ -5608,3 +5743,42 @@ aot_disinherit_imports(AOTModule *module, WASMExternInstance *imports,
} }
} }
#endif /* WASM_ENABLE_LIB_WASI_THREADS != 0 || WASM_ENABLE_THREAD_MGR != 0 */ #endif /* WASM_ENABLE_LIB_WASI_THREADS != 0 || WASM_ENABLE_THREAD_MGR != 0 */
AOTTableInstance *
aot_create_table(const AOTModule *module, const AOTTableType *type)
{
uint32 max_size = aot_get_tbl_data_slots(type, false);
uint64 table_size = offsetof(AOTTableInstance, elems)
+ sizeof(table_elem_type_t) * (uint64)max_size;
AOTTableInstance *table = runtime_malloc(table_size, NULL, 0);
if (!table) {
return NULL;
}
table->cur_size = type->init_size;
table->elem_type = type->elem_type;
table->max_size = max_size;
#if WASM_ENABLE_GC != 0
table->elem_ref_type.elem_ref_type = type->elem_ref_type;
#endif
/* Set all elements to -1 or NULL_REF to mark them as uninitialized
* elements */
#if WASM_ENABLE_GC == 0
memset(table->elems, 0xff, sizeof(table_elem_type_t) * table->max_size);
#else
memset(table->elems, 0x00, sizeof(table_elem_type_t) * table->max_size);
#endif
return table;
}
void
aot_destroy_table(AOTTableInstance *table)
{
if (!table)
return;
wasm_runtime_free(table);
}

View File

@ -35,6 +35,7 @@ extern "C" {
* and not at the beginning of each function call */ * and not at the beginning of each function call */
#define WASM_FEATURE_FRAME_PER_FUNCTION (1 << 12) #define WASM_FEATURE_FRAME_PER_FUNCTION (1 << 12)
#define WASM_FEATURE_FRAME_NO_FUNC_IDX (1 << 13) #define WASM_FEATURE_FRAME_NO_FUNC_IDX (1 << 13)
#define WASM_FEATURE_MULTI_MODULE (1 << 14)
typedef enum AOTSectionType { typedef enum AOTSectionType {
AOT_SECTION_TYPE_TARGET_INFO = 0, AOT_SECTION_TYPE_TARGET_INFO = 0,
@ -484,6 +485,21 @@ typedef struct LLVMProfileData_64 {
} LLVMProfileData_64; } LLVMProfileData_64;
#endif /* end of WASM_ENABLE_STATIC_PGO != 0 */ #endif /* end of WASM_ENABLE_STATIC_PGO != 0 */
static inline table_elem_type_t *
aot_locate_table_elems(const AOTModule *module, AOTTableInstance *table,
uint32 table_index)
{
#if WASM_ENABLE_MULTI_MODULE == 0
if (table_index < module->import_table_count) {
table_elem_type_t **table_elems =
(table_elem_type_t **)(uintptr_t)table->elems;
return *table_elems;
}
#endif
return table->elems;
}
/** /**
* Load a AOT module from aot file buffer * Load a AOT module from aot file buffer
* @param buf the byte buffer which contains the AOT file data * @param buf the byte buffer which contains the AOT file data
@ -884,13 +900,23 @@ aot_get_module_name(AOTModule *module);
#if WASM_ENABLE_LIB_WASI_THREADS != 0 || WASM_ENABLE_THREAD_MGR != 0 #if WASM_ENABLE_LIB_WASI_THREADS != 0 || WASM_ENABLE_THREAD_MGR != 0
int32 int32
aot_inherit_imports(AOTModule *module, AOTModuleInstance *inst, aot_inherit_imports(AOTModule *module, AOTModuleInstance *inst,
WASMExternInstance *out, int32 out_len); WASMExternInstance *out, uint32 out_len);
void void
aot_disinherit_imports(AOTModule *module, WASMExternInstance *imports, aot_disinherit_imports(AOTModule *module, WASMExternInstance *imports,
int32 import_count); uint32 import_count);
#endif /* WASM_ENABLE_LIB_WASI_THREADS != 0 || WASM_ENABLE_THREAD_MGR != 0 */ #endif /* WASM_ENABLE_LIB_WASI_THREADS != 0 || WASM_ENABLE_THREAD_MGR != 0 */
AOTTableInstance *
aot_create_table(const AOTModule *module, const AOTTableType *type);
bool
aot_set_table_elem(const AOTModule *module, AOTTableInstance *table,
uint32 index, uint32 func_idx);
void
aot_destroy_table(AOTTableInstance *table);
#ifdef __cplusplus #ifdef __cplusplus
} /* end of extern "C" */ } /* end of extern "C" */
#endif #endif

View File

@ -4011,24 +4011,34 @@ wasm_table_get(const wasm_table_t *table, wasm_table_size_t index)
#if WASM_ENABLE_INTERP != 0 #if WASM_ENABLE_INTERP != 0
if (table->inst_comm_rt->module_type == Wasm_Module_Bytecode) { if (table->inst_comm_rt->module_type == Wasm_Module_Bytecode) {
WASMTableInstance *table_interp = WASMModuleInstance *inst_wasm =
((WASMModuleInstance *)table->inst_comm_rt) (WASMModuleInstance *)table->inst_comm_rt;
->tables[table->table_idx_rt]; WASMModule *module_wasm = inst_wasm->module;
if (index >= table_interp->cur_size) { WASMTableInstance *table_wasm = inst_wasm->tables[table->table_idx_rt];
if (index >= table_wasm->cur_size) {
return NULL; return NULL;
} }
ref_idx = (uint32)table_interp->elems[index];
table_elem_type_t *table_elems = wasm_locate_table_elems(
module_wasm, table_wasm, table->table_idx_rt);
ref_idx = (uint32)table_elems[index];
} }
#endif #endif
#if WASM_ENABLE_AOT != 0 #if WASM_ENABLE_AOT != 0
if (table->inst_comm_rt->module_type == Wasm_Module_AoT) { if (table->inst_comm_rt->module_type == Wasm_Module_AoT) {
AOTModuleInstance *inst_aot = (AOTModuleInstance *)table->inst_comm_rt; AOTModuleInstance *inst_aot = (AOTModuleInstance *)table->inst_comm_rt;
AOTModule *module_aot = (AOTModule *)inst_aot->module;
AOTTableInstance *table_aot = inst_aot->tables[table->table_idx_rt]; AOTTableInstance *table_aot = inst_aot->tables[table->table_idx_rt];
if (index >= table_aot->cur_size) { if (index >= table_aot->cur_size) {
return NULL; return NULL;
} }
ref_idx = (uint32)table_aot->elems[index];
table_elem_type_t *table_elems =
aot_locate_table_elems(module_aot, table_aot, table->table_idx_rt);
ref_idx = (uint32)table_elems[index];
} }
#endif #endif
@ -4080,17 +4090,19 @@ wasm_table_set(wasm_table_t *table, wasm_table_size_t index,
#if WASM_ENABLE_INTERP != 0 #if WASM_ENABLE_INTERP != 0
if (table->inst_comm_rt->module_type == Wasm_Module_Bytecode) { if (table->inst_comm_rt->module_type == Wasm_Module_Bytecode) {
WASMTableInstance *table_interp = WASMModuleInstance *inst_wasm =
((WASMModuleInstance *)table->inst_comm_rt) (WASMModuleInstance *)table->inst_comm_rt;
->tables[table->table_idx_rt]; WASMModule *module_wasm = inst_wasm->module;
WASMTableInstance *table_wasm = inst_wasm->tables[table->table_idx_rt];
if (index >= table_interp->cur_size) { if (index >= table_wasm->cur_size) {
return false; return false;
} }
p_ref_idx = (uint32 *)(table_interp->elems + index); table_elem_type_t *table_elems = wasm_locate_table_elems(
function_count = module_wasm, table_wasm, table->table_idx_rt);
((WASMModuleInstance *)table->inst_comm_rt)->e->function_count; p_ref_idx = (uint32 *)(table_elems + index);
function_count = inst_wasm->e->function_count;
} }
#endif #endif
@ -4104,7 +4116,9 @@ wasm_table_set(wasm_table_t *table, wasm_table_size_t index,
return false; return false;
} }
p_ref_idx = (uint32 *)(table_aot->elems + index); table_elem_type_t *table_elems =
aot_locate_table_elems(module_aot, table_aot, table->table_idx_rt);
p_ref_idx = (uint32 *)(table_elems + index);
function_count = module_aot->func_count; function_count = module_aot->func_count;
} }
#endif #endif

View File

@ -454,6 +454,55 @@ wasm_runtime_get_exec_env_tls()
} }
#endif /* end of OS_ENABLE_HW_BOUND_CHECK */ #endif /* end of OS_ENABLE_HW_BOUND_CHECK */
/* FIXME: remove when merging wasm_table_inst_t with WASMTableInstance and
* AOTTableInstance */
#if WASM_ENABLE_INTERP != 0
static void
WASMTableInstance_to_wasm_table_inst_t(const WASMModule *module,
const WASMTableInstance *table_rt,
int64 table_index,
wasm_table_inst_t *out)
{
out->elem_kind = val_type_to_val_kind(table_rt->elem_type);
out->max_size = table_rt->max_size;
out->cur_size = table_rt->cur_size;
/* table_index < 0, it means it is created by host */
uintptr_t tmp = (uintptr_t)table_rt->elems;
if (table_index > 0 && table_index < (int64)module->import_table_count) {
out->elems = *(void **)tmp;
}
else {
out->elems = (void *)tmp;
}
bh_assert(out->elems);
}
#endif
#if WASM_ENABLE_AOT != 0
static void
AOTTableInstance_to_wasm_table_inst_t(const AOTModule *module,
const AOTTableInstance *table_rt,
int64 table_index, wasm_table_inst_t *out)
{
out->elem_kind = val_type_to_val_kind(table_rt->elem_type);
out->max_size = table_rt->max_size;
out->cur_size = table_rt->cur_size;
/* table_index < 0, it means it is created by host */
uintptr_t tmp = (uintptr_t)table_rt->elems;
if (table_index > 0 && table_index < (int64)module->import_table_count) {
out->elems = *(void **)tmp;
}
else {
out->elems = (void *)tmp;
}
bh_assert(out->elems);
}
#endif
static bool static bool
wasm_runtime_env_init(void) wasm_runtime_env_init(void)
{ {
@ -2122,20 +2171,23 @@ wasm_runtime_get_export_table_inst(WASMModuleInstanceCommon *const module_inst,
const WASMModuleInstance *wasm_module_inst = const WASMModuleInstance *wasm_module_inst =
(const WASMModuleInstance *)module_inst; (const WASMModuleInstance *)module_inst;
const WASMModule *wasm_module = wasm_module_inst->module; const WASMModule *wasm_module = wasm_module_inst->module;
uint32 i;
for (i = 0; i < wasm_module->export_count; i++) { for (uint32 i = 0; i < wasm_module->export_count; i++) {
const WASMExport *wasm_export = &wasm_module->exports[i]; const WASMExport *wasm_export = &wasm_module->exports[i];
if ((wasm_export->kind == WASM_IMPORT_EXPORT_KIND_TABLE)
&& !strcmp(wasm_export->name, name)) { if (wasm_export->kind != WASM_IMPORT_EXPORT_KIND_TABLE) {
const WASMTableInstance *wasm_table_inst = continue;
wasm_module_inst->tables[wasm_export->index];
table_inst->elem_kind =
val_type_to_val_kind(wasm_table_inst->elem_type);
table_inst->cur_size = wasm_table_inst->cur_size;
table_inst->max_size = wasm_table_inst->max_size;
table_inst->elems = (void *)wasm_table_inst->elems;
return true;
} }
if (strcmp(wasm_export->name, name)) {
continue;
}
const WASMTableInstance *wasm_table_inst =
wasm_module_inst->tables[wasm_export->index];
WASMTableInstance_to_wasm_table_inst_t(
wasm_module, wasm_table_inst, wasm_export->index, table_inst);
return true;
} }
} }
#endif #endif
@ -2144,20 +2196,23 @@ wasm_runtime_get_export_table_inst(WASMModuleInstanceCommon *const module_inst,
const AOTModuleInstance *aot_module_inst = const AOTModuleInstance *aot_module_inst =
(AOTModuleInstance *)module_inst; (AOTModuleInstance *)module_inst;
const AOTModule *aot_module = (AOTModule *)aot_module_inst->module; const AOTModule *aot_module = (AOTModule *)aot_module_inst->module;
uint32 i;
for (i = 0; i < aot_module->export_count; i++) { for (uint32 i = 0; i < aot_module->export_count; i++) {
const AOTExport *aot_export = &aot_module->exports[i]; const AOTExport *aot_export = &aot_module->exports[i];
if ((aot_export->kind == WASM_IMPORT_EXPORT_KIND_TABLE)
&& !strcmp(aot_export->name, name)) { if (aot_export->kind != WASM_IMPORT_EXPORT_KIND_TABLE) {
const AOTTableInstance *aot_table_inst = continue;
aot_module_inst->tables[aot_export->index];
table_inst->elem_kind =
val_type_to_val_kind(aot_table_inst->elem_type);
table_inst->cur_size = aot_table_inst->cur_size;
table_inst->max_size = aot_table_inst->max_size;
table_inst->elems = (void *)aot_table_inst->elems;
return true;
} }
if (strcmp(aot_export->name, name)) {
continue;
}
const AOTTableInstance *aot_table_inst =
aot_module_inst->tables[aot_export->index];
AOTTableInstance_to_wasm_table_inst_t(
aot_module, aot_table_inst, aot_export->index, table_inst);
return true;
} }
} }
#endif #endif
@ -4102,8 +4157,8 @@ wasm_runtime_get_import_count(WASMModuleCommon *const module)
} }
void void
wasm_runtime_get_import_type(WASMModuleCommon *const module, int32 import_index, wasm_runtime_get_import_type(WASMModuleCommon *const module,
wasm_import_t *import_type) uint32 import_index, wasm_import_t *import_type)
{ {
if (!import_type) { if (!import_type) {
bh_assert(0); bh_assert(0);
@ -4121,7 +4176,7 @@ wasm_runtime_get_import_type(WASMModuleCommon *const module, int32 import_index,
if (module->module_type == Wasm_Module_AoT) { if (module->module_type == Wasm_Module_AoT) {
const AOTModule *aot_module = (const AOTModule *)module; const AOTModule *aot_module = (const AOTModule *)module;
uint32 func_index = (uint32)import_index; uint32 func_index = import_index;
if (func_index < aot_module->import_func_count) { if (func_index < aot_module->import_func_count) {
const AOTImportFunc *aot_import_func = const AOTImportFunc *aot_import_func =
&aot_module->import_funcs[func_index]; &aot_module->import_funcs[func_index];
@ -4182,7 +4237,7 @@ wasm_runtime_get_import_type(WASMModuleCommon *const module, int32 import_index,
if (module->module_type == Wasm_Module_Bytecode) { if (module->module_type == Wasm_Module_Bytecode) {
const WASMModule *wasm_module = (const WASMModule *)module; const WASMModule *wasm_module = (const WASMModule *)module;
if ((uint32)import_index >= wasm_module->import_count) { if (import_index >= wasm_module->import_count) {
bh_assert(0); bh_assert(0);
return; return;
} }
@ -6470,7 +6525,6 @@ static void
interp_mark_all_externrefs(WASMModuleInstance *module_inst) interp_mark_all_externrefs(WASMModuleInstance *module_inst)
{ {
uint32 i, j, externref_idx; uint32 i, j, externref_idx;
table_elem_type_t *table_data;
uint8 *global_data = module_inst->global_data; uint8 *global_data = module_inst->global_data;
WASMGlobalInstance *global; WASMGlobalInstance *global;
WASMTableInstance *table; WASMTableInstance *table;
@ -6493,9 +6547,11 @@ interp_mark_all_externrefs(WASMModuleInstance *module_inst)
&max_size); &max_size);
if (elem_type == VALUE_TYPE_EXTERNREF) { if (elem_type == VALUE_TYPE_EXTERNREF) {
table_data = table->elems; table_elem_type_t *table_elems =
wasm_locate_table_elems(module_inst->module, table, i);
for (j = 0; j < table->cur_size; j++) { for (j = 0; j < table->cur_size; j++) {
externref_idx = table_data[j]; externref_idx = (uint32)table_elems[j];
mark_externref(externref_idx); mark_externref(externref_idx);
} }
} }
@ -6513,7 +6569,7 @@ aot_mark_all_externrefs(AOTModuleInstance *module_inst)
const AOTModule *module = (AOTModule *)module_inst->module; const AOTModule *module = (AOTModule *)module_inst->module;
const AOTTable *table = module->tables; const AOTTable *table = module->tables;
const AOTGlobal *global = module->globals; const AOTGlobal *global = module->globals;
const AOTTableInstance *table_inst; AOTTableInstance *table_inst;
for (i = 0; i < module->global_count; i++, global++) { for (i = 0; i < module->global_count; i++, global++) {
if (global->type.val_type == VALUE_TYPE_EXTERNREF) { if (global->type.val_type == VALUE_TYPE_EXTERNREF) {
@ -6525,8 +6581,11 @@ aot_mark_all_externrefs(AOTModuleInstance *module_inst)
for (i = 0; i < module->table_count; i++) { for (i = 0; i < module->table_count; i++) {
table_inst = module_inst->tables[i]; table_inst = module_inst->tables[i];
if ((table + i)->table_type.elem_type == VALUE_TYPE_EXTERNREF) { if ((table + i)->table_type.elem_type == VALUE_TYPE_EXTERNREF) {
table_elem_type_t *table_elems =
aot_locate_table_elems(module, table_inst, i);
while (j < table_inst->cur_size) { while (j < table_inst->cur_size) {
mark_externref(table_inst->elems[j++]); mark_externref(table_elems[j++]);
} }
} }
} }
@ -7759,6 +7818,99 @@ wasm_runtime_is_underlying_binary_freeable(WASMModuleCommon *const module)
return true; return true;
} }
wasm_table_inst_t *
wasm_runtime_create_table(WASMModuleCommon *const module,
wasm_table_type_t const type)
{
if (!module || !type)
return NULL;
#if WASM_ENABLE_INTERP != 0
if (module->module_type == Wasm_Module_Bytecode) {
wasm_table_inst_t *out_table =
runtime_malloc(sizeof(wasm_table_inst_t), NULL, NULL, 0);
if (!out_table)
return NULL;
WASMTableInstance *wasm_table =
wasm_create_table((WASMModule *)module, type);
if (!wasm_table) {
wasm_runtime_free(wasm_table);
return NULL;
}
WASMTableInstance_to_wasm_table_inst_t((WASMModule *)module, wasm_table,
-1, out_table);
/* TODO: wasm_table ownership ?*/
return out_table;
}
#endif
#if WASM_ENABLE_AOT != 0
if (module->module_type == Wasm_Module_AoT) {
wasm_table_inst_t *out_table =
runtime_malloc(sizeof(wasm_table_inst_t), NULL, NULL, 0);
if (!out_table)
return NULL;
AOTTableInstance *aot_table =
aot_create_table((AOTModule *)module, type);
if (!aot_table) {
wasm_runtime_free(aot_table);
return NULL;
}
AOTTableInstance_to_wasm_table_inst_t((AOTModule *)module, aot_table,
-1, out_table);
/* TODO: aot_table ownership ?*/
return out_table;
}
#endif
LOG_ERROR("create table failed, invalid module type");
return NULL;
}
void
wasm_runtime_destroy_table(WASMModuleCommon *const module,
wasm_table_inst_t *table)
{
if (!module || !table)
return;
#if WASM_ENABLE_INTERP != 0
if (module->module_type == Wasm_Module_Bytecode) {
/*
* TODO: for now we only release the shell itself
* but after optimize the wasm_table_inst_t in wasm_export.h
* we shall focus on wasm_table itself
*/
// void *wasm_table =
// (void *)((uint8 *)table - offsetof(WASMTableInstance, elems));
// wasm_destroy_table((WASMTableInstance *)wasm_table);
wasm_runtime_free(table);
return;
}
#endif
#if WASM_ENABLE_AOT != 0
if (module->module_type == Wasm_Module_AoT) {
/*
* TODO: for now we only release the shell itself
* but after optimize the wasm_table_inst_t in wasm_export.h
* we shall focus on aot_table itself
*/
// void *aot_table =
// (void *)((uint8 *)table - offsetof(AOTTableInstance, elems));
// aot_destroy_table((AOTTableInstance *)aot_table);
wasm_runtime_free(table);
return;
}
#endif
LOG_ERROR("destroy table failed, invalid module type");
}
/*TODO: take us(below) out when have a linker */ /*TODO: take us(below) out when have a linker */
WASMModuleInstanceCommon * WASMModuleInstanceCommon *
wasm_runtime_instantiate_with_builtin_linker(WASMModuleCommon *module, wasm_runtime_instantiate_with_builtin_linker(WASMModuleCommon *module,
@ -7766,14 +7918,15 @@ wasm_runtime_instantiate_with_builtin_linker(WASMModuleCommon *module,
uint32 heap_size, char *error_buf, uint32 heap_size, char *error_buf,
uint32 error_buf_size) uint32 error_buf_size)
{ {
int32 import_count = 0; int32 import_count_s = 0;
WASMExternInstance *imports = NULL; WASMExternInstance *imports = NULL;
import_count = wasm_runtime_get_import_count(module); import_count_s = wasm_runtime_get_import_count(module);
if (import_count < 0) { if (import_count_s < 0) {
return NULL; return NULL;
} }
uint32 import_count = (uint32)import_count_s;
if (import_count) { if (import_count) {
imports = imports =
runtime_malloc(sizeof(WASMExternInstance) * (uint64)import_count, runtime_malloc(sizeof(WASMExternInstance) * (uint64)import_count,
@ -7797,6 +7950,18 @@ wasm_runtime_instantiate_with_builtin_linker(WASMModuleCommon *module,
0, // max_memory_pages 0, // max_memory_pages
imports, (uint32)import_count, error_buf, error_buf_size); imports, (uint32)import_count, error_buf, error_buf_size);
/*
* during wasm_instantiate()/aot_instantiate()
*
* WASModuleInstance->memories[i] takes the ownership of
* WASMExternInstance->u.memory
*
* WASModuleInstance->tables[i].elems takes
* the ownership of WASMExternInstance->u.table
*
* WASMModuleInstance->e->globals[i] copies the content of
* WASMExternInstance->u.global
*/
if (imports) { if (imports) {
wasm_runtime_free(imports); wasm_runtime_free(imports);
} }
@ -7806,30 +7971,40 @@ wasm_runtime_instantiate_with_builtin_linker(WASMModuleCommon *module,
bool bool
wasm_runtime_create_extern_inst(WASMModuleCommon *module, wasm_runtime_create_extern_inst(WASMModuleCommon *module,
wasm_import_t import_type, wasm_import_t *import_type,
WASMExternInstance *out) WASMExternInstance *out)
{ {
if (!out) if (!out)
return false; return false;
LOG_DEBUG("create import(%s,%s) kind %d", import_type.module_name, LOG_DEBUG("create import(%s,%s) kind %d", import_type->module_name,
import_type.name, import_type.kind); import_type->name, import_type->kind);
out->module_name = import_type.module_name; out->module_name = import_type->module_name;
out->field_name = import_type.name; out->field_name = import_type->name;
out->kind = import_type.kind; out->kind = import_type->kind;
if (import_type.kind == WASM_IMPORT_EXPORT_KIND_MEMORY) { if (import_type->kind == WASM_IMPORT_EXPORT_KIND_MEMORY) {
out->u.memory = out->u.memory =
wasm_runtime_create_memory(module, import_type.u.memory_type); wasm_runtime_create_memory(module, import_type->u.memory_type);
if (!out->u.memory) { if (!out->u.memory) {
LOG_ERROR("create memory failed\n"); LOG_ERROR("create memory failed\n");
return false; return false;
} }
} }
else if (import_type->kind == WASM_IMPORT_EXPORT_KIND_TABLE) {
wasm_table_inst_t *table =
wasm_runtime_create_table(module, import_type->u.table_type);
out->u.table = table;
if (!out->u.table) {
LOG_ERROR("create table failed\n");
return false;
}
}
else { else {
LOG_DEBUG("unimplemented import(%s,%s) kind %d", LOG_DEBUG("unimplemented import(%s,%s) kind %d",
import_type.module_name, import_type.name, import_type.kind); import_type->module_name, import_type->name,
import_type->kind);
} }
return true; return true;
@ -7856,37 +8031,6 @@ wasm_runtime_destroy_extern_inst(WASMModuleCommon *module,
extern_inst->field_name = NULL; extern_inst->field_name = NULL;
} }
/*
* willn't take the ownership of new_extern_inst
* take the ownership of the content of new_extern_inst
*/
bool
wasm_runtime_overwirte_imports(WASMModuleCommon *module,
WASMExternInstance *orig_extern_inst_list,
WASMExternInstance *new_extern_inst, int32 index)
{
// argument check
if (!module || !orig_extern_inst_list || !new_extern_inst) {
return false;
}
// check index with the import count of the module
if (index < 0 || index >= wasm_runtime_get_import_count(module)) {
return false;
}
// get the targeted extern_inst. allow to be NULL
WASMExternInstance *old_extern_inst = orig_extern_inst_list + index;
// release the targeted extern_inst if not NULL
wasm_runtime_destroy_extern_inst(module, old_extern_inst);
// overwrite the targeted extern_inst
bh_memcpy_s(old_extern_inst, sizeof(WASMExternInstance), new_extern_inst,
sizeof(WASMExternInstance));
return true;
}
/* /*
* Be aware that it will remove all items in the list, regardless of whether * Be aware that it will remove all items in the list, regardless of whether
* they were created by the runtime (for built-ins) or by users. * they were created by the runtime (for built-ins) or by users.
@ -7907,23 +8051,24 @@ wasm_runtime_destroy_imports(WASMModuleCommon *module,
bool bool
wasm_runtime_create_imports(WASMModuleCommon *module, wasm_runtime_create_imports(WASMModuleCommon *module,
bool (*module_name_filter)(const char *), bool (*module_name_filter)(const char *),
WASMExternInstance *out, int32 out_len) WASMExternInstance *out, uint32 out_len)
{ {
int32 import_count = wasm_runtime_get_import_count(module); int32 import_count_s = wasm_runtime_get_import_count(module);
if (import_count < 0) if (import_count_s < 0)
return false; return false;
if (import_count == 0) if (import_count_s == 0)
return true; return true;
uint32 import_count = (uint32)import_count_s;
if (!out || out_len < import_count) { if (!out || out_len < import_count) {
LOG_ERROR("invalid arguments"); LOG_ERROR("invalid arguments");
return false; return false;
} }
memset(out, 0, sizeof(WASMExternInstance) * (uint32)import_count); memset(out, 0, sizeof(WASMExternInstance) * import_count);
for (int32 i = 0; i < import_count; i++) { for (uint32 i = 0; i < import_count; i++) {
wasm_import_t import_type = { 0 }; wasm_import_t import_type = { 0 };
wasm_runtime_get_import_type(module, i, &import_type); wasm_runtime_get_import_type(module, i, &import_type);
@ -7935,7 +8080,7 @@ wasm_runtime_create_imports(WASMModuleCommon *module,
} }
WASMExternInstance *extern_instance = out + i; WASMExternInstance *extern_instance = out + i;
if (!wasm_runtime_create_extern_inst(module, import_type, if (!wasm_runtime_create_extern_inst(module, &import_type,
extern_instance)) { extern_instance)) {
wasm_runtime_destroy_imports(module, out); wasm_runtime_destroy_imports(module, out);
LOG_ERROR("create import failed"); LOG_ERROR("create import failed");
@ -7948,7 +8093,8 @@ wasm_runtime_create_imports(WASMModuleCommon *module,
bool bool
wasm_runtime_create_imports_with_builtin(WASMModuleCommon *module, wasm_runtime_create_imports_with_builtin(WASMModuleCommon *module,
WASMExternInstance *out, int32 out_len) WASMExternInstance *out,
uint32 out_len)
{ {
LOG_DEBUG("create imports with builtin"); LOG_DEBUG("create imports with builtin");
return wasm_runtime_create_imports(module, wasm_runtime_is_built_in_module, return wasm_runtime_create_imports(module, wasm_runtime_is_built_in_module,
@ -7964,7 +8110,7 @@ wasm_runtime_create_imports_with_builtin(WASMModuleCommon *module,
static int32 static int32
wasm_runtime_inherit_imports(WASMModuleCommon *module, wasm_runtime_inherit_imports(WASMModuleCommon *module,
WASMModuleInstanceCommon *inst, WASMModuleInstanceCommon *inst,
WASMExternInstance *out, int32 out_len) WASMExternInstance *out, uint32 out_len)
{ {
#if WASM_ENABLE_INTERP != 0 #if WASM_ENABLE_INTERP != 0
if (module->module_type == Wasm_Module_Bytecode) { if (module->module_type == Wasm_Module_Bytecode) {
@ -7988,25 +8134,28 @@ wasm_runtime_instantiate_with_inheritance(
WASMExecEnv *exec_env, uint32 stack_size, uint32 heap_size, WASMExecEnv *exec_env, uint32 stack_size, uint32 heap_size,
uint32 max_memory_pages, char *error_buf, uint32 error_buf_size) uint32 max_memory_pages, char *error_buf, uint32 error_buf_size)
{ {
int32 spawned_import_count = wasm_runtime_get_import_count(module); int32 spawned_import_count_s = wasm_runtime_get_import_count(module);
if (spawned_import_count < 0) { if (spawned_import_count_s < 0) {
return NULL; return NULL;
} }
WASMExternInstance *spawned_imports = runtime_malloc( uint32 spawned_import_count = (uint32)spawned_import_count_s;
sizeof(WASMExternInstance) * (uint64)spawned_import_count, NULL, WASMExternInstance *spawned_imports = NULL;
error_buf, error_buf_size); if (spawned_import_count > 0) {
if (spawned_imports == NULL) { spawned_imports = runtime_malloc(sizeof(WASMExternInstance)
LOG_ERROR("Failed to allocate memory for imports"); * (uint64)spawned_import_count,
return NULL; NULL, error_buf, error_buf_size);
} if (spawned_imports == NULL) {
LOG_ERROR("Failed to allocate memory for imports");
int ret = wasm_runtime_inherit_imports(module, parent_inst, spawned_imports, return NULL;
spawned_import_count); }
if (ret != 0) { int ret = wasm_runtime_inherit_imports(
LOG_ERROR("Failed to inherit imports"); module, parent_inst, spawned_imports, spawned_import_count);
wasm_runtime_free(spawned_imports); if (ret != 0) {
return NULL; LOG_ERROR("Failed to inherit imports");
wasm_runtime_free(spawned_imports);
return NULL;
}
} }
wasm_module_inst_t child_inst = wasm_runtime_instantiate_internal( wasm_module_inst_t child_inst = wasm_runtime_instantiate_internal(

View File

@ -110,6 +110,24 @@ shared_memory_dec_reference(WASMMemoryInstance *memory)
return old - 1; return old - 1;
} }
uint16
shared_memory_get_reference(WASMMemoryInstance *memory)
{
bh_assert(shared_memory_is_shared(memory));
#if BH_ATOMIC_16_IS_ATOMIC == 0
os_mutex_lock(&g_shared_memory_lock);
#endif
uint16 old = BH_ATOMIC_16_FETCH_OR(memory->ref_count, 0);
#if BH_ATOMIC_16_IS_ATOMIC == 0
os_mutex_unlock(&g_shared_memory_lock);
#endif
return old;
}
static korp_mutex * static korp_mutex *
shared_memory_get_lock_pointer(WASMMemoryInstance *memory) shared_memory_get_lock_pointer(WASMMemoryInstance *memory)
{ {

View File

@ -28,6 +28,9 @@ shared_memory_inc_reference(WASMMemoryInstance *memory);
uint16 uint16
shared_memory_dec_reference(WASMMemoryInstance *memory); shared_memory_dec_reference(WASMMemoryInstance *memory);
uint16
shared_memory_get_reference(WASMMemoryInstance *memory);
#define shared_memory_is_shared(memory) memory->is_shared_memory #define shared_memory_is_shared(memory) memory->is_shared_memory
#define shared_memory_lock(memory) \ #define shared_memory_lock(memory) \

View File

View File

@ -48,7 +48,7 @@ aot_create_import_memories(const WASMModule *module, uint32 import_memory_count)
import_memories = wasm_runtime_malloc((uint32)size); import_memories = wasm_runtime_malloc((uint32)size);
if (!import_memories) { if (!import_memories) {
aot_set_last_error("allocate memory failed."); aot_set_last_error("allocate import memories failed.");
return NULL; return NULL;
} }
@ -161,6 +161,89 @@ fail:
return NULL; return NULL;
} }
static AOTImportTable *
aot_create_import_tables(const WASMModule *module)
{
uint64 size = sizeof(AOTImportTable) * (uint64)module->import_table_count;
if (size >= UINT32_MAX) {
aot_set_last_error("too big allocate size");
return NULL;
}
AOTImportTable *import_tables = wasm_runtime_malloc((uint32)size);
if (!import_tables) {
aot_set_last_error("allocate import tables failed.");
return NULL;
}
memset(import_tables, 0, (uint32)size);
for (uint32 i = 0; i < module->import_table_count; i++) {
AOTImportTable *table_aot = import_tables + i;
WASMImport *table_wasm = module->import_tables + i;
table_aot->module_name = table_wasm->u.table.module_name;
table_aot->table_name = table_wasm->u.table.field_name;
table_aot->table_type.elem_type =
table_wasm->u.table.table_type.elem_type;
table_aot->table_type.flags = table_wasm->u.table.table_type.flags;
table_aot->table_type.init_size =
table_wasm->u.table.table_type.init_size;
table_aot->table_type.max_size =
table_wasm->u.table.table_type.max_size;
#if WASM_ENABLE_GC != 0
table_aot->table_type.elem_ref_type =
table_wasm->u.table.table_type.elem_ref_type;
#endif
table_aot->table_type.possible_grow =
table_wasm->u.table.table_type.possible_grow;
}
return import_tables;
}
static AOTTable *
aot_create_tables(const WASMModule *module)
{
uint64 size = sizeof(AOTTable) * (uint64)module->table_count;
if (size >= UINT32_MAX) {
aot_set_last_error("too big allocate size");
return NULL;
}
AOTTable *tables = wasm_runtime_malloc((uint32)size);
if (!tables) {
aot_set_last_error("allocate tables failed.");
return NULL;
}
memset(tables, 0, (uint32)size);
for (uint32 i = 0; i < module->table_count; i++) {
AOTTable *table_aot = tables + i;
WASMTable *table_wasm = module->tables + i;
table_aot->table_type.elem_type = table_wasm->table_type.elem_type;
table_aot->table_type.flags = table_wasm->table_type.flags;
table_aot->table_type.init_size = table_wasm->table_type.init_size;
table_aot->table_type.max_size = table_wasm->table_type.max_size;
table_aot->table_type.possible_grow =
table_wasm->table_type.possible_grow;
#if WASM_ENABLE_GC != 0
table_aot->table_type.elem_ref_type =
table_wasm->table_type.elem_ref_type;
/* Note: if the init_expr contains extra data for struct/array
* initialization information (init_expr.u.data), the pointer is
* copied.
* The pointers should still belong to wasm module, so DO NOT
* free the pointers copied to comp_data */
table_aot->init_expr = table_wasm->init_expr;
#endif
}
return tables;
}
static void static void
aot_destroy_table_init_data_list(AOTTableInitData **data_list, uint32 count) aot_destroy_table_init_data_list(AOTTableInitData **data_list, uint32 count)
{ {
@ -568,9 +651,8 @@ aot_create_comp_data(WASMModule *module, const char *target_arch,
bool gc_enabled) bool gc_enabled)
{ {
AOTCompData *comp_data; AOTCompData *comp_data;
uint32 import_global_data_size_64bit = 0, global_data_size_64bit = 0, i, j; uint32 import_global_data_size_64bit = 0, global_data_size_64bit = 0;
uint32 import_global_data_size_32bit = 0, global_data_size_32bit = 0; uint32 import_global_data_size_32bit = 0, global_data_size_32bit = 0;
uint64 size;
bool is_64bit_target = false; bool is_64bit_target = false;
#if WASM_ENABLE_GC != 0 #if WASM_ENABLE_GC != 0
bool is_target_x86 = false; bool is_target_x86 = false;
@ -647,57 +729,21 @@ aot_create_comp_data(WASMModule *module, const char *target_arch,
aot_create_mem_init_data_list(module))) aot_create_mem_init_data_list(module)))
goto fail; goto fail;
/* Create tables */ /* Create import tables */
comp_data->table_count = module->import_table_count + module->table_count; comp_data->import_table_count = module->import_table_count;
if (comp_data->import_table_count > 0) {
if (comp_data->table_count > 0) { comp_data->import_tables = aot_create_import_tables(module);
size = sizeof(AOTTable) * (uint64)comp_data->table_count; if (!comp_data->import_tables) {
if (size >= UINT32_MAX
|| !(comp_data->tables = wasm_runtime_malloc((uint32)size))) {
aot_set_last_error("create memories array failed.\n");
goto fail; goto fail;
} }
memset(comp_data->tables, 0, size); }
for (i = 0; i < comp_data->table_count; i++) {
if (i < module->import_table_count) { /* Create tables */
comp_data->tables[i].table_type.elem_type = comp_data->table_count = module->table_count;
module->import_tables[i].u.table.table_type.elem_type; if (comp_data->table_count > 0) {
comp_data->tables[i].table_type.flags = comp_data->tables = aot_create_tables(module);
module->import_tables[i].u.table.table_type.flags; if (!comp_data->tables) {
comp_data->tables[i].table_type.init_size = goto fail;
module->import_tables[i].u.table.table_type.init_size;
comp_data->tables[i].table_type.max_size =
module->import_tables[i].u.table.table_type.max_size;
#if WASM_ENABLE_GC != 0
comp_data->tables[i].table_type.elem_ref_type =
module->import_tables[i].u.table.table_type.elem_ref_type;
#endif
comp_data->tables[i].table_type.possible_grow =
module->import_tables[i].u.table.table_type.possible_grow;
}
else {
j = i - module->import_table_count;
comp_data->tables[i].table_type.elem_type =
module->tables[j].table_type.elem_type;
comp_data->tables[i].table_type.flags =
module->tables[j].table_type.flags;
comp_data->tables[i].table_type.init_size =
module->tables[j].table_type.init_size;
comp_data->tables[i].table_type.max_size =
module->tables[j].table_type.max_size;
comp_data->tables[i].table_type.possible_grow =
module->tables[j].table_type.possible_grow;
#if WASM_ENABLE_GC != 0
comp_data->tables[j].table_type.elem_ref_type =
module->tables[j].table_type.elem_ref_type;
/* Note: if the init_expr contains extra data for struct/array
* initialization information (init_expr.u.data), the pointer is
* copied.
* The pointers should still belong to wasm module, so DO NOT
* free the pointers copied to comp_data */
comp_data->tables[j].init_expr = module->tables[j].init_expr;
#endif
}
} }
} }

View File

@ -334,29 +334,19 @@ aot_set_last_error_v(const char *format, ...);
#endif #endif
static inline uint32 static inline uint32
aot_get_imp_tbl_data_slots(const AOTImportTable *tbl, bool is_jit_mode) aot_get_tbl_data_slots(const AOTTableType *type, bool is_jit_mode)
{ {
#if WASM_ENABLE_MULTI_MODULE != 0 #if WASM_ENABLE_MULTI_MODULE != 0
if (is_jit_mode) if (is_jit_mode)
return tbl->table_type.max_size; return type->max_size;
#else #else
(void)is_jit_mode; (void)is_jit_mode;
#endif #endif
return tbl->table_type.possible_grow ? tbl->table_type.max_size /*
: tbl->table_type.init_size; * TODO: if it is a host created table or a to be exported table, might need
} * to ignore possible_grow
*/
static inline uint32 return type->possible_grow ? type->max_size : type->init_size;
aot_get_tbl_data_slots(const AOTTable *tbl, bool is_jit_mode)
{
#if WASM_ENABLE_MULTI_MODULE != 0
if (is_jit_mode)
return tbl->table_type.max_size;
#else
(void)is_jit_mode;
#endif
return tbl->table_type.possible_grow ? tbl->table_type.max_size
: tbl->table_type.init_size;
} }
#ifdef __cplusplus #ifdef __cplusplus

View File

@ -534,6 +534,13 @@ set_local_gc_ref(AOTCompFrame *frame, int n, LLVMValueRef value, uint8 ref_type)
? comp_ctx->comp_data->import_memories[0].mem_type \ ? comp_ctx->comp_data->import_memories[0].mem_type \
: comp_ctx->comp_data->memories[0]) : comp_ctx->comp_data->memories[0])
#define TABLE_TYPE(i) \
(i < comp_ctx->comp_data->import_table_count \
? comp_ctx->comp_data->import_tables[i].table_type \
: comp_ctx->comp_data \
->tables[i - comp_ctx->comp_data->import_table_count] \
.table_type)
#define DEFAULT_MEMORY_TYPE_FLAG (DEFAULT_MEMORY_TYPE.flags) #define DEFAULT_MEMORY_TYPE_FLAG (DEFAULT_MEMORY_TYPE.flags)
#define DEFAULT_MEMORY_TYPE_NUM_BYTES_PER_PAGE \ #define DEFAULT_MEMORY_TYPE_NUM_BYTES_PER_PAGE \
@ -552,14 +559,14 @@ set_local_gc_ref(AOTCompFrame *frame, int n, LLVMValueRef value, uint8 ref_type)
#define IS_MEMORY64 (DEFAULT_MEMORY_TYPE_FLAG & MEMORY64_FLAG) #define IS_MEMORY64 (DEFAULT_MEMORY_TYPE_FLAG & MEMORY64_FLAG)
#define MEMORY64_COND_VALUE(VAL_IF_ENABLED, VAL_IF_DISABLED) \ #define MEMORY64_COND_VALUE(VAL_IF_ENABLED, VAL_IF_DISABLED) \
(IS_MEMORY64 ? VAL_IF_ENABLED : VAL_IF_DISABLED) (IS_MEMORY64 ? VAL_IF_ENABLED : VAL_IF_DISABLED)
#define IS_TABLE64(i) \ #define IS_TABLE64(i) (TABLE_TYPE(i).flags & TABLE64_FLAG)
(comp_ctx->comp_data->tables[i].table_type.flags & TABLE64_FLAG)
#define TABLE64_COND_VALUE(i, VAL_IF_ENABLED, VAL_IF_DISABLED) \ #define TABLE64_COND_VALUE(i, VAL_IF_ENABLED, VAL_IF_DISABLED) \
(IS_TABLE64(i) ? VAL_IF_ENABLED : VAL_IF_DISABLED) (IS_TABLE64(i) ? VAL_IF_ENABLED : VAL_IF_DISABLED)
#else #else
#define MEMORY64_COND_VALUE(VAL_IF_ENABLED, VAL_IF_DISABLED) (VAL_IF_DISABLED) #define MEMORY64_COND_VALUE(VAL_IF_ENABLED, VAL_IF_DISABLED) (VAL_IF_DISABLED)
#define TABLE64_COND_VALUE(i, VAL_IF_ENABLED, VAL_IF_DISABLED) (VAL_IF_DISABLED) #define TABLE64_COND_VALUE(i, VAL_IF_ENABLED, VAL_IF_DISABLED) (VAL_IF_DISABLED)
#endif #define IS_TABLE64(i) false
#endif /* WASM_ENABLE_MEMORY64 != 0 */
#define POP_I32(v) POP(v, VALUE_TYPE_I32) #define POP_I32(v) POP(v, VALUE_TYPE_I32)
#define POP_I64(v) POP(v, VALUE_TYPE_I64) #define POP_I64(v) POP(v, VALUE_TYPE_I64)

View File

@ -353,9 +353,7 @@ get_table_init_data_size(AOTCompContext *comp_ctx,
} }
static uint32 static uint32
get_table_init_data_list_size(AOTCompContext *comp_ctx, get_table_init_data_list_size(AOTCompContext *comp_ctx, AOTCompData *comp_data)
AOTTableInitData **table_init_data_list,
uint32 table_init_data_count)
{ {
/* /*
* ------------------------------ * ------------------------------
@ -370,13 +368,13 @@ get_table_init_data_list_size(AOTCompContext *comp_ctx,
* | | UINTPTR [func_index_count] / [elem_count] * | | UINTPTR [func_index_count] / [elem_count]
* ------------------------------ * ------------------------------
*/ */
AOTTableInitData **table_init_data = table_init_data_list; AOTTableInitData **table_init_data = comp_data->table_init_data_list;
uint32 size = 0, i; uint32 size = 0, i;
/* table_init_data_count(4 bytes) */ /* table_init_data_count(4 bytes) */
size = (uint32)sizeof(uint32); size = (uint32)sizeof(uint32);
for (i = 0; i < table_init_data_count; i++, table_init_data++) { for (i = 0; i < comp_data->table_init_data_count; i++, table_init_data++) {
size = align_uint(size, 4); size = align_uint(size, 4);
size += get_table_init_data_size(comp_ctx, *table_init_data); size += get_table_init_data_size(comp_ctx, *table_init_data);
} }
@ -384,57 +382,44 @@ get_table_init_data_list_size(AOTCompContext *comp_ctx,
} }
static uint32 static uint32
get_import_table_size(const AOTCompContext *comp_ctx, get_import_table_size(AOTCompContext *comp_ctx, AOTCompData *comp_data)
const AOTCompData *comp_data)
{ {
/* /* import_table_count */
* ------------------------------ uint32 size = (uint32)sizeof(uint32);
* | import_table_count
* ------------------------------
* | | U8 elem_type
* | | U8 flags
* | | U8 possible_grow
* | AOTImportTable[N] | U8 elem_ref_type.nullable (for GC only)
* | | U32 init_size
* | | U32 max_size
* | | U32 elem_ref_type.heap_type (for GC only)
* ------------------------------
*/
uint32 size = 0, i;
size = (uint32)sizeof(uint32); for (uint32 i = 0; i < comp_data->import_table_count; i++) {
for (i = 0; i < comp_data->import_table_count; i++) { size = align_uint(size, 4);
/*
* u8 elem_type + u8 flags
* + u8 possible_grow + u8 elem_ref_type.nullable
* ------------------------------ =u32
* + u32 init_size + u32 max_size
* + u32 elem_ref_type.heap_type (Optional)
*/
size += sizeof(uint32) * 3; size += sizeof(uint32) * 3;
#if WASM_ENABLE_GC != 0 #if WASM_ENABLE_GC != 0
if (comp_ctx->enable_gc if (comp_ctx->enable_gc
&& comp_data->import_tables[i].table_type.elem_ref_type) && comp_data->import_tables[i].table_type.elem_ref_type)
size += sizeof(uint32); size += sizeof(uint32);
#endif #endif
/* module_name */
size +=
get_string_size(comp_ctx, comp_data->import_tables[i].module_name);
size = align_uint(size, 2);
/* field_name */
size +=
get_string_size(comp_ctx, comp_data->import_tables[i].table_name);
} }
return size; return size;
} }
static uint32 static uint32
get_table_size(const AOTCompContext *comp_ctx, const AOTCompData *comp_data) get_table_size(AOTCompContext *comp_ctx, AOTCompData *comp_data)
{ {
/* /* table_count */
* ------------------------------ uint32 size = (uint32)sizeof(uint32);
* | table_count
* ------------------------------
* | | U8 elem_type
* | | U8 flags
* | | U8 possible_grow
* | AOTTable[N] | U8 elem_ref_type.nullable (for GC only)
* | | U32 init_size
* | | U32 max_size
* | | U32 elem_ref_type.heap_type (for GC only)
* | | N init_expr (for GC only)
* ------------------------------
*/
uint32 size = 0, i;
size = (uint32)sizeof(uint32); for (uint32 i = 0; i < comp_data->table_count; i++) {
for (i = 0; i < comp_data->table_count; i++) {
size += sizeof(uint32) * 3; size += sizeof(uint32) * 3;
#if WASM_ENABLE_GC != 0 #if WASM_ENABLE_GC != 0
if (comp_ctx->enable_gc) { if (comp_ctx->enable_gc) {
@ -449,37 +434,6 @@ get_table_size(const AOTCompContext *comp_ctx, const AOTCompData *comp_data)
return size; return size;
} }
static uint32
get_table_info_size(AOTCompContext *comp_ctx, AOTCompData *comp_data)
{
/*
* ------------------------------
* | import_table_count
* ------------------------------
* |
* | AOTImportTable[import_table_count]
* |
* ------------------------------
* | table_count
* ------------------------------
* |
* | AOTTable[table_count]
* |
* ------------------------------
* | table_init_data_count
* ------------------------------
* |
* | AOTTableInitData*[table_init_data_count]
* |
* ------------------------------
*/
return get_import_table_size(comp_ctx, comp_data)
+ get_table_size(comp_ctx, comp_data)
+ get_table_init_data_list_size(comp_ctx,
comp_data->table_init_data_list,
comp_data->table_init_data_count);
}
static uint32 static uint32
get_func_type_size(AOTCompContext *comp_ctx, AOTFuncType *func_type) get_func_type_size(AOTCompContext *comp_ctx, AOTFuncType *func_type)
{ {
@ -780,32 +734,36 @@ get_init_data_section_size(AOTCompContext *comp_ctx, AOTCompData *comp_data,
* ------------------------------------------------------- * -------------------------------------------------------
* | u32 import_memory_count * | u32 import_memory_count
* ------------------------------------------------------- * -------------------------------------------------------
* | | u32 flags * | | u32 flags
* | AOTImportMemory[import_memory_count] | u32 num_bytes_per_page * | AOTImportMemory[N] | u32 num_bytes_per_page
* | | u32 init_page_count * | | u32 init_page_count
* | | u32 max_page_count * | | u32 max_page_count
* | | str module_name * | | str module_name
* | | str field_name * | | str field_name
* ------------------------------------------------------- * -------------------------------------------------------
* | padding * | padding
* | previous version doesn't have it by design.
* | But alignment will make it 0
* ------------------------------------------------------- * -------------------------------------------------------
* | u32 memory_count * | u32 memory_count
* ------------------------------------------------------- * -------------------------------------------------------
* | | u32 flags * | | u32 flags
* | AOTMemoryType[memory_count] | u32 num_bytes_per_page * | AOTMemoryType[N] | u32 num_bytes_per_page
* | | u32 init_page_count * | | u32 init_page_count
* | | u32 max_page_count * | | u32 max_page_count
* ------------------------------------------------------- * -------------------------------------------------------
* | padding (TBC: previous aot doesn't have this padding by design) * | padding
* | previous version doesn't have it by design.
* | But alignment will make it 0
* ------------------------------------------------------- * -------------------------------------------------------
* | u32 mem_init_data_count * | u32 mem_init_data_count
* ------------------------------------------------------- * -------------------------------------------------------
* | | u32 is_passive/placeholder * | | u32 is_passive/placeholder
* | | u32 memory_index/placeholder * | | u32 memory_index/placeholder
* | | u32 init expr type * | | u32 init expr type
* | AOTMemInitData[mem_init_data_count] | u32 init expr value * | AOTMemInitData[N] | u32 init expr value
* | | u32 byte count * | | u32 byte count
* | | u8* bytes * | | u8* bytes
* ------------------------------------------------------- * -------------------------------------------------------
*/ */
size += get_import_memory_size(comp_ctx, comp_data); size += get_import_memory_size(comp_ctx, comp_data);
@ -816,8 +774,60 @@ get_init_data_section_size(AOTCompContext *comp_ctx, AOTCompData *comp_data,
size = align_uint(size, 4); size = align_uint(size, 4);
size += get_mem_init_data_list_size(comp_ctx, comp_data); size += get_mem_init_data_list_size(comp_ctx, comp_data);
/*
* -------------------------------------------------------
* | u32 import_table_count
* -------------------------------------------------------
* | | u8 elem_type
* | | u8 flags
* | | u8 possible_grow
* | | u8 elem_ref_type.nullable(GC)
* | AOTImportTable[N] | u32 init_size
* | | u32 max_size
* | | u32 elem_ref_type.heap_type(GC)
* | | str module_name
* | | str field_name
* -------------------------------------------------------
* | padding
* | previous version doesn't have it by design.
* | but import_table_count used to be 0
* -------------------------------------------------------
* | u32 table_count
* -------------------------------------------------------
* | | u8 elem_type
* | | u8 flags
* | | u8 possible_grow
* | | u8 elem_ref_type.nullable(GC)
* | AOTTable[N] | u32 init_size
* | | u32 max_size
* | | u32 elem_ref_type.heap_type(GC)
* | | N init_expr(GC)
* -------------------------------------------------------
* | padding
* | previous version doesn't have it by design.
* | But alignment will make it 0
* | table_init_data_count
* -------------------------------------------------------
* | u32 table_init_data_count
* -------------------------------------------------------
* | | U32 mode
* | AOTTableInitData[N] | U32 elem_type
* | | U32 table_index
* | | U32 offset.init_expr_type
* | | U64 offset.u.i64
* | | U32 func_index_count / elem_count
* | | UINTPTR [func_index_count] / [elem_count]
* -------------------------------------------------------
*/
size = align_uint(size, 4); size = align_uint(size, 4);
size += get_table_info_size(comp_ctx, comp_data); size += get_import_table_size(comp_ctx, comp_data);
size = align_uint(size, 4);
size += get_table_size(comp_ctx, comp_data);
size = align_uint(size, 4);
size += get_table_init_data_list_size(comp_ctx, comp_data);
size = align_uint(size, 4); size = align_uint(size, 4);
size += get_type_info_size(comp_ctx, comp_data); size += get_type_info_size(comp_ctx, comp_data);
@ -2040,31 +2050,27 @@ aot_emit_init_expr(uint8 *buf, uint8 *buf_end, uint32 *p_offset,
} }
static bool static bool
aot_emit_table_info(uint8 *buf, uint8 *buf_end, uint32 *p_offset, aot_emit_import_table_info(uint8 *buf, uint8 *buf_end, uint32 *p_offset,
AOTCompContext *comp_ctx, AOTCompData *comp_data, AOTCompContext *comp_ctx, AOTCompData *comp_data,
AOTObjectData *obj_data) AOTObjectData *obj_data)
{ {
uint32 offset = *p_offset, i, j; uint32 offset = *p_offset;
AOTTableInitData **init_datas = comp_data->table_init_data_list;
*p_offset = offset = align_uint(offset, 4); *p_offset = offset = align_uint(offset, 4);
/* Emit import table count */
EMIT_U32(comp_data->import_table_count); EMIT_U32(comp_data->import_table_count);
/* Emit table items */
for (i = 0; i < comp_data->import_table_count; i++) { AOTImportTable *import_table = comp_data->import_tables;
/* TODO: for (uint32 i = 0; i < comp_data->import_table_count; i++, import_table++) {
* EMIT_STR(comp_data->import_tables[i].module_name ); offset = align_uint(offset, 4);
* EMIT_STR(comp_data->import_tables[i].table_name);
*/ EMIT_U8(import_table->table_type.elem_type);
EMIT_U8(comp_data->import_tables[i].table_type.elem_type); EMIT_U8(import_table->table_type.flags);
EMIT_U8(comp_data->import_tables[i].table_type.flags); EMIT_U8(import_table->table_type.possible_grow);
EMIT_U8(comp_data->import_tables[i].table_type.possible_grow);
#if WASM_ENABLE_GC != 0 #if WASM_ENABLE_GC != 0
if (comp_ctx->enable_gc if (comp_ctx->enable_gc && import_table->table_type.elem_ref_type) {
&& comp_data->import_tables[i].table_type.elem_ref_type) { EMIT_U8(
EMIT_U8(comp_data->import_tables[i] import_table->table_type.elem_ref_type->ref_ht_common.nullable);
.table_type.elem_ref_type->ref_ht_common.nullable);
} }
else else
#endif #endif
@ -2072,23 +2078,46 @@ aot_emit_table_info(uint8 *buf, uint8 *buf_end, uint32 *p_offset,
/* emit one placeholder to keep the same size */ /* emit one placeholder to keep the same size */
EMIT_U8(0); EMIT_U8(0);
} }
EMIT_U32(comp_data->import_tables[i].table_type.init_size);
EMIT_U32(comp_data->import_tables[i].table_type.max_size); EMIT_U32(import_table->table_type.init_size);
EMIT_U32(import_table->table_type.max_size);
#if WASM_ENABLE_GC != 0 #if WASM_ENABLE_GC != 0
if (comp_ctx->enable_gc if (comp_ctx->enable_gc && import_table->table_type.elem_ref_type) {
&& comp_data->import_tables[i].table_type.elem_ref_type) {
bh_assert(wasm_is_type_multi_byte_type( bh_assert(wasm_is_type_multi_byte_type(
comp_data->import_tables[i].table_type.elem_type)); import_table->table_type.elem_type));
EMIT_U32(comp_data->import_tables[i] EMIT_U32(import_table->table_type.elem_ref_type->ref_ht_common
.table_type.elem_ref_type->ref_ht_common.heap_type); .heap_type);
} }
#endif #endif
EMIT_STR(import_table->module_name);
offset = align_uint(offset, 2);
EMIT_STR(import_table->table_name);
} }
/* Emit table count */ if (offset - *p_offset != get_import_table_size(comp_ctx, comp_data)) {
aot_set_last_error("emit import table info failed.");
return false;
}
*p_offset = offset;
return true;
}
static bool
aot_emit_table_info(uint8 *buf, uint8 *buf_end, uint32 *p_offset,
AOTCompContext *comp_ctx, AOTCompData *comp_data,
AOTObjectData *obj_data)
{
uint32 offset = *p_offset;
*p_offset = offset = align_uint(offset, 4);
EMIT_U32(comp_data->table_count); EMIT_U32(comp_data->table_count);
/* Emit table items */
for (i = 0; i < comp_data->table_count; i++) { for (uint32 i = 0; i < comp_data->table_count; i++) {
EMIT_U8(comp_data->tables[i].table_type.elem_type); EMIT_U8(comp_data->tables[i].table_type.elem_type);
EMIT_U8(comp_data->tables[i].table_type.flags); EMIT_U8(comp_data->tables[i].table_type.flags);
EMIT_U8(comp_data->tables[i].table_type.possible_grow); EMIT_U8(comp_data->tables[i].table_type.possible_grow);
@ -2104,8 +2133,10 @@ aot_emit_table_info(uint8 *buf, uint8 *buf_end, uint32 *p_offset,
/* emit one placeholder to keep the same size */ /* emit one placeholder to keep the same size */
EMIT_U8(0); EMIT_U8(0);
} }
EMIT_U32(comp_data->tables[i].table_type.init_size); EMIT_U32(comp_data->tables[i].table_type.init_size);
EMIT_U32(comp_data->tables[i].table_type.max_size); EMIT_U32(comp_data->tables[i].table_type.max_size);
#if WASM_ENABLE_GC != 0 #if WASM_ENABLE_GC != 0
if (comp_ctx->enable_gc) { if (comp_ctx->enable_gc) {
if (comp_data->tables[i].table_type.elem_ref_type) { if (comp_data->tables[i].table_type.elem_ref_type) {
@ -2123,16 +2154,37 @@ aot_emit_table_info(uint8 *buf, uint8 *buf_end, uint32 *p_offset,
#endif #endif
} }
/* Emit table init data count */ if (offset - *p_offset != get_table_size(comp_ctx, comp_data)) {
aot_set_last_error("emit table info failed.");
return false;
}
*p_offset = offset;
return true;
}
static bool
aot_emit_table_init_data_info(uint8 *buf, uint8 *buf_end, uint32 *p_offset,
AOTCompContext *comp_ctx, AOTCompData *comp_data,
AOTObjectData *obj_data)
{
uint32 offset = *p_offset;
*p_offset = offset = align_uint(offset, 4);
EMIT_U32(comp_data->table_init_data_count); EMIT_U32(comp_data->table_init_data_count);
/* Emit table init data items */
for (i = 0; i < comp_data->table_init_data_count; i++) { AOTTableInitData **init_datas = comp_data->table_init_data_list;
for (uint32 i = 0; i < comp_data->table_init_data_count; i++) {
offset = align_uint(offset, 4); offset = align_uint(offset, 4);
EMIT_U32(init_datas[i]->mode); EMIT_U32(init_datas[i]->mode);
EMIT_U32(init_datas[i]->elem_type); EMIT_U32(init_datas[i]->elem_type);
EMIT_U32(init_datas[i]->table_index); EMIT_U32(init_datas[i]->table_index);
EMIT_U32(init_datas[i]->offset.init_expr_type); EMIT_U32(init_datas[i]->offset.init_expr_type);
EMIT_U64(init_datas[i]->offset.u.i64); EMIT_U64(init_datas[i]->offset.u.i64);
#if WASM_ENABLE_GC != 0 #if WASM_ENABLE_GC != 0
if (comp_ctx->enable_gc && init_datas[i]->elem_ref_type) { if (comp_ctx->enable_gc && init_datas[i]->elem_ref_type) {
EMIT_U16(init_datas[i]->elem_ref_type->ref_ht_common.ref_type); EMIT_U16(init_datas[i]->elem_ref_type->ref_ht_common.ref_type);
@ -2146,21 +2198,23 @@ aot_emit_table_info(uint8 *buf, uint8 *buf_end, uint32 *p_offset,
EMIT_U16(0); EMIT_U16(0);
EMIT_U32(0); EMIT_U32(0);
} }
EMIT_U32(init_datas[i]->value_count); EMIT_U32(init_datas[i]->value_count);
for (j = 0; j < init_datas[i]->value_count; j++) {
for (uint j = 0; j < init_datas[i]->value_count; j++) {
if (!aot_emit_init_expr(buf, buf_end, &offset, comp_ctx, if (!aot_emit_init_expr(buf, buf_end, &offset, comp_ctx,
&init_datas[i]->init_values[j])) &init_datas[i]->init_values[j]))
return false; return false;
} }
} }
if (offset - *p_offset != get_table_info_size(comp_ctx, comp_data)) { if (offset - *p_offset
aot_set_last_error("emit table info failed."); != get_table_init_data_list_size(comp_ctx, comp_data)) {
aot_set_last_error("emit table init data info failed.");
return false; return false;
} }
*p_offset = offset; *p_offset = offset;
return true; return true;
} }
@ -2490,8 +2544,12 @@ aot_emit_init_data_section(uint8 *buf, uint8 *buf_end, uint32 *p_offset,
obj_data) obj_data)
|| !aot_emit_memory_init_data_list(buf, buf_end, &offset, comp_ctx, || !aot_emit_memory_init_data_list(buf, buf_end, &offset, comp_ctx,
comp_data, obj_data) comp_data, obj_data)
|| !aot_emit_import_table_info(buf, buf_end, &offset, comp_ctx,
comp_data, obj_data)
|| !aot_emit_table_info(buf, buf_end, &offset, comp_ctx, comp_data, || !aot_emit_table_info(buf, buf_end, &offset, comp_ctx, comp_data,
obj_data) obj_data)
|| !aot_emit_table_init_data_info(buf, buf_end, &offset, comp_ctx,
comp_data, obj_data)
|| !aot_emit_type_info(buf, buf_end, &offset, comp_ctx, comp_data, || !aot_emit_type_info(buf, buf_end, &offset, comp_ctx, comp_data,
obj_data) obj_data)
|| !aot_emit_import_global_info(buf, buf_end, &offset, comp_ctx, || !aot_emit_import_global_info(buf, buf_end, &offset, comp_ctx,
@ -4534,6 +4592,9 @@ aot_obj_data_create(AOTCompContext *comp_ctx)
if (!comp_ctx->call_stack_features.func_idx) { if (!comp_ctx->call_stack_features.func_idx) {
obj_data->target_info.feature_flags |= WASM_FEATURE_FRAME_NO_FUNC_IDX; obj_data->target_info.feature_flags |= WASM_FEATURE_FRAME_NO_FUNC_IDX;
} }
if (comp_ctx->enable_multi_module) {
obj_data->target_info.feature_flags |= WASM_FEATURE_MULTI_MODULE;
}
bh_print_time("Begin to resolve object file info"); bh_print_time("Begin to resolve object file info");

View File

@ -2239,17 +2239,8 @@ aot_compile_op_call_indirect(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx,
cmp_elem_idx, check_elem_idx_succ))) cmp_elem_idx, check_elem_idx_succ)))
goto fail; goto fail;
/* load data as i32* */ if (!(table_elem_base =
if (!(offset = I32_CONST(get_tbl_inst_offset(comp_ctx, func_ctx, tbl_idx) aot_compile_get_table_elem_base(comp_ctx, func_ctx, tbl_idx))) {
+ offsetof(AOTTableInstance, elems)))) {
HANDLE_FAILURE("LLVMConstInt");
goto fail;
}
if (!(table_elem_base = LLVMBuildInBoundsGEP2(comp_ctx->builder, INT8_TYPE,
func_ctx->aot_inst, &offset,
1, "table_elem_base_i8p"))) {
aot_set_last_error("llvm build add failed.");
goto fail; goto fail;
} }

View File

@ -86,25 +86,30 @@ uint64
get_tbl_inst_offset(const AOTCompContext *comp_ctx, get_tbl_inst_offset(const AOTCompContext *comp_ctx,
const AOTFuncContext *func_ctx, uint32 tbl_idx) const AOTFuncContext *func_ctx, uint32 tbl_idx)
{ {
uint64 offset = 0, i = 0; uint64 offset = offsetof(AOTModuleInstance, global_table_data.bytes)
AOTImportTable *imp_tbls = comp_ctx->comp_data->import_tables; + (uint64)(comp_ctx->comp_data->memory_count
AOTTable *tbls = comp_ctx->comp_data->tables; + comp_ctx->comp_data->import_memory_count)
* sizeof(AOTMemoryInstance)
offset = offsetof(AOTModuleInstance, global_table_data.bytes) /* Get global data size according to target info */
+ (uint64)(comp_ctx->comp_data->memory_count + (comp_ctx->pointer_size == sizeof(uint64)
+ comp_ctx->comp_data->import_memory_count) ? comp_ctx->comp_data->global_data_size_64bit
* sizeof(AOTMemoryInstance) : comp_ctx->comp_data->global_data_size_32bit);
/* Get global data size according to target info */
+ (comp_ctx->pointer_size == sizeof(uint64)
? comp_ctx->comp_data->global_data_size_64bit
: comp_ctx->comp_data->global_data_size_32bit);
uint64 i = 0;
while (i < tbl_idx && i < comp_ctx->comp_data->import_table_count) { while (i < tbl_idx && i < comp_ctx->comp_data->import_table_count) {
offset += offsetof(AOTTableInstance, elems); offset += offsetof(AOTTableInstance, elems);
/* avoid loading from current AOTTableInstance */ if (comp_ctx->enable_multi_module) {
offset += AOTImportTable *imp_tbls = comp_ctx->comp_data->import_tables;
(uint64)comp_ctx->pointer_size /* avoid loading from current AOTTableInstance */
* aot_get_imp_tbl_data_slots(imp_tbls + i, comp_ctx->is_jit_mode); offset += (uint64)comp_ctx->pointer_size
* aot_get_tbl_data_slots(&(imp_tbls + i)->table_type,
comp_ctx->is_jit_mode);
}
else {
/* there is only one pointer for imported elem */
offset += (uint64)comp_ctx->pointer_size;
}
++i; ++i;
} }
@ -112,13 +117,15 @@ get_tbl_inst_offset(const AOTCompContext *comp_ctx,
return offset; return offset;
} }
AOTTable *tbls = comp_ctx->comp_data->tables;
tbl_idx -= comp_ctx->comp_data->import_table_count; tbl_idx -= comp_ctx->comp_data->import_table_count;
i -= comp_ctx->comp_data->import_table_count; i -= comp_ctx->comp_data->import_table_count;
while (i < tbl_idx && i < comp_ctx->comp_data->table_count) { while (i < tbl_idx && i < comp_ctx->comp_data->table_count) {
offset += offsetof(AOTTableInstance, elems); offset += offsetof(AOTTableInstance, elems);
/* avoid loading from current AOTTableInstance */ /* avoid loading from current AOTTableInstance */
offset += (uint64)comp_ctx->pointer_size offset += (uint64)comp_ctx->pointer_size
* aot_get_tbl_data_slots(tbls + i, comp_ctx->is_jit_mode); * aot_get_tbl_data_slots(&(tbls + i)->table_type,
comp_ctx->is_jit_mode);
++i; ++i;
} }
@ -137,6 +144,70 @@ get_module_inst_extra_offset(AOTCompContext *comp_ctx)
return offset_32; return offset_32;
} }
LLVMValueRef
aot_compile_get_table_elem_base(AOTCompContext *comp_ctx,
AOTFuncContext *func_ctx, uint32 table_index)
{
/* locate elems of a AOTTableInstance in a AOTModuleInstance */
LLVMValueRef offset =
I32_CONST(get_tbl_inst_offset(comp_ctx, func_ctx, table_index)
+ offsetof(AOTTableInstance, elems));
if (!offset) {
HANDLE_FAILURE("LLVMConstInt");
goto fail;
}
/*
* for local table,
* table_elem_base = (*(uint8*)WASMModuleInstance) + offset
*
* if for import table, if enable_multi_module == true
* table_elem_base = (*(uint8*)WASMModuleInstance) + offset
* table_elem_base = *(uintptr_t*)(table_elem_base)
*/
LLVMValueRef table_elem_base =
LLVMBuildInBoundsGEP2(comp_ctx->builder, INT8_TYPE, func_ctx->aot_inst,
&offset, 1, "table_elem_base_i8p");
if (!table_elem_base) {
HANDLE_FAILURE("LLVMBuildInBoundsGEP");
goto fail;
}
if (comp_ctx->enable_multi_module) {
return table_elem_base;
}
if (table_index < comp_ctx->comp_data->import_table_count) {
table_elem_base =
LLVMBuildIntToPtr(comp_ctx->builder, table_elem_base,
INTPTR_T_PTR_TYPE, "import_table_elem_base_pp");
if (!table_elem_base) {
HANDLE_FAILURE("LLVMBuildBitCast");
goto fail;
}
table_elem_base =
LLVMBuildLoad2(comp_ctx->builder, INTPTR_T_TYPE, table_elem_base,
"import_table_elem_base_p_addr");
if (!table_elem_base) {
HANDLE_FAILURE("LLVMBuildLoad");
goto fail;
}
table_elem_base =
LLVMBuildIntToPtr(comp_ctx->builder, table_elem_base,
INTPTR_T_PTR_TYPE, "import_table_elem_base_p");
if (!table_elem_base) {
HANDLE_FAILURE("LLVMBuildBitCast");
goto fail;
}
}
return table_elem_base;
fail:
return NULL;
}
#if WASM_ENABLE_REF_TYPES != 0 || WASM_ENABLE_GC != 0 #if WASM_ENABLE_REF_TYPES != 0 || WASM_ENABLE_GC != 0
LLVMValueRef LLVMValueRef
@ -266,7 +337,7 @@ bool
aot_compile_op_table_get(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx, aot_compile_op_table_get(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx,
uint32 tbl_idx) uint32 tbl_idx)
{ {
LLVMValueRef elem_idx, offset, func_idx; LLVMValueRef elem_idx, func_idx;
LLVMValueRef table_elem_base, table_elem_addr, table_elem; LLVMValueRef table_elem_base, table_elem_addr, table_elem;
POP_TBL_ELEM_IDX(elem_idx); POP_TBL_ELEM_IDX(elem_idx);
@ -275,17 +346,9 @@ aot_compile_op_table_get(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx,
goto fail; goto fail;
} }
/* load data as i32* */ if (!(table_elem_base =
if (!(offset = I32_CONST(get_tbl_inst_offset(comp_ctx, func_ctx, tbl_idx) aot_compile_get_table_elem_base(comp_ctx, func_ctx, tbl_idx))) {
+ offsetof(AOTTableInstance, elems)))) { aot_set_last_error("llvm build table_elem_base failed.");
HANDLE_FAILURE("LLVMConstInt");
goto fail;
}
if (!(table_elem_base = LLVMBuildInBoundsGEP2(comp_ctx->builder, INT8_TYPE,
func_ctx->aot_inst, &offset,
1, "table_elem_base_i8p"))) {
aot_set_last_error("llvm build add failed.");
goto fail; goto fail;
} }
@ -352,7 +415,7 @@ bool
aot_compile_op_table_set(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx, aot_compile_op_table_set(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx,
uint32 tbl_idx) uint32 tbl_idx)
{ {
LLVMValueRef val = NULL, elem_idx, offset, table_elem_base, table_elem_addr; LLVMValueRef val = NULL, elem_idx, table_elem_base, table_elem_addr;
if (comp_ctx->enable_gc) if (comp_ctx->enable_gc)
POP_GC_REF(val); POP_GC_REF(val);
@ -372,17 +435,9 @@ aot_compile_op_table_set(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx,
goto fail; goto fail;
} }
/* load data as gc_obj_ref* or i32* */ if (!(table_elem_base =
if (!(offset = I32_CONST(get_tbl_inst_offset(comp_ctx, func_ctx, tbl_idx) aot_compile_get_table_elem_base(comp_ctx, func_ctx, tbl_idx))) {
+ offsetof(AOTTableInstance, elems)))) { aot_set_last_error("llvm build table_elem_base failed.");
HANDLE_FAILURE("LLVMConstInt");
goto fail;
}
if (!(table_elem_base = LLVMBuildInBoundsGEP2(comp_ctx->builder, INT8_TYPE,
func_ctx->aot_inst, &offset,
1, "table_elem_base_i8p"))) {
HANDLE_FAILURE("LLVMBuildInBoundsGEP");
goto fail; goto fail;
} }
@ -519,8 +574,7 @@ aot_compile_op_table_copy(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx,
/* In table64, the length should be i32 type if any one of src/dst table /* In table64, the length should be i32 type if any one of src/dst table
* is i32 type, set the table index to the lesser-or-equal table when * is i32 type, set the table index to the lesser-or-equal table when
* popping length n */ * popping length n */
if (!(comp_ctx->comp_data->tables[src_tbl_idx].table_type.flags if (!IS_TABLE64(src_tbl_idx))
& TABLE64_FLAG))
tbl_idx = src_tbl_idx; tbl_idx = src_tbl_idx;
else else
tbl_idx = dst_tbl_idx; tbl_idx = dst_tbl_idx;

View File

@ -56,6 +56,10 @@ LLVMValueRef
aot_compile_get_tbl_inst(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx, aot_compile_get_tbl_inst(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx,
uint32 tbl_idx); uint32 tbl_idx);
LLVMValueRef
aot_compile_get_table_elem_base(AOTCompContext *comp_ctx,
AOTFuncContext *func_ctx, uint32 table_index);
#ifdef __cplusplus #ifdef __cplusplus
} /* end of extern "C" */ } /* end of extern "C" */
#endif #endif

View File

@ -2695,6 +2695,9 @@ aot_create_comp_context(const AOTCompData *comp_data, aot_comp_option_t option)
if (option->enable_shared_heap) if (option->enable_shared_heap)
comp_ctx->enable_shared_heap = true; comp_ctx->enable_shared_heap = true;
if (option->enable_multi_module)
comp_ctx->enable_multi_module = true;
comp_ctx->opt_level = option->opt_level; comp_ctx->opt_level = option->opt_level;
comp_ctx->size_level = option->size_level; comp_ctx->size_level = option->size_level;

View File

@ -484,6 +484,8 @@ typedef struct AOTCompContext {
bool enable_shared_heap; bool enable_shared_heap;
bool enable_multi_module;
uint32 opt_level; uint32 opt_level;
uint32 size_level; uint32 size_level;

View File

@ -290,8 +290,10 @@ wasm_fill_table(WASMModuleInstance *inst, uint32 tbl_idx, uint32 dst_offset,
if (offset_len_out_of_bounds(dst_offset, len, tbl_sz)) if (offset_len_out_of_bounds(dst_offset, len, tbl_sz))
goto out_of_bounds; goto out_of_bounds;
table_elem_type_t *table_elems =
wasm_locate_table_elems(inst->module, tbl, tbl_idx);
for (; len != 0; dst_offset++, len--) { for (; len != 0; dst_offset++, len--) {
tbl->elems[dst_offset] = val; table_elems[dst_offset] = val;
} }
return 0; return 0;

View File

@ -706,6 +706,19 @@ get_table_elems_reg(JitFrame *frame, uint32 tbl_idx)
GEN_INSN(ADD, frame->table_regs[tbl_idx].table_elems, module_inst, GEN_INSN(ADD, frame->table_regs[tbl_idx].table_elems, module_inst,
NEW_CONST(PTR, offset)); NEW_CONST(PTR, offset));
} }
if (tbl_idx < cc->cur_wasm_module->import_table_count) {
/*
* If the table is imported, table_elems is a pointer to the
* imported table's elements. We need to load the actual elements.
*/
/* table_elems = *(void**)table_elems */
JitReg tmp = jit_cc_new_reg_ptr(cc);
GEN_INSN(LDPTR, tmp, frame->table_regs[tbl_idx].table_elems,
NEW_CONST(I32, 0));
GEN_INSN(MOV, frame->table_regs[tbl_idx].table_elems, tmp);
}
return frame->table_regs[tbl_idx].table_elems; return frame->table_regs[tbl_idx].table_elems;
} }

View File

@ -74,6 +74,7 @@ typedef struct AOTCompOption {
bool enable_stack_estimation; bool enable_stack_estimation;
bool quick_invoke_c_api_import; bool quick_invoke_c_api_import;
bool enable_shared_heap; bool enable_shared_heap;
bool enable_multi_module;
char *use_prof_file; char *use_prof_file;
uint32_t opt_level; uint32_t opt_level;
uint32_t size_level; uint32_t size_level;

View File

@ -112,6 +112,20 @@ typedef struct wasm_export_t {
} u; } u;
} wasm_export_t; } wasm_export_t;
#ifndef WASM_VALKIND_T_DEFINED
#define WASM_VALKIND_T_DEFINED
typedef uint8_t wasm_valkind_t;
enum wasm_valkind_enum {
WASM_I32,
WASM_I64,
WASM_F32,
WASM_F64,
WASM_V128,
WASM_EXTERNREF = 128,
WASM_FUNCREF,
};
#endif
/* Instantiated WASM module */ /* Instantiated WASM module */
struct WASMModuleInstanceCommon; struct WASMModuleInstanceCommon;
typedef struct WASMModuleInstanceCommon *wasm_module_inst_t; typedef struct WASMModuleInstanceCommon *wasm_module_inst_t;
@ -124,6 +138,17 @@ typedef WASMFunctionInstanceCommon *wasm_function_inst_t;
struct WASMMemoryInstance; struct WASMMemoryInstance;
typedef struct WASMMemoryInstance *wasm_memory_inst_t; typedef struct WASMMemoryInstance *wasm_memory_inst_t;
/* Table instance*/
/*TODO: better to use WASMTableInstance and AOTTableInstance directly */
typedef struct wasm_table_inst_t {
wasm_valkind_t elem_kind;
uint32_t cur_size;
uint32_t max_size;
/* represents the elements of the table, for internal use only */
/* always a table_elem_type_t elems[] */
void *elems;
} wasm_table_inst_t;
/* WASM section */ /* WASM section */
typedef struct wasm_section_t { typedef struct wasm_section_t {
struct wasm_section_t *next; struct wasm_section_t *next;
@ -270,6 +295,7 @@ typedef struct WASMExternInstance {
wasm_import_export_kind_t kind; wasm_import_export_kind_t kind;
union { union {
wasm_memory_inst_t memory; wasm_memory_inst_t memory;
wasm_table_inst_t *table;
} u; } u;
} WASMExternInstance, *wasm_extern_inst_t; } WASMExternInstance, *wasm_extern_inst_t;
@ -296,20 +322,6 @@ typedef struct InstantiationArgs {
} InstantiationArgs; } InstantiationArgs;
#endif /* INSTANTIATION_ARGS_OPTION_DEFINED */ #endif /* INSTANTIATION_ARGS_OPTION_DEFINED */
#ifndef WASM_VALKIND_T_DEFINED
#define WASM_VALKIND_T_DEFINED
typedef uint8_t wasm_valkind_t;
enum wasm_valkind_enum {
WASM_I32,
WASM_I64,
WASM_F32,
WASM_F64,
WASM_V128,
WASM_EXTERNREF = 128,
WASM_FUNCREF,
};
#endif
#ifndef WASM_VAL_T_DEFINED #ifndef WASM_VAL_T_DEFINED
#define WASM_VAL_T_DEFINED #define WASM_VAL_T_DEFINED
struct wasm_ref_t; struct wasm_ref_t;
@ -337,15 +349,6 @@ typedef struct wasm_global_inst_t {
void *global_data; void *global_data;
} wasm_global_inst_t; } wasm_global_inst_t;
/* Table instance*/
typedef struct wasm_table_inst_t {
wasm_valkind_t elem_kind;
uint32_t cur_size;
uint32_t max_size;
/* represents the elements of the table, for internal use only */
void *elems;
} wasm_table_inst_t;
typedef enum { typedef enum {
WASM_LOG_LEVEL_FATAL = 0, WASM_LOG_LEVEL_FATAL = 0,
WASM_LOG_LEVEL_ERROR = 1, WASM_LOG_LEVEL_ERROR = 1,
@ -733,6 +736,13 @@ wasm_runtime_instantiate(const wasm_module_t module,
* *
* Same as wasm_runtime_instantiate, but it also allows overwriting maximum * Same as wasm_runtime_instantiate, but it also allows overwriting maximum
* memory * memory
*
* The ownership of `imports.u`, globals and tables and memories, from `args`
* will be transferred to the runtime. You only need to worry about
* releasing them if the instantiate() fails.
*
* TODO: for now, wasm_table_inst still needs to be managed by the caller.
* but only the shell
*/ */
WASM_RUNTIME_API_EXTERN wasm_module_inst_t WASM_RUNTIME_API_EXTERN wasm_module_inst_t
wasm_runtime_instantiate_ex(const wasm_module_t module, wasm_runtime_instantiate_ex(const wasm_module_t module,
@ -1000,7 +1010,7 @@ wasm_runtime_create_memory(const wasm_module_t module,
*/ */
WASM_RUNTIME_API_EXTERN void WASM_RUNTIME_API_EXTERN void
wasm_runtime_destroy_memory(const wasm_module_t module, wasm_runtime_destroy_memory(const wasm_module_t module,
wasm_memory_inst_t memory_inst); wasm_memory_inst_t memory);
/** /**
* @brief Lookup a memory instance by name * @brief Lookup a memory instance by name
@ -1495,7 +1505,7 @@ wasm_runtime_get_import_count(const wasm_module_t module);
* @param import_type the location to store information about the import * @param import_type the location to store information about the import
*/ */
WASM_RUNTIME_API_EXTERN void WASM_RUNTIME_API_EXTERN void
wasm_runtime_get_import_type(const wasm_module_t module, int32_t import_index, wasm_runtime_get_import_type(const wasm_module_t module, uint32_t import_index,
wasm_import_t *import_type); wasm_import_t *import_type);
/** /**
@ -2341,6 +2351,14 @@ wasm_runtime_shared_heap_malloc(wasm_module_inst_t module_inst, uint64_t size,
WASM_RUNTIME_API_EXTERN void WASM_RUNTIME_API_EXTERN void
wasm_runtime_shared_heap_free(wasm_module_inst_t module_inst, uint64_t ptr); wasm_runtime_shared_heap_free(wasm_module_inst_t module_inst, uint64_t ptr);
WASM_RUNTIME_API_EXTERN wasm_table_inst_t *
wasm_runtime_create_table(const wasm_module_t module,
const wasm_table_type_t type);
WASM_RUNTIME_API_EXTERN void
wasm_runtime_destroy_table(const wasm_module_t module,
wasm_table_inst_t *table);
/*TODO: take me out when have a linker */ /*TODO: take me out when have a linker */
WASM_RUNTIME_API_EXTERN wasm_module_inst_t WASM_RUNTIME_API_EXTERN wasm_module_inst_t
wasm_runtime_instantiate_with_builtin_linker(wasm_module_t module, wasm_runtime_instantiate_with_builtin_linker(wasm_module_t module,
@ -2355,7 +2373,7 @@ wasm_runtime_instantiate_with_builtin_linker(wasm_module_t module,
WASM_RUNTIME_API_EXTERN bool WASM_RUNTIME_API_EXTERN bool
wasm_runtime_create_imports_with_builtin(wasm_module_t module, wasm_runtime_create_imports_with_builtin(wasm_module_t module,
wasm_extern_inst_t out, wasm_extern_inst_t out,
int32_t out_len); uint32_t out_len);
WASM_RUNTIME_API_EXTERN void WASM_RUNTIME_API_EXTERN void
wasm_runtime_destroy_imports(wasm_module_t module, wasm_extern_inst_t imports); wasm_runtime_destroy_imports(wasm_module_t module, wasm_extern_inst_t imports);
@ -2363,7 +2381,7 @@ wasm_runtime_destroy_imports(wasm_module_t module, wasm_extern_inst_t imports);
WASM_RUNTIME_API_EXTERN bool WASM_RUNTIME_API_EXTERN bool
wasm_runtime_create_imports(wasm_module_t module, wasm_runtime_create_imports(wasm_module_t module,
bool (*module_name_filter)(const char *), bool (*module_name_filter)(const char *),
wasm_extern_inst_t out, int32_t out_len); wasm_extern_inst_t out, uint32_t out_len);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -1260,7 +1260,8 @@ wasm_value_type_size_internal(uint8 value_type, uint8 pointer_size)
inline static uint16 inline static uint16
wasm_value_type_cell_num_internal(uint8 value_type, uint8 pointer_size) wasm_value_type_cell_num_internal(uint8 value_type, uint8 pointer_size)
{ {
return wasm_value_type_size_internal(value_type, pointer_size) / 4; return (uint16)(wasm_value_type_size_internal(value_type, pointer_size)
/ 4);
} }
/** /**
@ -1275,7 +1276,7 @@ wasm_value_type_size(uint8 value_type)
inline static uint16 inline static uint16
wasm_value_type_cell_num(uint8 value_type) wasm_value_type_cell_num(uint8 value_type)
{ {
return wasm_value_type_size(value_type) / 4; return (uint16)(wasm_value_type_size(value_type) / 4);
} }
inline static uint32 inline static uint32

View File

@ -2399,15 +2399,17 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
goto got_exception; goto got_exception;
} }
table_elem_type_t *table_elems =
wasm_locate_table_elems(module->module, tbl_inst, tbl_idx);
/* clang-format off */ /* clang-format off */
#if WASM_ENABLE_GC == 0 #if WASM_ENABLE_GC == 0
fidx = tbl_inst->elems[val]; fidx = table_elems[val];
if (fidx == (uint32)-1) { if (fidx == (uint32)-1) {
wasm_set_exception(module, "uninitialized element"); wasm_set_exception(module, "uninitialized element");
goto got_exception; goto got_exception;
} }
#else #else
func_obj = (WASMFuncObjectRef)tbl_inst->elems[val]; func_obj = (WASMFuncObjectRef)table_elems[val];
if (!func_obj) { if (!func_obj) {
wasm_set_exception(module, "uninitialized element"); wasm_set_exception(module, "uninitialized element");
goto got_exception; goto got_exception;
@ -2558,10 +2560,12 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
goto got_exception; goto got_exception;
} }
table_elem_type_t *table_elems =
wasm_locate_table_elems(module->module, tbl_inst, tbl_idx);
#if WASM_ENABLE_GC == 0 #if WASM_ENABLE_GC == 0
PUSH_I32(tbl_inst->elems[elem_idx]); PUSH_I32(table_elems[elem_idx]);
#else #else
PUSH_REF(tbl_inst->elems[elem_idx]); PUSH_REF(table_elems[elem_idx]);
#endif #endif
HANDLE_OP_END(); HANDLE_OP_END();
} }
@ -2592,7 +2596,9 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
goto got_exception; goto got_exception;
} }
tbl_inst->elems[elem_idx] = elem_val; table_elem_type_t *table_elems =
wasm_locate_table_elems(module->module, tbl_inst, tbl_idx);
table_elems[elem_idx] = elem_val;
HANDLE_OP_END(); HANDLE_OP_END();
} }
@ -5907,7 +5913,6 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
tbl_elem_idx_t elem_idx, d; tbl_elem_idx_t elem_idx, d;
uint32 n, s; uint32 n, s;
WASMTableInstance *tbl_inst; WASMTableInstance *tbl_inst;
table_elem_type_t *table_elems;
InitializerExpression *tbl_seg_init_values = NULL, InitializerExpression *tbl_seg_init_values = NULL,
*init_values; *init_values;
uint32 tbl_seg_len = 0; uint32 tbl_seg_len = 0;
@ -5957,7 +5962,10 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
break; break;
} }
table_elems = tbl_inst->elems + d; table_elem_type_t *table_elems =
wasm_locate_table_elems(module->module, tbl_inst,
tbl_idx);
table_elems = table_elems + d;
init_values = tbl_seg_init_values + s; init_values = tbl_seg_init_values + s;
#if WASM_ENABLE_GC != 0 #if WASM_ENABLE_GC != 0
SYNC_ALL_TO_FRAME(); SYNC_ALL_TO_FRAME();
@ -6143,8 +6151,11 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
goto got_exception; goto got_exception;
} }
table_elem_type_t *table_elems =
wasm_locate_table_elems(module->module, tbl_inst,
tbl_idx);
for (; n != 0; elem_idx++, n--) { for (; n != 0; elem_idx++, n--) {
tbl_inst->elems[elem_idx] = fill_val; table_elems[elem_idx] = fill_val;
} }
break; break;
} }

View File

@ -1745,15 +1745,17 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
goto got_exception; goto got_exception;
} }
table_elem_type_t *table_elems =
wasm_locate_table_elems(module->module, tbl_inst, tbl_idx);
/* clang-format off */ /* clang-format off */
#if WASM_ENABLE_GC == 0 #if WASM_ENABLE_GC == 0
fidx = (uint32)tbl_inst->elems[val]; fidx = (uint32)table_elems[val];
if (fidx == (uint32)-1) { if (fidx == (uint32)-1) {
wasm_set_exception(module, "uninitialized element"); wasm_set_exception(module, "uninitialized element");
goto got_exception; goto got_exception;
} }
#else #else
func_obj = (WASMFuncObjectRef)tbl_inst->elems[val]; func_obj = (WASMFuncObjectRef)table_elems[val];
if (!func_obj) { if (!func_obj) {
wasm_set_exception(module, "uninitialized element"); wasm_set_exception(module, "uninitialized element");
goto got_exception; goto got_exception;
@ -1908,10 +1910,12 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
goto got_exception; goto got_exception;
} }
table_elem_type_t *table_elems =
wasm_locate_table_elems(module->module, tbl_inst, tbl_idx);
#if WASM_ENABLE_GC == 0 #if WASM_ENABLE_GC == 0
PUSH_I32(tbl_inst->elems[elem_idx]); PUSH_I32(table_elems[elem_idx]);
#else #else
PUSH_REF(tbl_inst->elems[elem_idx]); PUSH_REF(table_elems[elem_idx]);
#endif #endif
HANDLE_OP_END(); HANDLE_OP_END();
} }
@ -1938,7 +1942,9 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
goto got_exception; goto got_exception;
} }
tbl_inst->elems[elem_idx] = elem_val; table_elem_type_t *table_elems =
wasm_locate_table_elems(module->module, tbl_inst, tbl_idx);
table_elems[elem_idx] = elem_val;
HANDLE_OP_END(); HANDLE_OP_END();
} }
@ -5170,7 +5176,6 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
uint32 tbl_idx, elem_idx; uint32 tbl_idx, elem_idx;
uint32 n, s, d; uint32 n, s, d;
WASMTableInstance *tbl_inst; WASMTableInstance *tbl_inst;
table_elem_type_t *table_elems;
InitializerExpression *tbl_seg_init_values = NULL, InitializerExpression *tbl_seg_init_values = NULL,
*init_values; *init_values;
uint64 i; uint64 i;
@ -5211,7 +5216,10 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
break; break;
} }
table_elems = tbl_inst->elems + d; table_elem_type_t *table_elems =
wasm_locate_table_elems(module->module, tbl_inst,
tbl_idx);
table_elems = table_elems + d;
init_values = tbl_seg_init_values + s; init_values = tbl_seg_init_values + s;
#if WASM_ENABLE_GC != 0 #if WASM_ENABLE_GC != 0
SYNC_ALL_TO_FRAME(); SYNC_ALL_TO_FRAME();
@ -5361,8 +5369,11 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
goto got_exception; goto got_exception;
} }
table_elem_type_t *table_elems =
wasm_locate_table_elems(module->module, tbl_inst,
tbl_idx);
for (; n != 0; i++, n--) { for (; n != 0; i++, n--) {
tbl_inst->elems[i] = fill_val; table_elems[i] = fill_val;
} }
break; break;

View File

@ -263,24 +263,39 @@ memory_deinstantiate(WASMMemoryInstance *memory)
} }
static void static void
memories_deinstantiate(WASMModuleInstance *module_inst, memories_deinstantiate(WASMModuleInstance *module_inst)
WASMMemoryInstance **memories, uint32 count)
{ {
if (!module_inst->memories) {
if (!memories)
return; return;
}
for (uint32 i = 0; i < count; i++) { uint32 mem_index = 0;
WASMModule *module = module_inst->module;
WASMMemoryInstance **memories = module_inst->memories;
for (; mem_index < module->import_memory_count; mem_index++) {
WASMMemoryInstance *memory = memories[mem_index];
#if WASM_ENABLE_MULTI_MODULE != 0 #if WASM_ENABLE_MULTI_MODULE != 0
WASMModule *module = module_inst->module; if (module->import_memories[mem_index].u.memory.import_module) {
if (i < module->import_memory_count
&& module->import_memories[i].u.memory.import_module) {
continue; continue;
} }
memory_deinstantiate(memory);
#endif #endif
memory_deinstantiate(memories[i]); #if WASM_ENABLE_MULTI_MODULE == 0 && WASM_ENABLE_SHARED_MEMORY != 0
/* for spawned only */
if (!shared_memory_is_shared(memory)) {
continue;
}
if (shared_memory_get_reference(memory) == 0) {
wasm_runtime_free(memory);
}
#endif
}
for (; mem_index < module->memory_count; mem_index++) {
memory_deinstantiate(memories[mem_index]);
} }
wasm_runtime_free(memories); wasm_runtime_free(memories);
@ -369,7 +384,8 @@ memory_instantiate(const WASMModule *module, WASMModuleInstance *parent,
< (uint64)num_bytes_per_page * init_page_count) { < (uint64)num_bytes_per_page * init_page_count) {
/* Insert app heap before __heap_base */ /* Insert app heap before __heap_base */
uint64 aux_heap_base = module->aux_heap_base; uint64 aux_heap_base = module->aux_heap_base;
uint32 bytes_of_last_page = aux_heap_base % num_bytes_per_page; uint32 bytes_of_last_page =
(uint32)(aux_heap_base % num_bytes_per_page);
if (bytes_of_last_page == 0) if (bytes_of_last_page == 0)
bytes_of_last_page = num_bytes_per_page; bytes_of_last_page = num_bytes_per_page;
uint32 bytes_to_page_end = uint32 bytes_to_page_end =
@ -380,7 +396,8 @@ memory_instantiate(const WASMModule *module, WASMModuleInstance *parent,
heap_offset = aux_heap_base; heap_offset = aux_heap_base;
aux_heap_base += heap_size; aux_heap_base += heap_size;
bytes_of_last_page = aux_heap_base % num_bytes_per_page; bytes_of_last_page =
(uint32)(aux_heap_base % num_bytes_per_page);
if (bytes_of_last_page == 0) if (bytes_of_last_page == 0)
bytes_of_last_page = num_bytes_per_page; bytes_of_last_page = num_bytes_per_page;
bytes_to_page_end = num_bytes_per_page - bytes_of_last_page; bytes_to_page_end = num_bytes_per_page - bytes_of_last_page;
@ -562,14 +579,14 @@ memories_instantiate(const WASMModule *module, WASMModuleInstance *module_inst,
if (!(module_inst_linked = get_sub_module_inst( if (!(module_inst_linked = get_sub_module_inst(
module_inst, memory_type->import_module))) { module_inst, memory_type->import_module))) {
set_error_buf(error_buf, error_buf_size, "unknown memory"); set_error_buf(error_buf, error_buf_size, "unknown memory");
memories_deinstantiate(module_inst, memories, memory_count); memories_deinstantiate(module_inst);
return NULL; return NULL;
} }
if (!(memories[mem_index] = wasm_lookup_memory( if (!(memories[mem_index] = wasm_lookup_memory(
module_inst_linked, memory_type->field_name))) { module_inst_linked, memory_type->field_name))) {
set_error_buf(error_buf, error_buf_size, "unknown memory"); set_error_buf(error_buf, error_buf_size, "unknown memory");
memories_deinstantiate(module_inst, memories, memory_count); memories_deinstantiate(module_inst);
return NULL; return NULL;
} }
} }
@ -591,7 +608,7 @@ memories_instantiate(const WASMModule *module, WASMModuleInstance *module_inst,
/* only inst->memories[0] will have an app heap */ /* only inst->memories[0] will have an app heap */
mem_index == 0 ? heap_size : 0, flags, mem_index == 0 ? heap_size : 0, flags,
aux_heap_base_global_data, error_buf, error_buf_size))) { aux_heap_base_global_data, error_buf, error_buf_size))) {
memories_deinstantiate(module_inst, memories, memory_count); memories_deinstantiate(module_inst);
return NULL; return NULL;
} }
} }
@ -649,7 +666,7 @@ memories_instantiate(const WASMModule *module, WASMModuleInstance *module_inst,
/* only inst->memories[0] will have a app heap */ /* only inst->memories[0] will have a app heap */
mem_index == 0 ? heap_size : 0, module->memories[i].flags, mem_index == 0 ? heap_size : 0, module->memories[i].flags,
aux_heap_base_global_data, error_buf, error_buf_size))) { aux_heap_base_global_data, error_buf, error_buf_size))) {
memories_deinstantiate(module_inst, memories, memory_count); memories_deinstantiate(module_inst);
return NULL; return NULL;
} }
mem_index++; mem_index++;
@ -713,14 +730,44 @@ wasm_destroy_memory(WASMMemoryInstance *memory)
static void static void
tables_deinstantiate(WASMModuleInstance *module_inst) tables_deinstantiate(WASMModuleInstance *module_inst)
{ {
if (module_inst->tables) { if (!module_inst) {
wasm_runtime_free(module_inst->tables); return;
} }
#if WASM_ENABLE_MULTI_MODULE != 0
#if WASM_ENABLE_MULTI_MODULE == 0
if (!module_inst->tables) {
return;
}
WASMModule *module = module_inst->module;
/* only imported tables */
for (uint32 i = 0; i < module->import_table_count; i++) {
WASMTableInstance *table = module_inst->tables[i];
if (!table) {
continue;
}
table_elem_type_t *table_elems =
wasm_locate_table_elems(module, table, i);
if (!table_elems) {
continue;
}
void *table_imported =
((uint8 *)(table_elems)) - offsetof(WASMTableInstance, elems);
wasm_runtime_free(table_imported);
}
#else
if (module_inst->e->table_insts_linked) { if (module_inst->e->table_insts_linked) {
wasm_runtime_free(module_inst->e->table_insts_linked); wasm_runtime_free(module_inst->e->table_insts_linked);
module_inst->e->table_insts_linked = NULL;
} }
#endif #endif
wasm_runtime_free(module_inst->tables);
module_inst->tables = NULL;
} }
/** /**
@ -728,14 +775,15 @@ tables_deinstantiate(WASMModuleInstance *module_inst)
*/ */
static WASMTableInstance ** static WASMTableInstance **
tables_instantiate(const WASMModule *module, WASMModuleInstance *module_inst, tables_instantiate(const WASMModule *module, WASMModuleInstance *module_inst,
WASMTableInstance *first_table, char *error_buf, WASMTableInstance *table_data,
uint32 error_buf_size) const WASMExternInstance *imports, uint32 import_count,
char *error_buf, uint32 error_buf_size)
{ {
WASMImport *import; WASMImport *import;
uint32 table_index = 0, i; uint32 table_index = 0, i;
uint32 table_count = module->import_table_count + module->table_count; uint32 table_count = module->import_table_count + module->table_count;
uint64 total_size = (uint64)sizeof(WASMTableInstance *) * table_count; uint64 total_size = (uint64)sizeof(WASMTableInstance *) * table_count;
WASMTableInstance **tables, *table = first_table; WASMTableInstance **tables, *table = table_data;
#if WASM_ENABLE_MULTI_MODULE != 0 #if WASM_ENABLE_MULTI_MODULE != 0
uint64 total_size_of_tables_linked = uint64 total_size_of_tables_linked =
(uint64)sizeof(WASMTableInstance *) * module->import_table_count; (uint64)sizeof(WASMTableInstance *) * module->import_table_count;
@ -757,39 +805,43 @@ tables_instantiate(const WASMModule *module, WASMModuleInstance *module_inst,
/* instantiate tables from import section */ /* instantiate tables from import section */
import = module->import_tables; import = module->import_tables;
for (i = 0; i < module->import_table_count; i++, import++) { for (i = 0; i < module->import_table_count; i++, import++) {
uint32 max_size_fixed = 0; WASMTableImport *import_table_type = &(module->import_tables->u.table);
uint32 max_size_fixed = wasm_get_tbl_data_slots(
&import_table_type->table_type, import_table_type);
/* sync up with table_size in wasm_instantiate() */
total_size = offsetof(WASMTableInstance, elems);
#if WASM_ENABLE_MULTI_MODULE != 0 #if WASM_ENABLE_MULTI_MODULE != 0
WASMTableInstance *table_inst_linked = NULL; WASMTableInstance *table_inst_linked = NULL;
WASMModuleInstance *module_inst_linked = NULL; WASMModuleInstance *module_inst_linked = NULL;
if (import->u.table.import_module) { if (import_table_type->import_module) {
if (!(module_inst_linked = get_sub_module_inst( if (!(module_inst_linked = get_sub_module_inst(
module_inst, import->u.table.import_module))) { module_inst, import_table_type->import_module))) {
set_error_buf(error_buf, error_buf_size, "unknown table"); set_error_buf(error_buf, error_buf_size, "unknown table");
goto fail; goto fail;
} }
if (!(table_inst_linked = wasm_lookup_table( if (!(table_inst_linked = wasm_lookup_table(
module_inst_linked, import->u.table.field_name))) { module_inst_linked, import_table_type->field_name))) {
set_error_buf(error_buf, error_buf_size, "unknown table"); set_error_buf(error_buf, error_buf_size, "unknown table");
goto fail; goto fail;
} }
total_size = offsetof(WASMTableInstance, elems);
} }
else else {
#endif
{
/* in order to save memory, alloc resource as few as possible */ /* in order to save memory, alloc resource as few as possible */
max_size_fixed = import->u.table.table_type.possible_grow max_size_fixed = import_table_type->table_type.possible_grow
? import->u.table.table_type.max_size ? import_table_type->table_type.max_size
: import->u.table.table_type.init_size; : import_table_type->table_type.init_size;
/* it is a built-in table, every module has its own */ /* it is a built-in table, every module has its own */
total_size = offsetof(WASMTableInstance, elems);
/* store function indexes for non-gc, object pointers for gc */ /* store function indexes for non-gc, object pointers for gc */
total_size += (uint64)sizeof(table_elem_type_t) * max_size_fixed; total_size += (uint64)sizeof(table_elem_type_t) * max_size_fixed;
} }
#else
total_size += sizeof(table_elem_type_t *);
#endif /* WASM_ENABLE_MULTI_MODULE != 0 */
tables[table_index++] = table; tables[table_index++] = table;
@ -801,10 +853,11 @@ tables_instantiate(const WASMModule *module, WASMModuleInstance *module_inst,
uninitialized elements */ uninitialized elements */
#endif #endif
table->is_table64 = import->u.table.table_type.flags & TABLE64_FLAG; table->is_table64 = import_table_type->table_type.flags & TABLE64_FLAG;
#if WASM_ENABLE_MULTI_MODULE != 0 #if WASM_ENABLE_MULTI_MODULE != 0
*table_linked = table_inst_linked; *table_linked = table_inst_linked;
if (table_inst_linked != NULL) { if (table_inst_linked != NULL) {
table->elem_type = table_inst_linked->elem_type; table->elem_type = table_inst_linked->elem_type;
#if WASM_ENABLE_GC != 0 #if WASM_ENABLE_GC != 0
@ -813,44 +866,61 @@ tables_instantiate(const WASMModule *module, WASMModuleInstance *module_inst,
table->cur_size = table_inst_linked->cur_size; table->cur_size = table_inst_linked->cur_size;
table->max_size = table_inst_linked->max_size; table->max_size = table_inst_linked->max_size;
} }
else else {
#endif table->elem_type = import_table_type->table_type.elem_type;
{
table->elem_type = import->u.table.table_type.elem_type;
#if WASM_ENABLE_GC != 0 #if WASM_ENABLE_GC != 0
table->elem_ref_type.elem_ref_type = table->elem_ref_type.elem_ref_type =
import->u.table.table_type.elem_ref_type; import_table_type->table_type.elem_ref_type;
#endif #endif
table->cur_size = import->u.table.table_type.init_size; table->cur_size = import_table_type->table_type.init_size;
table->max_size = max_size_fixed; table->max_size = max_size_fixed;
} }
table = (WASMTableInstance *)((uint8 *)table + (uint32)total_size); #else
#if WASM_ENABLE_MULTI_MODULE != 0
table_linked++; table->elem_type = import_table_type->table_type.elem_type;
#if WASM_ENABLE_GC != 0
table->elem_ref_type.elem_ref_type =
import_table_type->table_type.elem_ref_type;
#endif #endif
table->cur_size = import_table_type->table_type.init_size;
table->max_size = max_size_fixed;
/* use import table elem */
const WASMExternInstance *extern_inst =
wasm_runtime_get_extern_instance(imports, import_count,
WASM_IMPORT_EXPORT_KIND_TABLE, i);
if (!extern_inst) {
LOG_ERROR("missing an import table(%s, %s)",
import_table_type->module_name,
import_table_type->field_name);
return NULL;
}
/* just in case */
#ifndef NDEBUG
if (strcmp(import_table_type->field_name, extern_inst->field_name)) {
LOG_ERROR("mismatched import table name: expect \"%s\", got \"%s\"",
import_table_type->field_name, extern_inst->field_name);
return NULL;
}
#endif
/* store the pointer value */
table->elems[0] = (table_elem_type_t)extern_inst->u.table->elems;
#endif /* WASM_ENABLE_MULTI_MODULE == 0 */
table = (WASMTableInstance *)((uint8 *)table + (uint32)total_size);
} }
/* instantiate tables from table section */ /* instantiate tables from table section */
for (i = 0; i < module->table_count; i++) { for (i = 0; i < module->table_count; i++) {
uint32 max_size_fixed = 0; uint32 max_size_fixed =
wasm_get_tbl_data_slots(&module->tables[i].table_type, NULL);
total_size = offsetof(WASMTableInstance, elems); total_size = offsetof(WASMTableInstance, elems);
#if WASM_ENABLE_MULTI_MODULE != 0 /* Store function indexes or object pointer */
/* in case, a module which imports this table will grow it */ total_size += sizeof(table_elem_type_t) * (uint64)max_size_fixed;
max_size_fixed = module->tables[i].table_type.max_size;
#else
max_size_fixed = module->tables[i].table_type.possible_grow
? module->tables[i].table_type.max_size
: module->tables[i].table_type.init_size;
#endif
#if WASM_ENABLE_GC == 0
/* Store function indexes */
total_size += sizeof(uintptr_t) * (uint64)max_size_fixed;
#else
/* Store object pointers */
total_size += sizeof(uintptr_t) * (uint64)max_size_fixed;
#endif
tables[table_index++] = table; tables[table_index++] = table;
@ -876,6 +946,7 @@ tables_instantiate(const WASMModule *module, WASMModuleInstance *module_inst,
bh_assert(table_index == table_count); bh_assert(table_index == table_count);
(void)module_inst; (void)module_inst;
return tables; return tables;
#if WASM_ENABLE_MULTI_MODULE != 0 #if WASM_ENABLE_MULTI_MODULE != 0
fail: fail:
wasm_runtime_free(tables); wasm_runtime_free(tables);
@ -972,7 +1043,7 @@ functions_instantiate(const WASMModule *module, WASMModuleInstance *module_inst,
function->local_offsets = function->u.func->local_offsets; function->local_offsets = function->u.func->local_offsets;
#if WASM_ENABLE_FAST_INTERP != 0 #if WASM_ENABLE_FAST_INTERP != 0
function->const_cell_num = function->u.func->const_cell_num; function->const_cell_num = (uint16)function->u.func->const_cell_num;
#endif #endif
function++; function++;
@ -2241,13 +2312,15 @@ wasm_global_traverse_gc_rootset(WASMModuleInstance *module_inst, void *heap)
static bool static bool
wasm_table_traverse_gc_rootset(WASMModuleInstance *module_inst, void *heap) wasm_table_traverse_gc_rootset(WASMModuleInstance *module_inst, void *heap)
{ {
WASMTableInstance **tables = module_inst->tables, *table; WASMTableInstance **tables = module_inst->tables;
uint32 table_count = module_inst->table_count, i, j; uint32 table_count = module_inst->table_count, i, j;
WASMObjectRef gc_obj, *table_elems; WASMObjectRef gc_obj;
for (i = 0; i < table_count; i++) { for (i = 0; i < table_count; i++) {
table = tables[i]; WASMTableInstance *table = tables[i];
table_elems = (WASMObjectRef *)table->elems; WASMObjectRef *table_elems = (WASMObjectRef *)wasm_locate_table_elems(
module_inst->module, table, i);
for (j = 0; j < table->cur_size; j++) { for (j = 0; j < table->cur_size; j++) {
gc_obj = table_elems[j]; gc_obj = table_elems[j];
if (wasm_obj_is_created_from_heap(gc_obj)) { if (wasm_obj_is_created_from_heap(gc_obj)) {
@ -2526,35 +2599,32 @@ wasm_instantiate(WASMModule *module, WASMModuleInstance *parent,
/* Calculate the size of table data */ /* Calculate the size of table data */
for (i = 0; i < module->import_table_count; i++) { for (i = 0; i < module->import_table_count; i++) {
WASMTableImport *import_table = &module->import_tables[i].u.table;
table_size += offsetof(WASMTableInstance, elems); table_size += offsetof(WASMTableInstance, elems);
#if WASM_ENABLE_MULTI_MODULE != 0 #if WASM_ENABLE_MULTI_MODULE != 0
WASMTableImport *import_table = &module->import_tables[i].u.table;
/* all tables have its own elems. */
table_size += (uint64)sizeof(table_elem_type_t) table_size += (uint64)sizeof(table_elem_type_t)
* import_table->table_type.max_size; * import_table->table_type.max_size;
#else #else
table_size += (uint64)sizeof(table_elem_type_t) /* refer to the imported table's elems */
* (import_table->table_type.possible_grow table_size += (uint64)sizeof(table_elem_type_t);
? import_table->table_type.max_size
: import_table->table_type.init_size);
#endif #endif
} }
for (i = 0; i < module->table_count; i++) { for (i = 0; i < module->table_count; i++) {
WASMTable *table = module->tables + i; WASMTable *table = module->tables + i;
uint32 max_size_fixed =
wasm_get_tbl_data_slots(&table->table_type, NULL);
table_size += offsetof(WASMTableInstance, elems); table_size += offsetof(WASMTableInstance, elems);
#if WASM_ENABLE_MULTI_MODULE != 0 table_size += (uint64)sizeof(table_elem_type_t) * max_size_fixed;
table_size +=
(uint64)sizeof(table_elem_type_t) * table->table_type.max_size;
#else
table_size +=
(uint64)sizeof(table_elem_type_t)
* (table->table_type.possible_grow ? table->table_type.max_size
: table->table_type.init_size);
#endif
} }
total_size += table_size; total_size += table_size;
/* The offset of WASMModuleInstanceExtra, make it 8-byte aligned */ /* The offset of WASMModuleInstanceExtra, make it 8-byte aligned */
total_size = (total_size + 7LL) & ~7LL; total_size = (total_size + 7ULL) & ~7ULL;
extra_info_offset = (uint32)total_size; extra_info_offset = (uint32)total_size;
total_size += sizeof(WASMModuleInstanceExtra); total_size += sizeof(WASMModuleInstanceExtra);
@ -2701,9 +2771,9 @@ wasm_instantiate(WASMModule *module, WASMModuleInstance *parent,
aux_heap_base_global_data, imports, import_count, error_buf, aux_heap_base_global_data, imports, import_count, error_buf,
error_buf_size))) error_buf_size)))
|| (module_inst->table_count > 0 || (module_inst->table_count > 0
&& !(module_inst->tables = && !(module_inst->tables = tables_instantiate(
tables_instantiate(module, module_inst, first_table, module, module_inst, first_table, imports, import_count,
error_buf, error_buf_size))) error_buf, error_buf_size)))
|| (module_inst->e->function_count > 0 || (module_inst->e->function_count > 0
&& !(module_inst->e->functions = functions_instantiate( && !(module_inst->e->functions = functions_instantiate(
module, module_inst, error_buf, error_buf_size))) module, module_inst, error_buf, error_buf_size)))
@ -2976,10 +3046,12 @@ wasm_instantiate(WASMModule *module, WASMModuleInstance *parent,
#if WASM_ENABLE_GC != 0 #if WASM_ENABLE_GC != 0
/* Initialize the table data with init expr */ /* Initialize the table data with init expr */
/* bypass WASMTableImport */
for (i = 0; i < module->table_count; i++) { for (i = 0; i < module->table_count; i++) {
WASMTable *table = module->tables + i; WASMTable *table = module->tables + i;
WASMTableInstance *table_inst = module_inst->tables[i]; /*TBC: confirm*/
table_elem_type_t *table_data; WASMTableInstance *table_inst =
module_inst->tables[i + module->import_table_count];
uint32 j; uint32 j;
if (table->init_expr.init_expr_type == 0) { if (table->init_expr.init_expr_type == 0) {
@ -2987,7 +3059,8 @@ wasm_instantiate(WASMModule *module, WASMModuleInstance *parent,
continue; continue;
} }
table_data = table_inst->elems; table_elem_type_t *table_data =
wasm_locate_table_elems(module, table_inst, i);
bh_assert( bh_assert(
table->init_expr.init_expr_type == INIT_EXPR_TYPE_GET_GLOBAL table->init_expr.init_expr_type == INIT_EXPR_TYPE_GET_GLOBAL
@ -3035,7 +3108,6 @@ wasm_instantiate(WASMModule *module, WASMModuleInstance *parent,
WASMTableSeg *table_seg = module->table_segments + i; WASMTableSeg *table_seg = module->table_segments + i;
/* has check it in loader */ /* has check it in loader */
WASMTableInstance *table = module_inst->tables[table_seg->table_index]; WASMTableInstance *table = module_inst->tables[table_seg->table_index];
table_elem_type_t *table_data;
uint32 j; uint32 j;
#if WASM_ENABLE_REF_TYPES != 0 || WASM_ENABLE_GC != 0 #if WASM_ENABLE_REF_TYPES != 0 || WASM_ENABLE_GC != 0
uint8 tbl_elem_type; uint8 tbl_elem_type;
@ -3078,7 +3150,9 @@ wasm_instantiate(WASMModule *module, WASMModuleInstance *parent,
(void)tbl_max_size; (void)tbl_max_size;
#endif /* end of WASM_ENABLE_REF_TYPES != 0 || WASM_ENABLE_GC != 0 */ #endif /* end of WASM_ENABLE_REF_TYPES != 0 || WASM_ENABLE_GC != 0 */
table_data = table->elems; table_elem_type_t *table_data =
wasm_locate_table_elems(module, table, table_seg->table_index);
#if WASM_ENABLE_MULTI_MODULE != 0 #if WASM_ENABLE_MULTI_MODULE != 0
if (table_seg->table_index < module->import_table_count if (table_seg->table_index < module->import_table_count
&& module_inst->e->table_insts_linked[table_seg->table_index]) { && module_inst->e->table_insts_linked[table_seg->table_index]) {
@ -3521,8 +3595,7 @@ wasm_deinstantiate(WASMModuleInstance *module_inst, bool is_sub_inst)
#endif #endif
if (module_inst->memory_count > 0) { if (module_inst->memory_count > 0) {
memories_deinstantiate(module_inst, module_inst->memories, memories_deinstantiate(module_inst);
module_inst->memory_count);
} }
if (module_inst->import_func_ptrs) { if (module_inst->import_func_ptrs) {
@ -4079,7 +4152,9 @@ wasm_enlarge_table(WASMModuleInstance *module_inst, uint32 table_idx,
} }
/* fill in */ /* fill in */
new_table_data_start = table_inst->elems + table_inst->cur_size; table_elem_type_t *table_elems =
wasm_locate_table_elems(module_inst->module, table_inst, table_idx);
new_table_data_start = table_elems + table_inst->cur_size;
for (i = 0; i < inc_size; ++i) { for (i = 0; i < inc_size; ++i) {
new_table_data_start[i] = init_val; new_table_data_start[i] = init_val;
} }
@ -4113,7 +4188,9 @@ call_indirect(WASMExecEnv *exec_env, uint32 tbl_idx, uint32 tbl_elem_idx,
goto got_exception; goto got_exception;
} }
tbl_elem_val = ((table_elem_type_t *)table_inst->elems)[tbl_elem_idx]; table_elem_type_t *table_elems =
wasm_locate_table_elems(module_inst->module, table_inst, tbl_idx);
tbl_elem_val = table_elems[tbl_elem_idx];
if (tbl_elem_val == NULL_REF) { if (tbl_elem_val == NULL_REF) {
wasm_set_exception(module_inst, "uninitialized element"); wasm_set_exception(module_inst, "uninitialized element");
goto got_exception; goto got_exception;
@ -4774,7 +4851,6 @@ llvm_jit_table_init(WASMModuleInstance *module_inst, uint32 tbl_idx,
{ {
WASMTableInstance *tbl_inst; WASMTableInstance *tbl_inst;
WASMTableSeg *tbl_seg; WASMTableSeg *tbl_seg;
table_elem_type_t *table_elems;
InitializerExpression *tbl_seg_init_values = NULL, *init_values; InitializerExpression *tbl_seg_init_values = NULL, *init_values;
uint32 i, tbl_seg_len = 0; uint32 i, tbl_seg_len = 0;
#if WASM_ENABLE_GC != 0 #if WASM_ENABLE_GC != 0
@ -4805,7 +4881,9 @@ llvm_jit_table_init(WASMModuleInstance *module_inst, uint32 tbl_idx,
return; return;
} }
table_elems = tbl_inst->elems + dst_offset; table_elem_type_t *table_elems =
wasm_locate_table_elems(module_inst->module, tbl_inst, tbl_idx);
table_elems = table_elems + dst_offset;
init_values = tbl_seg_init_values + src_offset; init_values = tbl_seg_init_values + src_offset;
for (i = 0; i < length; i++) { for (i = 0; i < length; i++) {
@ -4879,8 +4957,10 @@ llvm_jit_table_fill(WASMModuleInstance *module_inst, uint32 tbl_idx,
return; return;
} }
table_elem_type_t *table_elems =
wasm_locate_table_elems(module_inst->module, tbl_inst, tbl_idx);
for (; length != 0; data_offset++, length--) { for (; length != 0; data_offset++, length--) {
tbl_inst->elems[data_offset] = (table_elem_type_t)val; table_elems[data_offset] = (table_elem_type_t)val;
} }
} }
@ -4924,8 +5004,10 @@ llvm_jit_table_grow(WASMModuleInstance *module_inst, uint32 tbl_idx,
} }
/* fill in */ /* fill in */
table_elem_type_t *table_elems =
wasm_locate_table_elems(module_inst->module, tbl_inst, tbl_idx);
for (i = 0; i < inc_size; ++i) { for (i = 0; i < inc_size; ++i) {
tbl_inst->elems[tbl_inst->cur_size + i] = (table_elem_type_t)init_val; table_elems[tbl_inst->cur_size + i] = (table_elem_type_t)init_val;
} }
tbl_inst->cur_size = total_size; tbl_inst->cur_size = total_size;
@ -5195,19 +5277,19 @@ wasm_get_module_name(WASMModule *module)
*/ */
int32 int32
wasm_inherit_imports(WASMModule *module, WASMModuleInstance *inst, wasm_inherit_imports(WASMModule *module, WASMModuleInstance *inst,
WASMExternInstance *out, int32 out_len) WASMExternInstance *out, uint32 out_len)
{ {
if (!module || !inst || !out) if (!module || !inst || !out)
return -1; return -1;
int32 spawned_import_count = module->import_count; uint32 spawned_import_count = module->import_count;
if (spawned_import_count > out_len) { if (spawned_import_count > out_len) {
LOG_WARNING("The number of imported functions is more than the " LOG_WARNING("The number of imported functions is more than the "
"length of provided buffer "); "length of provided buffer ");
return -1; return -1;
} }
for (int32 i = 0, import_memory_index = 0; i < spawned_import_count; i++) { for (uint32 i = 0, import_memory_index = 0; i < spawned_import_count; i++) {
wasm_import_t import_type = { 0 }; wasm_import_t import_type = { 0 };
wasm_runtime_get_import_type((WASMModuleCommon *)module, i, wasm_runtime_get_import_type((WASMModuleCommon *)module, i,
@ -5224,6 +5306,7 @@ wasm_inherit_imports(WASMModule *module, WASMModuleInstance *inst,
#endif #endif
import_memory_index++; import_memory_index++;
} }
/*TODO: shared_table, shared_global ?*/
else { else {
LOG_WARNING("for spawned, inherit() import(%s,%s) kind %d", LOG_WARNING("for spawned, inherit() import(%s,%s) kind %d",
import_type.module_name, import_type.name, import_type.module_name, import_type.name,
@ -5236,19 +5319,19 @@ wasm_inherit_imports(WASMModule *module, WASMModuleInstance *inst,
void void
wasm_disinherit_imports(WASMModule *module, WASMExternInstance *imports, wasm_disinherit_imports(WASMModule *module, WASMExternInstance *imports,
int32 import_count) uint32 import_count)
{ {
if (!module || !imports) if (!module || !imports)
return; return;
int32 spawned_import_count = module->import_count; uint32 spawned_import_count = module->import_count;
if (spawned_import_count > import_count) { if (spawned_import_count > import_count) {
LOG_WARNING("The number of imported functions is more than the " LOG_WARNING("The number of imported functions is more than the "
"length of provided buffer "); "length of provided buffer ");
return; return;
} }
for (int32 i = 0; i < import_count; i++) { for (uint32 i = 0; i < import_count; i++) {
WASMExternInstance *import = imports + i; WASMExternInstance *import = imports + i;
if (import->kind == WASM_IMPORT_EXPORT_KIND_MEMORY) { if (import->kind == WASM_IMPORT_EXPORT_KIND_MEMORY) {
@ -5266,3 +5349,44 @@ wasm_disinherit_imports(WASMModule *module, WASMExternInstance *imports,
} }
} }
#endif /* WASM_ENABLE_LIB_WASI_THREADS != 0 || WASM_ENABLE_THREAD_MGR != 0 */ #endif /* WASM_ENABLE_LIB_WASI_THREADS != 0 || WASM_ENABLE_THREAD_MGR != 0 */
WASMTableInstance *
wasm_create_table(const WASMModule *module, const WASMTableType *type)
{
/* not an import table for sure */
uint32 max_size = wasm_get_tbl_data_slots(type, NULL);
uint64 table_size = offsetof(WASMTableInstance, elems);
table_size += sizeof(table_elem_type_t) * (uint64)max_size;
WASMTableInstance *table = runtime_malloc(table_size, NULL, 0);
if (!table) {
return NULL;
}
table->cur_size = type->init_size;
table->elem_type = type->elem_type;
table->max_size = max_size;
#if WASM_ENABLE_GC != 0
table->elem_ref_type.elem_ref_type = type->elem_ref_type;
#endif
/* Set all elements to -1 or NULL_REF to mark them as uninitialized
* elements */
#if WASM_ENABLE_GC == 0
memset(table->elems, 0xff, sizeof(table_elem_type_t) * table->max_size);
#else
memset(table->elems, 0x00, sizeof(table_elem_type_t) * table->max_size);
#endif
return table;
}
void
wasm_destroy_table(WASMTableInstance *table)
{
if (!table)
return;
wasm_runtime_free(table);
}

View File

@ -166,6 +166,7 @@ struct WASMMemoryInstance {
struct WASMTableInstance { struct WASMTableInstance {
/* The element type */ /* The element type */
uint8 elem_type; uint8 elem_type;
/* TODO: may not used in AOTTableInstance */
uint8 is_table64; uint8 is_table64;
uint8 __padding__[6]; uint8 __padding__[6];
union { union {
@ -179,6 +180,10 @@ struct WASMTableInstance {
/* Maximum size */ /* Maximum size */
uint32 max_size; uint32 max_size;
/* Table elements */ /* Table elements */
/*
* if imported tables, it is table_elem_type_t[0][cur_size]
* if local tables, it is table_elem_type_t[cur_size]
*/
table_elem_type_t elems[1]; table_elem_type_t elems[1];
}; };
@ -522,6 +527,42 @@ wasm_get_func_code_end(WASMFunctionInstance *func)
#endif #endif
} }
static inline table_elem_type_t *
wasm_locate_table_elems(const WASMModule *module, WASMTableInstance *table,
uint32 table_index)
{
#if WASM_ENABLE_MULTI_MODULE == 0
if (table_index < module->import_table_count) {
table_elem_type_t **table_elems =
(table_elem_type_t **)(uintptr_t)table->elems;
return *table_elems;
}
#endif
return table->elems;
}
static inline uint32
wasm_get_tbl_data_slots(const WASMTableType *table_type,
const WASMTableImport *import_type)
{
#if WASM_ENABLE_MULTI_MODULE != 0
if (import_type) {
if (import_type->import_module) {
/* linked with other modules */
return table_type->max_size;
}
/* else linked with built-ins */
}
return table_type->max_size;
#else
/* in order to save memory, alloc resource as few as possible */
return table_type->possible_grow ? table_type->max_size
: table_type->init_size;
#endif
}
WASMModule * WASMModule *
wasm_load(uint8 *buf, uint32 size, wasm_load(uint8 *buf, uint32 size,
#if WASM_ENABLE_MULTI_MODULE != 0 #if WASM_ENABLE_MULTI_MODULE != 0
@ -898,13 +939,23 @@ wasm_get_module_name(WASMModule *module);
#if WASM_ENABLE_LIB_WASI_THREADS != 0 || WASM_ENABLE_THREAD_MGR != 0 #if WASM_ENABLE_LIB_WASI_THREADS != 0 || WASM_ENABLE_THREAD_MGR != 0
int32 int32
wasm_inherit_imports(WASMModule *module, WASMModuleInstance *inst, wasm_inherit_imports(WASMModule *module, WASMModuleInstance *inst,
WASMExternInstance *out, int32 out_len); WASMExternInstance *out, uint32 out_len);
void void
wasm_disinherit_imports(WASMModule *module, WASMExternInstance *imports, wasm_disinherit_imports(WASMModule *module, WASMExternInstance *imports,
int32 import_count); uint32 import_count);
#endif /* WASM_ENABLE_LIB_WASI_THREADS != 0 || WASM_ENABLE_THREAD_MGR != 0 */ #endif /* WASM_ENABLE_LIB_WASI_THREADS != 0 || WASM_ENABLE_THREAD_MGR != 0 */
WASMTableInstance *
wasm_create_table(const WASMModule *module, const WASMTableType *type);
bool
wasm_set_table_elem(const WASMModule *module, WASMTableInstance *table,
uint32 index, uint32 func_idx);
void
wasm_destroy_table(WASMTableInstance *table);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@ -671,12 +671,12 @@ main(int argc, char *argv[])
else if (!strncmp(argv[0], "--stack-size=", 13)) { else if (!strncmp(argv[0], "--stack-size=", 13)) {
if (argv[0][13] == '\0') if (argv[0][13] == '\0')
return print_help(); return print_help();
stack_size = atoi(argv[0] + 13); stack_size = (uint32)atoi(argv[0] + 13);
} }
else if (!strncmp(argv[0], "--heap-size=", 12)) { else if (!strncmp(argv[0], "--heap-size=", 12)) {
if (argv[0][12] == '\0') if (argv[0][12] == '\0')
return print_help(); return print_help();
heap_size = atoi(argv[0] + 12); heap_size = (uint32)atoi(argv[0] + 12);
} }
#if WASM_ENABLE_FAST_JIT != 0 #if WASM_ENABLE_FAST_JIT != 0
else if (!strncmp(argv[0], "--jit-codecache-size=", 21)) { else if (!strncmp(argv[0], "--jit-codecache-size=", 21)) {
@ -874,7 +874,7 @@ main(int argc, char *argv[])
} }
#if WASM_ENABLE_LOG != 0 #if WASM_ENABLE_LOG != 0
bh_log_set_verbose_level(log_verbose_level); bh_log_set_verbose_level((uint32)log_verbose_level);
#endif #endif
#if BH_HAS_DLFCN #if BH_HAS_DLFCN

View File

@ -9,6 +9,9 @@ set(CMAKE_BUILD_TYPE Debug)
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
find_package(WASISDK REQUIRED) find_package(WASISDK REQUIRED)
include(CTest)
enable_testing()
################ runtime settings ################ ################ runtime settings ################
string (TOLOWER ${CMAKE_HOST_SYSTEM_NAME} WAMR_BUILD_PLATFORM) string (TOLOWER ${CMAKE_HOST_SYSTEM_NAME} WAMR_BUILD_PLATFORM)
include(CheckPIESupported) include(CheckPIESupported)
@ -30,6 +33,12 @@ set(WAMR_BUILD_TAIL_CALL 1)
set(WAMR_BUILD_THREAD_MGR 0) set(WAMR_BUILD_THREAD_MGR 0)
set(WAMR_BUILD_LIB_WASI_THREADS 0) set(WAMR_BUILD_LIB_WASI_THREADS 0)
## below two prevent valgrind from crashing
#TODO: there is a crash if turn it on
set(WAMR_DISABLE_HW_BOUND_CHECK 0)
set(WAMR_DISABLE_STACK_HW_BOUND_CHECK 1)
set(WAMR_DISABLE_WRITE_GS_BASE 1)
# vmlib # vmlib
set(WAMR_ROOT_DIR ${CMAKE_CURRENT_LIST_DIR}/../..) set(WAMR_ROOT_DIR ${CMAKE_CURRENT_LIST_DIR}/../..)
include(${WAMR_ROOT_DIR}/build-scripts/runtime_lib.cmake) include(${WAMR_ROOT_DIR}/build-scripts/runtime_lib.cmake)
@ -38,7 +47,8 @@ target_include_directories(vmlib INTERFACE ${WAMR_ROOT_DIR}/core/iwasm/include)
target_link_libraries(vmlib ${LLVM_AVAILABLE_LIBS} -lm -ldl) target_link_libraries(vmlib ${LLVM_AVAILABLE_LIBS} -lm -ldl)
################ samples ################ ################ samples ################
add_subdirectory(raw) add_subdirectory(import-memory)
add_subdirectory(import-table)
################ wasm and/or aot ################ ################ wasm and/or aot ################
include(ExternalProject) include(ExternalProject)

View File

@ -0,0 +1,11 @@
# Copyright (C) 2019 Intel Corporation. All rights reserved.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
include (${SHARED_DIR}/utils/uncommon/shared_uncommon.cmake)
add_executable(import_memory main.c ${UNCOMMON_SHARED_SOURCE})
target_link_libraries(import_memory PRIVATE vmlib)
add_test(NAME Test_import_memory
COMMAND ./import-memory/import_memory
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/..
)

View File

@ -44,10 +44,13 @@ main(int argc, char *argv_main[])
/* import type */ /* import type */
int32_t import_count = wasm_runtime_get_import_count(module); int32_t import_count = wasm_runtime_get_import_count(module);
if (import_count < 0)
goto unload_module;
wasm_import_t import_type = { 0 }; wasm_import_t import_type = { 0 };
int32_t import_memory_index = -1; int32_t import_memory_index = -1;
for (int i = 0; i < import_count; i++) { for (int32_t i = 0; i < import_count; i++) {
wasm_runtime_get_import_type(module, i, &import_type); wasm_runtime_get_import_type(module, (uint32_t)i, &import_type);
if (import_type.kind == WASM_IMPORT_EXPORT_KIND_MEMORY) { if (import_type.kind == WASM_IMPORT_EXPORT_KIND_MEMORY) {
import_memory_index = i; import_memory_index = i;
break; break;
@ -76,6 +79,7 @@ main(int argc, char *argv_main[])
/* wasm instance */ /* wasm instance */
InstantiationArgs inst_args = { InstantiationArgs inst_args = {
.default_stack_size = 65536,
.imports = import_list, .imports = import_list,
.import_count = 10, .import_count = 10,
}; };
@ -83,7 +87,9 @@ main(int argc, char *argv_main[])
module, &inst_args, error_buf, sizeof(error_buf)); module, &inst_args, error_buf, sizeof(error_buf));
if (!inst) { if (!inst) {
printf("Instantiate wasm file failed: %s\n", error_buf); printf("Instantiate wasm file failed: %s\n", error_buf);
goto destroy_memory; wasm_runtime_destroy_memory(module, memory);
memory = NULL;
goto unload_module;
} }
/* export function */ /* export function */
@ -94,7 +100,7 @@ main(int argc, char *argv_main[])
goto destroy_inst; goto destroy_inst;
} }
wasm_exec_env_t exec_env = wasm_runtime_create_exec_env(inst, 8192); wasm_exec_env_t exec_env = wasm_runtime_create_exec_env(inst, 65536);
if (!exec_env) { if (!exec_env) {
printf("Create wasm execution environment failed.\n"); printf("Create wasm execution environment failed.\n");
goto destroy_inst; goto destroy_inst;
@ -112,8 +118,6 @@ destroy_exec_env:
wasm_runtime_destroy_exec_env(exec_env); wasm_runtime_destroy_exec_env(exec_env);
destroy_inst: destroy_inst:
wasm_runtime_deinstantiate(inst); wasm_runtime_deinstantiate(inst);
destroy_memory:
wasm_runtime_destroy_memory(module, memory);
unload_module: unload_module:
wasm_runtime_unload(module); wasm_runtime_unload(module);
release_file_buffer: release_file_buffer:

View File

@ -0,0 +1,11 @@
# Copyright (C) 2019 Intel Corporation. All rights reserved.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
include (${SHARED_DIR}/utils/uncommon/shared_uncommon.cmake)
add_executable(import_table main.c ${UNCOMMON_SHARED_SOURCE})
target_link_libraries(import_table PRIVATE vmlib)
add_test(NAME Test_import_table
COMMAND ./import-table/import_table
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/..
)

View File

@ -0,0 +1,113 @@
/*
* Copyright (C) 2019 Intel Corporation. All rights reserved.
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
*/
#include "wasm_export.h"
#include "bh_read_file.h"
int
main(int argc, char *argv_main[])
{
int exit_code = EXIT_FAILURE;
/* runtime */
if (!wasm_runtime_init()) {
printf("Init runtime failed.\n");
return EXIT_FAILURE;
}
wasm_runtime_set_log_level(WASM_LOG_LEVEL_VERBOSE);
/* wasm module file */
char *buffer;
uint32 buf_size;
#if WASM_ENABLE_AOT != 0
printf("Loading AOT file...\n");
buffer = bh_read_file_to_buffer("import_table.aot", &buf_size);
#else
printf("Loading WASM file...\n");
buffer = bh_read_file_to_buffer("import_table.wasm", &buf_size);
#endif
if (!buffer) {
printf("Open wasm file failed.\n");
goto destroy_runtime;
}
/* wasm module */
char error_buf[128];
wasm_module_t module = wasm_runtime_load((uint8 *)buffer, buf_size,
error_buf, sizeof(error_buf));
if (!module) {
printf("Load wasm file failed: %s\n", error_buf);
goto release_file_buffer;
}
/* import type */
int32_t import_count = wasm_runtime_get_import_count(module);
if (import_count < 0)
goto unload_module;
wasm_import_t import_type = { 0 };
int32_t import_table_index = -1;
for (int32_t i = 0; i < import_count; i++) {
wasm_runtime_get_import_type(module, (uint32_t)i, &import_type);
if (import_type.kind == WASM_IMPORT_EXPORT_KIND_TABLE) {
import_table_index = i;
break;
}
}
if (import_table_index == -1) {
printf("No memory import found.\n");
goto unload_module;
}
/* host table */
wasm_table_type_t table_type = import_type.u.table_type;
wasm_table_inst_t *table = wasm_runtime_create_table(module, table_type);
if (!table) {
printf("Create table failed.\n");
goto unload_module;
}
/* import list */
WASMExternInstance import_list[10] = { 0 };
import_list[import_table_index].module_name = "host";
import_list[import_table_index].field_name = "__indirect_function_table";
import_list[import_table_index].kind = WASM_IMPORT_EXPORT_KIND_TABLE;
import_list[import_table_index].u.table = table;
/* wasm instance */
InstantiationArgs inst_args = {
.imports = import_list,
.import_count = 10,
};
wasm_module_inst_t inst = wasm_runtime_instantiate_ex(
module, &inst_args, error_buf, sizeof(error_buf));
if (!inst) {
printf("Instantiate wasm file failed: %s\n", error_buf);
goto destroy_table;
}
/* export function */
if (!wasm_application_execute_main(inst, 0, NULL)) {
const char *exception = wasm_runtime_get_exception(inst);
printf("call wasm function main() failed. %s\n", exception);
goto destroy_inst;
}
exit_code = EXIT_SUCCESS;
destroy_inst:
wasm_runtime_deinstantiate(inst);
destroy_table:
wasm_runtime_destroy_table(module, table);
unload_module:
wasm_runtime_unload(module);
release_file_buffer:
wasm_runtime_free(buffer);
destroy_runtime:
wasm_runtime_destroy();
return exit_code;
}

View File

@ -1,6 +0,0 @@
# Copyright (C) 2019 Intel Corporation. All rights reserved.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
include (${SHARED_DIR}/utils/uncommon/shared_uncommon.cmake)
add_executable(raw main.c ${UNCOMMON_SHARED_SOURCE})
target_link_libraries(raw PRIVATE vmlib)

View File

@ -22,6 +22,14 @@ target_link_options(import_memory
set_target_properties(import_memory PROPERTIES SUFFIX .wasm) set_target_properties(import_memory PROPERTIES SUFFIX .wasm)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/import_memory.wasm DESTINATION .) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/import_memory.wasm DESTINATION .)
add_executable(import_table import_table.c)
target_link_options(import_table
PRIVATE
LINKER:--import-table
)
set_target_properties(import_table PROPERTIES SUFFIX .wasm)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/import_table.wasm DESTINATION .)
if(WAMR_BUILD_AOT EQUAL 1) if(WAMR_BUILD_AOT EQUAL 1)
add_custom_target ( add_custom_target (
import_memory_aot import_memory_aot
@ -31,5 +39,14 @@ if(WAMR_BUILD_AOT EQUAL 1)
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
) )
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/import_memory.aot DESTINATION .) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/import_memory.aot DESTINATION .)
add_custom_target(
import_table_aot
ALL
DEPENDS ${WAMRC_BIN} import_table
COMMAND ${WAMRC_BIN} -o import_table.aot import_table.wasm
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/import_table.aot DESTINATION .)
endif() endif()

View File

@ -0,0 +1,40 @@
/*
* Copyright (C) 2019 Intel Corporation. All rights reserved.
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
*/
#include <assert.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
add(int a, int b)
{
return a + b;
}
int
subtract(int a, int b)
{
return a - b;
}
int
main()
{
int (*operation)(int, int);
operation = add;
int result = operation(5, 3);
printf("Result of addition: %d\n", operation(5, 3));
assert(result == 8 && "Addition failed");
operation = subtract;
result = operation(5, 3);
printf("Result of subtraction: %d\n", operation(5, 3));
assert(result == 2 && "Subtraction failed");
return EXIT_SUCCESS;
}

View File

@ -1148,6 +1148,9 @@ def compile_wasm_to_aot(wasm_tempfile, aot_tempfile, runner, opts, r, output = '
cmd.append("--format=object") cmd.append("--format=object")
elif output == 'ir': elif output == 'ir':
cmd.append("--format=llvmir-opt") cmd.append("--format=llvmir-opt")
if opts.multi_module:
cmd.append("--enable-multi-module")
# disable llvm link time optimization as it might convert # disable llvm link time optimization as it might convert
# code of tail call into code of dead loop, and stack overflow # code of tail call into code of dead loop, and stack overflow

View File

@ -829,11 +829,19 @@ function build_wamrc()
fi fi
echo "Build wamrc for spec test under aot compile type" echo "Build wamrc for spec test under aot compile type"
local EXTRA_COMPILE_FLAGS=""
EXTRA_COMPILE_FLAGS+=" -DCOLLECT_CODE_COVERAGE=${COLLECT_CODE_COVERAGE}"
if [[ ${ENABLE_DEBUG_VERSION} == 1 ]]; then
EXTRA_COMPILE_FLAGS+=" -DCMAKE_BUILD_TYPE=Debug"
fi
cd ${WAMR_DIR}/wamr-compiler \ cd ${WAMR_DIR}/wamr-compiler \
&& ./${BUILD_LLVM_SH} \ && ./${BUILD_LLVM_SH} \
&& if [ -d build ]; then rm -r build/*; else mkdir build; fi \ && if [ -d build ]; then rm -r build/*; else mkdir build; fi \
&& cd build \ && cd build \
&& cmake .. -DCOLLECT_CODE_COVERAGE=${COLLECT_CODE_COVERAGE} \ && cmake ${EXTRA_COMPILE_FLAGS} .. \
&& make -j 4 && make -j 4
} }

View File

@ -207,6 +207,8 @@ print_help()
#endif #endif
printf(" --mllvm=<option> Add the LLVM command line option\n"); printf(" --mllvm=<option> Add the LLVM command line option\n");
printf(" --enable-shared-heap Enable shared heap feature\n"); printf(" --enable-shared-heap Enable shared heap feature\n");
printf(" --enable-multi-module Enable multi-module(loader linking) feature. By default, it is \n");
printf(" instantiation linking\n");
printf(" -v=n Set log verbose level (0 to 5, default is 2), larger with more log\n"); printf(" -v=n Set log verbose level (0 to 5, default is 2), larger with more log\n");
printf(" --version Show version information\n"); printf(" --version Show version information\n");
printf("Examples: wamrc -o test.aot test.wasm\n"); printf("Examples: wamrc -o test.aot test.wasm\n");
@ -651,6 +653,9 @@ main(int argc, char *argv[])
else if (!strcmp(argv[0], "--enable-shared-heap")) { else if (!strcmp(argv[0], "--enable-shared-heap")) {
option.enable_shared_heap = true; option.enable_shared_heap = true;
} }
else if (!strcmp(argv[0], "--enable-multi-module")) {
option.enable_multi_module = true;
}
else if (!strcmp(argv[0], "--version")) { else if (!strcmp(argv[0], "--version")) {
uint32 major, minor, patch; uint32 major, minor, patch;
wasm_runtime_get_version(&major, &minor, &patch); wasm_runtime_get_version(&major, &minor, &patch);