summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibWasm
AgeCommit message (Collapse)Author
2022-02-16LibWasm: Fix validation of if-else blocksAli Mohammad Pur
We were doing a number of things wrong: - Switching to the parent context in the else meant that we couldn't break out of the else section anymore - We were not validating the resulting values, and so the stack was in a relatively unknown state after 'else' This commit fixes these issues :^)
2022-02-16LibWasm: Make MemoryInstance allocation fail if initial growth failsAli Mohammad Pur
...instead of silently ignoring the failure in the constructor.
2022-01-07Everywhere: Fix many spelling errorsmjz19910
2022-01-04Userland: Resolve tautological-constant-out-of-range-compare warningsAndrew Kaster
Stop comparing platform-specific sized integer types to max() values of other interger types. Enable the warning everywhere.
2021-12-21AK+Everywhere: Replace __builtin bit functionsNick Johnson
In order to reduce our reliance on __builtin_{ffs, clz, ctz, popcount}, this commit removes all calls to these functions and replaces them with the equivalent functions in AK/BuiltinWrappers.h.
2021-12-21LibWasm: Tolerate modules with invalid sections and mark them as invalidAli Mohammad Pur
We should not crash, but rather just fail to verify them.
2021-12-21LibWasm: Make shown instruction names match the names in the specAli Mohammad Pur
2021-12-21LibWasm: Add a instruction_from_name getterAli Mohammad Pur
2021-12-21LibWasm: Print the block type for structured argumentsAli Mohammad Pur
2021-12-21LibWasm: Fix silly typo in f32 reinterpret validationAli Mohammad Pur
2021-12-21LibWasm: Make blocks that take arguments actually workAli Mohammad Pur
Previously we were ignoring the actual parameters and setting the arity to an incorrect value, which could cause crashes (or unexpected traps).
2021-12-21LibWasm: Implement memory.init and passive mode dataAli Mohammad Pur
2021-11-17AK: Convert AK::Format formatting helpers to returning ErrorOr<void>Andreas Kling
This isn't a complete conversion to ErrorOr<void>, but a good chunk. The end goal here is to propagate buffer allocation failures to the caller, and allow the use of TRY() with formatting functions.
2021-11-11LibWasm: Fix broken build after merging un-rebased Validator changesAndreas Kling
2021-11-11LibWasm: Remove traps caught by validationAli Mohammad Pur
2021-11-11LibWasm: Implement module validationAli Mohammad Pur
2021-11-11LibWasm: Make opcode definitions enumerable through a macroAli Mohammad Pur
2021-11-10AK: Make ByteBuffer::try_* functions return ErrorOr<void>Andreas Kling
Same as Vector, ByteBuffer now also signals allocation failure by returning an ENOMEM Error instead of a bool, allowing us to use the TRY() and MUST() patterns.
2021-11-10AK: Make Vector::try_* functions return ErrorOr<void>Andreas Kling
Instead of signalling allocation failure with a bool return value (false), we now use ErrorOr<void> and return ENOMEM as appropriate. This allows us to use TRY() and MUST() with Vector. :^)
2021-10-06LibWasm: Add missing forward declaration to Printer/Printer.hBen Wiederhake
2021-09-21Libraries: Use AK::Variant default initialization where appropriateBen Wiederhake
2021-09-11LibWasm: Avoid making StringView of temporary ByteBufferBen Wiederhake
2021-09-07Everywhere: Behaviour => BehaviorAndreas Kling
2021-09-06Everywhere: Make ByteBuffer::{create_*,copy}() OOM-safeAli Mohammad Pur
2021-09-06Everywhere: Use OOM-safe ByteBuffer APIs where possibleAli Mohammad Pur
If we can easily communicate failure, let's avoid asserting and report failure instead.
2021-09-05LibWeb+LibWasm: Implement the WebAssembly.Table objectAli Mohammad Pur
2021-09-05LibWasm: Move the vector size limit to Constants.h and increase it a bitAli Mohammad Pur
2021-08-31LibWasm: Limit the number of function localsAli Mohammad Pur
It's possible for the module to request too many locals, we now reject such modules instead of trying to allocate space for them. The value itself is chosen arbitrarily, so future tweaks _might_ be necessary. Found by OSS-Fuzz: https://oss-fuzz.com/testcase?key=4755809098661888
2021-08-30LibWasm: Make the Truncate operator trap on undefined resultsAli Mohammad Pur
2021-08-30LibWasm: Implement fx.nearest using nearbyint() instead of round()Ali Mohammad Pur
This instruction wants RoundingMode::ToEven, so let's use the correct function.
2021-08-26LibWasm: Use Operators::BitShiftRight for i64.shruAli Mohammad Pur
Using a left-shift operator for a right shift operation is not exactly the most correct action :P
2021-08-12LibWasm: Move some Values and Vector<Value>s instead of copying themAli Mohammad Pur
2021-08-12LibWasm: Avoid calculating stack bounds on each wasm callAli Mohammad Pur
We only need to know the initial bounds, which we calculate by default when the interpreter is constructed. This cuts down on syscalls and makes wasm calls a lot cheaper.
2021-08-12LibWasm: Generate Value::type() on the fly instead of storing itAli Mohammad Pur
The variant member already contains enough information to give us the type when needed, so remove the type member and synthesize it when needed, this allows lots of optimisation opportunaties when copying and moving Values around.
2021-08-12LibWasm: Replace memory write macros with templated functionsAli Mohammad Pur
2021-08-12LibWasm: Make memory operation address calculation match the specAli Mohammad Pur
...or rather, match what the spec _means_ to say, not what it actually says.
2021-08-12LibWasm: Replace memory read macros with templated functionsAli Mohammad Pur
2021-08-12LibWasm: Replace the numeric operation macros with templated functionsAli Mohammad Pur
This should make debugging and profiling much better, at little to no runtime cost. Also moves off the operator definitions to a separate header, so it should also improve the editing experience quite a bit.
2021-07-22Everywhere: Prefer using {:#x} over 0x{:x}Gunnar Beutner
We have a dedicated format specifier which adds the "0x" prefix, so let's use that instead of adding it manually.
2021-07-17LibWasm: Remove a useless use of ScopeGuardAli Mohammad Pur
There are no multiple exit paths in that function, so we can just put the ending logic right at the end of the function instead.
2021-07-17LibWasm+Everywhere: Make the instruction count limit configurableAli Mohammad Pur
...and enable it for LibWeb and test-wasm. Note that `wasm` will not be limited by this.
2021-07-17LibWasm: Inline some very hot functionsAli Mohammad Pur
These are mostly pretty small functions too, and they were about ~10% of runtime.
2021-07-17Revert "LibWasm: Some more performance stuff (#8812)"Ali Mohammad Pur
This reverts commit 35394dbfaa23b44a293da85b20a63a10f73572c3. I pushed the wrong button again, hopefully this will be the last of such incidents.
2021-07-17LibWasm: Some more performance stuff (#8812)Ali Mohammad Pur
* wasm: Don't try to print the function results if it traps * LibWasm: Inline some very hot functions These are mostly pretty small functions too, and they were about ~10% of runtime. * LibWasm+Everywhere: Make the instruction count limit configurable ...and enable it for LibWeb and test-wasm. Note that `wasm` will not be limited by this. * LibWasm: Remove a useless use of ScopeGuard There are no multiple exit paths in that function, so we can just put the ending logic right at the end of the function instead.
2021-07-12LibWasm: Adjust signed integer operations to avoid UBAndrew Kaster
Perform signed integer shifts, addition, subtraction, and rotations using their corresponding unsigned type. Additionally, mod the right hand side of shifts and rotations by the bit width of the integer per the spec. This seems strange, but the spec is clear on the desired wrapping behavior of arithmetic operations.
2021-07-12LibWasm: Skip initializing active empty data sectionsAli Mohammad Pur
2021-07-12LibWasm: Use AK::StackInfo to track stack sizeAli Mohammad Pur
This way, we can make sure that it doesn't overflow when ASAN is enabled.
2021-07-06LibWasm: Don't create useless temporary strings for trap reasonsAli Mohammad Pur
These strings are only used when execution traps, so there's no reason to create actual strings until that happens; instead switch to using StringViews.
2021-07-06LibWasm: Tweak the implementation-defined limits a bitAli Mohammad Pur
2021-07-06LibWasm: Allow overflow in normal 64-bit arithmetic instructionsAli Mohammad Pur