FreeBSD 11 adds __cxa_thread_atexit to libc, so we should use that instead of defining our own inferior version. This also avoids multiple definitions of the symbol.
PR libstdc++/78968 * config.h.in: Regenerate. * configure: Likewise. * configure.ac: Check for __cxa_thread_atexit. * libsupc++/atexit_thread.cc [_GLIBCXX_HAVE___CXA_THREAD_ATEXIT]: Don't define __cxa_thread_atexit if libc provides it. Tested powerpc64le-linux, committed to trunk.
commit 82ba7b061acc7afac92646a239991e8a84e0c6dc Author: Jonathan Wakely <jwak...@redhat.com> Date: Tue Jan 3 13:31:54 2017 +0000 PR78968 add configure check for __cxa_thread_atexit in libc PR libstdc++/78968 * config.h.in: Regenerate. * configure: Likewise. * configure.ac: Check for __cxa_thread_atexit. * libsupc++/atexit_thread.cc [_GLIBCXX_HAVE___CXA_THREAD_ATEXIT]: Don't define __cxa_thread_atexit if libc provides it. diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac index 3d61771..f2f6e0a 100644 --- a/libstdc++-v3/configure.ac +++ b/libstdc++-v3/configure.ac @@ -255,7 +255,7 @@ if $GLIBCXX_IS_NATIVE; then # For TLS support. GCC_CHECK_TLS - AC_CHECK_FUNCS(__cxa_thread_atexit_impl) + AC_CHECK_FUNCS(__cxa_thread_atexit_impl __cxa_thread_atexit) AC_CHECK_FUNCS(aligned_alloc posix_memalign memalign _aligned_malloc) # For iconv support. diff --git a/libstdc++-v3/libsupc++/atexit_thread.cc b/libstdc++-v3/libsupc++/atexit_thread.cc index da63368..923a070 100644 --- a/libstdc++-v3/libsupc++/atexit_thread.cc +++ b/libstdc++-v3/libsupc++/atexit_thread.cc @@ -30,7 +30,11 @@ #include <windows.h> #endif -#if _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL +#if _GLIBCXX_HAVE___CXA_THREAD_ATEXIT + +// Libc provides __cxa_thread_atexit definition. + +#elif _GLIBCXX_HAVE___CXA_THREAD_ATEXIT_IMPL extern "C" int __cxa_thread_atexit_impl (void (*func) (void *), void *arg, void *d);