From bed152e3743060ee0b91e890ad470ebd6c35c285 Mon Sep 17 00:00:00 2001 From: Jason Merrill <jason@redhat.com> Date: Mon, 25 Feb 2013 23:39:04 -0500 Subject: [PATCH] configure.ac: Check for __cxa_thread_atexit_impl. * configure.ac: Check for __cxa_thread_atexit_impl. * libsupc++/atexit_thread.cc (__cxa_thread_atexit): Just forward to it if available. * config.h.in, configure: Regenerate. From-SVN: r196276 --- libstdc++-v3/ChangeLog | 7 +++++++ libstdc++-v3/config.h.in | 3 +++ libstdc++-v3/configure | 12 ++++++++++++ libstdc++-v3/configure.ac | 2 ++ libstdc++-v3/libsupc++/atexit_thread.cc | 16 ++++++++++++++++ 5 files changed, 40 insertions(+) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 8e4d68f77b5c..7681c73725ef 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,10 @@ +2013-02-25 Jason Merrill <jason@redhat.com> + + * configure.ac: Check for __cxa_thread_atexit_impl. + * libsupc++/atexit_thread.cc (__cxa_thread_atexit): Just forward + to it if available. + * config.h.in, configure: Regenerate. + 2013-02-20 Jonathan Wakely <jwakely.gcc@gmail.com> * include/std/streambuf (basic_streambuf): Use injected class name diff --git a/libstdc++-v3/config.h.in b/libstdc++-v3/config.h.in index 59a7fae0fbde..07a1e50be1f7 100644 --- a/libstdc++-v3/config.h.in +++ b/libstdc++-v3/config.h.in @@ -658,6 +658,9 @@ /* Define to 1 if you have the `_tanl' function. */ #undef HAVE__TANL +/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */ +#undef HAVE___CXA_THREAD_ATEXIT_IMPL + /* Define as const if the declaration of iconv() needs const. */ #undef ICONV_CONST diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure index 008ccbfc9a32..bf397f5cf124 100755 --- a/libstdc++-v3/configure +++ b/libstdc++-v3/configure @@ -26700,6 +26700,18 @@ $as_echo "#define HAVE_TLS 1" >>confdefs.h fi + for ac_func in __cxa_thread_atexit_impl +do : + ac_fn_c_check_func "$LINENO" "__cxa_thread_atexit_impl" "ac_cv_func___cxa_thread_atexit_impl" +if test "x$ac_cv_func___cxa_thread_atexit_impl" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE___CXA_THREAD_ATEXIT_IMPL 1 +_ACEOF + +fi +done + + # For iconv support. if test "X$prefix" = "XNONE"; then diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac index 66164a22628b..a64fee28c2ca 100644 --- a/libstdc++-v3/configure.ac +++ b/libstdc++-v3/configure.ac @@ -235,6 +235,8 @@ if $GLIBCXX_IS_NATIVE; then # For TLS support. GCC_CHECK_TLS + AC_CHECK_FUNCS(__cxa_thread_atexit_impl) + # For iconv support. AM_ICONV diff --git a/libstdc++-v3/libsupc++/atexit_thread.cc b/libstdc++-v3/libsupc++/atexit_thread.cc index da8571c82d3d..3b33df233e81 100644 --- a/libstdc++-v3/libsupc++/atexit_thread.cc +++ b/libstdc++-v3/libsupc++/atexit_thread.cc @@ -26,6 +26,20 @@ #include <new> #include "bits/gthr.h" +#if HAVE___CXA_THREAD_ATEXIT_IMPL + +extern "C" int __cxa_thread_atexit_impl (void (*func) (void *), + void *arg, void *d); +extern "C" int +__cxxabiv1::__cxa_thread_atexit (void (*dtor)(void *), + void *obj, void *dso_handle) + _GLIBCXX_NOTHROW +{ + return __cxa_thread_atexit_impl (dtor, obj, dso_handle); +} + +#else /* HAVE___CXA_THREAD_ATEXIT_IMPL */ + namespace { // One element in a singly-linked stack of cleanups. struct elt @@ -116,3 +130,5 @@ __cxxabiv1::__cxa_thread_atexit (void (*dtor)(void *), void *obj, void */*dso_ha return 0; } + +#endif /* HAVE___CXA_THREAD_ATEXIT_IMPL */ -- GitLab