From 6defecc2d32860e29a9de5033fc3810ed64857ae Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 7 Feb 2006 23:23:58 +0100 Subject: [PATCH] configure.ac (_GLIBCXX_LONG_DOUBLE_COMPAT): New check. 2006-02-07 Jakub Jelinek Benjamin Kosnik * configure.ac (_GLIBCXX_LONG_DOUBLE_COMPAT): New check. If true, set also port_specific_symbol_files and create as_symver_specs. (GLIBCXX_LDBL_COMPAT): New GLIBCXX_CONDITIONAL. * configure: Rebuilt. * config.h.in: Rebuilt. * config/os/gnu-linux/ldbl-extra.ver: New file. * config/abi/pre/gnu.ver: Make sure no __float128 symbols are exported. * include/bits/c++config (_GLIBCXX_LONG_DOUBLE_COMPAT, _GLIBCXX_LDBL_NAMESPACE, _GLIBCXX_BEGIN_LDBL_NAMESPACE, _GLIBCXX_END_LDBL_NAMESPACE): Define. * include/bits/localefwd.h: Use them to conditionally scope facets. * include/bits/locale_facets.h: Surround std::{money,num}_{get,put} with _GLIBCXX_BEGIN_LDBL_NAMESPACE and _GLIBCXX_END_LDBL_NAMESPACE. Surround std::{money,num}_{get,put} with _GLIBCXX_BEGIN_LDBL_NAMESPACE and _GLIBCXX_END_LDBL_NAMESPACE. [_GLIBCXX_LONG_DOUBLE_COMPAT] (std::money_get): Add __do_get method. [_GLIBCXX_LONG_DOUBLE_COMPAT] (std::money_put): Add __do_put method. [_GLIBCXX_LONG_DOUBLE_COMPAT] (std::num_get): Add __do_get method. [_GLIBCXX_LONG_DOUBLE_COMPAT] (std::num_put): Add __do_put method. * include/bits/locale_facets.tcc: Surround std::{money,num}_{get,put} with _GLIBCXX_BEGIN_LDBL_NAMESPACE and _GLIBCXX_END_LDBL_NAMESPACE. (std::money_get::__do_get, std::money_put::__do_put, std::num_get::__do_get, std::num_put::__do_put): New specializations. * include/Makefile.am: Conditionally define _GLIBCXX_LONG_DOUBLE_COMPAT in c++config. * include/Makefile.in: Regenerate. * src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT] (_GLIBCXX_LOC_ID, _GLIBCXX_SYNC_ID): Define, use them. * src/compatibility-ldbl.cc: New file. * src/complex_io.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Add compatibility symbols. * src/limits.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise. * src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise. * src/locale-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise. * src/locale-misc-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise. * src/istream-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise. * src/ostream-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise. * src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise. * src/wlocale-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise. * src/compatibility.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise. * config/locale/generic/c_locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise. * config/locale/gnu/c_locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise. * src/Makefile.am (libstdc++-symbol.ver): Append instead of insert in the middle if port specific symbol file requests it. (ldbl_compat_sources): New variable. (sources): Use it. (compatibility-ldbl.lo, compatibility-ldbl.o): New rules. * src/Makefile.in: Rebuilt. * testsuite/testsuite_abi.cc: Recognize GLIBCXX_LDBL_3.4, GLIBCXX_LDBL_3.4.7, CXXABI_LDBL_1.3. Co-Authored-By: Benjamin Kosnik From-SVN: r110725 --- libstdc++-v3/ChangeLog | 59 +++++++++++++ libstdc++-v3/Makefile.in | 2 + libstdc++-v3/config.h.in | 3 + libstdc++-v3/config/abi/pre/gnu.ver | 43 ++++++---- libstdc++-v3/config/locale/generic/c_locale.cc | 9 +- libstdc++-v3/config/locale/gnu/c_locale.cc | 9 +- libstdc++-v3/config/os/gnu-linux/ldbl-extra.ver | 26 ++++++ libstdc++-v3/configure | 88 ++++++++++++++++++- libstdc++-v3/configure.ac | 19 +++++ libstdc++-v3/include/Makefile.am | 6 ++ libstdc++-v3/include/Makefile.in | 8 ++ libstdc++-v3/include/bits/c++config | 20 ++++- libstdc++-v3/include/bits/locale_facets.h | 61 +++++++++++++- libstdc++-v3/include/bits/locale_facets.tcc | 82 +++++++++++++++--- libstdc++-v3/include/bits/localefwd.h | 6 +- libstdc++-v3/libmath/Makefile.in | 2 + libstdc++-v3/libsupc++/Makefile.in | 2 + libstdc++-v3/po/Makefile.in | 2 + libstdc++-v3/src/Makefile.am | 31 +++++-- libstdc++-v3/src/Makefile.in | 52 ++++++++++-- libstdc++-v3/src/compatibility-ldbl.cc | 73 ++++++++++++++++ libstdc++-v3/src/compatibility.cc | 107 +++++++++++++++++++++++- libstdc++-v3/src/complex_io.cc | 19 ++++- libstdc++-v3/src/istream-inst.cc | 17 +++- libstdc++-v3/src/limits.cc | 33 +++++++- libstdc++-v3/src/locale-inst.cc | 50 ++++++++++- libstdc++-v3/src/locale-misc-inst.cc | 18 +++- libstdc++-v3/src/locale.cc | 43 +++++++++- libstdc++-v3/src/ostream-inst.cc | 17 +++- libstdc++-v3/src/wlocale-inst.cc | 44 +++++++++- libstdc++-v3/testsuite/Makefile.in | 2 + libstdc++-v3/testsuite/testsuite_abi.cc | 27 +++--- 32 files changed, 907 insertions(+), 73 deletions(-) create mode 100644 libstdc++-v3/config/os/gnu-linux/ldbl-extra.ver create mode 100644 libstdc++-v3/src/compatibility-ldbl.cc diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 6648933..9341fd1 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,62 @@ +2006-02-07 Jakub Jelinek + Benjamin Kosnik + + * configure.ac (_GLIBCXX_LONG_DOUBLE_COMPAT): New check. + If true, set also port_specific_symbol_files and create + as_symver_specs. + (GLIBCXX_LDBL_COMPAT): New GLIBCXX_CONDITIONAL. + * configure: Rebuilt. + * config.h.in: Rebuilt. + * config/os/gnu-linux/ldbl-extra.ver: New file. + * config/abi/pre/gnu.ver: Make sure no __float128 symbols are + exported. + * include/bits/c++config (_GLIBCXX_LONG_DOUBLE_COMPAT, + _GLIBCXX_LDBL_NAMESPACE, _GLIBCXX_BEGIN_LDBL_NAMESPACE, + _GLIBCXX_END_LDBL_NAMESPACE): Define. + * include/bits/localefwd.h: Use them to conditionally scope facets. + * include/bits/locale_facets.h: Surround std::{money,num}_{get,put} + with _GLIBCXX_BEGIN_LDBL_NAMESPACE and _GLIBCXX_END_LDBL_NAMESPACE. + Surround std::{money,num}_{get,put} + with _GLIBCXX_BEGIN_LDBL_NAMESPACE and _GLIBCXX_END_LDBL_NAMESPACE. + [_GLIBCXX_LONG_DOUBLE_COMPAT] (std::money_get): Add __do_get method. + [_GLIBCXX_LONG_DOUBLE_COMPAT] (std::money_put): Add __do_put method. + [_GLIBCXX_LONG_DOUBLE_COMPAT] (std::num_get): Add __do_get method. + [_GLIBCXX_LONG_DOUBLE_COMPAT] (std::num_put): Add __do_put method. + * include/bits/locale_facets.tcc: Surround std::{money,num}_{get,put} + with _GLIBCXX_BEGIN_LDBL_NAMESPACE and _GLIBCXX_END_LDBL_NAMESPACE. + (std::money_get::__do_get, std::money_put::__do_put, + std::num_get::__do_get, std::num_put::__do_put): New + specializations. + * include/Makefile.am: Conditionally define + _GLIBCXX_LONG_DOUBLE_COMPAT in c++config. + * include/Makefile.in: Regenerate. + * src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT] (_GLIBCXX_LOC_ID, + _GLIBCXX_SYNC_ID): Define, use them. + * src/compatibility-ldbl.cc: New file. + * src/complex_io.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Add compatibility + symbols. + * src/limits.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise. + * src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise. + * src/locale-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise. + * src/locale-misc-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise. + * src/istream-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise. + * src/ostream-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise. + * src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise. + * src/wlocale-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise. + * src/compatibility.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise. + * config/locale/generic/c_locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: + Likewise. + * config/locale/gnu/c_locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: + Likewise. + * src/Makefile.am (libstdc++-symbol.ver): Append instead of + insert in the middle if port specific symbol file requests it. + (ldbl_compat_sources): New variable. + (sources): Use it. + (compatibility-ldbl.lo, compatibility-ldbl.o): New rules. + * src/Makefile.in: Rebuilt. + * testsuite/testsuite_abi.cc: Recognize GLIBCXX_LDBL_3.4, + GLIBCXX_LDBL_3.4.7, CXXABI_LDBL_1.3. + 2006-02-07 Paolo Carlini * include/tr1/hashtable: Trivial formatting fixes. diff --git a/libstdc++-v3/Makefile.in b/libstdc++-v3/Makefile.in index 44686de..78f26a7 100644 --- a/libstdc++-v3/Makefile.in +++ b/libstdc++-v3/Makefile.in @@ -154,6 +154,8 @@ GLIBCXX_C_HEADERS_C_TRUE = @GLIBCXX_C_HEADERS_C_TRUE@ GLIBCXX_HOSTED_FALSE = @GLIBCXX_HOSTED_FALSE@ GLIBCXX_HOSTED_TRUE = @GLIBCXX_HOSTED_TRUE@ GLIBCXX_INCLUDES = @GLIBCXX_INCLUDES@ +GLIBCXX_LDBL_COMPAT_FALSE = @GLIBCXX_LDBL_COMPAT_FALSE@ +GLIBCXX_LDBL_COMPAT_TRUE = @GLIBCXX_LDBL_COMPAT_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ diff --git a/libstdc++-v3/config.h.in b/libstdc++-v3/config.h.in index 61840a5..b112aca 100644 --- a/libstdc++-v3/config.h.in +++ b/libstdc++-v3/config.h.in @@ -661,6 +661,9 @@ /* Define to 1 if a full hosted library is built, or 0 if freestanding. */ #undef _GLIBCXX_HOSTED +/* Define if compatibility should be provided for -mlong-double-64. */ +#undef _GLIBCXX_LONG_DOUBLE_COMPAT + /* Define if ptrdiff_t is int. */ #undef _GLIBCXX_PTRDIFF_T_IS_INT diff --git a/libstdc++-v3/config/abi/pre/gnu.ver b/libstdc++-v3/config/abi/pre/gnu.ver index 831951d..8ea7c64 100644 --- a/libstdc++-v3/config/abi/pre/gnu.ver +++ b/libstdc++-v3/config/abi/pre/gnu.ver @@ -90,7 +90,10 @@ GLIBCXX_3.4 { std::locale::_S_normalize_category*; std::locale::_[T-Za-z]*; # std::[A-Zm-r]*; - std::[A-Zm-n]*; + std::[A-Zm]*; + std::n[^u]*; + std::nu[^m]*; + std::num[^e]*; std::[p-r]*; std::ostrstream*; std::out_of_range*; @@ -254,7 +257,7 @@ GLIBCXX_3.4 { _ZNSi[0-9][a-h]*; _ZNSi[0-9][j-z]*; _ZNSi6ignoreE[il][il]; - _ZNSirsE*; + _ZNSirsE*[^g]; # std::basic_istream _ZNSt13basic_istreamIwSt11char_traitsIwEEC*; @@ -263,7 +266,7 @@ GLIBCXX_3.4 { _ZNSt13basic_istreamIwSt11char_traitsIwEE[0-9][a-h]*; _ZNSt13basic_istreamIwSt11char_traitsIwEE[0-9][j-z]*; _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreE[il][ijlm]; - _ZNSt13basic_istreamIwSt11char_traitsIwEErsE*; + _ZNSt13basic_istreamIwSt11char_traitsIwEErsE*[^g]; # std::istream operators and extractors _ZSt7getlineI[cw]St11char_traitsI[cw]ESaI[cw]EERSt13basic_istream*; @@ -281,7 +284,7 @@ GLIBCXX_3.4 { _ZNKSo6sentrycvbEv; _ZNSo8_M_write*; _ZNSo[0-9][a-z]*; - _ZNSolsE*; + _ZNSolsE*[^g]; # std::basic_ostream _ZNSt13basic_ostreamIwSt11char_traitsIwEEC*; @@ -294,7 +297,7 @@ GLIBCXX_3.4 { _ZNSt13basic_ostreamIwSt11char_traitsIwEE5writeEPKw*; _ZNSt13basic_ostreamIwSt11char_traitsIwEE6sentry*; _ZNSt13basic_ostreamIwSt11char_traitsIwEE8_M_write*; - _ZNSt13basic_ostreamIwSt11char_traitsIwEElsE*; + _ZNSt13basic_ostreamIwSt11char_traitsIwEElsE*[^g]; # std::ostream operators and inserters _ZSt4end[ls]I[cw]St11char_traitsI[cw]EERSt13basic_ostream*; @@ -321,7 +324,7 @@ GLIBCXX_3.4 { _ZNSt8ios_base4InitD*; # bool std::has_facet - _ZSt9has_facet*; + _ZSt9has_facetIS*; # std::num_get _ZNKSt7num_getI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEE*; @@ -335,6 +338,9 @@ GLIBCXX_3.4 { # std::money_put _ZNKSt9money_putI[cw]St19ostreambuf_iteratorI[cw]St11char_traitsI[cw]EEE*; + # std::numeric_limits + _ZNSt14numeric_limitsI[^g]*; + # std::_Rb_tree _ZSt18_Rb_tree_decrementPKSt18_Rb_tree_node_base; _ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base; @@ -362,7 +368,7 @@ GLIBCXX_3.4 { _ZNSt12__basic_fileIcED*; # std::__convert_to_v - _ZSt14__convert_to_v*; + _ZSt14__convert_to_vI[^g]*; # __gnu_cxx::stdio_sync_filebuf _ZTVN9__gnu_cxx18stdio_sync_filebufI[cw]St11char_traitsI[cw]EEE; @@ -455,7 +461,8 @@ GLIBCXX_3.4 { _ZTSN9__gnu_cxx13stdio_filebufI[cw]St11char_traitsI[cw]EEE; # function-scope static objects requires a guard variable. - _ZGVNSt*; + _ZGVNSt[^1]*; + _ZGVNSt1[^7]*; # virtual function thunks _ZThn8_NS*; @@ -661,10 +668,10 @@ GLIBCXX_3.4.7 { _ZNSt11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv; _ZNSt11__gnu_debug19_Safe_sequence_base7_M_swapERS0_; - _ZNSo9_M_insertI*; - _ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertI*; - _ZNSi10_M_extractI*; - _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractI*; + _ZNSo9_M_insertI[^g]*; + _ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertI[^g]*; + _ZNSi10_M_extractI[^g]*; + _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractI[^g]*; } GLIBCXX_3.4.6; @@ -740,9 +747,9 @@ CXXABI_1.3 { _ZTVN10__cxxabiv121__vmi_class_type_infoE; # typeinfo structure (and some names) - _ZTI[a-z]; - _ZTIP[a-z]; - _ZTIPK[a-z]; + _ZTI[a-fh-z]; + _ZTIP[a-fh-z]; + _ZTIPK[a-fh-z]; _ZTIN10__cxxabiv117__array_type_infoE; _ZTIN10__cxxabiv117__class_type_infoE; _ZTIN10__cxxabiv116__enum_type_infoE; @@ -755,9 +762,9 @@ CXXABI_1.3 { _ZTIN10__cxxabiv121__vmi_class_type_infoE; # typeinfo name - _ZTS[a-z]; - _ZTSP[a-z]; - _ZTSPK[a-z]; + _ZTS[a-fh-z]; + _ZTSP[a-fh-z]; + _ZTSPK[a-fh-z]; _ZTSN10__cxxabiv117__array_type_infoE; _ZTSN10__cxxabiv117__class_type_infoE; _ZTSN10__cxxabiv116__enum_type_infoE; diff --git a/libstdc++-v3/config/locale/generic/c_locale.cc b/libstdc++-v3/config/locale/generic/c_locale.cc index 68c3e76..783b196 100644 --- a/libstdc++-v3/config/locale/generic/c_locale.cc +++ b/libstdc++-v3/config/locale/generic/c_locale.cc @@ -1,6 +1,6 @@ // Wrapper for underlying C-language localization -*- C++ -*- -// Copyright (C) 2001, 2002, 2003, 2004, 2005 +// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -171,3 +171,10 @@ _GLIBCXX_BEGIN_NAMESPACE(std) const char* const* const locale::_S_categories = __gnu_cxx::category_names; _GLIBCXX_END_NAMESPACE + +// XXX GLIBCXX_ABI Deprecated +#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT +#define _GLIBCXX_LDBL_COMPAT(dbl, ldbl) \ + extern "C" void ldbl (void) __attribute__ ((alias (#dbl))) +_GLIBCXX_LDBL_COMPAT(_ZSt14__convert_to_vIdEvPKcRT_RSt12_Ios_IostateRKPi, _ZSt14__convert_to_vIeEvPKcRT_RSt12_Ios_IostateRKPi); +#endif // _GLIBCXX_LONG_DOUBLE_COMPAT diff --git a/libstdc++-v3/config/locale/gnu/c_locale.cc b/libstdc++-v3/config/locale/gnu/c_locale.cc index 4025fb1..8a42638 100644 --- a/libstdc++-v3/config/locale/gnu/c_locale.cc +++ b/libstdc++-v3/config/locale/gnu/c_locale.cc @@ -1,6 +1,6 @@ // Wrapper for underlying C-language localization -*- C++ -*- -// Copyright (C) 2001, 2002, 2003, 2004, 2005 +// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -135,3 +135,10 @@ _GLIBCXX_BEGIN_NAMESPACE(std) const char* const* const locale::_S_categories = __gnu_cxx::category_names; _GLIBCXX_END_NAMESPACE + +// XXX GLIBCXX_ABI Deprecated +#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT +#define _GLIBCXX_LDBL_COMPAT(dbl, ldbl) \ + extern "C" void ldbl (void) __attribute__ ((alias (#dbl))) +_GLIBCXX_LDBL_COMPAT(_ZSt14__convert_to_vIdEvPKcRT_RSt12_Ios_IostateRKP15__locale_struct, _ZSt14__convert_to_vIeEvPKcRT_RSt12_Ios_IostateRKP15__locale_struct); +#endif // _GLIBCXX_LONG_DOUBLE_COMPAT diff --git a/libstdc++-v3/config/os/gnu-linux/ldbl-extra.ver b/libstdc++-v3/config/os/gnu-linux/ldbl-extra.ver new file mode 100644 index 0000000..d1e09ec --- /dev/null +++ b/libstdc++-v3/config/os/gnu-linux/ldbl-extra.ver @@ -0,0 +1,26 @@ +# Appended to version file. + +GLIBCXX_LDBL_3.4 { + _ZNSt14numeric_limitsIg*; + _ZNSirsERg; + _ZNSolsEg; + _ZNSt13basic_istreamIwSt11char_traitsIwEErsERg; + _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEg; + _ZSt14__convert_to_vIgEvPKcRT_RSt12_Ios_IostateRKP*; + _ZStlsIg[cw]St11char_traitsI[cw]EERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E; + _ZStrsIg[cw]St11char_traitsI[cw]EERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E; + *__gnu_cxx_ldbl128*; +}; + +GLIBCXX_LDBL_3.4.7 { + _ZNSi10_M_extractIgEERSiRT_; + _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIgEERS2_RT_; + _ZNSo9_M_insertIgEERSoT_; + _ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertIgEERS2_T_; +} GLIBCXX_LDBL_3.4; + +CXXABI_LDBL_1.3 { + _ZT[IS]g; + _ZT[IS]Pg; + _ZT[IS]PKg; +}; diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure index 5ed6595..2f8cea5 100755 --- a/libstdc++-v3/configure +++ b/libstdc++-v3/configure @@ -309,7 +309,7 @@ ac_includes_default="\ # include #endif" -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS libtool_VERSION multi_basedir build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar glibcxx_builddir glibcxx_srcdir toplevel_srcdir CC ac_ct_CC EXEEXT OBJEXT CXX ac_ct_CXX CFLAGS CXXFLAGS LN_S AS ac_ct_AS AR ac_ct_AR RANLIB ac_ct_RANLIB MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBTOOL CXXCPP CPPFLAGS enable_shared enable_static GLIBCXX_HOSTED_TRUE GLIBCXX_HOSTED_FALSE GLIBCXX_BUILD_PCH_TRUE GLIBCXX_BUILD_PCH_FALSE glibcxx_PCHFLAGS CSTDIO_H BASIC_FILE_H BASIC_FILE_CC CPP EGREP check_msgfmt glibcxx_MOFILES glibcxx_POFILES glibcxx_localedir USE_NLS CLOCALE_H CMESSAGES_H CCODECVT_CC CCOLLATE_CC CCTYPE_CC CMESSAGES_CC CMONEY_CC CNUMERIC_CC CTIME_H CTIME_CC CLOCALE_CC CLOCALE_INTERNAL_H ALLOCATOR_H ALLOCATOR_NAME C_INCLUDE_DIR GLIBCXX_C_HEADERS_C_TRUE GLIBCXX_C_HEADERS_C_FALSE GLIBCXX_C_HEADERS_C_STD_TRUE GLIBCXX_C_HEADERS_C_STD_FALSE GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE DEBUG_FLAGS GLIBCXX_BUILD_DEBUG_TRUE GLIBCXX_BUILD_DEBUG_FALSE EXTRA_CXX_FLAGS glibcxx_thread_h WERROR SECTION_FLAGS SECTION_LDFLAGS OPT_LDFLAGS LIBMATHOBJS LIBICONV SYMVER_FILE port_specific_symbol_files ENABLE_SYMVERS_TRUE ENABLE_SYMVERS_FALSE ENABLE_SYMVERS_GNU_TRUE ENABLE_SYMVERS_GNU_FALSE ENABLE_SYMVERS_GNU_NAMESPACE_TRUE ENABLE_SYMVERS_GNU_NAMESPACE_FALSE ENABLE_SYMVERS_DARWIN_TRUE ENABLE_SYMVERS_DARWIN_FALSE baseline_dir ATOMICITY_SRCDIR ATOMIC_WORD_SRCDIR CPU_DEFINES_SRCDIR ABI_TWEAKS_SRCDIR OS_INC_SRCDIR glibcxx_prefixdir gxx_include_dir glibcxx_toolexecdir glibcxx_toolexeclibdir GLIBCXX_INCLUDES TOPLEVEL_INCLUDES OPTIMIZE_CXXFLAGS WARN_FLAGS LIBSUPCXX_PICFLAGS LIBOBJS LTLIBOBJS' +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS libtool_VERSION multi_basedir build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar glibcxx_builddir glibcxx_srcdir toplevel_srcdir CC ac_ct_CC EXEEXT OBJEXT CXX ac_ct_CXX CFLAGS CXXFLAGS LN_S AS ac_ct_AS AR ac_ct_AR RANLIB ac_ct_RANLIB MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBTOOL CXXCPP CPPFLAGS enable_shared enable_static GLIBCXX_HOSTED_TRUE GLIBCXX_HOSTED_FALSE GLIBCXX_BUILD_PCH_TRUE GLIBCXX_BUILD_PCH_FALSE glibcxx_PCHFLAGS CSTDIO_H BASIC_FILE_H BASIC_FILE_CC CPP EGREP check_msgfmt glibcxx_MOFILES glibcxx_POFILES glibcxx_localedir USE_NLS CLOCALE_H CMESSAGES_H CCODECVT_CC CCOLLATE_CC CCTYPE_CC CMESSAGES_CC CMONEY_CC CNUMERIC_CC CTIME_H CTIME_CC CLOCALE_CC CLOCALE_INTERNAL_H ALLOCATOR_H ALLOCATOR_NAME C_INCLUDE_DIR GLIBCXX_C_HEADERS_C_TRUE GLIBCXX_C_HEADERS_C_FALSE GLIBCXX_C_HEADERS_C_STD_TRUE GLIBCXX_C_HEADERS_C_STD_FALSE GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE DEBUG_FLAGS GLIBCXX_BUILD_DEBUG_TRUE GLIBCXX_BUILD_DEBUG_FALSE EXTRA_CXX_FLAGS glibcxx_thread_h WERROR SECTION_FLAGS SECTION_LDFLAGS OPT_LDFLAGS LIBMATHOBJS LIBICONV SYMVER_FILE port_specific_symbol_files ENABLE_SYMVERS_TRUE ENABLE_SYMVERS_FALSE ENABLE_SYMVERS_GNU_TRUE ENABLE_SYMVERS_GNU_FALSE ENABLE_SYMVERS_GNU_NAMESPACE_TRUE ENABLE_SYMVERS_GNU_NAMESPACE_FALSE ENABLE_SYMVERS_DARWIN_TRUE ENABLE_SYMVERS_DARWIN_FALSE GLIBCXX_LDBL_COMPAT_TRUE GLIBCXX_LDBL_COMPAT_FALSE baseline_dir ATOMICITY_SRCDIR ATOMIC_WORD_SRCDIR CPU_DEFINES_SRCDIR ABI_TWEAKS_SRCDIR OS_INC_SRCDIR glibcxx_prefixdir gxx_include_dir glibcxx_toolexecdir glibcxx_toolexeclibdir GLIBCXX_INCLUDES TOPLEVEL_INCLUDES OPTIMIZE_CXXFLAGS WARN_FLAGS LIBSUPCXX_PICFLAGS LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. @@ -89068,6 +89068,72 @@ echo "$as_me:$LINENO: result: $glibcxx_ptrdiff_t_is_i" >&5 echo "${ECHO_T}$glibcxx_ptrdiff_t_is_i" >&6 +ac_ldbl_compat=no +case "$target" in + powerpc*-*-*gnu* | \ + sparc*-*-linux* | \ + s390*-*-linux* | \ + alpha*-*-linux*) + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + +#if !defined __LONG_DOUBLE_128__ || (defined(__sparc__) && defined(__arch64__)) +#error no need for long double compatibility +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_ldbl_compat=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_ldbl_compat=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + if test "$ac_ldbl_compat" = yes; then + +cat >>confdefs.h <<\_ACEOF +#define _GLIBCXX_LONG_DOUBLE_COMPAT 1 +_ACEOF + + port_specific_symbol_files="\$(top_srcdir)/config/os/gnu-linux/ldbl-extra.ver" + fi +esac + + # This depends on GLIBCXX_ENABLE_SYMVERS and GLIBCXX_IS_NATIVE. if $GLIBCXX_IS_NATIVE ; then @@ -89942,6 +90008,17 @@ fi +if test $ac_ldbl_compat = yes; then + GLIBCXX_LDBL_COMPAT_TRUE= + GLIBCXX_LDBL_COMPAT_FALSE='#' +else + GLIBCXX_LDBL_COMPAT_TRUE='#' + GLIBCXX_LDBL_COMPAT_FALSE= +fi + + + + cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure @@ -90311,6 +90388,13 @@ echo "$as_me: error: conditional \"ENABLE_SYMVERS_DARWIN\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi +if test -z "${GLIBCXX_LDBL_COMPAT_TRUE}" && test -z "${GLIBCXX_LDBL_COMPAT_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"GLIBCXX_LDBL_COMPAT\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"GLIBCXX_LDBL_COMPAT\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files @@ -90985,6 +91069,8 @@ s,@ENABLE_SYMVERS_GNU_NAMESPACE_TRUE@,$ENABLE_SYMVERS_GNU_NAMESPACE_TRUE,;t t s,@ENABLE_SYMVERS_GNU_NAMESPACE_FALSE@,$ENABLE_SYMVERS_GNU_NAMESPACE_FALSE,;t t s,@ENABLE_SYMVERS_DARWIN_TRUE@,$ENABLE_SYMVERS_DARWIN_TRUE,;t t s,@ENABLE_SYMVERS_DARWIN_FALSE@,$ENABLE_SYMVERS_DARWIN_FALSE,;t t +s,@GLIBCXX_LDBL_COMPAT_TRUE@,$GLIBCXX_LDBL_COMPAT_TRUE,;t t +s,@GLIBCXX_LDBL_COMPAT_FALSE@,$GLIBCXX_LDBL_COMPAT_FALSE,;t t s,@baseline_dir@,$baseline_dir,;t t s,@ATOMICITY_SRCDIR@,$ATOMICITY_SRCDIR,;t t s,@ATOMIC_WORD_SRCDIR@,$ATOMIC_WORD_SRCDIR,;t t diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac index f14e239..07b2c17 100644 --- a/libstdc++-v3/configure.ac +++ b/libstdc++-v3/configure.ac @@ -284,6 +284,25 @@ fi # This depends on GLIBCXX CHECK_LINKER_FEATURES, but without it assumes no. GLIBCXX_ENABLE_SYMVERS([yes]) +ac_ldbl_compat=no +case "$target" in + powerpc*-*-*gnu* | \ + sparc*-*-linux* | \ + s390*-*-linux* | \ + alpha*-*-linux*) + AC_TRY_COMPILE(, [ +#if !defined __LONG_DOUBLE_128__ || (defined(__sparc__) && defined(__arch64__)) +#error no need for long double compatibility +#endif + ], [ac_ldbl_compat=yes], [ac_ldbl_compat=no]) + if test "$ac_ldbl_compat" = yes; then + AC_DEFINE([_GLIBCXX_LONG_DOUBLE_COMPAT],1, + [Define if compatibility should be provided for -mlong-double-64.]) + port_specific_symbol_files="\$(top_srcdir)/config/os/gnu-linux/ldbl-extra.ver" + fi +esac +GLIBCXX_CONDITIONAL(GLIBCXX_LDBL_COMPAT, test $ac_ldbl_compat = yes) + # This depends on GLIBCXX_ENABLE_SYMVERS and GLIBCXX_IS_NATIVE. GLIBCXX_CONFIGURE_TESTSUITE diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am index 4f124ab..23b94a3 100644 --- a/libstdc++-v3/include/Makefile.am +++ b/libstdc++-v3/include/Makefile.am @@ -865,13 +865,19 @@ ${host_builddir}/c++config.h: ${CONFIG_HEADER} \ stamp-namespace-version @date=`cat ${toplevel_srcdir}/gcc/DATESTAMP` ;\ nsa_version=`cat stamp-namespace-version` ;\ + ldbl_compat='' ;\ + grep "^[ ]*#[ ]*define[ ][ ]*_GLIBCXX_LONG_DOUBLE_COMPAT[ ][ ]*1[ ]*$$" \ + ${CONFIG_HEADER} > /dev/null 2>&1 \ + && ldbl_compat='s,^#undef _GLIBCXX_LONG_DOUBLE_COMPAT$$,#define _GLIBCXX_LONG_DOUBLE_COMPAT 1,' ;\ sed -e "s,define __GLIBCXX__,define __GLIBCXX__ $$date," \ -e "s,define _GLIBCXX_NAMESPACE_ASSOCIATION_VERSION, define _GLIBCXX_NAMESPACE_ASSOCIATION_VERSION $$nsa_version," \ + -e "$$ldbl_compat" \ < ${glibcxx_srcdir}/include/bits/c++config > $@ ;\ sed -e 's/HAVE_/_GLIBCXX_HAVE_/g' \ -e 's/PACKAGE/_GLIBCXX_PACKAGE/g' \ -e 's/VERSION/_GLIBCXX_VERSION/g' \ -e 's/WORDS_/_GLIBCXX_WORDS_/g' \ + -e '/[ ]_GLIBCXX_LONG_DOUBLE_COMPAT[ ]/d' \ < ${CONFIG_HEADER} >> $@ ;\ echo "" >> $@ ;\ echo "#endif // _CXXCONFIG_" >> $@ diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in index d32cc11..c04a598 100644 --- a/libstdc++-v3/include/Makefile.in +++ b/libstdc++-v3/include/Makefile.in @@ -122,6 +122,8 @@ GLIBCXX_C_HEADERS_C_TRUE = @GLIBCXX_C_HEADERS_C_TRUE@ GLIBCXX_HOSTED_FALSE = @GLIBCXX_HOSTED_FALSE@ GLIBCXX_HOSTED_TRUE = @GLIBCXX_HOSTED_TRUE@ GLIBCXX_INCLUDES = @GLIBCXX_INCLUDES@ +GLIBCXX_LDBL_COMPAT_FALSE = @GLIBCXX_LDBL_COMPAT_FALSE@ +GLIBCXX_LDBL_COMPAT_TRUE = @GLIBCXX_LDBL_COMPAT_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ @@ -1243,13 +1245,19 @@ ${host_builddir}/c++config.h: ${CONFIG_HEADER} \ stamp-namespace-version @date=`cat ${toplevel_srcdir}/gcc/DATESTAMP` ;\ nsa_version=`cat stamp-namespace-version` ;\ + ldbl_compat='' ;\ + grep "^[ ]*#[ ]*define[ ][ ]*_GLIBCXX_LONG_DOUBLE_COMPAT[ ][ ]*1[ ]*$$" \ + ${CONFIG_HEADER} > /dev/null 2>&1 \ + && ldbl_compat='s,^#undef _GLIBCXX_LONG_DOUBLE_COMPAT$$,#define _GLIBCXX_LONG_DOUBLE_COMPAT 1,' ;\ sed -e "s,define __GLIBCXX__,define __GLIBCXX__ $$date," \ -e "s,define _GLIBCXX_NAMESPACE_ASSOCIATION_VERSION, define _GLIBCXX_NAMESPACE_ASSOCIATION_VERSION $$nsa_version," \ + -e "$$ldbl_compat" \ < ${glibcxx_srcdir}/include/bits/c++config > $@ ;\ sed -e 's/HAVE_/_GLIBCXX_HAVE_/g' \ -e 's/PACKAGE/_GLIBCXX_PACKAGE/g' \ -e 's/VERSION/_GLIBCXX_VERSION/g' \ -e 's/WORDS_/_GLIBCXX_WORDS_/g' \ + -e '/[ ]_GLIBCXX_LONG_DOUBLE_COMPAT[ ]/d' \ < ${CONFIG_HEADER} >> $@ ;\ echo "" >> $@ ;\ echo "#endif // _CXXCONFIG_" >> $@ diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config index 31a60a7..a6a154a 100644 --- a/libstdc++-v3/include/bits/c++config +++ b/libstdc++-v3/include/bits/c++config @@ -1,6 +1,6 @@ // Predefined symbols and macros -*- C++ -*- -// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -129,6 +129,24 @@ namespace std #endif #endif +/* Define if compatibility should be provided for -mlong-double-64. */ +#undef _GLIBCXX_LONG_DOUBLE_COMPAT + +// XXX GLIBCXX_ABI Deprecated +// Namespace associations for long double 128 mode. +_GLIBCXX_BEGIN_NAMESPACE(std) +#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__ +# define _GLIBCXX_LDBL_NAMESPACE __gnu_cxx_ldbl128:: +# define _GLIBCXX_BEGIN_LDBL_NAMESPACE namespace __gnu_cxx_ldbl128 { +# define _GLIBCXX_END_LDBL_NAMESPACE } + namespace __gnu_cxx_ldbl128 { } + using namespace __gnu_cxx_ldbl128 __attribute__((__strong__)); +#else +# define _GLIBCXX_LDBL_NAMESPACE +# define _GLIBCXX_BEGIN_LDBL_NAMESPACE +# define _GLIBCXX_END_LDBL_NAMESPACE +#endif +_GLIBCXX_END_NAMESPACE // Allow use of "export template." This is currently not a feature // that g++ supports. diff --git a/libstdc++-v3/include/bits/locale_facets.h b/libstdc++-v3/include/bits/locale_facets.h index 339bb53..538fa51 100644 --- a/libstdc++-v3/include/bits/locale_facets.h +++ b/libstdc++-v3/include/bits/locale_facets.h @@ -1,6 +1,6 @@ // Locale support -*- C++ -*- -// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -1910,6 +1910,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ~numpunct_byname() { } }; +_GLIBCXX_BEGIN_LDBL_NAMESPACE /** * @brief Facet for parsing number strings. * @@ -2176,13 +2177,27 @@ _GLIBCXX_BEGIN_NAMESPACE(std) do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err, double&) const; + // XXX GLIBCXX_ABI Deprecated +#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__ + virtual iter_type + __do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err, + double&) const; +#else virtual iter_type do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err, long double&) const; +#endif virtual iter_type do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err, void*&) const; + + // XXX GLIBCXX_ABI Deprecated +#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__ + virtual iter_type + do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err, + long double&) const; +#endif //@} }; @@ -2438,17 +2453,30 @@ _GLIBCXX_BEGIN_NAMESPACE(std) virtual iter_type do_put(iter_type, ios_base&, char_type __fill, double __v) const; + // XXX GLIBCXX_ABI Deprecated +#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__ + virtual iter_type + __do_put(iter_type, ios_base&, char_type __fill, double __v) const; +#else virtual iter_type do_put(iter_type, ios_base&, char_type __fill, long double __v) const; +#endif virtual iter_type do_put(iter_type, ios_base&, char_type __fill, const void* __v) const; + + // XXX GLIBCXX_ABI Deprecated +#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__ + virtual iter_type + do_put(iter_type, ios_base&, char_type __fill, long double __v) const; +#endif //@} }; template locale::id num_put<_CharT, _OutIter>::id; +_GLIBCXX_END_LDBL_NAMESPACE /** * @brief Facet for localized string comparison. @@ -3953,6 +3981,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) template const bool moneypunct_byname<_CharT, _Intl>::intl; +_GLIBCXX_BEGIN_LDBL_NAMESPACE /** * @brief Facet for parsing monetary amounts. * @@ -4064,9 +4093,16 @@ _GLIBCXX_BEGIN_NAMESPACE(std) * value. This function is a hook for derived classes to change the * value returned. @see get() for details. */ + // XXX GLIBCXX_ABI Deprecated +#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__ + virtual iter_type + __do_get(iter_type __s, iter_type __end, bool __intl, ios_base& __io, + ios_base::iostate& __err, double& __units) const; +#else virtual iter_type do_get(iter_type __s, iter_type __end, bool __intl, ios_base& __io, ios_base::iostate& __err, long double& __units) const; +#endif /** * @brief Read and parse a monetary value. @@ -4079,6 +4115,13 @@ _GLIBCXX_BEGIN_NAMESPACE(std) do_get(iter_type __s, iter_type __end, bool __intl, ios_base& __io, ios_base::iostate& __err, string_type& __digits) const; + // XXX GLIBCXX_ABI Deprecated +#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__ + virtual iter_type + do_get(iter_type __s, iter_type __end, bool __intl, ios_base& __io, + ios_base::iostate& __err, long double& __units) const; +#endif + template iter_type _M_extract(iter_type __s, iter_type __end, ios_base& __io, @@ -4191,9 +4234,16 @@ _GLIBCXX_BEGIN_NAMESPACE(std) * @param units Place to store result of parsing. * @return Iterator after writing. */ + // XXX GLIBCXX_ABI Deprecated +#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__ + virtual iter_type + __do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill, + double __units) const; +#else virtual iter_type do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill, long double __units) const; +#endif /** * @brief Format and output a monetary value. @@ -4217,6 +4267,13 @@ _GLIBCXX_BEGIN_NAMESPACE(std) do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill, const string_type& __digits) const; + // XXX GLIBCXX_ABI Deprecated +#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__ + virtual iter_type + do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill, + long double __units) const; +#endif + template iter_type _M_insert(iter_type __s, ios_base& __io, char_type __fill, @@ -4226,6 +4283,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std) template locale::id money_put<_CharT, _OutIter>::id; +_GLIBCXX_END_LDBL_NAMESPACE + /** * @brief Messages facet base class providing catalog typedef. */ diff --git a/libstdc++-v3/include/bits/locale_facets.tcc b/libstdc++-v3/include/bits/locale_facets.tcc index 9d337e9..5ba955c 100644 --- a/libstdc++-v3/include/bits/locale_facets.tcc +++ b/libstdc++-v3/include/bits/locale_facets.tcc @@ -1,6 +1,6 @@ // Locale support -*- C++ -*- -// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -272,6 +272,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std) __verify_grouping(const char* __grouping, size_t __grouping_size, const string& __grouping_tmp); +_GLIBCXX_BEGIN_LDBL_NAMESPACE + template _InIter num_get<_CharT, _InIter>:: @@ -446,6 +448,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std) return __beg; } +_GLIBCXX_END_LDBL_NAMESPACE + template struct __to_unsigned_type { typedef _ValueT __type; }; @@ -460,6 +464,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std) { typedef unsigned long long __type; }; #endif +_GLIBCXX_BEGIN_LDBL_NAMESPACE + template template _InIter @@ -772,6 +778,21 @@ _GLIBCXX_BEGIN_NAMESPACE(std) return __beg; } +#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__ + template + _InIter + num_get<_CharT, _InIter>:: + __do_get(iter_type __beg, iter_type __end, ios_base& __io, + ios_base::iostate& __err, double& __v) const + { + string __xtrc; + __xtrc.reserve(32); + __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc); + std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale()); + return __beg; + } +#endif + template _InIter num_get<_CharT, _InIter>:: @@ -822,6 +843,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std) __len = static_cast(__w); } +_GLIBCXX_END_LDBL_NAMESPACE + // Forwarding functions to peel signed from unsigned integer types and // either cast or compute the absolute value for the former, depending // on __basefield. @@ -911,6 +934,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std) return __bufend - __buf; } +_GLIBCXX_BEGIN_LDBL_NAMESPACE + template void num_put<_CharT, _OutIter>:: @@ -1233,6 +1258,14 @@ _GLIBCXX_BEGIN_NAMESPACE(std) do_put(iter_type __s, ios_base& __io, char_type __fill, double __v) const { return _M_insert_float(__s, __io, __fill, char(), __v); } +#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__ + template + _OutIter + num_put<_CharT, _OutIter>:: + __do_put(iter_type __s, ios_base& __io, char_type __fill, double __v) const + { return _M_insert_float(__s, __io, __fill, char(), __v); } +#endif + template _OutIter num_put<_CharT, _OutIter>:: @@ -1474,6 +1507,23 @@ _GLIBCXX_BEGIN_NAMESPACE(std) return __beg; } +#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__ + template + _InIter + money_get<_CharT, _InIter>:: + __do_get(iter_type __beg, iter_type __end, bool __intl, ios_base& __io, + ios_base::iostate& __err, double& __units) const + { + string __str; + if (__intl) + __beg = _M_extract(__beg, __end, __io, __err, __str); + else + __beg = _M_extract(__beg, __end, __io, __err, __str); + std::__convert_to_v(__str.c_str(), __units, __err, _S_get_c_locale()); + return __beg; + } +#endif + template _InIter money_get<_CharT, _InIter>:: @@ -1678,7 +1728,18 @@ _GLIBCXX_BEGIN_NAMESPACE(std) __io.width(0); return __s; } - + +#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__ + template + _OutIter + money_put<_CharT, _OutIter>:: + __do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill, + double __units) const + { + return this->do_put(__s, __intl, __io, __fill, (long double) __units); + } +#endif + template _OutIter money_put<_CharT, _OutIter>:: @@ -1726,6 +1787,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) { return __intl ? _M_insert(__s, __io, __fill, __digits) : _M_insert(__s, __io, __fill, __digits); } +_GLIBCXX_END_LDBL_NAMESPACE // NB: Not especially useful. Without an ios_base object or some // kind of locale reference, we are left clawing at the air where @@ -2511,12 +2573,12 @@ _GLIBCXX_BEGIN_NAMESPACE(std) extern template class moneypunct; extern template class moneypunct_byname; extern template class moneypunct_byname; - extern template class money_get; - extern template class money_put; + extern template class _GLIBCXX_LDBL_NAMESPACE money_get; + extern template class _GLIBCXX_LDBL_NAMESPACE money_put; extern template class numpunct; extern template class numpunct_byname; - extern template class num_get; - extern template class num_put; + extern template class _GLIBCXX_LDBL_NAMESPACE num_get; + extern template class _GLIBCXX_LDBL_NAMESPACE num_put; extern template class __timepunct; extern template class time_put; extern template class time_put_byname; @@ -2638,12 +2700,12 @@ _GLIBCXX_BEGIN_NAMESPACE(std) extern template class moneypunct; extern template class moneypunct_byname; extern template class moneypunct_byname; - extern template class money_get; - extern template class money_put; + extern template class _GLIBCXX_LDBL_NAMESPACE money_get; + extern template class _GLIBCXX_LDBL_NAMESPACE money_put; extern template class numpunct; extern template class numpunct_byname; - extern template class num_get; - extern template class num_put; + extern template class _GLIBCXX_LDBL_NAMESPACE num_get; + extern template class _GLIBCXX_LDBL_NAMESPACE num_put; extern template class __timepunct; extern template class time_put; extern template class time_put_byname; diff --git a/libstdc++-v3/include/bits/localefwd.h b/libstdc++-v3/include/bits/localefwd.h index 94cafb2..2290fbc 100644 --- a/libstdc++-v3/include/bits/localefwd.h +++ b/libstdc++-v3/include/bits/localefwd.h @@ -1,6 +1,6 @@ // Locale support -*- C++ -*- -// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005 +// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -129,10 +129,12 @@ _GLIBCXX_BEGIN_NAMESPACE(std) class codecvt_byname; // 22.2.2 and 22.2.3 numeric +_GLIBCXX_BEGIN_LDBL_NAMESPACE template > class num_get; template > class num_put; +_GLIBCXX_END_LDBL_NAMESPACE template class numpunct; template class numpunct_byname; @@ -155,10 +157,12 @@ _GLIBCXX_BEGIN_NAMESPACE(std) // 22.2.6 money class money_base; +_GLIBCXX_BEGIN_LDBL_NAMESPACE template > class money_get; template > class money_put; +_GLIBCXX_END_LDBL_NAMESPACE template class moneypunct; template diff --git a/libstdc++-v3/libmath/Makefile.in b/libstdc++-v3/libmath/Makefile.in index 74aeac5..c14bf14 100644 --- a/libstdc++-v3/libmath/Makefile.in +++ b/libstdc++-v3/libmath/Makefile.in @@ -137,6 +137,8 @@ GLIBCXX_C_HEADERS_C_TRUE = @GLIBCXX_C_HEADERS_C_TRUE@ GLIBCXX_HOSTED_FALSE = @GLIBCXX_HOSTED_FALSE@ GLIBCXX_HOSTED_TRUE = @GLIBCXX_HOSTED_TRUE@ GLIBCXX_INCLUDES = @GLIBCXX_INCLUDES@ +GLIBCXX_LDBL_COMPAT_FALSE = @GLIBCXX_LDBL_COMPAT_FALSE@ +GLIBCXX_LDBL_COMPAT_TRUE = @GLIBCXX_LDBL_COMPAT_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ diff --git a/libstdc++-v3/libsupc++/Makefile.in b/libstdc++-v3/libsupc++/Makefile.in index 0b132b0..5ae37a0 100644 --- a/libstdc++-v3/libsupc++/Makefile.in +++ b/libstdc++-v3/libsupc++/Makefile.in @@ -178,6 +178,8 @@ GLIBCXX_C_HEADERS_C_TRUE = @GLIBCXX_C_HEADERS_C_TRUE@ GLIBCXX_HOSTED_FALSE = @GLIBCXX_HOSTED_FALSE@ GLIBCXX_HOSTED_TRUE = @GLIBCXX_HOSTED_TRUE@ GLIBCXX_INCLUDES = @GLIBCXX_INCLUDES@ +GLIBCXX_LDBL_COMPAT_FALSE = @GLIBCXX_LDBL_COMPAT_FALSE@ +GLIBCXX_LDBL_COMPAT_TRUE = @GLIBCXX_LDBL_COMPAT_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ diff --git a/libstdc++-v3/po/Makefile.in b/libstdc++-v3/po/Makefile.in index 053229c..3a91097 100644 --- a/libstdc++-v3/po/Makefile.in +++ b/libstdc++-v3/po/Makefile.in @@ -122,6 +122,8 @@ GLIBCXX_C_HEADERS_C_TRUE = @GLIBCXX_C_HEADERS_C_TRUE@ GLIBCXX_HOSTED_FALSE = @GLIBCXX_HOSTED_FALSE@ GLIBCXX_HOSTED_TRUE = @GLIBCXX_HOSTED_TRUE@ GLIBCXX_INCLUDES = @GLIBCXX_INCLUDES@ +GLIBCXX_LDBL_COMPAT_FALSE = @GLIBCXX_LDBL_COMPAT_FALSE@ +GLIBCXX_LDBL_COMPAT_TRUE = @GLIBCXX_LDBL_COMPAT_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ diff --git a/libstdc++-v3/src/Makefile.am b/libstdc++-v3/src/Makefile.am index 973e75f..b3ada6a 100644 --- a/libstdc++-v3/src/Makefile.am +++ b/libstdc++-v3/src/Makefile.am @@ -33,10 +33,15 @@ libstdc++-symbols.ver: ${glibcxx_srcdir}/$(SYMVER_FILE) \ $(port_specific_symbol_files) cp ${glibcxx_srcdir}/$(SYMVER_FILE) ./libstdc++-symbols.ver if test "x$(port_specific_symbol_files)" != x; then \ - sed -n '1,/DO NOT DELETE/p' $@ > tmp.top; \ - sed -n '/DO NOT DELETE/,$$p' $@ > tmp.bottom; \ - cat tmp.top $(port_specific_symbol_files) tmp.bottom > $@; \ - rm tmp.top tmp.bottom; \ + if grep '^# Appended to version file.' \ + $(port_specific_symbol_files) /dev/null > /dev/null 2>&1; then \ + cat $(port_specific_symbol_files) >> $@; \ + else \ + sed -n '1,/DO NOT DELETE/p' $@ > tmp.top; \ + sed -n '/DO NOT DELETE/,$$p' $@ > tmp.bottom; \ + cat tmp.top $(port_specific_symbol_files) tmp.bottom > $@; \ + rm tmp.top tmp.bottom; \ + fi; \ fi if ENABLE_SYMVERS_GNU @@ -115,6 +120,12 @@ c++locale.cc: ${glibcxx_srcdir}/$(CLOCALE_CC) basic_file.cc: ${glibcxx_srcdir}/$(BASIC_FILE_CC) $(LN_S) ${glibcxx_srcdir}/$(BASIC_FILE_CC) ./$@ || true +if GLIBCXX_LDBL_COMPAT +ldbl_compat_sources = compatibility-ldbl.cc +else +ldbl_compat_sources = +endif + # Sources present in the src directory. sources = \ bitmap_allocator.cc \ @@ -162,7 +173,8 @@ sources = \ wlocale-inst.cc \ wstring-inst.cc \ ${host_sources} \ - ${host_sources_extra} + ${host_sources_extra} \ + ${ldbl_compat_sources} VPATH = $(top_srcdir)/src:$(top_srcdir) @@ -193,6 +205,15 @@ concept-inst.lo: concept-inst.cc concept-inst.o: concept-inst.cc $(CXXCOMPILE) -D_GLIBCXX_CONCEPT_CHECKS -fimplicit-templates -c $< +if GLIBCXX_LDBL_COMPAT +# Use special rules for compatibility-ldbl.cc compilation, as we need to +# pass -mlong-double-64. +compatibility-ldbl.lo: compatibility-ldbl.cc + $(LTCXXCOMPILE) -mlong-double-64 -c $< +compatibility-ldbl.o: compatibility-ldbl.cc + $(CXXCOMPILE) -mlong-double-64 -c $< +endif + # AM_CXXFLAGS needs to be in each subdirectory so that it can be # modified in a per-library or per-sub-library way. Need to manually # set this option because CONFIG_CXXFLAGS has to be after diff --git a/libstdc++-v3/src/Makefile.in b/libstdc++-v3/src/Makefile.in index 1a99a63..c6e412e 100644 --- a/libstdc++-v3/src/Makefile.in +++ b/libstdc++-v3/src/Makefile.in @@ -59,11 +59,27 @@ am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(toolexeclibdir)" toolexeclibLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(toolexeclib_LTLIBRARIES) +am__libstdc___la_SOURCES_DIST = bitmap_allocator.cc pool_allocator.cc \ + mt_allocator.cc codecvt.cc compatibility.cc complex_io.cc \ + ctype.cc debug.cc debug_list.cc functexcept.cc \ + globals_locale.cc globals_io.cc ios.cc ios_failure.cc \ + ios_init.cc ios_locale.cc limits.cc list.cc locale.cc \ + locale_init.cc locale_facets.cc localename.cc stdexcept.cc \ + strstream.cc tree.cc allocator-inst.cc concept-inst.cc \ + fstream-inst.cc ext-inst.cc ios-inst.cc iostream-inst.cc \ + istream-inst.cc istream.cc locale-inst.cc locale-misc-inst.cc \ + misc-inst.cc ostream-inst.cc sstream-inst.cc streambuf-inst.cc \ + streambuf.cc string-inst.cc valarray-inst.cc wlocale-inst.cc \ + wstring-inst.cc atomicity.cc codecvt_members.cc \ + collate_members.cc ctype_members.cc messages_members.cc \ + monetary_members.cc numeric_members.cc time_members.cc \ + basic_file.cc c++locale.cc compatibility-ldbl.cc am__objects_1 = atomicity.lo codecvt_members.lo collate_members.lo \ ctype_members.lo messages_members.lo monetary_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 \ +@GLIBCXX_LDBL_COMPAT_TRUE@am__objects_3 = compatibility-ldbl.lo +am__objects_4 = bitmap_allocator.lo pool_allocator.lo mt_allocator.lo \ 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 \ @@ -74,8 +90,9 @@ am__objects_3 = bitmap_allocator.lo pool_allocator.lo mt_allocator.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) + wstring-inst.lo $(am__objects_1) $(am__objects_2) \ + $(am__objects_3) +am_libstdc___la_OBJECTS = $(am__objects_4) libstdc___la_OBJECTS = $(am_libstdc___la_OBJECTS) DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) depcomp = @@ -84,7 +101,7 @@ CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) SOURCES = $(libstdc___la_SOURCES) -DIST_SOURCES = $(libstdc___la_SOURCES) +DIST_SOURCES = $(am__libstdc___la_SOURCES_DIST) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) @@ -156,6 +173,8 @@ GLIBCXX_C_HEADERS_C_TRUE = @GLIBCXX_C_HEADERS_C_TRUE@ GLIBCXX_HOSTED_FALSE = @GLIBCXX_HOSTED_FALSE@ GLIBCXX_HOSTED_TRUE = @GLIBCXX_HOSTED_TRUE@ GLIBCXX_INCLUDES = @GLIBCXX_INCLUDES@ +GLIBCXX_LDBL_COMPAT_FALSE = @GLIBCXX_LDBL_COMPAT_FALSE@ +GLIBCXX_LDBL_COMPAT_TRUE = @GLIBCXX_LDBL_COMPAT_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ @@ -308,6 +327,8 @@ host_sources_extra = \ basic_file.cc \ c++locale.cc +@GLIBCXX_LDBL_COMPAT_FALSE@ldbl_compat_sources = +@GLIBCXX_LDBL_COMPAT_TRUE@ldbl_compat_sources = compatibility-ldbl.cc # Sources present in the src directory. sources = \ @@ -356,7 +377,8 @@ sources = \ wlocale-inst.cc \ wstring-inst.cc \ ${host_sources} \ - ${host_sources_extra} + ${host_sources_extra} \ + ${ldbl_compat_sources} libstdc___la_SOURCES = $(sources) libstdc___la_LIBADD = \ @@ -681,10 +703,15 @@ uninstall-am: uninstall-info-am uninstall-toolexeclibLTLIBRARIES @ENABLE_SYMVERS_TRUE@ $(port_specific_symbol_files) @ENABLE_SYMVERS_TRUE@ cp ${glibcxx_srcdir}/$(SYMVER_FILE) ./libstdc++-symbols.ver @ENABLE_SYMVERS_TRUE@ if test "x$(port_specific_symbol_files)" != x; then \ -@ENABLE_SYMVERS_TRUE@ sed -n '1,/DO NOT DELETE/p' $@ > tmp.top; \ -@ENABLE_SYMVERS_TRUE@ sed -n '/DO NOT DELETE/,$$p' $@ > tmp.bottom; \ -@ENABLE_SYMVERS_TRUE@ cat tmp.top $(port_specific_symbol_files) tmp.bottom > $@; \ -@ENABLE_SYMVERS_TRUE@ rm tmp.top tmp.bottom; \ +@ENABLE_SYMVERS_TRUE@ if grep '^# Appended to version file.' \ +@ENABLE_SYMVERS_TRUE@ $(port_specific_symbol_files) /dev/null > /dev/null 2>&1; then \ +@ENABLE_SYMVERS_TRUE@ cat $(port_specific_symbol_files) >> $@; \ +@ENABLE_SYMVERS_TRUE@ else \ +@ENABLE_SYMVERS_TRUE@ sed -n '1,/DO NOT DELETE/p' $@ > tmp.top; \ +@ENABLE_SYMVERS_TRUE@ sed -n '/DO NOT DELETE/,$$p' $@ > tmp.bottom; \ +@ENABLE_SYMVERS_TRUE@ cat tmp.top $(port_specific_symbol_files) tmp.bottom > $@; \ +@ENABLE_SYMVERS_TRUE@ rm tmp.top tmp.bottom; \ +@ENABLE_SYMVERS_TRUE@ fi; \ @ENABLE_SYMVERS_TRUE@ fi @ENABLE_SYMVERS_DARWIN_TRUE@@ENABLE_SYMVERS_TRUE@libstdc++-symbols.explist : libstdc++-symbols.ver \ @ENABLE_SYMVERS_DARWIN_TRUE@@ENABLE_SYMVERS_TRUE@ ${glibcxx_srcdir}/scripts/make_exports.pl \ @@ -737,6 +764,13 @@ concept-inst.lo: concept-inst.cc concept-inst.o: concept-inst.cc $(CXXCOMPILE) -D_GLIBCXX_CONCEPT_CHECKS -fimplicit-templates -c $< +# Use special rules for compatibility-ldbl.cc compilation, as we need to +# pass -mlong-double-64. +@GLIBCXX_LDBL_COMPAT_TRUE@compatibility-ldbl.lo: compatibility-ldbl.cc +@GLIBCXX_LDBL_COMPAT_TRUE@ $(LTCXXCOMPILE) -mlong-double-64 -c $< +@GLIBCXX_LDBL_COMPAT_TRUE@compatibility-ldbl.o: compatibility-ldbl.cc +@GLIBCXX_LDBL_COMPAT_TRUE@ $(CXXCOMPILE) -mlong-double-64 -c $< + # Added bits to build debug library. @GLIBCXX_BUILD_DEBUG_TRUE@all-local: build_debug @GLIBCXX_BUILD_DEBUG_TRUE@install-data-local: install_debug diff --git a/libstdc++-v3/src/compatibility-ldbl.cc b/libstdc++-v3/src/compatibility-ldbl.cc new file mode 100644 index 0000000..108790e --- /dev/null +++ b/libstdc++-v3/src/compatibility-ldbl.cc @@ -0,0 +1,73 @@ +// Compatibility symbols for -mlong-double-64 compatibility -*- C++ -*- + +// Copyright (C) 2006 +// 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, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, +// 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 + +#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT + +#ifdef __LONG_DOUBLE_128__ +#error "compatibility-ldbl.cc must be compiled with -mlong-double-64" +#endif + +namespace std +{ +#define C char + template class num_get >; + template class num_put >; + template class money_get >; + template class money_put >; + template const num_put& use_facet >(const locale&); + template const num_get& use_facet >(const locale&); + template const money_put& use_facet >(const locale&); + template const money_get& use_facet >(const locale&); + template bool has_facet >(const locale&); + template bool has_facet >(const locale&); + template bool has_facet >(const locale&); + template bool has_facet >(const locale&); +#undef C +#ifdef _GLIBCXX_USE_WCHAR_T +#define C wchar_t + template class num_get >; + template class num_put >; + template class money_get >; + template class money_put >; + template const num_put& use_facet >(const locale&); + template const num_get& use_facet >(const locale&); + template const money_put& use_facet >(const locale&); + template const money_get& use_facet >(const locale&); + template bool has_facet >(const locale&); + template bool has_facet >(const locale&); + template bool has_facet >(const locale&); + template bool has_facet >(const locale&); +#undef C +#endif +} + +#endif diff --git a/libstdc++-v3/src/compatibility.cc b/libstdc++-v3/src/compatibility.cc index ce66160..3353ba4 100644 --- a/libstdc++-v3/src/compatibility.cc +++ b/libstdc++-v3/src/compatibility.cc @@ -1,6 +1,6 @@ // Compatibility symbols for previous versions -*- C++ -*- -// Copyright (C) 2005 +// Copyright (C) 2005, 2006 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -51,6 +51,7 @@ #include #include #include +#include _GLIBCXX_BEGIN_NAMESPACE(std) @@ -467,11 +468,113 @@ _GLIBCXX_ASM_SYMVER(_ZNKSt13__gnu_debugXX16_Error_formatter15_M_print_stringEPKc _ZNK11__gnu_debug16_Error_formatter15_M_print_stringEPKc, \ GLIBCXX_3.4) +// gcc-4.1.0 +#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT +#define _GLIBCXX_MATHL_WRAPPER(name, argdecl, args, ver) \ +extern "C" double \ +__ ## name ## l_wrapper argdecl \ +{ \ + return name args; \ +} \ +asm (".symver __" #name "l_wrapper, " #name "l@" #ver) +#define _GLIBCXX_MATHL_WRAPPER1(name, ver) \ + _GLIBCXX_MATHL_WRAPPER (name, (double x), (x), ver) + +#define _GLIBCXX_MATHL_WRAPPER2(name, ver) \ + _GLIBCXX_MATHL_WRAPPER (name, (double x, double y), (x, y), ver) + +#ifdef _GLIBCXX_HAVE_ACOSL +_GLIBCXX_MATHL_WRAPPER1 (acos, GLIBCXX_3.4.3); +#endif +#ifdef _GLIBCXX_HAVE_ASINL +_GLIBCXX_MATHL_WRAPPER1 (asin, GLIBCXX_3.4.3); +#endif +#ifdef _GLIBCXX_HAVE_ATAN2L +_GLIBCXX_MATHL_WRAPPER2 (atan2, GLIBCXX_3.4); +#endif +#ifdef _GLIBCXX_HAVE_ATANL +_GLIBCXX_MATHL_WRAPPER1 (atan, GLIBCXX_3.4.3); +#endif +#ifdef _GLIBCXX_HAVE_CEILL +_GLIBCXX_MATHL_WRAPPER1 (ceil, GLIBCXX_3.4.3); +#endif +#ifdef _GLIBCXX_HAVE_COSHL +_GLIBCXX_MATHL_WRAPPER1 (cosh, GLIBCXX_3.4); +#endif +#ifdef _GLIBCXX_HAVE_COSL +_GLIBCXX_MATHL_WRAPPER1 (cos, GLIBCXX_3.4); +#endif +#ifdef _GLIBCXX_HAVE_EXPL +_GLIBCXX_MATHL_WRAPPER1 (exp, GLIBCXX_3.4); +#endif +#ifdef _GLIBCXX_HAVE_FLOORL +_GLIBCXX_MATHL_WRAPPER1 (floor, GLIBCXX_3.4.3); +#endif +#ifdef _GLIBCXX_HAVE_FMODL +_GLIBCXX_MATHL_WRAPPER2 (fmod, GLIBCXX_3.4.3); +#endif +#ifdef _GLIBCXX_HAVE_FREXPL +_GLIBCXX_MATHL_WRAPPER (frexp, (double x, int *y), (x, y), GLIBCXX_3.4.3); +#endif +#ifdef _GLIBCXX_HAVE_HYPOTL +_GLIBCXX_MATHL_WRAPPER2 (hypot, GLIBCXX_3.4); +#endif +#ifdef _GLIBCXX_HAVE_LDEXPL +_GLIBCXX_MATHL_WRAPPER (ldexp, (double x, int y), (x, y), GLIBCXX_3.4.3); #endif +#ifdef _GLIBCXX_HAVE_LOG10L +_GLIBCXX_MATHL_WRAPPER1 (log10, GLIBCXX_3.4); +#endif +#ifdef _GLIBCXX_HAVE_LOGL +_GLIBCXX_MATHL_WRAPPER1 (log, GLIBCXX_3.4); +#endif +#ifdef _GLIBCXX_HAVE_MODFL +_GLIBCXX_MATHL_WRAPPER (modf, (double x, double *y), (x, y), GLIBCXX_3.4.3); +#endif +#ifdef _GLIBCXX_HAVE_POWL +_GLIBCXX_MATHL_WRAPPER2 (pow, GLIBCXX_3.4); +#endif +#ifdef _GLIBCXX_HAVE_SINHL +_GLIBCXX_MATHL_WRAPPER1 (sinh, GLIBCXX_3.4); +#endif +#ifdef _GLIBCXX_HAVE_SINL +_GLIBCXX_MATHL_WRAPPER1 (sin, GLIBCXX_3.4); +#endif +#ifdef _GLIBCXX_HAVE_SQRTL +_GLIBCXX_MATHL_WRAPPER1 (sqrt, GLIBCXX_3.4); +#endif +#ifdef _GLIBCXX_HAVE_TANHL +_GLIBCXX_MATHL_WRAPPER1 (tanh, GLIBCXX_3.4); +#endif +#ifdef _GLIBCXX_HAVE_TANL +_GLIBCXX_MATHL_WRAPPER1 (tan, GLIBCXX_3.4); +#endif +#endif // _GLIBCXX_LONG_DOUBLE_COMPAT + +#endif + +#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT +extern void *_ZTVN10__cxxabiv123__fundamental_type_infoE[]; +extern void *_ZTVN10__cxxabiv119__pointer_type_infoE[]; +extern __attribute__((used, weak)) const char _ZTSe[2] = "e"; +extern __attribute__((used, weak)) const char _ZTSPe[3] = "Pe"; +extern __attribute__((used, weak)) const char _ZTSPKe[4] = "PKe"; +extern __attribute__((used, weak)) const void *_ZTIe[2] + = { (void *) &_ZTVN10__cxxabiv123__fundamental_type_infoE[2], + (void *) _ZTSe }; +extern __attribute__((used, weak)) const void *_ZTIPe[4] + = { (void *) &_ZTVN10__cxxabiv119__pointer_type_infoE[2], + (void *) _ZTSPe, (void *) 0L, (void *) _ZTIe }; +extern __attribute__((used, weak)) const void *_ZTIPKe[4] + = { (void *) &_ZTVN10__cxxabiv119__pointer_type_infoE[2], + (void *) _ZTSPKe, (void *) 1L, (void *) _ZTIe }; +#endif // _GLIBCXX_LONG_DOUBLE_COMPAT + + #ifdef _GLIBCXX_SYMVER_DARWIN -#if (defined(__ppc__) || defined (__ppc64__)) && defined (PIC) +#if (defined(__ppc__) || defined(__ppc64__)) && defined(PIC) /* __eprintf shouldn't have been made visible from libstdc++, or anywhere, but on Mac OS X 10.4 it was defined in libstdc++.6.0.3.dylib; so on that platform we have to keep defining diff --git a/libstdc++-v3/src/complex_io.cc b/libstdc++-v3/src/complex_io.cc index 1037958..e65a22d 100644 --- a/libstdc++-v3/src/complex_io.cc +++ b/libstdc++-v3/src/complex_io.cc @@ -1,6 +1,6 @@ // The template and inlines for the -*- C++ -*- complex number classes. -// Copyright (C) 2000, 2001, 2005 Free Software Foundation, Inc. +// Copyright (C) 2000, 2001, 2005, 2006 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 @@ -92,3 +92,20 @@ _GLIBCXX_BEGIN_NAMESPACE(std) #endif //_GLIBCXX_USE_WCHAR_T _GLIBCXX_END_NAMESPACE + +// XXX GLIBCXX_ABI Deprecated +#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT + +#define _GLIBCXX_LDBL_COMPAT(dbl, ldbl) \ + extern "C" void ldbl (void) __attribute__ ((alias (#dbl), weak)) + +_GLIBCXX_LDBL_COMPAT (_ZStlsIdcSt11char_traitsIcEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E, + _ZStlsIecSt11char_traitsIcEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E); +_GLIBCXX_LDBL_COMPAT (_ZStlsIdwSt11char_traitsIwEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E, + _ZStlsIewSt11char_traitsIwEERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E); +_GLIBCXX_LDBL_COMPAT (_ZStrsIdcSt11char_traitsIcEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E, + _ZStrsIecSt11char_traitsIcEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E); +_GLIBCXX_LDBL_COMPAT (_ZStrsIdwSt11char_traitsIwEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E, + _ZStrsIewSt11char_traitsIwEERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E); + +#endif // _GLIBCXX_LONG_DOUBLE_COMPAT diff --git a/libstdc++-v3/src/istream-inst.cc b/libstdc++-v3/src/istream-inst.cc index 2e5c7d3..7140ab2 100644 --- a/libstdc++-v3/src/istream-inst.cc +++ b/libstdc++-v3/src/istream-inst.cc @@ -1,6 +1,6 @@ // Explicit instantiation file. -// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2005 +// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2005, 2006 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -96,3 +96,18 @@ _GLIBCXX_BEGIN_NAMESPACE(std) #endif _GLIBCXX_END_NAMESPACE + +// XXX GLIBCXX_ABI Deprecated +#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT + +#define _GLIBCXX_LDBL_COMPAT(dbl, ldbl) \ + extern "C" void ldbl (void) __attribute__ ((alias (#dbl), weak)) +_GLIBCXX_LDBL_COMPAT (_ZNSirsERd, _ZNSirsERe); +_GLIBCXX_LDBL_COMPAT (_ZNSt13basic_istreamIwSt11char_traitsIwEErsERd, + _ZNSt13basic_istreamIwSt11char_traitsIwEErsERe); +_GLIBCXX_LDBL_COMPAT (_ZNSi10_M_extractIdEERSiRT_, + _ZNSi10_M_extractIeEERSiRT_); +_GLIBCXX_LDBL_COMPAT (_ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIdEERS2_RT_, + _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractIeEERS2_RT_); + +#endif // _GLIBCXX_LONG_DOUBLE_COMPAT diff --git a/libstdc++-v3/src/limits.cc b/libstdc++-v3/src/limits.cc index 235ecd6..5771bc3 100644 --- a/libstdc++-v3/src/limits.cc +++ b/libstdc++-v3/src/limits.cc @@ -1,6 +1,6 @@ // Static data members of -*- C++ -*- numeric_limits classes -// Copyright (C) 1999, 2001, 2002, 2005 Free Software Foundation, Inc. +// Copyright (C) 1999, 2001, 2002, 2005, 2006 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 @@ -448,3 +448,34 @@ _GLIBCXX_BEGIN_NAMESPACE(std) const float_round_style numeric_limits::round_style; _GLIBCXX_END_NAMESPACE + +// XXX GLIBCXX_ABI Deprecated +#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT + +#define _GLIBCXX_NUM_LIM_COMPAT(type, member, len) \ + extern "C" type _ZNSt14numeric_limitsIeE ## len ## member ## E \ + __attribute__ ((alias ("_ZNSt14numeric_limitsIdE" #len #member "E"))) +_GLIBCXX_NUM_LIM_COMPAT (bool, is_specialized, 14); +_GLIBCXX_NUM_LIM_COMPAT (int, digits, 6); +_GLIBCXX_NUM_LIM_COMPAT (int, digits10, 8); +_GLIBCXX_NUM_LIM_COMPAT (bool, is_signed, 9); +_GLIBCXX_NUM_LIM_COMPAT (bool, is_integer, 10); +_GLIBCXX_NUM_LIM_COMPAT (bool, is_exact, 8); +_GLIBCXX_NUM_LIM_COMPAT (int, radix, 5); +_GLIBCXX_NUM_LIM_COMPAT (int, min_exponent, 12); +_GLIBCXX_NUM_LIM_COMPAT (int, min_exponent10, 14); +_GLIBCXX_NUM_LIM_COMPAT (int, max_exponent, 12); +_GLIBCXX_NUM_LIM_COMPAT (int, max_exponent10, 14); +_GLIBCXX_NUM_LIM_COMPAT (bool, has_infinity, 12); +_GLIBCXX_NUM_LIM_COMPAT (bool, has_quiet_NaN, 13); +_GLIBCXX_NUM_LIM_COMPAT (bool, has_signaling_NaN, 17); +_GLIBCXX_NUM_LIM_COMPAT (std::float_denorm_style, has_denorm, 10); +_GLIBCXX_NUM_LIM_COMPAT (bool, has_denorm_loss, 15); +_GLIBCXX_NUM_LIM_COMPAT (bool, is_iec559, 9); +_GLIBCXX_NUM_LIM_COMPAT (bool, is_bounded, 10); +_GLIBCXX_NUM_LIM_COMPAT (bool, is_modulo, 9); +_GLIBCXX_NUM_LIM_COMPAT (bool, traps, 5); +_GLIBCXX_NUM_LIM_COMPAT (bool, tinyness_before, 15); +_GLIBCXX_NUM_LIM_COMPAT (std::float_round_style, round_style, 11); + +#endif // _GLIBCXX_LONG_DOUBLE_COMPAT diff --git a/libstdc++-v3/src/locale-inst.cc b/libstdc++-v3/src/locale-inst.cc index fd2a8d4..790e614 100644 --- a/libstdc++-v3/src/locale-inst.cc +++ b/libstdc++-v3/src/locale-inst.cc @@ -1,6 +1,6 @@ // Locale support -*- C++ -*- -// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -37,6 +37,7 @@ // Instantiation configuration. #ifndef C # define C char +# define C_is_char #endif _GLIBCXX_BEGIN_NAMESPACE(std) @@ -48,6 +49,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) template struct __moneypunct_cache; template class moneypunct_byname; template class moneypunct_byname; +_GLIBCXX_BEGIN_LDBL_NAMESPACE template class money_get >; template class money_put >; template @@ -73,11 +75,13 @@ _GLIBCXX_BEGIN_NAMESPACE(std) money_put >:: _M_insert(ostreambuf_iterator, ios_base&, C, const string_type&) const; +_GLIBCXX_END_LDBL_NAMESPACE // numpunct, numpunct_byname, num_get, and num_put template class numpunct; template struct __numpunct_cache; template class numpunct_byname; +_GLIBCXX_BEGIN_LDBL_NAMESPACE template class num_get >; template class num_put >; template @@ -161,7 +165,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std) num_put >:: _M_insert_float(ostreambuf_iterator, ios_base&, C, char, long double) const; - +_GLIBCXX_END_LDBL_NAMESPACE + // time_get and time_put template class __timepunct; template struct __timepunct_cache; @@ -315,3 +320,44 @@ _GLIBCXX_BEGIN_NAMESPACE(std) #endif _GLIBCXX_END_NAMESPACE + +// XXX GLIBCXX_ABI Deprecated +#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined C_is_char + +#define _GLIBCXX_LDBL_COMPAT(dbl, ldbl) \ + extern "C" void ldbl (void) __attribute__ ((alias (#dbl), weak)) + +_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIjEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_, + _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIjEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_); +_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIlEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_, + _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIlEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_); +_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intImEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_, + _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intImEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_); +_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intItEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_, + _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intItEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_); +_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIxEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_, + _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIxEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_); +_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIyEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_, + _ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intIyEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_); +_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIlEES4_S4_RSt8ios_basecT_, + _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIlEES3_S3_RSt8ios_basecT_); +_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intImEES4_S4_RSt8ios_basecT_, + _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intImEES3_S3_RSt8ios_basecT_); +_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIxEES4_S4_RSt8ios_basecT_, + _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIxEES3_S3_RSt8ios_basecT_); +_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIyEES4_S4_RSt8ios_basecT_, + _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE13_M_insert_intIyEES3_S3_RSt8ios_basecT_); +_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIdEES4_S4_RSt8ios_baseccT_, + _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIdEES3_S3_RSt8ios_baseccT_); +_GLIBCXX_LDBL_COMPAT(_ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIdEES3_S3_RSt8ios_baseccT_, + _ZNKSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE15_M_insert_floatIeEES3_S3_RSt8ios_baseccT_); +_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb0EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs, + _ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb0EEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRSs); +_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1289money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb1EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs, + _ZNKSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE10_M_extractILb1EEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRSs); +_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb0EEES4_S4_RSt8ios_basecRKSs, + _ZNKSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb0EEES3_S3_RSt8ios_basecRKSs); +_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb1EEES4_S4_RSt8ios_basecRKSs, + _ZNKSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE9_M_insertILb1EEES3_S3_RSt8ios_basecRKSs); + +#endif // _GLIBCXX_LONG_DOUBLE_COMPAT diff --git a/libstdc++-v3/src/locale-misc-inst.cc b/libstdc++-v3/src/locale-misc-inst.cc index 32b7597..8af7359 100644 --- a/libstdc++-v3/src/locale-misc-inst.cc +++ b/libstdc++-v3/src/locale-misc-inst.cc @@ -1,6 +1,6 @@ // Locale support -*- C++ -*- -// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2005 +// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2005, 2006 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -47,3 +47,19 @@ _GLIBCXX_BEGIN_NAMESPACE(std) const __c_locale&, int); _GLIBCXX_END_NAMESPACE + +// XXX GLIBCXX_ABI Deprecated +#if defined _GLIBCXX_LONG_DOUBLE_COMPAT + +#define _GLIBCXX_LDBL_COMPAT(dbl, ldbl) \ + extern "C" void ldbl (void) __attribute__ ((alias (#dbl), weak)) + +# if _GLIBCXX_C_LOCALE_GNU +_GLIBCXX_LDBL_COMPAT(_ZSt16__convert_from_vIdEiPciPKcT_RKP15__locale_structi, + _ZSt16__convert_from_vIeEiPciPKcT_RKP15__locale_structi); +# else +_GLIBCXX_LDBL_COMPAT(_ZSt16__convert_from_vIdEiPciPKcT_RKPii, + _ZSt16__convert_from_vIeEiPciPKcT_RKPii); +# endif + +#endif // _GLIBCXX_LONG_DOUBLE_COMPAT diff --git a/libstdc++-v3/src/locale.cc b/libstdc++-v3/src/locale.cc index 713d399..7f54ab8 100644 --- a/libstdc++-v3/src/locale.cc +++ b/libstdc++-v3/src/locale.cc @@ -1,4 +1,4 @@ -// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -41,6 +41,21 @@ namespace __gnu_internal static __glibcxx_mutex_define_initialized(locale_cache_mutex); } +// XXX GLIBCXX_ABI Deprecated +#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT +# define _GLIBCXX_LOC_ID(mangled) extern std::locale::id mangled +_GLIBCXX_LOC_ID (_ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE); +_GLIBCXX_LOC_ID (_ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE); +_GLIBCXX_LOC_ID (_ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE); +_GLIBCXX_LOC_ID (_ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE); +# ifdef _GLIBCXX_USE_WCHAR_T +_GLIBCXX_LOC_ID (_ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE); +_GLIBCXX_LOC_ID (_ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE); +_GLIBCXX_LOC_ID (_ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE); +_GLIBCXX_LOC_ID (_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE); +# endif +#endif + _GLIBCXX_BEGIN_NAMESPACE(std) // Definitions for static const data members of locale. @@ -398,10 +413,30 @@ _GLIBCXX_BEGIN_NAMESPACE(std) locale::id::_M_id() const { if (!_M_index) - _M_index = 1 + __gnu_cxx::__exchange_and_add(&_S_refcount, 1); + { + // XXX GLIBCXX_ABI Deprecated +#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT + locale::id *f = 0; +# define _GLIBCXX_SYNC_ID(facet, mangled) \ + if (this == &::mangled) \ + f = &facet::id + _GLIBCXX_SYNC_ID (num_get, _ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE); + _GLIBCXX_SYNC_ID (num_put, _ZNSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE); + _GLIBCXX_SYNC_ID (money_get, _ZNSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE); + _GLIBCXX_SYNC_ID (money_put, _ZNSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE); +# ifdef _GLIBCXX_USE_WCHAR_T + _GLIBCXX_SYNC_ID (num_get, _ZNSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE); + _GLIBCXX_SYNC_ID (num_put, _ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE); + _GLIBCXX_SYNC_ID (money_get, _ZNSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE); + _GLIBCXX_SYNC_ID (money_put, _ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE); +# endif + if (f) + _M_index = 1 + f->_M_id(); + else +#endif + _M_index = 1 + __gnu_cxx::__exchange_and_add(&_S_refcount, 1); + } return _M_index - 1; } _GLIBCXX_END_NAMESPACE - - diff --git a/libstdc++-v3/src/ostream-inst.cc b/libstdc++-v3/src/ostream-inst.cc index 70df37b..2ea663b 100644 --- a/libstdc++-v3/src/ostream-inst.cc +++ b/libstdc++-v3/src/ostream-inst.cc @@ -1,6 +1,6 @@ // Explicit instantiation file. -// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -97,3 +97,18 @@ _GLIBCXX_BEGIN_NAMESPACE(std) #endif _GLIBCXX_END_NAMESPACE + +// XXX GLIBCXX_ABI Deprecated +#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT + +#define _GLIBCXX_LDBL_COMPAT(dbl, ldbl) \ + extern "C" void ldbl (void) __attribute__ ((alias (#dbl), weak)) +_GLIBCXX_LDBL_COMPAT (_ZNSolsEd, _ZNSolsEe); +_GLIBCXX_LDBL_COMPAT (_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEd, + _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEe); +_GLIBCXX_LDBL_COMPAT (_ZNSo9_M_insertIdEERSoT_, + _ZNSo9_M_insertIeEERSoT_); +_GLIBCXX_LDBL_COMPAT (_ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertIdEERS2_T_, + _ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertIeEERS2_T_); + +#endif // _GLIBCXX_LONG_DOUBLE_COMPAT diff --git a/libstdc++-v3/src/wlocale-inst.cc b/libstdc++-v3/src/wlocale-inst.cc index cd0f3e3..b776cd2 100644 --- a/libstdc++-v3/src/wlocale-inst.cc +++ b/libstdc++-v3/src/wlocale-inst.cc @@ -1,6 +1,7 @@ // Locale support -*- C++ -*- -// Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. +// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2006 +// 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 @@ -36,4 +37,45 @@ #ifdef _GLIBCXX_USE_WCHAR_T #define C wchar_t #include "locale-inst.cc" + +// XXX GLIBCXX_ABI Deprecated +#if defined _GLIBCXX_LONG_DOUBLE_COMPAT + +#define _GLIBCXX_LDBL_COMPAT(dbl, ldbl) \ + extern "C" void ldbl (void) __attribute__ ((alias (#dbl), weak)) + +_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIjEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_, + _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIjEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_); +_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIlEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_, + _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIlEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_); +_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intImEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_, + _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intImEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_); +_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intItEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_, + _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intItEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_); +_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIxEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_, + _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIxEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_); +_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIyEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_, + _ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intIyEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRT_); +_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIlEES4_S4_RSt8ios_basewT_, + _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIlEES3_S3_RSt8ios_basewT_); +_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intImEES4_S4_RSt8ios_basewT_, + _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intImEES3_S3_RSt8ios_basewT_); +_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIxEES4_S4_RSt8ios_basewT_, + _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIxEES3_S3_RSt8ios_basewT_); +_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIyEES4_S4_RSt8ios_basewT_, + _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE13_M_insert_intIyEES3_S3_RSt8ios_basewT_); +_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1287num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE15_M_insert_floatIdEES4_S4_RSt8ios_basewcT_, + _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE15_M_insert_floatIdEES3_S3_RSt8ios_basewcT_); +_GLIBCXX_LDBL_COMPAT(_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE15_M_insert_floatIdEES3_S3_RSt8ios_basewcT_, + _ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE15_M_insert_floatIeEES3_S3_RSt8ios_basewcT_); +_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE10_M_extractILb0EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs, + _ZNKSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE10_M_extractILb0EEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRSs); +_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE10_M_extractILb1EEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRSs, + _ZNKSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE10_M_extractILb1EEES3_S3_S3_RSt8ios_baseRSt12_Ios_IostateRSs); +_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb0EEES4_S4_RSt8ios_basewRKSbIwS3_SaIwEE, + _ZNKSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb0EEES3_S3_RSt8ios_basewRKSbIwS2_SaIwEE); +_GLIBCXX_LDBL_COMPAT(_ZNKSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb1EEES4_S4_RSt8ios_basewRKSbIwS3_SaIwEE, + _ZNKSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb1EEES3_S3_RSt8ios_basewRKSbIwS2_SaIwEE); + +#endif // _GLIBCXX_LONG_DOUBLE_COMPAT #endif diff --git a/libstdc++-v3/testsuite/Makefile.in b/libstdc++-v3/testsuite/Makefile.in index d715d62..92c8a02 100644 --- a/libstdc++-v3/testsuite/Makefile.in +++ b/libstdc++-v3/testsuite/Makefile.in @@ -126,6 +126,8 @@ GLIBCXX_C_HEADERS_C_TRUE = @GLIBCXX_C_HEADERS_C_TRUE@ GLIBCXX_HOSTED_FALSE = @GLIBCXX_HOSTED_FALSE@ GLIBCXX_HOSTED_TRUE = @GLIBCXX_HOSTED_TRUE@ GLIBCXX_INCLUDES = @GLIBCXX_INCLUDES@ +GLIBCXX_LDBL_COMPAT_FALSE = @GLIBCXX_LDBL_COMPAT_FALSE@ +GLIBCXX_LDBL_COMPAT_TRUE = @GLIBCXX_LDBL_COMPAT_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ diff --git a/libstdc++-v3/testsuite/testsuite_abi.cc b/libstdc++-v3/testsuite/testsuite_abi.cc index d0e65af..56bec96 100644 --- a/libstdc++-v3/testsuite/testsuite_abi.cc +++ b/libstdc++-v3/testsuite/testsuite_abi.cc @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2004, 2005 Free Software Foundation, Inc. +// Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc. // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as @@ -186,8 +186,11 @@ check_version(symbol& test, bool added) known_versions.push_back("GLIBCXX_3.4.5"); known_versions.push_back("GLIBCXX_3.4.6"); known_versions.push_back("GLIBCXX_3.4.7"); + known_versions.push_back("GLIBCXX_LDBL_3.4"); + known_versions.push_back("GLIBCXX_LDBL_3.4.7"); known_versions.push_back("CXXABI_1.3"); known_versions.push_back("CXXABI_1.3.1"); + known_versions.push_back("CXXABI_LDBL_1.3"); } compat_list::iterator begin = known_versions.begin(); compat_list::iterator end = known_versions.end(); @@ -223,9 +226,7 @@ check_version(symbol& test, bool added) // New version labels are ok. The rest are not. compat_list::iterator it2 = find(begin, end, test.name); if (it2 != end) - { - test.version_status = symbol::compatible; - } + test.version_status = symbol::compatible; else test.version_status = symbol::incompatible; } @@ -369,13 +370,14 @@ compare_symbols(const char* baseline_file, const char* test_file, added_names.erase(it); } else - missing_names.push_back(what); + missing_names.push_back(what); } // Check missing names for compatibility. typedef pair symbol_pair; vector incompatible; - for (size_t j = 0; j < missing_names.size(); ++j) + const symbol_names::size_type missing_size = missing_names.size(); + for (size_t j = 0; j < missing_size; ++j) { symbol& base = baseline_objects[missing_names[j]]; base.status = symbol::subtracted; @@ -383,7 +385,8 @@ compare_symbols(const char* baseline_file, const char* test_file, } // Check shared names for compatibility. - for (size_t k = 0; k < shared_names.size(); ++k) + const symbol_names::size_type shared_size = shared_names.size(); + for (size_t k = 0; k < shared_size; ++k) { symbol& base = baseline_objects[shared_names[k]]; symbol& test = test_objects[shared_names[k]]; @@ -393,7 +396,8 @@ compare_symbols(const char* baseline_file, const char* test_file, } // Check added names for compatibility. - for (size_t l = 0; l < added_names.size(); ++l) + const symbol_names::size_type added_size = added_names.size(); + for (size_t l = 0; l < added_size; ++l) { symbol& test = test_objects[added_names[l]]; test.status = symbol::added; @@ -459,7 +463,8 @@ create_symbols(const char* file) ifstream ifs(file); if (ifs.is_open()) { - // Organize file data into container of symbol objects. + // Organize file data into container of symbol objects, and a + // container of mangled names without versioning information. symbol_names& names = s.first; symbol_objects& objects = s.second; const string empty; @@ -468,8 +473,8 @@ create_symbols(const char* file) { symbol tmp; tmp.init(line); - objects[tmp.raw_name] = tmp; - names.push_back(tmp.raw_name); + objects[tmp.name] = tmp; + names.push_back(tmp.name); line = empty; } } -- 2.7.4