================ @@ -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 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits