Commit Graph

145 Commits

Author SHA1 Message Date
4dacef2d60 shared heap: Fix some issues and add basic unit test case (#3801)
Fix some issues and add basic unit test case for shared heap feature.

Signed-off-by: wenlingyun1 <wenlingyun1@xiaomi.com>
2024-09-20 14:24:38 +08:00
0b62cc8921 Update ref to the multi-memory tests (#3764)
The specific commit has been deleted, I am pointing to the same commit in the main branch though.
2024-09-03 10:39:03 +08:00
1329e1d3e1 Add support for multi-memory proposal in classic interpreter (#3742)
Implement multi-memory for classic-interpreter. Support core spec (and bulk memory) opcodes now,
and will support atomic opcodes, and add multi-memory export APIs in the future. 

PS: Multi-memory spec test patched a lot for linking test to adapt for multi-module implementation.
2024-08-21 12:22:23 +08:00
67c33a29e3 CI: Enable XIP spectest for RISCV32 ILP32F (#3727) 2024-08-19 09:52:38 +08:00
a44c487632 runtest.py: Normallize option handling for XIP mode (#3722) 2024-08-16 11:33:51 +08:00
cce48a0943 test_wamr.sh: Fix build wabt tool (#3703)
And fix a typo in ATTRIBUTIONS.md.
2024-08-14 16:20:32 +08:00
37d7439ef9 [refactoring] Extract read leb to a separate file, share the code between loader and mini loader (#3701)
There's probably a number of other places where the bh_leb_read could be used (e.g. aot loader)
but I'm making the change as small as possible. Further refactoring can be done later.
2024-08-14 08:46:24 +08:00
4e31bd63b7 wamr-test-suites: Clean up generated tmp files after spec test (#3700)
Add all possible generated tmp files to the list, those not actually generated
will be simply ignored in the deletion process.
2024-08-13 08:38:15 +08:00
3ce242b5db spec-test-script/runtest.py: Use wamrc --xip option for xip (#3683) 2024-08-02 21:26:18 +08:00
4dfdbbb5a5 spec-test-script: Use -mtext-section-literals for xtensa xip (#3666) 2024-07-26 09:40:22 +08:00
83b36558a7 spec-test-script: Skip a few tests for xtensa qemu (#3664)
Because these test cases require more memory than what nuttx on esp32s3 qemu can afford.
2024-07-25 11:59:31 +08:00
79dacfcead spec-test-script/runtest.py: Reduce stack size for aot w/o gc (#3653) 2024-07-23 23:08:26 +08:00
5744e11916 spec-test-script: Make case_last_words larger (#3651)
The current size is usually too small to contain useful info for post mortem investigations.
2024-07-23 17:04:16 +08:00
50f28495a1 Remove a few hardcoded spec test knowledge from the core library (#3648)
Tweak the stack sizes in the spec test runner instead.
2024-07-22 13:30:00 +08:00
b05fdfd3ba spec-test-script/runtest.py: Use a shorter timeout when expected to fail (#3647)
This is a band-aid fix; ideally we should wait for the expected
failure message directly with a timeout, not the successful prompt
as we currently do.
2024-07-22 13:20:08 +08:00
0d8ffebd39 spec-test-script/runtest.py: Move "--size-level=1" to common place for RISCV64 (#3644) 2024-07-19 11:45:55 +08:00
583fa52226 spec-test-script: Add xtensa case (#3643) 2024-07-18 20:15:12 +08:00
7c9686df5f spec-test-script/runtest.py: Avoid specifying -v=0 unnecessarily (#3642)
The -v=n option is not always available.
Note: WASM_ENABLE_LOG is off by default on NuttX.
2024-07-18 14:49:57 +08:00
9f637e6f0a wamr-test-suites/test_wamr.sh: Add an option to specify wamrc binary (#3635) 2024-07-18 13:32:40 +08:00
2879e67aa9 wamr-test-suites: Remove dead code (wasi_test) (#3634) 2024-07-18 12:22:57 +08:00
7c6fc70aea spec-test-script/runtest.py: Don't assume the tmp dir path (#3632)
The current coding assumes the tmp file is created in /tmp.
However,

* It's somewhere under /var/folders/... by default on macOS.

* A user can set TMPDIR.
2024-07-18 10:05:24 +08:00
c254bffbc5 Fix compile errors on workload bwa and benchmark jetstream (#3617)
Error was reported when building jetstream benchmark with emsdk:
```
clang: error: unsupported option '-msse2' for target 'wasm32-wasi'
```

Error was reported when building bwa workload:
```
fatal: reference is not a tree: 139f68fc4c3747813783a488aef2adc86626b01b
```
2024-07-12 16:58:10 +08:00
0d9cea434c wasm-mutator-fuzz: Set compilers earlier (#3585)
CMAKE_C_COMPILER etc should be set before project(),
in which cmake tries to decide which compiler to use.
2024-07-02 11:27:31 +08:00
ea582fbc07 wasm-mutator-fuzz: Make compilers overridable (#3578)
eg.
```shell
cmake .. \
-DCMAKE_C_COMPILER=/usr/local/opt/llvm@15/bin/clang \
-DCMAKE_CXX_COMPILER=/usr/local/opt/llvm@15/bin/clang++
```
2024-07-01 08:43:33 +08:00
f7d2826772 Allow missing imports in wasm loader and report error in wasm instantiation instead (#3539)
The wasm loader is failing when multi-module support is on and the dependent
modules are not found; this enforces the AOT compiler integrations to prepare
dependent modules while it isn't necessary.

This PR allows allows missing imports in wasm loader and report error in wasm
instantiation instead, which enables the integrated AOT compiler to work as if
the multi-module support isn't turned on.
2024-06-25 10:04:39 +08:00
4c2af25aff aot compiler: Use larger alignment for load/store when possible (#3552)
Consider the following wasm module:
```wast
(module
  (func (export "foo")
    i32.const 0x104
    i32.const 0x12345678
    i32.store
  )
  (memory 1 1)
)
```

While the address (0x104) is perfectly aligned for i32.store,
as our aot compiler uses 1-byte alignment for load/store LLVM
IR instructions, it often produces inefficient machine code,
especially for alignment-sensitive targets.

For example, the above "foo" function is compiled into the
following xtensa machine code.
```
0000002c <aot_func_internal#0>:
  2c:   004136          entry   a1, 32
  2f:   07a182          movi    a8, 0x107
  32:   828a            add.n   a8, a2, a8
  34:   291c            movi.n  a9, 18
  36:   004892          s8i     a9, a8, 0
  39:   06a182          movi    a8, 0x106
  3c:   828a            add.n   a8, a2, a8
  3e:   ffff91          l32r    a9, 3c <aot_func_internal#0+0x10> (ff91828a <aot_func_internal#0+0xff91825e>)
                        3e: R_XTENSA_SLOT0_OP   .literal+0x8
  41:   004892          s8i     a9, a8, 0
  44:   05a182          movi    a8, 0x105
  47:   828a            add.n   a8, a2, a8
  49:   ffff91          l32r    a9, 48 <aot_func_internal#0+0x1c> (ffff9182 <aot_func_internal#0+0xffff9156>)
                        49: R_XTENSA_SLOT0_OP   .literal+0xc
  4c:   41a890          srli    a10, a9, 8
  4f:   0048a2          s8i     a10, a8, 0
  52:   04a182          movi    a8, 0x104
  55:   828a            add.n   a8, a2, a8
  57:   004892          s8i     a9, a8, 0
  5a:   f01d            retw.n
```

Note that the each four bytes are stored separately using
one-byte-store instruction, s8i.

This commit tries to use larger alignments for load/store LLVM IR
instructions when possible.  with this commit, the above example is
compiled into the following machine code, which seems more reasonable.
```
0000002c <aot_func_internal#0>:
  2c:   004136          entry   a1, 32
  2f:   ffff81          l32r    a8, 2c <aot_func_internal#0> (81004136 <aot_func_internal#0+0x8100410a>)
                        2f: R_XTENSA_SLOT0_OP   .literal+0x8
  32:   416282          s32i    a8, a2, 0x104
  35:   f01d            retw.n
```

Note: this doesn't work well for --xip because aot_load_const_from_table()
hides the constness of the value. Maybe we need our own mechanism to
propagate the constness and the value.
2024-06-22 10:32:52 +08:00
9b9e938bee Fix compilation errors (#3549)
The compilation errors were introduced by #3515 and occur in debug building
when wasm mini loader is compiled or GC is enabled.

And remove two wasm files in standalone test-running-modes case,
which will be generated by run.sh.
2024-06-20 12:33:52 +08:00
16e70f99aa Add standalone cases (#3536) 2024-06-19 16:40:37 +08:00
d3e89895be wasm loader: Fix pop invalid offset count when stack top is ANY (#3516)
In wasm_loader_pop_frame_offset, when the stack is in polymorphic state
and the stack top operand is VALUE_TYPE_ANY, if we popping I64/F64
operand, we should pop one offset but not two offsets.

The issue was reported in #3513 and #3514.
2024-06-14 16:22:08 +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
42ad4728f6 wasm-mutator-fuzz: Fix build errors and warnings for macOS (#3519)
Tested with the homebrew version of LLVM 15.
(xcode doesn't seem to ship the fuzzer runtime.)
2024-06-13 07:48:55 +08:00
54b0e73cb9 wasm-mutator-fuzz: Use another variable to check if in oss-fuzz environment (#3518)
In order to pass a oss-fuzz build step *check_build*.

Previous `HELPER` is only for local test.
2024-06-12 11:13:22 +08:00
380cd7b0e7 Add unit test suites (#3490) 2024-06-04 11:24:27 +08:00
0a80cc4e94 Fix wasm loader check data segment count (#3492)
When datacount section exists, loader will check whether the data count
read from data segment section is same with the data count read from
datacount section, but the value of latter can be 0, loader should not
skip the check when the latter is 0. This fixes #3491.

And fix handle_name_section return value not checked issue and early
return true issue after handle_name_section.

And also add the failed case in #3491 to ba-issues.
2024-06-03 19:48:11 +08:00
23e1d51587 Fix loader parse block type and calculate dynamic offset for loop args (#3482)
Fix several issues in wasm loader:
- Parse a block's type index with leb int32 instead leb uint32
- Correct dst dynamic offset of loop block arguments for opcode br
  when copying the stack operands to the arguments of loop block
- Free each frame_csp's param_frame_offsets when destroy loader ctx
- Fix compilation error in wasm_mini_loader.c
- Add test cases of failed issues

This PR fixes issue #3467 and #3468.
2024-05-31 11:32:36 +08:00
67638e24f4 wasm-mutator-fuzz: Generate more kinds of corpus (#3487) 2024-05-31 11:16:14 +08:00
d29802c451 Fix two issues to make fuzzing test quit earlier (#3471)
- Add a marco to limit the maxi allocable memory size of fuzz test to
  2GB to avoid libFuzzer out-of-memory
- Check global type in load_global_import and load_global_section
2024-05-30 14:55:21 +08:00
a9eff69dd9 wasm-mutator-fuzz: Adapt to oss-fuzz compilation (#3464) 2024-05-27 10:33:36 +08:00
f378edc408 Add regression tests of BA issue cases (#3462) 2024-05-23 13:53:53 +08:00
591a20b917 Add malformed test cases (#3459) 2024-05-21 16:38:34 +08:00
a4f0a0d0ea wamr-test-suites: Enable AOT multi-module spec tests (#3450)
Bypass some cases because:
- aot multi-module doesn't support empty modules
- aot multi-module doesn't support import globals
2024-05-21 12:10:47 +08:00
a2f3c7298f Add wasm-mutator-fuzz test (#3420) 2024-05-21 12:01:13 +08:00
b2eb7d838d Update spec test to latest commit (#3293)
- Update spec test cases to commit bc76fd79cfe61033d7f4ad4a7e8fc4f996dc5ba8 on Apr. 3
- Update wabt binary to 1.0.34 to support newer spec cases
- Add comparison between table declared elem type and table elem segment value type
- Add a function to decide whether to execute test cases in a running mode
- Keep using interpreter in GC spec because wat2wasm in wabt can't compile if.wast w/o errors
- Re-factoring threads spec test case processing
- Since wabt 1.0.34 release isn't compatible with ubuntu 20.04, compile it from source code
- Disable CI to run aot multi-module temporarily, and will enable it in another PR
2024-05-17 10:40:47 +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
f729da7656 Add test cases for the requirements of "gc-aot" feature (#3399) 2024-05-09 16:15:44 +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
a23fa9f86c Implement memory64 for classic interpreter (#3266)
Adding a new cmake flag (cache variable) `WAMR_BUILD_MEMORY64` to enable
the memory64 feature, it can only be enabled on the 64-bit platform/target and
can only use software boundary check. And when it is enabled, it can support both
i32 and i64 linear memory types. The main modifications are:

- wasm loader & mini-loader: loading and bytecode validating process 
- wasm runtime: memory instantiating process
- classic-interpreter: wasm code executing process
- Support memory64 memory in related runtime APIs
- Modify main function type check when it's memory64 wasm file
- Modify `wasm_runtime_invoke_native` and `wasm_runtime_invoke_native_raw` to
  handle registered native function pointer argument when memory64 is enabled
- memory64 classic-interpreter spec test in `test_wamr.sh` and in CI

Currently, it supports memory64 memory wasm file that uses core spec
(including bulk memory proposal) opcodes and threads opcodes.

ps.
https://github.com/bytecodealliance/wasm-micro-runtime/issues/3091
https://github.com/bytecodealliance/wasm-micro-runtime/pull/3240
https://github.com/bytecodealliance/wasm-micro-runtime/pull/3260
2024-04-02 15:22:07 +08:00
01575fc6da Download jetstream src from github instead of browserbench.org (#3196)
Downloading benchmark jetstream's source files one by one from
https://browserbench.org by using wget is time consuming and not
stable, this PR updates the scripts to download the files from
https://github.com/mozilla/perf-automation.
2024-03-04 14:20:07 +08:00
92bd3ba17d Implement the remaining Windows filesystem functions (#3166)
Now that the filesystem implementation is now complete, the previous
test filters on Windows can be removed. Some of the tests only pass when
certain environment variables have been set on Windows so an extra step
has been added in the wasi test runner script to modify the test config
files before the tests begin.
2024-02-28 11:02:42 +08:00
63cd567b3f Separate app-manager and app-framework from WAMR (#3129)
As planned, the app-manager and app-framework are to be migrated to
https://github.com/bytecodealliance/wamr-app-framework.

ps.
https://github.com/bytecodealliance/wasm-micro-runtime/issues/2329
https://github.com/bytecodealliance/wasm-micro-runtime/wiki/TSC-meeting-notes
2024-02-20 18:12:36 +08:00