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.

Reply via email to