[patch] Implement move semantics for iostreams
Jonathan Wakely
jwakely@redhat.com
Wed Sep 24 14:48:00 GMT 2014
On 24/09/14 16:38 +0200, Rainer Orth wrote:
>Hi Jonathan,
>
>> On 23/09/14 15:58 +0200, Rainer Orth wrote:
>>>This patch broke Solaris bootstrap with Sun ld: when linking
>>>libstdc++.so, ld complains
>>>
>>>ld: fatal: libstdc++-symbols.ver-sun: 4520: symbol 'std::basic_ios<char,
>>> std::char_traits<char> >::move(std::basic_ios<char,
>>> std::char_traits<char> >&&)': symbol version conflict
>>>
>>>and many more. In that case, I find that this symbols is matched by
>>>both the GLIBCXX_3.4 and GLIBCXX_3.4.21 patterns:
>>>
>>> GLIBCXX_3.4
>>> ##std::basic_i[g-r]* (cxx)
>>> _ZNSt9basic_iosIcSt11char_traitsIcEE4moveEOS2_;
>>>
>>> GLIBCXX_3.4.21
>>> ##_ZNSt9basic_iosI[cw]St11char_traitsI[cw]EE4moveE[OR]S2_ (glob)
>>> _ZNSt9basic_iosIcSt11char_traitsIcEE4moveEOS2_;
>>
>> Rainer, I think this patch should fix it, could you test it please?
>
>almost there: now I only get
>
>ld: fatal: libstdc++-symbols.ver-sun: 4622: symbol 'std::basic_ostream<wchar_t, std::char_traits<wchar_t> >::basic_ostream(std::basic_iostream<wchar_t, std::char_traits<wchar_t> >&)': symbol version conflict
>ld: fatal: libstdc++-symbols.ver-sun: 4623: symbol 'std::basic_ostream<wchar_t, std::char_traits<wchar_t> >::basic_ostream(std::basic_iostream<wchar_t, std::char_traits<wchar_t> >&)': symbol version conflict
>
>from
>
> GLIBCXX_3.4:
>
> ##_ZNSt13basic_ostreamIwSt11char_traitsIwEEC[12]E[RP]* (glob)
> _ZNSt13basic_ostreamIwSt11char_traitsIwEEC1ERSt14basic_iostreamIwS1_E;
> _ZNSt13basic_ostreamIwSt11char_traitsIwEEC2ERSt14basic_iostreamIwS1_E;
>
> GLIBCXX_3.4.21:
>
> ##_ZNSt13basic_ostreamIwSt11char_traitsIwEEC[12]ERSt14basic_iostreamIwS1_E (glob)
> _ZNSt13basic_ostreamIwSt11char_traitsIwEEC1ERSt14basic_iostreamIwS1_E;
> _ZNSt13basic_ostreamIwSt11char_traitsIwEEC2ERSt14basic_iostreamIwS1_E;
Doh, yes, this additional tweak should solve that:
index f736240..95fc3c7 100644
--- a/libstdc++-v3/config/abi/pre/gnu.ver
+++ b/libstdc++-v3/config/abi/pre/gnu.ver
@@ -460,7 +460,7 @@ GLIBCXX_3.4 {
# std::basic_ostream<wchar_t>
_ZNSt13basic_ostreamIwSt11char_traitsIwEEC[12]Ev;
- _ZNSt13basic_ostreamIwSt11char_traitsIwEEC[12]E[RP]*;
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEEC[12]EP*;
_ZNSt13basic_ostreamIwSt11char_traitsIwEED*;
_ZNKSt13basic_ostreamIwSt11char_traitsIwEE[0-9][a-z]*;
_ZNSt13basic_ostreamIwSt11char_traitsIwEE3putEw;
>The glob in the 3.4 version also matches
>
> _ZNSt13basic_ostreamIwSt11char_traitsIwEEC1EPSt15basic_streambufIwS1_E;
> _ZNSt13basic_ostreamIwSt11char_traitsIwEEC2EPSt15basic_streambufIwS1_E;
Yes, that's all it needs to match, so changing [RP] to just P should work.
>> (I tried installing Solaris in a VM but couldn't get it to work, maybe
>> I should use the VirtualBox image instead of trying qemu/kvm.)
>
>VirtualBox works for me in principle, but I often found bootstrapping
>gcc inside some VM almost intolerably slow... There's been some talk on
>getting Solaris up and running in the compile farm.
That would be very useful.
Thanks for the quick testing and analysis.
More information about the Libstdc++
mailing list