Commit Graph

1220 Commits

Author SHA1 Message Date
e6a47d5cee In wasm32, fix potential conversion overflow when enlarging 65536 pages (#4064)
fix enlarge 65536 pages conversion overflow in wasm32
2025-02-06 14:48:53 +08:00
376385c608 Update memory allocation functions to use allocator user data (#4043) 2025-02-06 13:15:00 +08:00
67cd5043d3 initial 2025-02-05 09:48:21 +00:00
c6712b4033 add a validator for aot module (#3995)
- Add AOT module validation to ensure memory constraints are met
- Enable AOT validator in build configuration and update related source files
2025-02-05 15:21:49 +08:00
b2c7cb2375 Use wasm32-wasip1 instead of wasm32-wasi target for rust code (#4057)
Rust compiler previously deprecated, and now removed the wasm32-wasi target and replaced it with wasm32-wasip1. This
change updates all the occurrences of wasm32-wasi in the context of Rust compilation.

covers the wasi-nn/test.
2025-02-05 11:31:49 +08:00
b6dea221a6 Fix wasm loader check data segment count (#4039)
correctly report error when datacount section has non-zero data segment count while the data section is not present
2025-01-21 13:08:09 +08:00
e3ddbd58f7 Synchronize the GC spec tests to the commit from December 9. 2024. (#4022)
- Synchronize the GC spec tests to the commit from December 9. 2024.
- Revise the error messages to be consistent with the spec test cases.
- bypass gc spec test on the nuttx platform as a workaround
2025-01-20 09:41:47 +08:00
831e4bbfd5 Refine getting const offsets in wasm loader of fast-interp (#4012)
- Refine const offsets in loader for fast-interp
- handle const cell num overflow
- Use const array, remove list
2025-01-20 09:39:32 +08:00
9c3807e124 Refine read leb int wasm loader of fast interpreter (#4017) 2025-01-14 17:43:29 +08:00
53da420c41 Enable shrunk memory by default and add related configurations (#4008)
- Enable shrunk memory by default and add related configurations
- Improve error messages for memory access alignment checks
- Add documentation for WAMR shrunk memory build option
- Update NuttX workflow to disable shrunk memory build option
2025-01-13 07:09:04 +08:00
02683d2eed Improve stack consistency by ensuring sufficient space for dummy offsets (#4011)
One more corner case: if the `frame_offset` increases and becomes equal to
the `frame_offset_boundary` after the last assignment within the for loop.
2025-01-09 13:11:25 +08:00
a653746b7b Check whether related table has funcref elem in opcode call_indirect (#3999)
* check whether table has funcref elem in call_indirect
* check whether table has funcref elem in call_indirect when gc is enabled
2025-01-06 13:55:43 +08:00
9989b1cc1b [fuzzing] Use software bound-check during fuzzing (#4003)
* Update CMakeLists.txt of fuzzing

- enable software bound-check
- enable wasi
- disable libc builtin and multiple modules

* Fix off-by-one error in result offset calculation for function calls
2025-01-06 11:36:11 +08:00
1958808a24 Fix table index calculations in wasm_loader and wasm_mini_loader (#4004) 2025-01-05 15:27:40 +08:00
099056b076 Ensure __heap_base and __data_end global indices are validated against import count (#3996) 2025-01-03 14:37:09 +08:00
31ff576edf Error message improvement (#4000)
Improve error message in the scenario where the runtime was built
with ref types disabled but the module uses reference types feature.
2025-01-03 10:44:25 +08:00
7f3e0df21c Handle a new scenario where an item is both exported and imported. (#3984) 2024-12-29 15:52:12 +08:00
24ecee83ff Merge pull request #3987 from no1wudi/fix
Break aot_create_comp_data into small functions
2024-12-28 20:25:19 +08:00
38cf274292 Optimize memory initialization handling in AOT loader (#3983)
Save memory if the file buffer is always exist before exit.

Signed-off-by: Huang Qi <huangqi3@xiaomi.com>
2024-12-26 15:15:25 +08:00
9b807660d5 Break aot_create_comp_data into small functions
Signed-off-by: Huang Qi <huangqi3@xiaomi.com>
2024-12-26 09:32:16 +08:00
9598611e35 CMakeLists.txt: Do not require C++ (#3956)
By default, the project() CMake command defaults to C and C++. [1]
Therefore, CMake might perform tests for both C and C++ compilers as
part of the configuration phase.

However, this has the consequence of the configuration phase to fail if
the system does not have a C++ toolchain installed, even if C++ is not
really used by the top-level project under the default settings.

Some configurations might still require a C++ toolchain, so
enable_language is selectively called under such circumstances.

[1]: https://cmake.org/cmake/help/latest/command/project.html
2024-12-20 13:05:50 +08:00
296c3cc69d wasm_export.h: Use "default" visibility for gcc and clang (#3957)
Since the top-level CMakelists.txt is appending `-fvisibility=hidden` to
the compile options, no public symbols are exported by default. This
forbids users from linking against the shared library.

Using `gcc/clang` attributes [1], it is possible to override the definition
for `WASM_RUNTIME_API_EXTERN` so that only required symbols are
correctly exported.

[1]: https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#Common-Function-Attributes
2024-12-19 08:49:13 +08:00
9563909d6c set alignment 4 when loading multi return value (#3955)
set alignment 4 when loading multi return value for all call opcodes
2024-12-12 20:33:46 +08:00
bebdd4ad17 Fix aot table instantiate (#3946) 2024-12-10 20:26:32 +08:00
591b740571 Consume the placeholders that were put when emitting table info (#3940) 2024-12-10 20:26:14 +08:00
kk
c32a6ceae1 Refactor SConscript and add file checks in iwasm.c (#3945) 2024-12-06 14:54:37 +08:00
838dd81e68 don't return an uninitialized trap if argv_to_results fails (#3935)
Currently, if argv_to_results fails (e.g. because an unsupported type is
encountered), an non-null trap with an uninitialized message is
returned.
2024-11-28 11:50:44 +08:00
e09613c722 support WASM_FUNCREF return type in argv_to_results (#3936) 2024-11-28 11:50:16 +08:00
1d111a38d6 Fix loader small bug (#3928) 2024-11-26 10:08:51 +08:00
b0c6d5c23a add testcases for shared heap and fix POP_MEM_OFFSET of memory64 (#3916)
- add testcases for shared_heap
- fix POP_MEM_OFFSET and POP_TBL_ELEM_IDX of memory64

Signed-off-by: wenlingyun1 <wenlingyun1@xiaomi.com>
2024-11-24 11:34:38 +08:00
dbdf3df60b Use plain assignment rather than bh_memcpy_s (#3924) 2024-11-24 11:32:34 +08:00
9d8150efae Fix WASI Path Mapping Processing (#3923)
Filesystem paths can be mapped from the host path to a guest path using
the format `<guest-path>::<host-path>`.

Previously `strtok` was used to find the `::` delimiter. Unfortunately
`strtok` processes each delimiter character individually. This meant
that the code was ~equivalent to `strtok(mapping_copy, ":")` which
breaks with Windows-style paths (E.g. `C:\my_path\`).

To fix this `strstr` is used to search for the exact delimiter.
2024-11-24 11:31:55 +08:00
00c2aa10a8 Drop declarative elements on module instantiation (#3922) 2024-11-24 11:30:00 +08:00
62aca17279 Check possible integer overflow in aot memory boundary check (#3920)
Check possible integer overflow in aot memory boundary check when
the wasm memory is 64-bit.
2024-11-22 16:01:24 +08:00
f2b87d773e Support external toolchain on Windows for aot compiler (#3911)
allowing custom ARC toolchain on Windows
2024-11-19 17:47:05 +08:00
0119b17526 Correct the table index calculation in aot_instantiation (#3903)
`module_inst->table_count = module->import_table_count + module->table_count`,
using it as an index will go through `module->import_tables` and  `module->tables`,
but aot init data is only available for non-import tables.
2024-11-18 20:01:00 +08:00
0e4dffc479 Fix a leak in wasm_loader_emit_br_info (#3900)
Reference Info: 377955855 wamr:wasm_mutator_fuzz_loader: Direct-leak in wasm_loader_emit_br_info

https://issues.oss-fuzz.com/issues/377955855
2024-11-13 15:16:13 +08:00
226bf22f9e GlobalValueSet was moved to IRPartitionLayer recently, but we have a local definition anyway (#3899) 2024-11-13 15:11:33 +08:00
fdda259d36 Fix linked global initialization in multimodule (#3905)
While resolving linked globals in multi-module mode, WAMR tries to copy
the linked global's initial value into the destination global in the
current module.  However, a bug in the implementation causes the copy to
be done from the InitializerExpression struct, not from its WASMValue
field.

This did not come up in WAMR's spec test runner because those are built
with WASM_ENABLE_SPEC_TEST, which means these globals are resolved as
builtins, not linked globals, which goes through a different (presumably
not faulty) path.
2024-11-13 14:52:27 +08:00
bf78863c56 Wasm loader enhancement: check code size in code entry (#3892)
add wasm loader check: in code entry, the code size should match the size of vec(locals) + expr, and expr should end with opcode end
2024-11-07 13:38:42 +08:00
e352f0ab10 Refactor AOT loader to support compatible versions (#3891)
This commit refactors the AOT loader in `aot_loader.c` to support compatible
versions of the AOT_CURRENT_VERSION constant. Previously, the loader only
accepted the exact AOT_CURRENT_VERSION value, but now it also accepts
version 3. This change ensures that the runtime can load modules AoT-compiled
with different versions of wamrc as long as they have compatible
AOT_CURRENT_VERSION values.

Related to #3880.
2024-11-01 10:16:24 +08:00
c7b2683f17 Fix out of bounds issue in is_native_addr_in_shared_heap function (#3886)
When checking for integer overflow, you may often write tests like p + i < p.
This works fine if p and i are unsigned integers, since any overflow in the
addition will cause the value to simply "wrap around." However, using this
pattern when p is a pointer is problematic because pointer overflow has
undefined behavior according to the C and C++ standards. If the addition
overflows and has an undefined result, the comparison will likewise be
undefined; it may produce an unintended result, or may be deleted entirely
by an optimizing compiler.
2024-10-31 12:44:55 +08:00
1138435455 Fix mmap flags for AOT loader on non-Linux SGX platforms (#3890) 2024-10-30 13:18:54 +08:00
a3960c834d Refine looking up aot function with index (#3882)
* Refine looking up aot function with index

* refine the code
2024-10-29 10:58:11 +08:00
6426fc4993 Fix out of bounds issues after memory.grow on non-aot non-threads builds (#3872)
Co-authored-by: Deniz Sokmen <dsokmen@amazon.com>
2024-10-23 14:48:40 +08:00
3ad95303d6 Fix quadratic runtime for duplicate export name detection (#3861)
Previously, the loader would check the name of a new export against all
existing exports, leading to a quadratic running time.

This change makes the loader parse the entire export section. The
exports are then sorted by name, then adjacent exports are checked for
uniqueness.
2024-10-21 11:02:30 +08:00
87588caa7f Fix lookup function issue reported in nightly run (#3868) 2024-10-21 09:57:42 +08:00
48eaa2286a Refine wasm/aot function instance lookup (#3865)
Sort the module instance's export functions with the function name,
and use binary search to lookup the wasm/aot function.
2024-10-18 15:15:33 +08:00
74d2427fdc Allow to set native stack boundary to exec_env (#3862)
Add runtime API wasm_runtime_set_native_stack_boundary.

p.s. https://github.com/bytecodealliance/wasm-micro-runtime/issues/3816
2024-10-18 12:49:57 +08:00
1af474099b Add Windows wamrc and iwasm build in release CI (#3857)
- For Windows, llvm libs need to cache more directories, so use a multi-line
  environment variable for paths
- Remove conditionally build directories `win32build`, just use `build` for all platform
- Add Windows wamrc and iwasm(disable lib pthread semaphore and fast jit for now)
  build in release CI
2024-10-17 10:01:56 +08:00