This is to comply with e.g. wasmtime. The spec does not make it
explicit what growing by a negative number should mean. It's likely a
mistake, so let's fail.
Closes#442.
* Store the memory export name
When the memory export is defined in the WASM module,
store the name of the export so that it can be read by
the application.
This is necessary for implementing the JavaScript
`WebAssembly.Module.exports()` function.
* Store the memory import name
When the memory import is defined in the WASM module,
store the name of the import so that it can be read by
the application.
This is necessary for implementing the JavaScript
`WebAssembly.Module.imports()` function.
* Store the table0 export name
When the table export is defined in the WASM module,
store the name of the export so that it can be read by
the application.
This is necessary for implementing the JavaScript
`WebAssembly.Module.exports()` function.
If the compiler cannot analyze memcpy, it must expect that pointer arguments may be stored as static data and must live for recursive calls.
In such cases, op_Store and op_Load operations will not get tail-call optimized.
By enclosing the local variables in a block before the recursive call, the storage duration does not extend far enough, allowing for TCO.
Since https://reviews.llvm.org/D81689, wasm-ld has started wrapping
all exported functions including "_start" with surrounding ctor/dtor
calls. The wrapper function "_start.command_export" is exposed as
"_start".
wasm3 searched the entry function by looking up names indiscriminately.
However, it sometimes found the internal "_start" function, so ctor/dtor
were not called. To pick up the wrapper "_start", this patch changes to
search export names at first.
* Add integer overflow checks in NewCodePage
Fix https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=33457
* TouchSlot should track slots outside of functions
Fix https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=33554.
The OSS-Fuzz inputs led to a crash on a Const64 instruction that
overflows the stack. The overflow was not detected during compilation as
TouchSlot did not track maxStackSlots if o->function is NULL. This
commit changes TouchSlot to track slots outside of functions.
* Fix out-of-bounds write in MarkSlotsAllocatedByType
While pushing the params back onto the stack in CompileBlock,
GetSlotForStackIndex may return c_slotUnused. If that is the case,
passing the slot to MarkSlotsAllocatedByType leads to a crash.
Fix https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=33555
Fix https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=36551
* Fix memory leak in CompileElseBlock
In the case of an exception in CompileElseBlock, the original page was not
properly restored and was leaked. This commit moves the release/restore
in the _catch: block which always executes.
* Fix stackIndex underflow in param deallocation
When the stack is polymorphic, the stack should never underflow. This
commits fixes an unreported stack underflow while led to an integer
underflow in stackIndex. Now, if the stack is polymorphic, we only
decrement stackIndex up until blockStackIndex.
* Make simple WASI work in Cygwin.
Issue #329
* Prevent M3_WEAK from taking effect on Cygwin.
Issue #329
* Add CI to ensure that Cygwin doesn’t regress.
Issue #329
This is an addendum to my previous patch as it missed to ensure inclusion of
some header that provides uint*. It worked for me only because of local flags
to add this include