Skip to content

Releases: WebAssembly/binaryen

version_56: Add --strip that removes debug info (#1787)

04 Dec 00:29
d53c648
Compare
Choose a tag to compare
This is sort of like --strip on a native binary. The more specific use case for us is e.g. you link with a library that has -g in its CFLAGS, but you don't want debug info in your final executable (I hit this with poppler now). We can make emcc pass this to binaryen if emcc is not building an output with intended debug info.

1.38.21: Check $NODE environment variable when looking for node (#1792)

03 Dec 03:55
120bc39
Compare
Choose a tag to compare
This allows me to run tests on a system where the default
installed node is not recent enough.

1.38.20: Use getTempRet0/setTempRet0 in LegalizeJSInterface.cpp (#1709)

20 Nov 23:27
4433567
Compare
Choose a tag to compare
Its simpler if we always import these functions from
the embedder rather then synthesizing them various
placed.

This is part of a 4 part change:
LLVM: https://reviews.llvm.org/D53240
fastcomp: https://github.com/kripken/emscripten-fastcomp/pull/237
emscripten: https://github.com/kripken/emscripten/pull/7358
binaryen: https://github.com/kripken/emscripten/pull/7358

Fixes: https://github.com/kripken/emscripten/issues/7273
Fixes: https://github.com/kripken/emscripten/issues/7304

1.38.19: ReFinalize fix (#1742)

14 Nov 23:12
b79f3a4
Compare
Choose a tag to compare
Handle a corner case in ReFinalize, which incrementally re-types code after changes. The problem is that if we need to figure out the type of a block, we look to the last element flowing out, or to breaks with values. If there is no such last element, and the breaks are not taken - they have unreachable values - then they don't tell us the block's proper type. We asserted that in such a case the block still had a type, and didn't handle this.

To fix it, we could look on the parent to see what type would fit. However, it seem simpler to just remove untaken breaks/switches as part of ReFinalization - they carry no useful info anyhow. After removing them, if the block has no other signal of a concrete type, it can just be unreachable.

This bug existed for at least 1.5 years - I didn't look back further. I think it was noticed by the fuzzer now due to recent fuzzing improvements and optimizer improvements, as I just saw this bug found a second time.

version_53: Rename tableBase/memoryBase to __table_base/__memory_base (#1731)

08 Nov 22:29
ba1cf64
Compare
Choose a tag to compare
Rename tableBase/memoryBase to __table_base/__memory_base (#1731)

1.38.16: Don't call static desructors when Fatal() errors occur (#1722)

02 Nov 22:40
33665b6
Compare
Choose a tag to compare
This was causing a deadlock while destroying the thread pool.

version_52: Add pass to minify import and export names (#1719)

02 Nov 02:58
0ed4d2f
Compare
Choose a tag to compare
This new pass minifies import and export names, for example, this may minify

   (import "env" "longname" (func $internal))
to

   (import "env" "a" (func $internal))
By updating the JS that provides those imports/calls those exports, we can use the minified names properly. This can save a useful amount of space in the wasm and JS, see kripken/emscripten#7414

1.38.13

11 Oct 00:19
Compare
Choose a tag to compare
Add BinaryenRemoveGlobal / Module.removeGlobal to C/JS API (#1692)

version_51: Note that calls to imports are not lightweight in inlining pass (#1673)

13 Sep 16:08
559c16e
Compare
Choose a tag to compare
* call_import is not lightweight for inlining purposes - we had call but not callimport, which is even less light

1.38.12: Change the Literal class's operator== to be bitwise (#1661)

04 Sep 02:35
a852156
Compare
Choose a tag to compare
The change means that nan values will be compared bitwise when writing A == B, and so the float rule of a nan is different from itself would not apply.

I think this is a safer default. In particular this PR fixes a fuzz bug in the rse pass, which placed Literals in a hash table, and due to nan != nan, an infinite loop... Also, looks like we really want a bitwise comparison pretty much everywhere anyhow, as can be seen in the diff here. Really the single place we need a floaty comparison is in the intepreter where we implement f32.eq etc., and there the code was already using the proper code path anyhow.