This makes Wasm EH work with dynamic linking. So far we were only able
to handle destructors, which do not use any tags or LSDA info.
- This uses TargetExternalSymbol for GCC_except_tableN symbols, which points to the address of per-function LSDA info. It is more convenient to use than MCSymbol because it can take additional target flags.
- When lowering wasm_lsda intrinsic, if PIC is enabled, make the symbol relative to __memory_base and generate the add node. If PIC is disabled, continue to use the absolute address.
- Make tag symbols (__cpp_exception and __c_longjmp) undefined in the backend, because it is hard to make it work with dynamic linking's loading order. Instead, we make all tag symbols undefined in the LLVM backend and import it from JS.
- Add support for undefined tags to the linker.
Companion patches:
I'm not very sure what each of --experimental-pic and -pie does... Without --experimental-pic this doesn't work and without -pie it emits a warning, so I ended up putting both.