On Sat, 6 Aug 2016, at 02:59 PM, Thomas Petazzoni wrote: > The current code in webrtc/base/checks.cc assumes that if __GLIBCXX__ is > defined and __UCLIBC__ is not defined, then both cxxabi.h and execinfo.h > will be available. > > Unfortunately, this is not correct with the musl C library: > > - It defines __GLIBCXX__ > - It does not define __UCLIBC__ (it's not uClibc after all!) > - But it also doesn't provide execinfo.h > > Therefore, in order to make things work properly, we switch to proper > autoconf checks for cxxabi.h and execinfo.h, and only use the backtrace > functionality if both are provided. > > Signed-off-by: Thomas Petazzoni <thomas.petazzoni at free-electrons.com> > --- > configure.ac | 2 ++ > webrtc/base/checks.cc | 4 ++-- > 2 files changed, 4 insertions(+), 2 deletions(-) > > diff --git a/configure.ac b/configure.ac > index acbb3e2..ff4c752 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -45,6 +45,8 @@ AC_SUBST(GNUSTL_CFLAGS) > # Borrowed from gst-plugins-bad > AC_CHECK_HEADER(MobileCoreServices/MobileCoreServices.h, HAVE_IOS="yes", > HAVE_IOS="no", [-]) > > +AC_CHECK_HEADERS([cxxabi.h execinfo.h]) > + > # Based on gst-plugins-bad configure.ac and defines in > # <chromium source>/build/config/BUILDCONFIG.gn and > # webrtc/BUILD.gn > diff --git a/webrtc/base/checks.cc b/webrtc/base/checks.cc > index 49a31f2..05d23a6 100644 > --- a/webrtc/base/checks.cc > +++ b/webrtc/base/checks.cc > @@ -16,7 +16,7 @@ > #include <cstdio> > #include <cstdlib> > > -#if defined(__GLIBCXX__) && !defined(__UCLIBC__) > +#if defined(HAVE_CXX_ABI_H) && defined(HAVE_EXECINFO_H) > #include <cxxabi.h> > #include <execinfo.h> > #endif > @@ -55,7 +55,7 @@ void PrintError(const char* format, ...) { > // to get usable symbols on Linux. This is copied from V8. Chromium has > a more > // advanced stace trace system; also more difficult to copy. > void DumpBacktrace() { > -#if defined(__GLIBCXX__) && !defined(__UCLIBC__) > +#if defined(HAVE_CXX_ABI_H) && defined(HAVE_EXECINFO_H) > void* trace[100]; > int size = backtrace(trace, sizeof(trace) / sizeof(*trace)); > char** symbols = backtrace_symbols(trace, size); > -- Hmm, this one's a bit tricky. Again, changing our copy of the webrtc.org code will make maintenance a pain, so I'd prefer for such changes to go upstream. They're not using autoconf, so you might need to use a different mechanism. -- Arun