This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
Re: [patch] Implement move semantics for iostreams
- From: Jonathan Wakely <jwakely at redhat dot com>
- To: Rainer Orth <ro at CeBiTec dot Uni-Bielefeld dot DE>
- Cc: libstdc++ at gcc dot gnu dot org, gcc-patches at gcc dot gnu dot org
- Date: Wed, 24 Sep 2014 15:48:25 +0100
- Subject: Re: [patch] Implement move semantics for iostreams
- Authentication-results: sourceware.org; auth=none
- References: <20140922133507 dot GF22778 at redhat dot com> <yddlhpa8mmb dot fsf at lokon dot CeBiTec dot Uni-Bielefeld dot DE> <20140924133727 dot GU2669 at redhat dot com> <yddh9zx84oa dot fsf at lokon dot CeBiTec dot Uni-Bielefeld dot DE>
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.