[libunwind] [libunwind][Haiku] Fix signal frame unwinding (PR #135367)
Trung Nguyen via cfe-commits
cfe-commits at lists.llvm.org
Thu Apr 24 02:02:29 PDT 2025
================
@@ -3032,6 +2980,93 @@ int UnwindCursor<A, R>::stepThroughSigReturn(Registers_s390x &) {
#endif // defined(_LIBUNWIND_CHECK_LINUX_SIGRETURN) &&
// defined(_LIBUNWIND_TARGET_S390X)
+#if defined(_LIBUNWIND_CHECK_HAIKU_SIGRETURN)
+static size_t signalHandlerSize = 0;
+
+template <typename A, typename R>
+bool UnwindCursor<A, R>::setInfoForSigReturn() {
+ Dl_info dlinfo;
+ auto isSignalHandler = [&](pint_t addr) {
+ if (!dladdr(reinterpret_cast<void *>(addr), &dlinfo))
+ return false;
+ if (strcmp(dlinfo.dli_fname, "commpage"))
+ return false;
+ if (dlinfo.dli_sname == NULL ||
+ strcmp(dlinfo.dli_sname, "commpage_signal_handler"))
+ return false;
+ return true;
+ };
+
+ pint_t pc = static_cast<pint_t>(this->getReg(UNW_REG_IP));
+ if (!isSignalHandler(pc))
+ return false;
+
+ pint_t start = reinterpret_cast<pint_t>(dlinfo.dli_saddr);
+
+ if (signalHandlerSize == 0) {
+ size_t boundLow = 0;
+ size_t boundHigh = static_cast<size_t>(-1);
----------------
trungnt2910 wrote:
Done.
https://github.com/llvm/llvm-project/pull/135367
More information about the cfe-commits
mailing list