This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[v3] Disable gthreads on Solaris 8/9 (PR libstdc++/52189)


As discussed the improved/relaxed test for gthreads support breaks
symbol versioning on Solaris 8 and 9.  The best solution seems to
disable it by default on those targets, allowing users to reenable it if
they don't care about compatibility.

The following patch does just that, disabling only if symbol versioning
is active, and warning if users choose to enable it nonetheless.

I had to move the GLIBCXX_CHECK_GTHREADS down in configure.ac, adding a
dependency in acinclude.m4 didnd't suffice.

Bootstrapped without regressions on {sparc-sun,i386-pc}-solaris2.{8, 9,
10, 11} and x86_64-unknown-linux-gnu, verifying that there's no change
on Linux/x86_64 and the gthr-related symbols are gone on Solaris 8 and 9
only.

Ok for mainline?

Btw., the ChangeLog lies at one point: I didn't include the
configure.html update since I lack the required tools.  I'd appreciate
it if some of the libstdc++ maintainers could handle this for me after
checking.

Thanks.
	Rainer


2012-02-12  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

	PR libstdc++/52189
	* acinclude.m4 (GLIBCXX_CHECK_GTHREADS): Handle --enable-gthreads.
	Disable on Solaris 8/9 with symbol versioning.
	* configure.ac (GLIBCXX_CHECK_GTHREADS): Move after
	GLIBCXX_ENABLE_SYMVERS.
	* configure: Regenerate.
	* doc/xml/manual/configure.xml (--enable-gthreads): Explain.
	* doc/html/manual/configure.html: Regenerate.

# HG changeset patch
# Parent c03709f1705410424658e4ee6f0f714ab4bbf69a
Disable gthreads on Solaris 8/9 (PR libstdc++/52189)

diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4
--- a/libstdc++-v3/acinclude.m4
+++ b/libstdc++-v3/acinclude.m4
@@ -3325,7 +3325,13 @@ dnl Check if gthread implementation defi
 dnl required by the c++0x thread library.  Conforming gthread
 dnl implementations can define __GTHREADS_CXX0X to enable use with c++0x.
 dnl
+dnl GLIBCXX_ENABLE_SYMVERS must be done before this.
+dnl
 AC_DEFUN([GLIBCXX_CHECK_GTHREADS], [
+  GLIBCXX_ENABLE(gthreads,auto,,[enable gthreads support])
+
+  if test x$enable_gthreads = xauto || test x$enable_gthreads = xyes; then
+
   AC_LANG_SAVE
   AC_LANG_CPLUSPLUS
 
@@ -3364,7 +3370,28 @@ AC_DEFUN([GLIBCXX_CHECK_GTHREADS], [
       #ifndef __GTHREADS_CXX0X
       #error
       #endif
-    ], [ac_has_gthreads=yes], [ac_has_gthreads=no])
+    ], [case $target_os in
+	  # gthreads support breaks symbol versioning on Solaris 8/9 (PR
+	  # libstdc++/52189).
+          solaris2.[[89]]*)
+	    if test x$enable_symvers = xno; then
+	      ac_has_gthreads=yes
+	    elif test x$enable_gthreads = xyes; then
+	      AC_MSG_WARN([You have requested gthreads support, but])
+	      AC_MSG_WARN([this breaks symbol versioning.])
+	      ac_has_gthreads=yes
+	    else
+	      ac_has_gthreads=no
+	    fi
+	    ;;
+	  *)
+	    ac_has_gthreads=yes
+	    ;;
+        esac],
+       [ac_has_gthreads=no])
+  else
+    ac_has_gthreads=no
+  fi
 
   AC_MSG_RESULT([$ac_has_gthreads])
 
diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac
--- a/libstdc++-v3/configure.ac
+++ b/libstdc++-v3/configure.ac
@@ -164,9 +164,6 @@ GLIBCXX_CHECK_GETTIMEOFDAY
 # NB: The default is [no], because otherwise it requires linking.
 GLIBCXX_ENABLE_LIBSTDCXX_TIME([no])
 
-# For gthread support
-GLIBCXX_CHECK_GTHREADS
-
 AC_LC_MESSAGES
 
 # For hardware_concurrency
@@ -335,6 +332,9 @@ GLIBCXX_CONDITIONAL(GLIBCXX_LDBL_COMPAT,
 # This depends on GLIBCXX_ENABLE_SYMVERS and GLIBCXX_IS_NATIVE.
 GLIBCXX_CONFIGURE_TESTSUITE
 
+# For gthread support.  Depends on GLIBCXX_ENABLE_SYMVERS.
+GLIBCXX_CHECK_GTHREADS
+
 # Define documentation rules conditionally.
 
 # See if makeinfo has been installed and is modern enough
diff --git a/libstdc++-v3/doc/xml/manual/configure.xml b/libstdc++-v3/doc/xml/manual/configure.xml
--- a/libstdc++-v3/doc/xml/manual/configure.xml
+++ b/libstdc++-v3/doc/xml/manual/configure.xml
@@ -161,6 +161,13 @@
      </para>
  </listitem></varlistentry>
 
+ <varlistentry><term><code>--enable-gthreads</code></term>
+ <listitem><para>Enable gthreads support.  If not explicitly specified, the
+	configure process enables it if possible.  It defaults to 'off' on
+	Solaris 8 and 9, where it would break symbol versioning.   This
+	option can change the library ABI.
+     </para>
+ </listitem></varlistentry>
 
  <varlistentry><term><code>--enable-libstdcxx-time</code></term>
  <listitem><para>This is an abbreviated form of

-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]