diff mbox

Add <codecvt> and last pieces of C++11 std::lib

Message ID 20150121161741.GG3360@redhat.com
State New
Headers show

Commit Message

Jonathan Wakely Jan. 21, 2015, 4:17 p.m. UTC
On 20/01/15 17:52 +0000, Jonathan Wakely wrote:
>On 20/01/15 09:02 -0800, H.J. Lu wrote:
>>On Linux/ia-32, I got
>>
>>output is:
>>/tmp/ccApSqaQ.o: In function `facet<char>::facet()':^M
>>/export/gnu/import/git/gcc-test-x32/src-trunk/libstdc++-v3/testsuite/22_locale/ctype_byname/2.cc:29:
>>undefined reference to
>>`std::ctype_byname<char>::ctype_byname(std::__cxx11::basic_string<char,
>>std::char_traits<char>, std::allocator<char> > const&, unsigned
>>int)'^M
>>/tmp/ccApSqaQ.o: In function `facet<wchar_t>::facet()':^M
>>/export/gnu/import/git/gcc-test-x32/src-trunk/libstdc++-v3/testsuite/22_locale/ctype_byname/2.cc:29:
>>undefined reference to
>>`std::ctype_byname<wchar_t>::ctype_byname(std::__cxx11::basic_string<char,
>>std::char_traits<char>, std::allocator<char> > const&, unsigned
>>int)'^M
>>collect2: error: ld returned 1 exit status^M
>>
>>FAIL: 22_locale/ctype_byname/2.cc (test for excess errors)
>>FAIL: libstdc++-abi/abi_check
>
>I forgot that the mangled name for size_t depends on the target, so
>the linker script needs [jm] instead of m. Patch coming soon ...

This fixes the new FAILs on i686.

Tested x86_64-linux and i686-linux, committed to trunk.

I expect the new symbols are going to cause a problem on Solaris as
they match more than one symbol version, so I'll fix that ASAP.

Comments

Rainer Orth Jan. 21, 2015, 5:09 p.m. UTC | #1
Jonathan Wakely <jwakely@redhat.com> writes:

>>I forgot that the mangled name for size_t depends on the target, so
>>the linker script needs [jm] instead of m. Patch coming soon ...
>
> This fixes the new FAILs on i686.
>
> Tested x86_64-linux and i686-linux, committed to trunk.
>
> I expect the new symbols are going to cause a problem on Solaris as
> they match more than one symbol version, so I'll fix that ASAP.

Indeed: before and after this change, Solaris bootstrap is broken.  Now
I get

ld: fatal: libstdc++-symbols.ver-sun: 6153: symbol 'std::codecvt<char32_t, char, __mbstate_t>::do_unshift(__mbstate_t&, char*, char*, char*&) const': symbol version conflict

_ZNKSt7codecvtIDic11__mbstate_tE10do_unshiftERS0_PcS3_RS3_ is matched by
_ZNKSt7codecvtID[is]c11__mbstate_t* (glob) in GLIBCXX_3.4.21 and
std::co[^ln]* (cxx) in GLIBCXX_3.4

