Jonathan, could you send a fresh set of patches (or at least replacements)?  I
tried installing the patches on a master branch I checked out this morning, and
I got two rejects:

--- libstdc++-v3/testsuite/util/testsuite_abi.cc
+++ libstdc++-v3/testsuite/util/testsuite_abi.cc
@@ -207,6 +207,7 @@
       known_versions.push_back("GLIBCXX_3.4.24");
       known_versions.push_back("GLIBCXX_3.4.25");
       known_versions.push_back("GLIBCXX_3.4.26");
+      known_versions.push_back("GLIBCXX_IEEE128_3.4.26");
       known_versions.push_back("CXXABI_1.3");
       known_versions.push_back("CXXABI_LDBL_1.3");
       known_versions.push_back("CXXABI_1.3.1");
@@ -220,6 +221,8 @@
       known_versions.push_back("CXXABI_1.3.9");
       known_versions.push_back("CXXABI_1.3.10");
       known_versions.push_back("CXXABI_1.3.11");
+      known_versions.push_back("CXXABI_1.3.12");
+      known_versions.push_back("CXXABI_IEEE128_1.3.12");
       known_versions.push_back("CXXABI_TM_1");
       known_versions.push_back("CXXABI_FLOAT128");
     }
@@ -238,7 +241,7 @@
 
       // Check that added symbols are added in the latest pre-release version.
       bool latestp = (test.version_name == "GLIBCXX_3.4.26"
-                    || test.version_name == "CXXABI_1.3.11"
+                    || test.version_name == "CXXABI_1.3.12"
                     || test.version_name == "CXXABI_FLOAT128"
                     || test.version_name == "CXXABI_TM_1");
       if (added && !latestp)
