This adds Wasm-specific libc++abi changes to support Wasm exception
handling (https://github.com/WebAssembly/exception-handling).
Wasm EH requires __USING_WASM_EXCEPTIONS__ to be defined. Wasm EH's
LSDA handling mostly shares that of SjLj EH.
Changes are:
- In Wasm, a destructor returns its argument.
- Wasm EH currently only has one phase (search) that does both search and cleanup. So added an additional set_registers to support that.
The bulk of these changes was added back in Mar 2020 in
https://github.com/emscripten-core/emscripten/pull/10577 to emscripten
repo and has been used ever since. Now we'd like to upstream this so
that other toolchains that don't use emscripten libraries, e.g., WASI,
can use this too.
Companion patch: D158919
I'd slightly prefer inlining this as #if defined(__USING_SJLJ_EXCEPTIONS__) || defined (__USING_WASM_EXCEPTIONS__) to avoid introducing another define since it's only used in a handful of places.