[libcxx-commits] [PATCH] D126869: [libunwind] Don't store a predecremented PC when using SEH

Martin Storsjö via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Mon Jun 6 13:11:50 PDT 2022

mstorsjo added a comment.

In D126869#3559075 <https://reviews.llvm.org/D126869#3559075>, @MaskRay wrote:

> I don't have an environment to verify and don't know much about SEH, but I assume that this is similar to `UnwindCursor<A, R>::setInfoBasedOnIPRegister` and you or @cdavis5x has verified the correctness.

Yeah I've tested it as far as I can, and @cdavis5x was the one who implemented the SEH parts in libunwind originally.

>>> When libcxxabi looks for call site ranges, it already does _Unwind_GetIP(context) - 1 (in scan_eh_tab in libcxxabi/src/cxa_personality.cpp) we shouldn't do the corresponding - 1 multiple times.
> libgcc `_Unwind_GetIPInfo` sets ip_before_insn to 0 so libsupc++ from libstdc++ does an the `- 1` subtraction. I assume that libc++abi is similar.

Thanks for the further context on that issue! Yeah, although libc++abi doesn't call such a function, but seems to unconditionally do the `-1` subtraction. libunwind's `_Unwind_GetIPInfo` uses `UnwindCursor::isSignalFrame()`, and the SEH version of that always returns false currently. So this makes those things more consistent too.

  rG LLVM Github Monorepo



More information about the libcxx-commits mailing list