Commit Graph

153 Commits

Author SHA1 Message Date
d298a66d38 bump AOT_CURRENT_VERSION for extended-const (#4511)
cf. https://github.com/bytecodealliance/wasm-micro-runtime/issues/4504
2025-07-27 14:39:35 +08:00
933e49df18 appease a few compiler warnings (-Wstrict-prototypes) (#4465) 2025-07-10 08:28:00 +08:00
7d05dbc988 Support extended constant expressions (#4432)
* implement extended const expr (#4318)
* add a toggle to enable extended const on wamrc (#4412)
2025-07-07 13:34:02 +08:00
1e41519977 loader: add type index checking (#4402) 2025-06-24 20:38:39 +08:00
7bbdbf5212 add validation for array type in load_init_expr(GC only) (#4370) 2025-06-17 11:01:38 +08:00
0343aaf8c3 Modify AOT static PGO to conform to llvm-18 and add a CI job to test static PGO on the coremark benchmark (#4345)
* static PGO compatible with llvm18 and add CI job to test static PGO on coremark benchmark
* update comments and warning info, bitmaps section in llvm profdata shouldn't be used in PGO
2025-06-12 16:57:11 +08:00
207da7b22f updating WASI stdio handle initialization and build options for UVWASI (#4260) 2025-05-30 07:42:39 +08:00
216404d7cb initialize WASI stdio handles to invalid for better error handling (#4092)
* initialize WASI stdio handles to invalid for better error handling
* implement os_invalid_raw_handle function for consistent invalid handle representation
2025-05-08 08:47:07 +08:00
3232bdf2f7 teach aot emitter/loader about .srodata and .srodata.cst* sections (#4240)
LLVM 19 and later started to use srodata ("small read only data")
sections for RISCV.  cf. https://github.com/llvm/llvm-project/pull/82214
this commit makes our aot emitter/loader deal with those sections.

an alternative would be to disable small data sections completely by
setting the "SmallDataLimit" module attribute to zero. however, i feel
this commit is more straightforward and consisitent as we are already
dealing with sdata sections.
2025-05-06 06:55:35 +08:00
412631ac13 fix: correct typos and improve comments across multiple files by codespell (#4116)
Signed-off-by: Huang Qi <huangqi3@xiaomi.com>
2025-03-07 08:21:54 +08:00
73998e4c85 fix: fix load aarch64 aot failed (#4114)
Co-authored-by: xiangjia.xj <xiangjia.xj@alibaba-inc.com>
2025-03-04 16:45:47 +08:00
e693608476 log warning instaed of assertion (#4119) 2025-03-01 16:46:41 +08:00
d9c01b39d1 fix: when load aot init expr,no type_idx set. (#4094)
Fix an assertion from *gc_object.c line 91*  `bh_assert(rtt_type->type_flag == WASM_TYPE_STRUCT;`
2025-02-21 15:33:36 +08: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
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
591b740571 Consume the placeholders that were put when emitting table info (#3940) 2024-12-10 20:26:14 +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
1138435455 Fix mmap flags for AOT loader on non-Linux SGX platforms (#3890) 2024-10-30 13:18:54 +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
327374cfee Fix some compile warnings and typos (#3854)
- Clear some compile warnings
- Fix some typos
- Fix llvm LICENSE link error
- Remove unused aot file and binarydump bin
- Add checks when loading AOT exports
2024-10-15 16:04:58 +08:00
b16b6044ee Enable libc-wasi for windows msvc build (#3852)
The default iwasm building in Windows MSVC enables libc-uvwasi because
libc-wasi isn't supported at the beginning. Since libc-wasi had been refactored
and is supported in Windows msys2 building, and libc-wasi supports more
functionalities(e.g. sockets) than libc-uvwasi, this PR fixes some issues to
enable libc-wasi in windows MSVC buidlings.
2024-10-14 09:52:25 +08:00
36d438051e Support table64 extension in classic-interp and AOT running modes (#3811)
Add table64 extension(in Memory64 proposal) support in classic-interp
and AOT running modes, currently still use uint32 to represent table's
initial and maximum size to keep AOT ABI unchanged.
2024-10-11 21:14:56 +08:00
e87f7a920d Fix Windows compile error when uvwasi is enabled (#3810)
No need to compile win_file.c when uvwasi is enabled.
2024-09-25 16:43:00 +08:00
21330990a8 Add no_resolve to LoadArgs and wasm_runtime_resolve_symbols (#3790)
Add no_resolve to LoadArgs and wasm_runtime_resolve_symbols so one can
delay resolving of symbols.

This is useful for inspecting the module between loading and instantiating.
2024-09-20 08:54:09 +08:00
cbc2078898 AOT call stack optimizations (#3773)
- Implement TINY / STANDARD frame modes - tiny mode is only able to keep track on the IP
  and func idx, STANDARD mode provides more capabilities (parameters, stack pointer etc.).
- Implement FRAME_PER_FUNCTION / FRAME_PER_CALL modes - frame per function adds
  code at the beginning and at the end of each function for allocating / deallocating stack frame,
  whereas in per-call mode the frame is allocated before each call. The exception is call to
  the imported function, where frame-per-function mode also allocates the stack before the
  `call` instruction (as it can't instrument the imported function).

At the moment TINY + FRAME_PER_FUNCTION is automatically enabled in case GC and perf
profiling are disabled and `values` call stack feature is not requested. In all the other cases
STANDARD + FRAME_PER_CALL is used.

STANDARD + FRAME_PER_FUNCTION and TINY + FRAME_PER_CALL are currently not
implemented but possible, and might be enabled in the future.

ps. https://github.com/bytecodealliance/wasm-micro-runtime/issues/3758
2024-09-10 09:05:23 +08:00
eab409a4df aot loader: Call os_mmap with MMAP_MAP_32BIT only when target is x86-64 or riscv64 (#3755)
Mac on aarch64 uses posix_memmap.c os_mmap which doesn't do anything with
the flag MMAP_MAP_32BIT for that build so this condition ends up asserting unless
the mapping ends up in the first 4 gigs worth of addressable space.

Thsi PR changes to call os_mmap with MMAP_MAP_32BIT flag only when the target
is x86-64 or riscv64, and the macro __APPLE__ isn't enabled. The behavior is similar
to what the posix os_mmap does.
2024-08-29 15:25:17 +08:00
e8c2952bf9 Fix arm64 issues on mac (#3688)
Make wamrc normalize "arm64" to "aarch64v8". Previously the only way to
make the "arm64" target was to not specify a target on 64 bit arm-based
mac builds. Now arm64 and aarch64v8 are treated as the same.

Make aot_loader accept "aarch64v8" on arm-based apple (as well as
accepting legacy "arm64" based aot targets).

This also removes __APPLE__ and __MACH__ from the block that defaults
size_level to 1 since it doesn't seem to be supported for aarch64:
`LLVM ERROR: Only small, tiny and large code models are allowed on AArch64`
2024-08-23 09:49:06 +08:00
67dce48201 Enable merged os_mmap for aot data sections and aot text (#3743)
Enable merged os_mmap for aot data sections first, and try enabling merged
os_mmap for them and aot text except on platform nuttx and esp-idf.

This fixes the issue that aarch64 AOT module fails to load on android:
https://github.com/bytecodealliance/wasm-micro-runtime/issues/2274

And also refine os_mmap related code.
2024-08-21 12:55:34 +08:00
501d7d5adf Add apis to get package version (#3601)
Add three APIs:
- wasm_runtime_get_file_package_version
- wasm_runtime_get_module_package_version
- wasm_runtime_get_current_package_version
2024-07-16 08:15:59 +08:00
f118492b1d Add integer overflow check for some indices in wasm/aot loader (#3579)
Check whether the indices overflow UINT32_MAX or not for:
- import function count + function count
- import global count + global count
- import tag count + tag count

This PR fixes the issue reported by Oss-fuzz test (#69920).
2024-07-02 15:48:37 +08:00
65bf04e986 aot loader: Check import global value type before using (#3571)
Fix issue reported by Oss-fuzz test (#69798).
2024-06-26 11:19:05 +08:00
6754b62195 Optimize for multi-module support in AOT mode (#3563)
- Split the `aot_loader_resolve_function` into two functions to prevent
  redundant module lookups and loads
- Access pre-associated module instances from `import_func_module_insts`,
  avoiding unnecessary instance lookups and improving performance
2024-06-26 09:56:01 +08:00
cfffb62ad2 aot loader: Verify global value type (#3560)
Fix issue reported by Oss-fuzz test (#69798).
https://oss-fuzz.com/testcase-detail/5963842371256320
2024-06-24 10:34:03 +08:00
95f7717555 aot loader: Add more checks in load_native_symbol_section() (#3559)
Fix issue reported by Oss-fuzz test (#69675).
2024-06-24 10:07:10 +08:00
3746534010 Add table type API support (#3515)
Add `wasm_runtime_get_export_table_inst` and `wasm_table_get_func_inst`,
and related wasm_table_type_get_xxx APIs.
2024-06-19 14:50:46 +08:00
fa8a80a115 aot loader: Prevent loading multiple native symbol sections (#3538)
Don't allow to load multiple native symbol sections in aot loader since
the aot compiler will create only one native symbol section.

Fix issue reported by Oss-fuzz test (#69633).
2024-06-18 15:31:39 +08:00
c19bc95391 Validate func type in aot loader (#3535)
Fix issue reported by Oss-fuzz test (#69629).
2024-06-18 14:23:32 +08:00
6621793acc Fix two fuzz issues (#3529)
- #69598: protect from `0-1`
- #69608: in case no tailing `\0`
2024-06-14 15:42:21 +08:00
40c41d5110 Fix several issues reported by oss-fuzz (#3526)
- possible integer overflow in adjust_table_max_size:
  unsigned integer overflow: 2684354559 * 2 cannot be represented in type 'uint32'
- limit max memory size in wasm_runtime_malloc
- add more checks in aot loader
- adjust compilation options
2024-06-13 16:06:36 +08:00
8239dd4aa7 Add wasm_export.h APIs to expose memory type (#3496)
Support to get `wasm_memory_type_t memory_type` from API
`wasm_runtime_get_import_type` and `wasm_runtime_get_export_type`,
and then get shared flag, initial page cout, maximum page count
from the memory_type:
```C
bool
wasm_memory_type_get_shared(const wasm_memory_type_t memory_type);
uint32_t
wasm_memory_type_get_init_page_count(const wasm_memory_type_t memory_type);
uint32_t
wasm_memory_type_get_max_page_count(const wasm_memory_type_t memory_type);
```
2024-06-06 09:20:24 +08:00
6b1d81650d Allow not copying the wasm binary in wasm-c-api and not referring to the binary in wasm/aot loader (#3389)
Add flag `LoadArgs.clone_wasm_binary` to control whether to clone the wasm/aot
binary in wasm-c-api module. If false, API `wasm_module_new_ex` won't clone the
binary, which may reduce the footprint.

Add flag `LoadArgs.wasm_binary_freeable` to control whether the wasm/aot binary
may be freed after instantiation for wamr API `wasm_runtime_load_ex`, if yes, then
for some running modes, the wasm/aot module doesn't refer to the input binary
again so developer can free it after instantiation to reduce the footprint.

And add API `wasm_module_is_underlying_binary_freeable` and
`wasm_runtime_is_underlying_binary_freeable` to check whether the input binary
can be freed after instantiation for wasm-c-api and wamr api.

And add sample to illustrate it.
2024-05-17 09:00:08 +08:00
8f098a5905 aot: Make precheck functions use short-call for xtensa (#3418)
Note: this breaks AOT ABI for xtensa again because of a revert of an ABI-breaking change.
2024-05-13 16:55:00 +08:00
fe5e7a9981 Implement Memory64 support for AOT (#3362)
Refer to:
https://github.com/bytecodealliance/wasm-micro-runtime/pull/3266
https://github.com/bytecodealliance/wasm-micro-runtime/issues/3091
2024-05-13 11:03:38 +08:00
c85bada2a9 Add wasm module global type information APIs (#3406)
Support getting global type from `wasm_runtime_get_import_type` and
`wasm_runtime_get_export_type`, and add two APIs:

```C
wasm_valkind_t
wasm_global_type_get_valkind(const wasm_global_type_t global_type);

bool
wasm_global_type_get_mutable(const wasm_global_type_t global_type);
```
2024-05-10 09:15:58 +08:00
ca61184ced Fix some spelling issues (#3385)
Fix some of the spelling issues found by CSpell.
2024-05-06 07:56:48 +08:00
902aa525d1 Fix windows relocation string parsing issue (#3333)
The AOT compiler emits string with '\0' now, some string parsing in aot loader
for Windows platform need to be updated.
2024-04-19 16:09:03 +08:00
68bd30c6f9 Enhance GC subtyping checks (#3317)
Enhance the GC subtyping checks:
- Fix issues in the type equivalence check
- Enable the recursive type subtyping check
- Add a equivalence type flag in defined types of aot file, if there is an
  equivalence type before, just set it true and re-use the previous type
- Normalize the defined types for interpreter and AOT
- Enable spec test case type-equivalence.wast and type-subtyping.wast,
  and enable some commented cases
- Enable set WAMR_BUILD_SANITIZER from cmake variable
2024-04-18 12:32:01 +08:00
4ef724bbff Enhance wasm loading with LoadArgs and support module names (#3265)
- Add new API wasm_runtime_load_ex() in wasm_export.h
  and wasm_module_new_ex in wasm_c_api.h
- Put aot_create_perf_map() into a separated file aot_perf_map.c
- In perf.map, function names include user specified module name
- Enhance the script to help flamegraph generations
2024-04-07 15:04:35 +08:00
2013f1f7d7 Fix warnings/issues reported in Windows and by CodeQL/Coverity (#3275)
Fix the warnings and issues reported:
- in Windows platform
- by CodeQL static code analyzing
- by Coverity static code analyzing

And update CodeQL script to build exception handling and memory features.
2024-04-07 11:57:31 +08:00
d8d8f8ce04 Implement apis to set and get the name of a wasm module (#3254)
Add API wasm_runtime_set_module_name and wasm_runtime_get_module_name,
and by default, a module's name is "" if the set module name api isn't called.
2024-03-26 12:10:13 +08:00