ld: fatal: libstdc++-symbols.ver-sun: 6154: symbol 'std::codecvt<char32_t, char, __mbstate_t>::do_encoding() const': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6155: symbol 'std::codecvt<char32_t, char, __mbstate_t>::do_max_length() const': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6156: symbol 'std::codecvt<char32_t, char, __mbstate_t>::do_always_noconv() const': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6157: symbol 'std::codecvt<char32_t, char, __mbstate_t>::do_in(__mbstate_t&, char const*, char const*, char const*&, char32_t*, char32_t*, char32_t*&) const': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6158: symbol 'std::codecvt<char32_t, char, __mbstate_t>::do_out(__mbstate_t&, char32_t const*, char32_t const*, char32_t const*&, char*, char*, char*&) const': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6159: symbol 'std::codecvt<char32_t, char, __mbstate_t>::do_length(__mbstate_t&, char const*, char const*, unsigned int) const': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6160: symbol 'std::codecvt<char16_t, char, __mbstate_t>::do_unshift(__mbstate_t&, char*, char*, char*&) const': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6161: symbol 'std::codecvt<char16_t, char, __mbstate_t>::do_encoding() const': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6162: symbol 'std::codecvt<char16_t, char, __mbstate_t>::do_max_length() const': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6163: symbol 'std::codecvt<char16_t, char, __mbstate_t>::do_always_noconv() const': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6164: symbol 'std::codecvt<char16_t, char, __mbstate_t>::do_in(__mbstate_t&, char const*, char const*, char const*&, char16_t*, char16_t*, char16_t*&) const': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6165: symbol 'std::codecvt<char16_t, char, __mbstate_t>::do_out(__mbstate_t&, char16_t const*, char16_t const*, char16_t const*&, char*, char*, char*&) const': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6166: symbol 'std::codecvt<char16_t, char, __mbstate_t>::do_length(__mbstate_t&, char const*, char const*, unsigned int) const': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6168: symbol 'std::codecvt<char32_t, char, __mbstate_t>::id': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6169: symbol 'std::codecvt<char32_t, char, __mbstate_t>::~codecvt()': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6170: symbol 'std::codecvt<char32_t, char, __mbstate_t>::~codecvt()': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6171: symbol 'std::codecvt<char32_t, char, __mbstate_t>::~codecvt()': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6172: symbol 'std::codecvt<char16_t, char, __mbstate_t>::id': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6173: symbol 'std::codecvt<char16_t, char, __mbstate_t>::~codecvt()': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6174: symbol 'std::codecvt<char16_t, char, __mbstate_t>::~codecvt()': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6175: symbol 'std::codecvt<char16_t, char, __mbstate_t>::~codecvt()': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6177: symbol 'typeinfo for std::codecvt<char32_t, char, __mbstate_t>': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6178: symbol 'typeinfo for std::codecvt<char16_t, char, __mbstate_t>': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6179: symbol 'typeinfo name for std::codecvt<char32_t, char, __mbstate_t>': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6180: symbol 'typeinfo name for std::codecvt<char16_t, char, __mbstate_t>': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6181: symbol 'vtable for std::codecvt<char32_t, char, __mbstate_t>': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6182: symbol 'vtable for std::codecvt<char16_t, char, __mbstate_t>': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6319: symbol 'std::codecvt_byname<char, char, __mbstate_t>::codecvt_byname(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)': symbol version conflict

_ZNSt14codecvt_bynameIcc11__mbstate_tEC1ERKSsj is matched by
_ZNSt14codecvt_bynameI[cw]c11__mbstate_tEC[1-5]ERKSs[jmy] (glob) in
GLIBCXX_3.4.21 and
std::co[^ln]* (cxx) in GLIBCXX_3.4

