[PATCH] D144999: [Clang][MC][MachO]Only emits compact-unwind format for "canonical" personality symbols. For the rest, use DWARFs.

Vy Nguyen via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 12 14:39:45 PDT 2023


oontvoo added a comment.

In D144999#4415137 <https://reviews.llvm.org/D144999#4415137>, @jasonmolenda wrote:

> Michael and I looked into this.  This simple c++ file is resulting in eh_frame unwind info on aarch64 darwin instead of compact unwind info.  The eh_frame instructions don't describe the epilogue, so lldb is stopping on the final RET instruction after it has adjusted $sp back to its original value and the unwind now fails to work in the debugger.  That's always the problem with eh_frame/debug_frame from the debugger's point of view - it's only guaranteed to describe the unwind state at throwable locations.  gdb lives exclusively off of eh_frame/debug_frame so in practice gcc/clang (at least on intel) describe both the prologue and the epilogue for the debugger's benefit.  But that's not what this eh_frame includes on aarch64 darwin, and it breaks the debugger because it's trusting the eh_frame to be accurate at every instruction point.
>
> The emission of eh_frame on aarch64 darwin instead of compact unwind, for this simple codegen, is a bug and cannot remain in the tree unfixed.  It will increase binary size and reduce throw performance.  It also happens to cause lldb regressions like this because we've never lived off of eh_frame as our primary unwind format on this platform, but that's a separate issue and I'm not going to dig in to finding a way to detect this & ignore the eh_frame on this target.

Thanks for the details! From your descriptions, I agree that this is a bug - the change in this patch is *NOT* intended to change the unwind format when there's no personality symbol - (it should only affect custom personality symbols, which is not the case in this example)
Still debugging - not sure why it only occurs for aarch64

> Looking at the failing test case that Michael has been debugging, none of these methods have a personality, and yet we're getting eh_frame instead of compact unwind.  That's the bug.




Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D144999/new/

https://reviews.llvm.org/D144999



More information about the llvm-commits mailing list