--- libstdc++-v3/include/bits/locale_facets.h
+++ libstdc++-v3/include/bits/locale_facets.h
@@ -51,16 +51,19 @@
 {
 _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
-  // NB: Don't instantiate required wchar_t facets if no wchar_t support.
-#ifdef _GLIBCXX_USE_WCHAR_T
-# define  _GLIBCXX_NUM_FACETS 28
-# define  _GLIBCXX_NUM_CXX11_FACETS 16
-#else
-# define  _GLIBCXX_NUM_FACETS 14
-# define  _GLIBCXX_NUM_CXX11_FACETS 8
-#endif
+// Number of standard facets (for narrow characters only)
+#define  _GLIBCXX_NUM_FACETS 14
+
+// Number of duplicated facets for cxx11 ABI
+#define  _GLIBCXX_NUM_CXX11_FACETS (_GLIBCXX_USE_DUAL_ABI ? 8 : 0)
+
+// codecvt<char16_t> and codecvt<char32_t>
 #define _GLIBCXX_NUM_UNICODE_FACETS 2
 
+// Facets duplicated for alt128 long double format
+// num_get, num_put, money_get, money_put (+ cxx11 money_get, money_put)
+#define _GLIBCXX_NUM_LBDL_ALT128_FACETS (4 + (_GLIBCXX_USE_DUAL_ABI ? 2 : 0))
+
   // Convert string to numeric value of type _Tp and store results.
   // NB: This is specialized for all required types, there is no
   // generic definition.


I tried to fix it with the following patches, but I get the error when I build
libstdc++:

        .../bin/ld: duplicate version tag `CXXABI_1.3.12'

diff --git a/libstdc++-v3/testsuite/util/testsuite_abi.cc 
b/libstdc++-v3/testsuite/util/testsuite_abi.cc
index 33b9ec15935..bbe397ae8a4 100644
--- a/libstdc++-v3/testsuite/util/testsuite_abi.cc
+++ b/libstdc++-v3/testsuite/util/testsuite_abi.cc
@@ -207,6 +207,7 @@ check_version(symbol& test, bool added)
       known_versions.push_back("GLIBCXX_3.4.24");
       known_versions.push_back("GLIBCXX_3.4.25");
       known_versions.push_back("GLIBCXX_3.4.26");
+      known_versions.push_back("GLIBCXX_IEEE128_3.4.26");
       known_versions.push_back("GLIBCXX_3.4.27");
       known_versions.push_back("GLIBCXX_3.4.28");
       known_versions.push_back("GLIBCXX_3.4.29");
@@ -225,6 +226,7 @@ check_version(symbol& test, bool added)
       known_versions.push_back("CXXABI_1.3.10");
       known_versions.push_back("CXXABI_1.3.11");
       known_versions.push_back("CXXABI_1.3.12");
+      known_versions.push_back("CXXABI_IEEE128_1.3.12");
       known_versions.push_back("CXXABI_1.3.13");
       known_versions.push_back("CXXABI_TM_1");
       known_versions.push_back("CXXABI_FLOAT128");
@@ -260,7 +262,17 @@ check_version(symbol& test, bool added)
          && test.demangled_name.find("std::__cxx11::") != 0)
        {
          if (test.version_name.find("_LDBL_") == std::string::npos
-             && test.version_name.find("_FLOAT128") == std::string::npos)
+             && test.version_name.find("_FLOAT128") == std::string::npos
+             && test.version_name.find("_IEEE128") == std::string::npos)
+           test.version_status = symbol::incompatible;
+       }
+
+      // Check that IEEE128 long double compatibility symbols demangled as
+      // __ieee128 are put into some _LDBL_IEEE version name.
+      // XXX is this right? might not want *everything* for __ieee128 in here.
+      if (added && test.demangled_name.find("__ieee128") != std::string::npos)
+       {
+         if (test.version_name.find("_IEEE128") == std::string::npos)
            test.version_status = symbol::incompatible;
        }
diff --git a/libstdc++-v3/include/bits/locale_facets.h 
b/libstdc++-v3/include/bits/locale_facets.h
index 3e0ae8776c9..9b262c2d228 100644
--- a/libstdc++-v3/include/bits/locale_facets.h
+++ b/libstdc++-v3/include/bits/locale_facets.h
@@ -65,6 +65,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 # define _GLIBCXX_NUM_UNICODE_FACETS 2
 #endif
 
+// Facets duplicated for alt128 long double format
+// num_get, num_put, money_get, money_put (+ cxx11 money_get, money_put)
+#define _GLIBCXX_NUM_LBDL_ALT128_FACETS (4 + (_GLIBCXX_USE_DUAL_ABI ? 2 : 0))
+
   // Convert string to numeric value of type _Tp and store results.
   // NB: This is specialized for all required types, there is no
   // generic definition.
@@ -2252,6 +2256,10 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL
 
       // XXX GLIBCXX_ABI Deprecated
 #if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
+      // For __gnu_cxx_ldbl128::num_get and __gnu_cxx_ieee128::num_get
+      // this entry in the vtable is for a 64-bit "long double" with the
+      // same format as double. This keeps the vtable layout consistent
+      // with std::num_get (visible when -mlong-double-64 is used).
       virtual iter_type
       __do_get(iter_type, iter_type, ios_base&, ios_base::iostate&,
               double&) const;
@@ -2264,8 +2272,21 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL
       virtual iter_type
       do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, void*&) 
const;
 
+      // XXX GLIBCXX_ABI Deprecated
+#if defined _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT \
+      && defined __LONG_DOUBLE_IEEE128__
+      // For __gnu_cxx_ieee128::num_get this entry in the vtable is for
+      // the non-IEEE 128-bit "long double" (aka "double double"). This
+      // is consistent with __gnu_cxx_ldbl128::num_get (-mabi=ibmlongdouble)
+      virtual iter_type
+      __do_get(iter_type, iter_type, ios_base&, ios_base::iostate&,
+              __ibm128&) const;
+#endif
+
       // XXX GLIBCXX_ABI Deprecated
 #if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
+      // For __gnu_cxx_ldbl128::num_get and __gnu_cxx_ieee128::num_get
+      // this entry in the vtable is for the 128-bit "long double" type.
       virtual iter_type
       do_get(iter_type, iter_type, ios_base&, ios_base::iostate&,
             long double&) const;
@@ -2545,6 +2566,13 @@ _GLIBCXX_BEGIN_NAMESPACE_LDBL
       virtual iter_type
       do_put(iter_type, ios_base&, char_type, const void*) const;
 
+      // XXX GLIBCXX_ABI Deprecated
+#if defined _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT \
+      && defined __LONG_DOUBLE_IEEE128__
+      virtual iter_type
+      __do_put(iter_type, ios_base&, char_type, __ibm128) const;
+#endif
+
       // XXX GLIBCXX_ABI Deprecated
 #if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
       virtual iter_type


-- 
Michael Meissner, IBM
IBM, M/S 2506R, 550 King Street, Littleton, MA 01460-6245, USA
email: meiss...@linux.ibm.com, phone: +1 (978) 899-4797
  • [PATCH] libstdc++: Add C+... Jonathan Wakely via Gcc-patches
    • Re: [PATCH] libstdc+... Michael Meissner via Gcc-patches
      • Re: [PATCH] libs... Jonathan Wakely via Gcc-patches
        • Re: [PATCH] ... Jonathan Wakely via Gcc-patches
          • Re: [PAT... Michael Meissner via Gcc-patches
            • Re:... Jonathan Wakely via Gcc-patches
              • ... Jonathan Wakely via Gcc-patches
              • ... Jonathan Wakely via Gcc-patches
                • ... Michael Meissner via Gcc-patches
                • ... Michael Meissner via Gcc-patches
              • ... Michael Meissner via Gcc-patches
          • Re: [PAT... Tulio Magno Quites Machado Filho via Gcc-patches

Reply via email to