-
Notifications
You must be signed in to change notification settings - Fork 68
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Multi value! And even more fuzzing! #124
Conversation
It looks like some change here (probably related to blocks having types or making the types shared) is making the types come out in non-deterministic orders. I'm going to solve this with an explicit sorting step for emitting types. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice! Mind running a few benchmarks to ensure that the usage of Mutex
/Arc
don't regress our current parsing performance?
I'm also curious, could you explain a bit more where the need for interior mutability arose?
Instead of holding a couple of `Box<[ValType]>`s for parameters and results, now they more accurately reflect the spec (and the multi-value extension of it). For simple, MVP wasm, they hold the optional return value type directly inline. For multi-value, they reference a `TypeId`. See the `NB` comment above `InstrSeqType` for details about why this split is beneficial, and we shouldn't *only* use `TypeId`.
This commit adds support for parsing, emitting, and manipulating multi-value Wasm!
This will let us define custom RNGs that are controlled via libFuzzer and/or AFL, so that we can get coverage-guided fuzzing instead of purely random fuzzing.
Re-uses basically all of our existing fuzzing infrastructure, but uses libfuzzer to drive the "RNG" values that we generate Wat with. This lets us combine the benefits of coverage-guided fuzzing with our existing "structured" fuzzing.
This is not /strictly/ necessary because they are otherwise emitted in the order that they are added, which is usually the order that they are parsed. However, if one were adding types in a non-deterministic order, then we would emit types non-deterministically. Overall, this is just a nice robustness addition.
And so its signature should reflect that.
fixes #77