https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115242
--- Comment #5 from Alisa Sireneva <me at purplesyringa dot moe> --- Sorry for spam, just wanted to add some more context and maybe take back some of my conclusions. This has gotten more offtopic than I expected, so please tell me if I need to file another bug. According to the Itanium ABI, only "callee-saved registers of the base ABI" need to be restored. It could be argued that the ABI libgcc is built against _is_ the base ABI, so it's standards-compliant. But this seems to be subject to debate, as LLVM interprets this differently. In the LLVM world, libunwind recovers _all_ registers, and Clang reads all registers assuming they are recovered. So clang binaries linked against libunwind work just fine, as do gcc binaries linked against libgcc, but clang binaries linked against libgcc misbehave. I have reported an LLVM bug [1], but to me this whole thing seems more like two incompatible yet standard-compliant implementations, so I'd appreciate some input on what you think is the right solution. [1]: https://github.com/llvm/llvm-project/issues/112943