From b5e2058ec59577c1d3365955fbe490357958f8bc Mon Sep 17 00:00:00 2001 From: Antony Polukhin Date: Tue, 29 Aug 2017 20:27:18 +0300 Subject: [PATCH] Fixes for FreeBSD and other OSes that do not define _GNU_SOURCE but have _Unwind_Backtrace function --- build/has_windbg_cached.cpp | 2 +- include/boost/stacktrace/detail/collect_unwind.ipp | 4 ++++ include/boost/stacktrace/detail/frame_msvc.ipp | 2 +- src/addr2line.cpp | 5 +++++ src/backtrace.cpp | 5 +++++ src/basic.cpp | 5 +++++ 6 files changed, 21 insertions(+), 2 deletions(-) diff --git a/build/has_windbg_cached.cpp b/build/has_windbg_cached.cpp index e57cd87..ab0f462 100644 --- a/build/has_windbg_cached.cpp +++ b/build/has_windbg_cached.cpp @@ -12,7 +12,7 @@ #include "dbgeng.h" #ifdef BOOST_NO_CXX11_THREAD_LOCAL -# error Your compiler does not support C++11 thread_local storage. It's impossible to build with BOOST_STACKTRACE_USE_WINDBG_CACHED. +# error Your compiler does not support C++11 thread_local storage. It`s impossible to build with BOOST_STACKTRACE_USE_WINDBG_CACHED. #endif int foo() { diff --git a/include/boost/stacktrace/detail/collect_unwind.ipp b/include/boost/stacktrace/detail/collect_unwind.ipp index 3ee4e8f..0324dca 100644 --- a/include/boost/stacktrace/detail/collect_unwind.ipp +++ b/include/boost/stacktrace/detail/collect_unwind.ipp @@ -17,6 +17,10 @@ #include #include +#if !defined(_GNU_SOURCE) && !defined(BOOST_STACKTRACE_GNU_SOURCE_NOT_REQUIRED) +#error "Boost.Stacktrace requires `_Unwind_Backtrace` function. Define `_GNU_SOURCE` macro or `BOOST_STACKTRACE_GNU_SOURCE_NOT_REQUIRED` if _Unwind_Backtrace is available without `_GNU_SOURCE`." +#endif + namespace boost { namespace stacktrace { namespace detail { struct unwind_state { diff --git a/include/boost/stacktrace/detail/frame_msvc.ipp b/include/boost/stacktrace/detail/frame_msvc.ipp index 6719598..6110524 100644 --- a/include/boost/stacktrace/detail/frame_msvc.ipp +++ b/include/boost/stacktrace/detail/frame_msvc.ipp @@ -164,7 +164,7 @@ public: #else #ifdef BOOST_NO_CXX11_THREAD_LOCAL -# error Your compiler does not support C++11 thread_local storage. It's impossible to build with BOOST_STACKTRACE_USE_WINDBG_CACHED. +# error Your compiler does not support C++11 thread_local storage. It`s impossible to build with BOOST_STACKTRACE_USE_WINDBG_CACHED. #endif static com_holder< ::IDebugSymbols>& get_thread_local_debug_inst() BOOST_NOEXCEPT { diff --git a/src/addr2line.cpp b/src/addr2line.cpp index 05073ae..9a64dd3 100644 --- a/src/addr2line.cpp +++ b/src/addr2line.cpp @@ -7,5 +7,10 @@ #define BOOST_STACKTRACE_INTERNAL_BUILD_LIBS #define BOOST_STACKTRACE_USE_ADDR2LINE #define BOOST_STACKTRACE_LINK + +#ifndef _GNU_SOURCE +# define _GNU_SOURCE +#endif + #include #include diff --git a/src/backtrace.cpp b/src/backtrace.cpp index 8b45821..8ac9ec0 100644 --- a/src/backtrace.cpp +++ b/src/backtrace.cpp @@ -7,5 +7,10 @@ #define BOOST_STACKTRACE_INTERNAL_BUILD_LIBS #define BOOST_STACKTRACE_USE_BACKTRACE #define BOOST_STACKTRACE_LINK + +#ifndef _GNU_SOURCE +# define _GNU_SOURCE +#endif + #include #include diff --git a/src/basic.cpp b/src/basic.cpp index 5487f70..5ae71ba 100644 --- a/src/basic.cpp +++ b/src/basic.cpp @@ -6,5 +6,10 @@ #define BOOST_STACKTRACE_INTERNAL_BUILD_LIBS #define BOOST_STACKTRACE_LINK + +#ifndef _GNU_SOURCE +# define _GNU_SOURCE +#endif + #include #include