Message ID | a076f736-7570-348f-5dd2-f6d23ba24e7a@gmail.com |
---|---|
State | New |
Headers | show |
Series | Add missing gnu-versioned-namespace symbols | expand |
On 01/11/20 20:48 +0100, François Dumont via Libstdc++ wrote: >Several tests are failing because of those missing symbols. > >I understand why we need to export symbols relying in the versioned >namespace but I don't understand why we need to do it for >_GLIBCXX_DEBUG symbols which are not version namespace dependant. If you don't export the symbol, it can't be found by code linking to libstdc++.so.8 This linker script is the only one used to build libstdc++.so.8 so all symbols that need to be exported by that library have to be exported by this script. Nothing exports that debug symbol unless you add it here. What I don't understand is why the __istream_extract symbol isn't matched by the wildcard in the extern "C++" block at the top of the file. >Do you want to backport the Debug symbol ? > >   libstdc++: Add mising gnu-versioned-namespace symbols > >   libstdc++-v3/ChangeLog: > >           * config/abi/pre/gnu-versioned-namespace.ver: >           Add __istream_extract and >_Safe_local_iterator_base::_M_attach_single >           symbols. > >Tested under Linux x86_64 versioned namespace. > >Ok to commit ? > >François > >diff --git a/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver b/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver >index 0965854fbc3..3b6d7944d06 100644 >--- a/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver >+++ b/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver >@@ -98,6 +98,9 @@ GLIBCXX_8.0 { > _ZNSt3__817__copy_streambufsI*; > _ZNSt3__821__copy_streambufs_eofI*; > >+ # std::__istream_extract(wistream&, wchar_t*, streamsize) >+ _ZNSt3__817__istream_extractIwNS_11char_traitsIwEEEEvRNS_13basic_istreamIT_T0_EEPS4_[ilx]; >+ > # __gnu_cxx::__atomic_add > # __gnu_cxx::__exchange_and_add > _ZN9__gnu_cxx3__812__atomic_addEPV[il][il]; >@@ -145,6 +148,7 @@ GLIBCXX_8.0 { > _ZN11__gnu_debug30_Safe_unordered_container_base13_M_detach_allEv; > _ZN11__gnu_debug25_Safe_local_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb; > _ZN11__gnu_debug25_Safe_local_iterator_base9_M_detachEv; >+ _ZN11__gnu_debug25_Safe_local_iterator_base16_M_attach_singleEPNS_19_Safe_sequence_baseEb; > > # parallel mode > _ZN14__gnu_parallel9_Settings3getEv;
On 02/11/20 3:17 pm, Jonathan Wakely wrote: > On 01/11/20 20:48 +0100, François Dumont via Libstdc++ wrote: >> Several tests are failing because of those missing symbols. >> >> I understand why we need to export symbols relying in the versioned >> namespace but I don't understand why we need to do it for >> _GLIBCXX_DEBUG symbols which are not version namespace dependant. > > If you don't export the symbol, it can't be found by code linking to > libstdc++.so.8 So I understand that in versioned namespace mode only gnu-versioned-namespace.ver is being used and not gnu.ver. > > This linker script is the only one used to build libstdc++.so.8 so all > symbols that need to be exported by that library have to be exported > by this script. Nothing exports that debug symbol unless you add it > here. > > What I don't understand is why the __istream_extract symbol isn't > matched by the wildcard in the extern "C++" block at the top of the > file. Maybe for the same reason that the std::__copy_streambufs before this one and some others symbols in std::__8 had to be explicitely exported too. But I don't know it. > >> Do you want to backport the Debug symbol ? >> >>    libstdc++: Add mising gnu-versioned-namespace symbols >> >>    libstdc++-v3/ChangeLog: >> >>            * config/abi/pre/gnu-versioned-namespace.ver: >>            Add __istream_extract and >> _Safe_local_iterator_base::_M_attach_single >>            symbols. >> >> Tested under Linux x86_64 versioned namespace. >> >> Ok to commit ? >> >> François >> > >> diff --git a/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver >> b/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver >> index 0965854fbc3..3b6d7944d06 100644 >> --- a/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver >> +++ b/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver >> @@ -98,6 +98,9 @@ GLIBCXX_8.0 { >> _ZNSt3__817__copy_streambufsI*; >> _ZNSt3__821__copy_streambufs_eofI*; >> >> + # std::__istream_extract(wistream&, wchar_t*, streamsize) >> + >> _ZNSt3__817__istream_extractIwNS_11char_traitsIwEEEEvRNS_13basic_istreamIT_T0_EEPS4_[ilx]; >> + >> # __gnu_cxx::__atomic_add >> # __gnu_cxx::__exchange_and_add >> _ZN9__gnu_cxx3__812__atomic_addEPV[il][il]; >> @@ -145,6 +148,7 @@ GLIBCXX_8.0 { >> _ZN11__gnu_debug30_Safe_unordered_container_base13_M_detach_allEv; >> _ZN11__gnu_debug25_Safe_local_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb; >> _ZN11__gnu_debug25_Safe_local_iterator_base9_M_detachEv; >> + >> _ZN11__gnu_debug25_Safe_local_iterator_base16_M_attach_singleEPNS_19_Safe_sequence_baseEb; >> >> # parallel mode >> _ZN14__gnu_parallel9_Settings3getEv; >
On 02/11/20 21:52 +0100, François Dumont via Libstdc++ wrote: >On 02/11/20 3:17 pm, Jonathan Wakely wrote: >>On 01/11/20 20:48 +0100, François Dumont via Libstdc++ wrote: >>>Several tests are failing because of those missing symbols. >>> >>>I understand why we need to export symbols relying in the >>>versioned namespace but I don't understand why we need to do it >>>for _GLIBCXX_DEBUG symbols which are not version namespace >>>dependant. >> >>If you don't export the symbol, it can't be found by code linking to >>libstdc++.so.8 > >So I understand that in versioned namespace mode only >gnu-versioned-namespace.ver is being used and not gnu.ver. Right. >> >>This linker script is the only one used to build libstdc++.so.8 so all >>symbols that need to be exported by that library have to be exported >>by this script. Nothing exports that debug symbol unless you add it >>here. >> >>What I don't understand is why the __istream_extract symbol isn't >>matched by the wildcard in the extern "C++" block at the top of the >>file. > >Maybe for the same reason that the std::__copy_streambufs before this >one and some others symbols in std::__8 had to be explicitely exported >too. > >But I don't know it. Yeah, I don't understand those either. OK for trunk anyway. I'll investigate another day.
diff --git a/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver b/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver index 0965854fbc3..3b6d7944d06 100644 --- a/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver +++ b/libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver @@ -98,6 +98,9 @@ GLIBCXX_8.0 { _ZNSt3__817__copy_streambufsI*; _ZNSt3__821__copy_streambufs_eofI*; + # std::__istream_extract(wistream&, wchar_t*, streamsize) + _ZNSt3__817__istream_extractIwNS_11char_traitsIwEEEEvRNS_13basic_istreamIT_T0_EEPS4_[ilx]; + # __gnu_cxx::__atomic_add # __gnu_cxx::__exchange_and_add _ZN9__gnu_cxx3__812__atomic_addEPV[il][il]; @@ -145,6 +148,7 @@ GLIBCXX_8.0 { _ZN11__gnu_debug30_Safe_unordered_container_base13_M_detach_allEv; _ZN11__gnu_debug25_Safe_local_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb; _ZN11__gnu_debug25_Safe_local_iterator_base9_M_detachEv; + _ZN11__gnu_debug25_Safe_local_iterator_base16_M_attach_singleEPNS_19_Safe_sequence_baseEb; # parallel mode _ZN14__gnu_parallel9_Settings3getEv;