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

Reply via email to