summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAliaksey Kandratsenka <alkondratenko@gmail.com>2021-02-28 17:52:17 -0800
committerAliaksey Kandratsenka <alkondratenko@gmail.com>2021-02-28 17:52:17 -0800
commitc2f60400a86a5211bf009941bf1ccf9b2947a7c1 (patch)
tree7367c0f444340091f626e75f2b0dd6d0630a2118
parenta015377a54eb09fca4b893ae530187a705164df5 (diff)
downloadgperftools-c2f60400a86a5211bf009941bf1ccf9b2947a7c1.tar.gz
prefer backtrace() on OSX
It seems to work and _Unwind_Backtrace which is configured otherwise doesn't.
-rw-r--r--CMakeLists.txt5
-rw-r--r--cmake/DefineTargetVariables.cmake1
-rw-r--r--configure.ac15
3 files changed, 17 insertions, 4 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 46ef2d0..b217d52 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -65,7 +65,7 @@ include(PCFromUContext)
define_target_variables()
# Currently only backtrace works on s390.
-if(s390)
+if(s390 OR OSX)
set(default_enable_libunwind OFF)
set(default_enable_backtrace ON)
else()
@@ -308,6 +308,9 @@ check_c_source_compiles("
#include <unwind.h>
int main()
{
+#if __APPLE__
+#error OSX _Unwind_Backtrace recurses back to malloc
+#endif
&_Unwind_Backtrace;
return 0;
}"
diff --git a/cmake/DefineTargetVariables.cmake b/cmake/DefineTargetVariables.cmake
index 5b7c5da..ada0152 100644
--- a/cmake/DefineTargetVariables.cmake
+++ b/cmake/DefineTargetVariables.cmake
@@ -11,4 +11,5 @@ macro(define_target_variables)
check_cxx_source_compiles("int main() { return __FreeBSD__; }" FreeBSD)
check_cxx_source_compiles("int main() { return __MINGW__; }" MINGW)
check_cxx_source_compiles("int main() { return __linux; }" LINUX)
+ check_cxx_source_compiles("int main() { return __APPLE__; }" OSX)
endmacro()
diff --git a/configure.ac b/configure.ac
index 9b1bec4..dbbbbf8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -55,8 +55,13 @@ case "$host" in
*-darwin*) default_enable_heap_checker=no;;
esac
-# Currently only backtrace works on s390.
-AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, [return __s390__])],
+# Currently only backtrace works on s390 and OSX.
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, [
+#if !defined(__s390__) && !defined(__APPLE__)
+#error not s390 and not osx
+#endif
+return 1
+])],
[default_enable_libunwind=no
default_enable_backtrace=yes],
[default_enable_libunwind=yes
@@ -416,7 +421,11 @@ AC_CACHE_CHECK([if target has _Unwind_Backtrace],
[perftools_cv_have_unwind_backtrace],
[AC_LANG_PUSH(C++)
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
- [[#include <unwind.h>]],
+ [[#include <unwind.h>
+#if defined(__APPLE__)
+#error OSX _Unwind_Backtrace recurses back to malloc
+#endif
+]],
[[&_Unwind_Backtrace]])],
[perftools_cv_have_unwind_backtrace=yes],
[perftools_cv_have_unwind_backtrace=no])