diff options
author | Benjamin Kosnik <bkoz@gcc.gnu.org> | 2005-06-17 07:33:56 +0000 |
---|---|---|
committer | Benjamin Kosnik <bkoz@gcc.gnu.org> | 2005-06-17 07:33:56 +0000 |
commit | bb2b2a247232830b94d9dc3daa914913756ac847 (patch) | |
tree | ca141cf798cd30888704660daa0235abf14a4700 /libstdc++-v3/src | |
parent | 3453c37fe3e47c3cc82fab9204824a7a3aae9bda (diff) | |
download | gcc-bb2b2a247232830b94d9dc3daa914913756ac847.tar.gz |
[multiple changes]
2005-06-17 Jakub Jelinek <jakub@redhat.com>
Benjamin Kosnik <bkoz@redhat.com>
* config/abi/alpha-linux-gnu/baseline_symbols.txt: Update.
* config/abi/hppa-linux-gnu/baseline_symbols.txt: Same.
* config/abi/mips-linux-gnu/baseline_symbols.txt: Same.
* config/abi/sparc-linux-gnu/baseline_symbols.txt: Same.
* config/abi/alpha-freebsd5/baseline_symbols.txt: Remove.
* config/abi/i386-freebsd4/baseline_symbols.txt: Same.
* config/abi/i386-freebsd5/baseline_symbols.txt: Same.
* config/abi/sparc-freebsd5/baseline_symbols.txt: Same.
* config/abi/arm-linux-gnu/baseline_symbols.txt: Remove.
* config/abi/m68k-linux-gnu/baseline_symbols.txt: Same.
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:6: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,
GLIBCXX_3.4.6. Remove deprecated versions. Do a better job
version checking.
From-SVN: r101125
Diffstat (limited to 'libstdc++-v3/src')
-rw-r--r-- | libstdc++-v3/src/Makefile.am | 1 | ||||
-rw-r--r-- | libstdc++-v3/src/Makefile.in | 22 | ||||
-rw-r--r-- | libstdc++-v3/src/compatibility.cc | 389 | ||||
-rw-r--r-- | libstdc++-v3/src/istream.cc | 129 |
4 files changed, 402 insertions, 139 deletions
diff --git a/libstdc++-v3/src/Makefile.am b/libstdc++-v3/src/Makefile.am index 630f4dcd6d0..13f5397ceb4 100644 --- a/libstdc++-v3/src/Makefile.am +++ b/libstdc++-v3/src/Makefile.am @@ -100,6 +100,7 @@ sources = \ pool_allocator.cc \ mt_allocator.cc \ codecvt.cc \ + compatibility.cc \ complex_io.cc \ ctype.cc \ debug.cc \ diff --git a/libstdc++-v3/src/Makefile.in b/libstdc++-v3/src/Makefile.in index 43abc92b458..fbe380532ab 100644 --- a/libstdc++-v3/src/Makefile.in +++ b/libstdc++-v3/src/Makefile.in @@ -65,16 +65,17 @@ am__objects_1 = atomicity.lo codecvt_members.lo collate_members.lo \ numeric_members.lo time_members.lo am__objects_2 = basic_file.lo c++locale.lo am__objects_3 = bitmap_allocator.lo pool_allocator.lo mt_allocator.lo \ - codecvt.lo complex_io.lo ctype.lo debug.lo debug_list.lo \ - functexcept.lo globals_locale.lo globals_io.lo ios.lo \ - ios_failure.lo ios_init.lo ios_locale.lo limits.lo list.lo \ - locale.lo locale_init.lo locale_facets.lo localename.lo \ - stdexcept.lo strstream.lo tree.lo allocator-inst.lo \ - concept-inst.lo fstream-inst.lo ext-inst.lo io-inst.lo \ - istream-inst.lo istream.lo locale-inst.lo locale-misc-inst.lo \ - misc-inst.lo ostream-inst.lo sstream-inst.lo streambuf-inst.lo \ - streambuf.lo string-inst.lo valarray-inst.lo wlocale-inst.lo \ - wstring-inst.lo $(am__objects_1) $(am__objects_2) + codecvt.lo compatibility.lo complex_io.lo ctype.lo debug.lo \ + debug_list.lo functexcept.lo globals_locale.lo globals_io.lo \ + ios.lo ios_failure.lo ios_init.lo ios_locale.lo limits.lo \ + list.lo locale.lo locale_init.lo locale_facets.lo \ + localename.lo stdexcept.lo strstream.lo tree.lo \ + allocator-inst.lo concept-inst.lo fstream-inst.lo ext-inst.lo \ + io-inst.lo istream-inst.lo istream.lo locale-inst.lo \ + locale-misc-inst.lo misc-inst.lo ostream-inst.lo \ + sstream-inst.lo streambuf-inst.lo streambuf.lo string-inst.lo \ + valarray-inst.lo wlocale-inst.lo wstring-inst.lo \ + $(am__objects_1) $(am__objects_2) am_libstdc___la_OBJECTS = $(am__objects_3) libstdc___la_OBJECTS = $(am_libstdc___la_OBJECTS) DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) @@ -308,6 +309,7 @@ sources = \ pool_allocator.cc \ mt_allocator.cc \ codecvt.cc \ + compatibility.cc \ complex_io.cc \ ctype.cc \ debug.cc \ diff --git a/libstdc++-v3/src/compatibility.cc b/libstdc++-v3/src/compatibility.cc new file mode 100644 index 00000000000..380649d8f18 --- /dev/null +++ b/libstdc++-v3/src/compatibility.cc @@ -0,0 +1,389 @@ +// Compatibility symbols for previous versions -*- C++ -*- + +// Copyright (C) 2005 +// Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +#include <bits/c++config.h> + +#if defined(_GLIBCXX_SYMVER) && defined(PIC) +# define _GLIBCXX_SYMVER_COMPATIBILITY 1 +#endif + +#include <string> +#include <istream> +#include <fstream> +#include <sstream> + +namespace std +{ + // std::istream ignore explicit specializations. +#if defined(_GLIBCXX_SYMVER) && defined(PIC) + template<> + basic_istream<char>& + basic_istream<char>::ignore(streamsize __n) +#ifdef _GLIBCXX_PTRDIFF_T_IS_INT + asm ("_W_ZNSi6ignoreEi"); +#else + asm ("_W_ZNSi6ignoreEl"); +#endif + +#ifdef _GLIBCXX_USE_WCHAR_T + template<> + basic_istream<wchar_t>& + basic_istream<wchar_t>::ignore(streamsize __n) +#ifdef _GLIBCXX_PTRDIFF_T_IS_INT + asm ("_W_ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEi"); +#else + asm ("_W_ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEl"); +#endif +#endif +#endif // _GLIBCXX_SYMVER && PIC + + template<> + basic_istream<char>& + basic_istream<char>:: + ignore(streamsize __n) + { + if (__n == 1) + return ignore(); + + _M_gcount = 0; + sentry __cerb(*this, true); + if (__cerb && __n > 0) + { + ios_base::iostate __err = ios_base::iostate(ios_base::goodbit); + try + { + const int_type __eof = traits_type::eof(); + __streambuf_type* __sb = this->rdbuf(); + int_type __c = __sb->sgetc(); + + // See comment in istream.tcc. + bool __large_ignore = false; + while (true) + { + while (_M_gcount < __n + && !traits_type::eq_int_type(__c, __eof)) + { + streamsize __size = std::min(streamsize(__sb->egptr() + - __sb->gptr()), + streamsize(__n - _M_gcount)); + if (__size > 1) + { + __sb->gbump(__size); + _M_gcount += __size; + __c = __sb->sgetc(); + } + else + { + ++_M_gcount; + __c = __sb->snextc(); + } + } + if (__n == numeric_limits<streamsize>::max() + && !traits_type::eq_int_type(__c, __eof)) + { + _M_gcount = numeric_limits<streamsize>::min(); + __large_ignore = true; + } + else + break; + } + + if (__large_ignore) + _M_gcount = numeric_limits<streamsize>::max(); + + if (traits_type::eq_int_type(__c, __eof)) + __err |= ios_base::eofbit; + } + catch(...) + { this->_M_setstate(ios_base::badbit); } + if (__err) + this->setstate(__err); + } + return *this; + } + +#ifdef _GLIBCXX_USE_WCHAR_T + template<> + basic_istream<wchar_t>& + basic_istream<wchar_t>:: + ignore(streamsize __n) + { + if (__n == 1) + return ignore(); + + _M_gcount = 0; + sentry __cerb(*this, true); + if (__cerb && __n > 0) + { + ios_base::iostate __err = ios_base::iostate(ios_base::goodbit); + try + { + const int_type __eof = traits_type::eof(); + __streambuf_type* __sb = this->rdbuf(); + int_type __c = __sb->sgetc(); + + bool __large_ignore = false; + while (true) + { + while (_M_gcount < __n + && !traits_type::eq_int_type(__c, __eof)) + { + streamsize __size = std::min(streamsize(__sb->egptr() + - __sb->gptr()), + streamsize(__n - _M_gcount)); + if (__size > 1) + { + __sb->gbump(__size); + _M_gcount += __size; + __c = __sb->sgetc(); + } + else + { + ++_M_gcount; + __c = __sb->snextc(); + } + } + if (__n == numeric_limits<streamsize>::max() + && !traits_type::eq_int_type(__c, __eof)) + { + _M_gcount = numeric_limits<streamsize>::min(); + __large_ignore = true; + } + else + break; + } + + if (__large_ignore) + _M_gcount = numeric_limits<streamsize>::max(); + + if (traits_type::eq_int_type(__c, __eof)) + __err |= ios_base::eofbit; + } + catch(...) + { this->_M_setstate(ios_base::badbit); } + if (__err) + this->setstate(__err); + } + return *this; + } +#endif +} + +// NB: These symbols renames should go into the shared library only, +// and only those shared libraries that support versioning. +#if defined(_GLIBCXX_SYMVER) && defined(PIC) + +/* gcc-3.4.4 +_ZNSt19istreambuf_iteratorIcSt11char_traitsIcEEppEv +_ZNSt19istreambuf_iteratorIwSt11char_traitsIwEEppEv + */ +namespace std +{ + template + istreambuf_iterator<char>& + istreambuf_iterator<char>::operator++(); + +#ifdef _GLIBCXX_USE_WCHAR_T + template + istreambuf_iterator<wchar_t>& + istreambuf_iterator<wchar_t>::operator++(); +#endif +} // namespace std + +/* gcc-4.0.0 +_ZNSs4_Rep26_M_set_length_and_sharableEj +_ZNSs7_M_copyEPcPKcj +_ZNSs7_M_moveEPcPKcj +_ZNSs9_M_assignEPcjc +_ZNKSs11_M_disjunctEPKc +_ZNKSs15_M_check_lengthEjjPKc +_ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableEj +_ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKwj +_ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKwj +_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw +_ZNKSbIwSt11char_traitsIwESaIwEE11_M_disjunctEPKw +_ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthEjjPKc + +_ZNKSt13basic_fstreamIcSt11char_traitsIcEE7is_openEv +_ZNKSt13basic_fstreamIwSt11char_traitsIwEE7is_openEv +_ZNKSt14basic_ifstreamIcSt11char_traitsIcEE7is_openEv +_ZNKSt14basic_ifstreamIwSt11char_traitsIwEE7is_openEv +_ZNKSt14basic_ofstreamIcSt11char_traitsIcEE7is_openEv +_ZNKSt14basic_ofstreamIwSt11char_traitsIwEE7is_openEv + +_ZNSi6ignoreEi +_ZNSi6ignoreEv +_ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEi +_ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEv + +_ZNSt11char_traitsIcE2eqERKcS2_ +_ZNSt11char_traitsIwE2eqERKwS2_ + */ +namespace std +{ + // std::char_traits is explicitly specialized + bool (* __p1)(const char&, const char&) = &char_traits<char>::eq; + + // std::string + template + void + basic_string<char>::_M_copy(char*, const char*, size_t); + + template + void + basic_string<char>::_M_move(char*, const char*, size_t); + + template + void + basic_string<char>::_M_assign(char*, size_t, char); + + template + bool + basic_string<char>::_M_disjunct(const char*) const; + + template + void + basic_string<char>::_M_check_length(size_t, size_t, const char*) const; + + template + void + basic_string<char>::_Rep::_M_set_length_and_sharable(size_t); + + + // std::istream + template + basic_istream<char>& + basic_istream<char>::ignore(); + + template + bool + basic_fstream<char>::is_open() const; + + template + bool + basic_ifstream<char>::is_open() const; + + template + bool + basic_ofstream<char>::is_open() const; + +#ifdef _GLIBCXX_USE_WCHAR_T + bool (* __p2)(const wchar_t&, const wchar_t&) = &char_traits<wchar_t>::eq; + + // std::wstring + template + void + basic_string<wchar_t>::_M_copy(wchar_t*, const wchar_t*, size_t); + + template + void + basic_string<wchar_t>::_M_move(wchar_t*, const wchar_t*, size_t); + + template + void + basic_string<wchar_t>::_M_assign(wchar_t*, size_t, wchar_t); + + template + bool + basic_string<wchar_t>::_M_disjunct(const wchar_t*) const; + + template + void + basic_string<wchar_t>::_M_check_length(size_t, size_t, + const char*) const; + + template + void + basic_string<wchar_t>::_Rep::_M_set_length_and_sharable(size_t); + + template + basic_istream<wchar_t>& + basic_istream<wchar_t>::ignore(); + + template + bool + basic_fstream<wchar_t>::is_open() const; + + template + bool + basic_ifstream<wchar_t>::is_open() const; + + template + bool + basic_ofstream<wchar_t>::is_open() const; +#endif +} + +// The rename syntax for default exported names is +// asm (".symver name1,exportedname@GLIBCXX_3.4") +// asm (".symver name2,exportedname@@GLIBCXX_3.4.5") +// In the future, GLIBCXX_ABI > 6 should remove all uses of +// _GLIBCXX_*_SYMVER macros in this file. + +#define _GLIBCXX_3_4_SYMVER(name) \ + extern "C" void \ + _X##name() \ + __attribute__ ((alias(#name))); \ + asm (".symver " "_X" #name "," #name "@GLIBCXX_3.4"); + +#define _GLIBCXX_3_4_5_SYMVER(name) \ + extern "C" void \ + _Y##name() \ + __attribute__ ((alias(#name))); \ + asm (".symver " "_Y" #name "," #name "@@GLIBCXX_3.4.5"); + +#define _GLIBCXX_3_4_SYMVER_SPECIAL(name) \ + extern "C" void \ + _X##name() \ + __attribute__ ((alias("_W" #name))); \ + asm (".symver " "_X" #name "," #name "@GLIBCXX_3.4"); + +#define _GLIBCXX_3_4_5_SYMVER_SPECIAL(name) \ + extern "C" void \ + _Y##name() \ + __attribute__ ((alias("_W" #name))); \ + asm (".symver " "_Y" #name "," #name "@@GLIBCXX_3.4.5"); + +#define _GLIBCXX_ASM_SYMVER(cur, old, version) \ + asm (".symver " #cur "," #old "@@" #version); + +#define _GLIBCXX_APPLY_SYMVER _GLIBCXX_3_4_SYMVER +#define _GLIBCXX_APPLY_SYMVER_SPECIAL _GLIBCXX_3_4_SYMVER_SPECIAL +#include <bits/compatibility.h> +#undef _GLIBCXX_APPLY_SYMVER +#undef _GLIBCXX_APPLY_SYMVER_SPECIAL + +#define _GLIBCXX_APPLY_SYMVER _GLIBCXX_3_4_5_SYMVER +#define _GLIBCXX_APPLY_SYMVER_SPECIAL _GLIBCXX_3_4_5_SYMVER_SPECIAL +#include <bits/compatibility.h> +#undef _GLIBCXX_APPLY_SYMVER +#undef _GLIBCXX_APPLY_SYMVER_SPECIAL + +#endif diff --git a/libstdc++-v3/src/istream.cc b/libstdc++-v3/src/istream.cc index 2ecd948585a..e8da16ce93e 100644 --- a/libstdc++-v3/src/istream.cc +++ b/libstdc++-v3/src/istream.cc @@ -108,71 +108,6 @@ namespace std template<> basic_istream<char>& basic_istream<char>:: - ignore(streamsize __n) - { - if (__n == 1) - return ignore(); - - _M_gcount = 0; - sentry __cerb(*this, true); - if (__cerb && __n > 0) - { - ios_base::iostate __err = ios_base::iostate(ios_base::goodbit); - try - { - const int_type __eof = traits_type::eof(); - __streambuf_type* __sb = this->rdbuf(); - int_type __c = __sb->sgetc(); - - // See comment in istream.tcc. - bool __large_ignore = false; - while (true) - { - while (_M_gcount < __n - && !traits_type::eq_int_type(__c, __eof)) - { - streamsize __size = std::min(streamsize(__sb->egptr() - - __sb->gptr()), - streamsize(__n - _M_gcount)); - if (__size > 1) - { - __sb->gbump(__size); - _M_gcount += __size; - __c = __sb->sgetc(); - } - else - { - ++_M_gcount; - __c = __sb->snextc(); - } - } - if (__n == numeric_limits<streamsize>::max() - && !traits_type::eq_int_type(__c, __eof)) - { - _M_gcount = numeric_limits<streamsize>::min(); - __large_ignore = true; - } - else - break; - } - - if (__large_ignore) - _M_gcount = numeric_limits<streamsize>::max(); - - if (traits_type::eq_int_type(__c, __eof)) - __err |= ios_base::eofbit; - } - catch(...) - { this->_M_setstate(ios_base::badbit); } - if (__err) - this->setstate(__err); - } - return *this; - } - - template<> - basic_istream<char>& - basic_istream<char>:: ignore(streamsize __n, int_type __delim) { if (traits_type::eq_int_type(__delim, traits_type::eof())) @@ -402,70 +337,6 @@ namespace std template<> basic_istream<wchar_t>& basic_istream<wchar_t>:: - ignore(streamsize __n) - { - if (__n == 1) - return ignore(); - - _M_gcount = 0; - sentry __cerb(*this, true); - if (__cerb && __n > 0) - { - ios_base::iostate __err = ios_base::iostate(ios_base::goodbit); - try - { - const int_type __eof = traits_type::eof(); - __streambuf_type* __sb = this->rdbuf(); - int_type __c = __sb->sgetc(); - - bool __large_ignore = false; - while (true) - { - while (_M_gcount < __n - && !traits_type::eq_int_type(__c, __eof)) - { - streamsize __size = std::min(streamsize(__sb->egptr() - - __sb->gptr()), - streamsize(__n - _M_gcount)); - if (__size > 1) - { - __sb->gbump(__size); - _M_gcount += __size; - __c = __sb->sgetc(); - } - else - { - ++_M_gcount; - __c = __sb->snextc(); - } - } - if (__n == numeric_limits<streamsize>::max() - && !traits_type::eq_int_type(__c, __eof)) - { - _M_gcount = numeric_limits<streamsize>::min(); - __large_ignore = true; - } - else - break; - } - - if (__large_ignore) - _M_gcount = numeric_limits<streamsize>::max(); - - if (traits_type::eq_int_type(__c, __eof)) - __err |= ios_base::eofbit; - } - catch(...) - { this->_M_setstate(ios_base::badbit); } - if (__err) - this->setstate(__err); - } - return *this; - } - - template<> - basic_istream<wchar_t>& - basic_istream<wchar_t>:: ignore(streamsize __n, int_type __delim) { if (traits_type::eq_int_type(__delim, traits_type::eof())) |