diff --git a/src/arena/CMakeLists.txt b/src/arena/CMakeLists.txt index 6b87729..3483256 100644 --- a/src/arena/CMakeLists.txt +++ b/src/arena/CMakeLists.txt @@ -25,7 +25,11 @@ xo_install_include_tree3(include/xo/arena) xo_dependency(${SELF_LIB} xo_reflectutil) xo_dependency(${SELF_LIB} indentlog) + +if (NOT APPLE) xo_external_pkgconfig_dependency(${SELF_LIB} LIBUNWIND libunwind-generic) xo_external_pkgconfig_dependency(${SELF_LIB} LIBDW libdw) +else() +endif() # end src/CMakeLists.txt diff --git a/src/arena/DArena.cpp b/src/arena/DArena.cpp index cf5bc09..fb60031 100644 --- a/src/arena/DArena.cpp +++ b/src/arena/DArena.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include // for ::munmap() #include // for ::getpagesize() #include // for ::memset() @@ -587,7 +588,7 @@ namespace xo { fprintf(stderr, "DArena::expand: mprotect failed (system oom?)"); print_backtrace_dwarf(false /*!demangle_flag*/); - + return false; } diff --git a/src/arena/backtrace.cpp b/src/arena/backtrace.cpp index a1f5e00..708ba5e 100644 --- a/src/arena/backtrace.cpp +++ b/src/arena/backtrace.cpp @@ -4,13 +4,16 @@ **/ #include "backtrace.hpp" +#include #include #include #include #include #include #include -#include +#ifndef __APPLE__ +# include +#endif namespace xo { void @@ -67,6 +70,7 @@ namespace xo { } } namespace { +#ifndef __APPLE__ // libdwfl requires callbacks for find_elf and find_debuginfo. // The offline defaults work for the current process. // @@ -76,10 +80,18 @@ namespace xo { .section_address = nullptr, .debuginfo_path = nullptr, }; +#endif } void - print_backtrace_dwarf(bool demangle_flag) { + print_backtrace_dwarf(bool demangle_flag) + { + +#ifdef __APPLE__ + (void)demangle_flag; + + std::cerr << "backtrace with dwarf symbols not supported on osx" << std::endl; +#else unw_cursor_t cursor; unw_context_t cx; @@ -152,6 +164,8 @@ namespace xo { if (dwfl) dwfl_end(dwfl); +#endif + } } /*namespace xo*/