4.2.1 abi compatibility with 4.0.0
Mike Stump
mrs@apple.com
Thu Apr 10 01:41:00 GMT 2008
On Apr 9, 2008, at 5:10 PM, Benjamin Kosnik wrote:
>
>> In 4.2.1 we use config/abi/pre/gnu.ver to build up the library.
> That's interesting.
Ah, I tracked it down a little bit further... in 4.0.0, config/linker-
map.gnu has:
std::[A-Zm-z]*;
this matches std::search, and in 4.0.1, we have:
std::[A-Zm-r]*;
std::set_new_handler*;
std::set_terminate*;
std::set_unexpected*;
# std::string
std::strstream*;
std::strstreambuf*;
std::[A-Zt-z]*;
which does not match std::search.
svn points the finger at:
------------------------------------------------------------------------
r101112 | bkoz | 2005-06-16 16:30:55 -0700 (Thu, 16 Jun 2005) | 61 lines
2005-06-17 Jakub Jelinek <jakub@redhat.com>
* config/abi/ia64-linux-gnu/baseline_symbols.txt: Update.
* config/abi/s390x-linux-gnu/baseline_symbols.txt: Update.
* config/abi/s390-linux-gnu/baseline_symbols.txt: Update.
* config/abi/x86_64-linux-gnu/baseline_symbols.txt: Update.
* config/abi/x86_64-linux-gnu/32/baseline_symbols.txt: Update.
* config/abi/powerpc-linux-gnu/baseline_symbols.txt: Update.
* config/abi/i486-linux-gnu/baseline_symbols.txt: Update.
* config/abi/i386-linux-gnu/baseline_symbols.txt: Update.
* config/abi/powerpc64-linux-gnu/baseline_symbols.txt: New file.
* config/abi/powerpc64-linux-gnu/32/baseline_symbols.txt: New file.
2005-06-16 Jakub Jelinek <jakub@redhat.com>
* src/compatibility.cc: Include bits/c++config.h first.
(_GLIBCXX_SYMVER_COMPATIBILITY): Define if _GLIBCXX_SYMVER
and PIC are both defined.
* include/bits/char_traits.h (char_traits::eq): Rename
only if _GLIBCXX_SYMVER_COMPATIBILITY is defined.
2005-06-16 Jakub Jelinek <jakub@redhat.com>
* acinclude.m4 ((GLIBCXX_ENABLE_SYMVERS): Rename
_GLIBCXX_SIZE_T_IS_INT
to _GLIBCXX_SIZE_T_IS_UINT. Define _GLIBCXX_PTRDIFF_T_IS_INT.
* configure: Regenerate.
* config.h.in: Regenerate.
* src/compatibility.cc (istream:ignore(streamsize)): Use
_GLIBCXX_PTRDIFF_T_IS_INT instead of _GLIBCXX_SIZE_T_IS_INT.
* config/abi/compatibility.h: Rename _GLIBCXX_SIZE_T_IS_INT
to _GLIBCXX_SIZE_T_IS_UINT. Use _GLIBCXX_PTRDIFF_T_IS_INT
instead for symbols with streamsize arguments.
2005-06-16 Jakub Jelinek <jakub@redhat.com>
* config/linker-map.gnu: Also export
_ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreE[il][il].
2005-06-15 Benjamin Kosnik <bkoz@redhat.com>
* configure.ac (libtool_VERSION): To 6:5:0.
* configure: Regenerate.
* config/linker-map.gnu: Edit.
* src/istream.cc: Move istream::ignore(streamsize) specializations...
* src/compatibility.cc: ...here. New.
* include/bits/char_traits.h (char_traits::eq): Rename when
appropriate.
* acinclude.m4 (GLIBCXX_ENABLE_SYMVERS): Define _GLIBCXX_SIZE_T_IS_INT.
Bump glibcxx_min_gnu_ld_version to 21590.
* configure: Regenerate.
* acconfig.h: Remove _GLIBCXX_ASM_SYMVER.
* config.h.in: Regenerate.
* src/Makefile.am (sources): Add compatibility.cc.
* src/Makefile.in: Regenerate.
* include/Makefile.am (host_headers_noinst): Add compatibility.h.
* include/Makefile.in: Regenerate.
* testsuite/testsuite_abi.h (symbol): Add data members.
* testsuite/testsuite_abi.cc (check_version): Add GLIBCXX_3.4.5.
Remove deprecated versions. Do a better job version checking.
------------------------------------------------------------------------
and the edit itself:
Index: linker-map.gnu
===================================================================
--- linker-map.gnu (revision 101111)
+++ linker-map.gnu (revision 101112)
@@ -54,7 +88,14 @@
std::locale::_[J-Ra-z]*;
std::locale::_S_normalize_category*;
std::locale::_[T-Za-z]*;
- std::[A-Zm-z]*;
+ std::[A-Zm-r]*;
+ std::set_new_handler*;
+ std::set_terminate*;
+ std::set_unexpected*;
+# std::string
+ std::strstream*;
+ std::strstreambuf*;
+ std::[A-Zt-z]*;
std::_List_node_base::hook*;
std::_List_node_base::swap*;
std::_List_node_base::unhook*;
> I thought darwin/MachO used an incompatible mechanism from ELF
> symbol versioning, one that only allowed two versions at a time.
Hum, two... I thought we allowed just one! Anyway, I don't yet see
the relevance.
>> We build and install gcc, and shipped the 4.0.0 libstdc++ as a
>> shared library, in the past. We're now updating the library to 4.2.1
>> and things mostly work, though, this symbol went missing.
>
> Exported symbols are checked against a known good list, so I'm
> assuming we would have seen this.
I can't explain why it was missed.
> Do the darwin exports (from baseline_symbols in the build/testsuite
> directory) match linux then?
I'd have to compare. I'd tend to doubt it, though, they could be
very, very close.
Does this reproduce on linux from 4.0.0 to 4.0.1? If not, why not
(don't they also use linker-map.gnu)?
More information about the Libstdc++
mailing list