From 2fb0a6fd2e97710d73f22cbcd8b4b86ecce9aefc Mon Sep 17 00:00:00 2001 From: Jeremy Rifkin <51220084+jeremy-rifkin@users.noreply.github.com> Date: Thu, 13 Jun 2024 11:17:44 -0500 Subject: [PATCH] Fix trace generation for cpptrace exception objects on armv7hf (#138) noexcept on get_raw_trace_and_absorb seems to somehow interfere with unwinding on armv7hf, possibly due to unwind tables not being generated for the function. Fixes #134. --- include/cpptrace/cpptrace.hpp | 6 +++--- src/cpptrace.cpp | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/include/cpptrace/cpptrace.hpp b/include/cpptrace/cpptrace.hpp index 473b117..44e5b48 100644 --- a/include/cpptrace/cpptrace.hpp +++ b/include/cpptrace/cpptrace.hpp @@ -302,8 +302,8 @@ namespace cpptrace { void clear(); }; - CPPTRACE_EXPORT raw_trace get_raw_trace_and_absorb(std::size_t skip, std::size_t max_depth) noexcept; - CPPTRACE_EXPORT raw_trace get_raw_trace_and_absorb(std::size_t skip = 0) noexcept; + CPPTRACE_EXPORT raw_trace get_raw_trace_and_absorb(std::size_t skip, std::size_t max_depth); + CPPTRACE_EXPORT raw_trace get_raw_trace_and_absorb(std::size_t skip = 0); } // Interface for a traced exception object @@ -323,7 +323,7 @@ namespace cpptrace { public: explicit lazy_exception( raw_trace&& trace = detail::get_raw_trace_and_absorb() - ) noexcept : trace_holder(std::move(trace)) {} + ) : trace_holder(std::move(trace)) {} // std::exception const char* what() const noexcept override; // cpptrace::exception diff --git a/src/cpptrace.cpp b/src/cpptrace.cpp index b32187e..4b06769 100644 --- a/src/cpptrace.cpp +++ b/src/cpptrace.cpp @@ -457,7 +457,7 @@ namespace cpptrace { } CPPTRACE_FORCE_NO_INLINE - raw_trace get_raw_trace_and_absorb(std::size_t skip, std::size_t max_depth) noexcept { + raw_trace get_raw_trace_and_absorb(std::size_t skip, std::size_t max_depth) { try { return generate_raw_trace(skip + 1, max_depth); } catch(const std::exception& e) { @@ -474,7 +474,7 @@ namespace cpptrace { } CPPTRACE_FORCE_NO_INLINE - raw_trace get_raw_trace_and_absorb(std::size_t skip) noexcept { + raw_trace get_raw_trace_and_absorb(std::size_t skip) { return get_raw_trace_and_absorb(skip + 1, SIZE_MAX); }