[clang] [CodeGen][ObjC] Initial WebAssembly Support for GNUstep (PR #169043)
Heejin Ahn via cfe-commits
cfe-commits at lists.llvm.org
Tue Dec 16 22:10:08 PST 2025
aheejin wrote:
Sorry for the late reply. My email filter wasn't set up right...
> There is also some work to be done to support other personality functions in WebAssembly. Basic code generation with the wrong personality function works with [this](https://github.com/llvm/llvm-project/pull/171038) patch.
>
> 1. Clang emits `_Unwind_CallPersonality` (defined in [libunwind/src/Unwind-wasm.c](https://github.com/llvm/llvm-project/blob/80ec43d455a5e47ba005112cd2b2c447bb40c42c/libunwind/src/Unwind-wasm.c#L58)) which always calls `__gxx_personality_wasm0`.
Calls to `_Unwind_CallPersonality` are emitted not in Clang but WasmEHPrepare:
https://github.com/llvm/llvm-project/blob/f440b5c12df500f86f9407e625d42f92913e8367/llvm/lib/CodeGen/WasmEHPrepare.cpp#L370-L372
> 2. WebAssembly catchpads are emitted based on the return value of `isWasmPersonality`.
> 3. WasmEHPrepare hard-codes and reports a fatal error if the personality function is not `__gxx_wasm_personality_v0`
> https://github.com/llvm/llvm-project/blob/80ec43d455a5e47ba005112cd2b2c447bb40c42c/llvm/lib/CodeGen/WasmEHPrepare.cpp#L238-L244
>
> The personality `__gxx_personality_wasm0` is implemented in [libcxxabi/src/cxa_personality.cpp](https://github.com/llvm/llvm-project/blob/80ec43d455a5e47ba005112cd2b2c447bb40c42c/libcxxabi/src/cxa_personality.cpp#L1019).
>
> I would like to avoid defining two new personality functions for ObjC and ObjCXX on WASM. Can't we just differentiate and emit code based on the target triple?
I think the name of the personality function can be either the same or different, depending on your preference. Even if the name is the same, the library you link will be different (i.e., it's not going to be libc++), so as long as the signature matches the name doesn't matter much. It would be slightly simpler if your personality function has the same name because we don't need to fix WasmEHPrepare though.
https://github.com/llvm/llvm-project/pull/169043
More information about the cfe-commits
mailing list