ld: fatal: libstdc++-symbols.ver-sun: 6320: symbol 'std::codecvt_byname<char, char, __mbstate_t>::codecvt_byname(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6321: symbol 'std::codecvt_byname<wchar_t, char, __mbstate_t>::codecvt_byname(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6322: symbol 'std::codecvt_byname<wchar_t, char, __mbstate_t>::codecvt_byname(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6324: symbol 'std::messages_byname<char>::messages_byname(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6325: symbol 'std::messages_byname<char>::messages_byname(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6326: symbol 'std::messages_byname<wchar_t>::messages_byname(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6327: symbol 'std::messages_byname<wchar_t>::messages_byname(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6329: symbol 'std::numpunct_byname<char>::numpunct_byname(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6330: symbol 'std::numpunct_byname<char>::numpunct_byname(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6331: symbol 'std::numpunct_byname<wchar_t>::numpunct_byname(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6332: symbol 'std::numpunct_byname<wchar_t>::numpunct_byname(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6334: symbol 'std::time_get_byname<char, std::istreambuf_iterator<char, std::char_traits<char> > >::time_get_byname(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6335: symbol 'std::time_get_byname<char, std::istreambuf_iterator<char, std::char_traits<char> > >::time_get_byname(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6336: symbol 'std::time_get_byname<wchar_t, std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t> > >::time_get_byname(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6337: symbol 'std::time_get_byname<wchar_t, std::istreambuf_iterator<wchar_t, std::char_traits<wchar_t> > >::time_get_byname(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6344: symbol 'std::moneypunct_byname<char, false>::moneypunct_byname(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6345: symbol 'std::moneypunct_byname<char, false>::moneypunct_byname(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6346: symbol 'std::moneypunct_byname<wchar_t, false>::moneypunct_byname(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6347: symbol 'std::moneypunct_byname<wchar_t, false>::moneypunct_byname(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6349: symbol 'std::moneypunct_byname<char, true>::moneypunct_byname(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6350: symbol 'std::moneypunct_byname<char, true>::moneypunct_byname(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6351: symbol 'std::moneypunct_byname<wchar_t, true>::moneypunct_byname(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6352: symbol 'std::moneypunct_byname<wchar_t, true>::moneypunct_byname(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6359: symbol 'std::codecvt_byname<char, char, __mbstate_t>::codecvt_byname(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6360: symbol 'std::codecvt_byname<char, char, __mbstate_t>::codecvt_byname(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6361: symbol 'std::codecvt_byname<wchar_t, char, __mbstate_t>::codecvt_byname(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6362: symbol 'std::codecvt_byname<wchar_t, char, __mbstate_t>::codecvt_byname(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)': symbol version conflict

	Rainer
Jonathan Wakely Jan. 21, 2015, 5:19 p.m. UTC | #2
On 21/01/15 18:09 +0100, Rainer Orth wrote:
>Indeed: before and after this change, Solaris bootstrap is broken.  Now
>I get
>
>ld: fatal: libstdc++-symbols.ver-sun: 6153: symbol 'std::codecvt<char32_t, char, __mbstate_t>::do_unshift(__mbstate_t&, char*, char*, char*&) const': symbol version conflict
>
>_ZNKSt7codecvtIDic11__mbstate_tE10do_unshiftERS0_PcS3_RS3_ is matched by
>_ZNKSt7codecvtID[is]c11__mbstate_t* (glob) in GLIBCXX_3.4.21 and
>std::co[^ln]* (cxx) in GLIBCXX_3.4

Sorry about that :-(

The good news is that I now have a tool to find these conflicts for
me. The output related to the above conflict is:

Symbol matches more than one version:
_ZNKSt7codecvtIDic11__mbstate_tE10do_unshiftERS0_PcS3_RS3_
std::codecvt<char32_t, char, __mbstate_t>::do_unshift(__mbstate_t&, char*, char*, char*&) const
  GLIBCXX_3.4        std::co[^ln]* (line 28)
  GLIBCXX_3.4.21     _ZNKSt7codecvtID[is]c11__mbstate_t* (line 1259)

So I'm in the process of fixing these.
diff mbox

Patch

commit 0715599f0458f89fe6d9ce6268008b95b6d022e6
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Tue Jan 20 18:51:07 2015 +0000

    	* config/abi/pre/gnu.ver: Use [jmy] for size_t parameters.

diff --git a/libstdc++-v3/config/abi/pre/gnu.ver b/libstdc++-v3/config/abi/pre/gnu.ver
index 61024bd..9d06f7a 100644
--- a/libstdc++-v3/config/abi/pre/gnu.ver
+++ b/libstdc++-v3/config/abi/pre/gnu.ver
@@ -187,7 +187,7 @@  GLIBCXX_3.4 {
       std::__num_base::_S_atoms_out;
       std::__moneypunct_cache*;
       std::__numpunct_cache*;
-      std::__timepunct_cache*
+      std::__timepunct_cache*;
 #     __gnu_debug::_Error_formatter*
     };
 
@@ -1150,7 +1150,7 @@  GLIBCXX_3.4.10 {
     _ZNKSt4hashISsEclESs;
     _ZNKSt4hashIeEclEe;
 
-    _ZSt17__verify_groupingPKc[mj]RKSs;
+    _ZSt17__verify_groupingPKc[jmy]RKSs;
 
     _ZNSt8__detail12__prime_listE;
     _ZNSt3tr18__detail12__prime_listE;
@@ -1729,7 +1729,7 @@  GLIBCXX_3.4.21 {
     _ZSt9use_facetINSt7__cxx118numpunct*;
     _ZSt9use_facetINSt7__cxx118time_get*;
 
-    _ZSt17__verify_groupingPKc[mj]RKNSt7__cxx1112basic_string*;
+    _ZSt17__verify_groupingPKc[jmy]RKNSt7__cxx1112basic_string*;
 
     _ZNSt3_V214error_category*;
     _ZNKSt3_V214error_category*;
@@ -1793,23 +1793,23 @@  GLIBCXX_3.4.21 {
     _ZT[ISV]St25__codecvt_utf8_utf16_base*;
 
     # new string ctors for _byname facets
-    _ZNSt12ctype_bynameI[cw]EC[1-5]ERKSsm;
-    _ZNSt14codecvt_bynameI[cw]c11__mbstate_tEC[1-5]ERKSsm;
-    _ZNSt15messages_bynameI[cw]EC[1-5]ERKSsm;
-    _ZNSt15numpunct_bynameI[cw]EC[1-5]ERKSsm;
-    _ZNSt15time_get_bynameI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEEC[1-5]ERKSsm;
-    _ZNSt15time_put_bynameI[cw]St19ostreambuf_iteratorI[cw]St11char_traitsI[cw]EEEC[1-5]ERKSsm;
-    _ZNSt17moneypunct_bynameI[cw]Lb0EEC[1-5]ERKSsm;
-    _ZNSt17moneypunct_bynameI[cw]Lb1EEC[1-5]ERKSsm;
-
-    _ZNSt12ctype_bynameI[cw]EC[1-5]ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEm;
-    _ZNSt14codecvt_bynameI[cw]c11__mbstate_tEC[1-5]ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEm;
-    _ZNSt15time_put_bynameI[cw]St19ostreambuf_iteratorI[cw]St11char_traitsI[cw]EEEC[1-5]ERKNSt7__cxx1112basic_stringIcS2_SaIcEEEm;
-    _ZNSt7__cxx1115messages_bynameI[cw]EC[1-5]ERKNS_12basic_stringIcSt11char_traitsIcESaIcEEEm;
-    _ZNSt7__cxx1115numpunct_bynameI[cw]EC[1-5]ERKNS_12basic_stringIcSt11char_traitsIcESaIcEEEm;
-    _ZNSt7__cxx1115time_get_bynameI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEEC[1-5]ERKNS_12basic_stringIcS3_SaIcEEEm;
-    _ZNSt7__cxx1117moneypunct_bynameI[cw]Lb0EEC[1-5]ERKNS_12basic_stringIcSt11char_traitsIcESaIcEEEm;
-    _ZNSt7__cxx1117moneypunct_bynameI[cw]Lb1EEC[1-5]ERKNS_12basic_stringIcSt11char_traitsIcESaIcEEEm;
+    _ZNSt12ctype_bynameI[cw]EC[1-5]ERKSs[jmy];
+    _ZNSt14codecvt_bynameI[cw]c11__mbstate_tEC[1-5]ERKSs[jmy];
+    _ZNSt15messages_bynameI[cw]EC[1-5]ERKSs[jmy];
+    _ZNSt15numpunct_bynameI[cw]EC[1-5]ERKSs[jmy];
+    _ZNSt15time_get_bynameI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEEC[1-5]ERKSs[jmy];
+    _ZNSt15time_put_bynameI[cw]St19ostreambuf_iteratorI[cw]St11char_traitsI[cw]EEEC[1-5]ERKSs[jmy];
+    _ZNSt17moneypunct_bynameI[cw]Lb0EEC[1-5]ERKSs[jmy];
+    _ZNSt17moneypunct_bynameI[cw]Lb1EEC[1-5]ERKSs[jmy];
+
+    _ZNSt12ctype_bynameI[cw]EC[1-5]ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE[jmy];
+    _ZNSt14codecvt_bynameI[cw]c11__mbstate_tEC[1-5]ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE[jmy];
+    _ZNSt15time_put_bynameI[cw]St19ostreambuf_iteratorI[cw]St11char_traitsI[cw]EEEC[1-5]ERKNSt7__cxx1112basic_stringIcS2_SaIcEEE[jmy];
+    _ZNSt7__cxx1115messages_bynameI[cw]EC[1-5]ERKNS_12basic_stringIcSt11char_traitsIcESaIcEEE[jmy];
+    _ZNSt7__cxx1115numpunct_bynameI[cw]EC[1-5]ERKNS_12basic_stringIcSt11char_traitsIcESaIcEEE[jmy];
+    _ZNSt7__cxx1115time_get_bynameI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEEC[1-5]ERKNS_12basic_stringIcS3_SaIcEEE[jmy];
+    _ZNSt7__cxx1117moneypunct_bynameI[cw]Lb0EEC[1-5]ERKNS_12basic_stringIcSt11char_traitsIcESaIcEEE[jmy];
+    _ZNSt7__cxx1117moneypunct_bynameI[cw]Lb1EEC[1-5]ERKNS_12basic_stringIcSt11char_traitsIcESaIcEEE[jmy];
 
 } GLIBCXX_3.4.20;