This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [RFC PATCH] Optionally use -mlong-double-128 by default on {powerpc{,64},s390{,x},sparc,alpha}-linux
- From: Jakub Jelinek <jakub at redhat dot com>
- To: Benjamin Kosnik <bkoz at redhat dot com>
- Cc: mark at codesourcery dot com, jason at redhat dot com, matz at suse dot de, gcc-patches at gcc dot gnu dot org, libstdc++ at gcc dot gnu dot org
- Date: Wed, 1 Feb 2006 13:09:40 -0500
- Subject: Re: [RFC PATCH] Optionally use -mlong-double-128 by default on {powerpc{,64},s390{,x},sparc,alpha}-linux
- References: <20060127165807.GV32233@devserv.devel.redhat.com> <Pine.LNX.4.58.0601311640500.627@wotan.suse.de> <20060131172535.GQ32233@devserv.devel.redhat.com> <43E05F19.4000103@codesourcery.com> <20060201082138.GX32233@devserv.devel.redhat.com> <20060201113418.996739f9.bkoz@redhat.com>
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
On Wed, Feb 01, 2006 at 11:34:18AM -0600, Benjamin Kosnik wrote:
> I like this idea as well: it would remove some of the fragileness
> around the current approach and make the 128 long double uses
> unambiguous.
Here is updated patch against mainline.
Mangling has been changed for powerpc* only so far, I can do the
s390{,x}, sparc32 and alpha part separately.
I have so far verified that for the current 59
nm -D -C libstdc++.so.6 | grep 'long double'
symbols it creates another 59 __float128 ones, all in
GLIBCXX_LDBL_3.4, GLIBCXX_LDBL_3.4.7 and CXXABI_LDBL_3.4 symvers
and that no symbols are lost. In most files, the assembly magic
is gone, they just have simple aliases. The big exception is
{,w}locale-inst.cc unfortunately, where for the vtables we want
to have 2 symbols, starting at the same address, one smaller
(compatibility one) and one 4/8 bytes bigger that has the additional
__float128 virtual method at the end.
2006-02-01 Jakub Jelinek <jakub@redhat.com>
* config/rs6000/linux.h [TARGET_DEFAULT_LONG_DOUBLE_128]
(RS6000_DEFAULT_LONG_DOUBLE_SIZE): Define to 128.
* config/rs6000/linux64.h [TARGET_DEFAULT_LONG_DOUBLE_128]
(RS6000_DEFAULT_LONG_DOUBLE_SIZE): Define to 128.
* config/rs6000/rs6000.c (rs6000_mangle_fundamental_type): Mangle
long double as "g" on linux with -mlong-double-128.
* configure.ac: Add --with{out}-long-double-128 configure option.
(TARGET_DEFAULT_LONG_DOUBLE_128): New test.
* configure: Rebuilt.
* config.in: Rebuilt.
libstdc++-v3/
* configure.ac (_GLIBCXX_LONG_DOUBLE_COMPAT): New check.
If true, set also port_specific_symbol_files and create
as_symver_specs.
(SYMVER_CXXFLAGS): New substituted var.
* configure: Rebuilt.
* config.h.in: Rebuilt.
* scripts/as_symver_filter: New file.
* config/os/gnu-linux/ldbl-extra.ver: New file.
* src/Makefile.am (libstdc++-symbol.ver): Append instead of
insert in the middle if port specific symbol file requests it.
(locale-inst.lo, locale-inst.o, wlocale-inst.lo, wlocale-inst.o):
New rules.
* src/Makefile.in: Rebuilt.
* config/abi/pre/gnu.ver: Make sure no __float128 symbols are
exported.
* include/bits/locale_facets.h
[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::money_get): Add __get and
__do_get methods.
[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::money_put): Add __put and
__do_put methods.
[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::num_get): Add __get and
__do_get methods.
[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::num_put): Add __put and
__do_put methods.
* src/complex_io.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Add compatibility
symbols.
* src/istream-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/limits.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/locale-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/ostream-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/wlocale-inst.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.
* libmath/stubs.c [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* libsupc++/tinfo2.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
--- gcc/config/rs6000/linux.h.jj 2006-01-26 16:36:57.000000000 +0100
+++ gcc/config/rs6000/linux.h 2006-01-31 14:21:37.000000000 +0100
@@ -120,3 +120,8 @@
#endif
#define POWERPC_LINUX
+
+/* ppc linux has 128-bit long double support in glibc 2.4 and later. */
+#ifdef TARGET_DEFAULT_LONG_DOUBLE_128
+#define RS6000_DEFAULT_LONG_DOUBLE_SIZE 128
+#endif
--- gcc/config/rs6000/rs6000.c.jj 2006-01-31 11:20:41.000000000 +0100
+++ gcc/config/rs6000/rs6000.c 2006-02-01 17:16:14.000000000 +0100
@@ -17410,6 +17410,15 @@ rs6000_mangle_fundamental_type (tree typ
if (type == pixel_type_node) return "u7__pixel";
if (type == bool_int_type_node) return "U6__booli";
+#ifdef POWERPC_LINUX
+ /* On powerpc*-*-linux* where -mlong-double-64 used to be
+ the default, mangle DFmode long double as 'e' and
+ TFmode long double as 'g' (__float128 in Itanium ABI). */
+ if (TYPE_MAIN_VARIANT (type) == long_double_type_node
+ && TARGET_LONG_DOUBLE_128)
+ return "g";
+#endif
+
/* For all other types, use normal C++ mangling. */
return NULL;
}
--- gcc/config/rs6000/linux64.h.jj 2006-01-26 16:36:57.000000000 +0100
+++ gcc/config/rs6000/linux64.h 2006-01-31 14:21:51.000000000 +0100
@@ -569,3 +569,8 @@ while (0)
#endif
#define POWERPC_LINUX
+
+/* ppc{32,64} linux has 128-bit long double support in glibc 2.4 and later. */
+#ifdef TARGET_DEFAULT_LONG_DOUBLE_128
+#define RS6000_DEFAULT_LONG_DOUBLE_SIZE 128
+#endif
--- gcc/configure.ac.jj 2006-01-31 11:20:41.000000000 +0100
+++ gcc/configure.ac 2006-01-31 14:20:26.000000000 +0100
@@ -3197,6 +3197,39 @@ if test x$gcc_cv_libc_provides_ssp = xye
[Define if your target C library provides stack protector support])
fi
+# Check if TFmode long double should be used by default or not.
+# Some glibc targets used DFmode long double, but with glibc 2.4
+# and later they can use TFmode.
+case "$target" in
+ powerpc*-*-*gnu* | \
+ sparc*-*-linux* | \
+ s390*-*-linux* | \
+ alpha*-*-linux*)
+ AC_ARG_WITH(long-double-128,
+[ --with-long-double-128 Use 128-bit long double by default.],
+ gcc_cv_target_ldbl128="$with_long_double_128",
+ [gcc_cv_target_ldbl128=no
+ if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x; then
+ if test "x$with_sysroot" = x; then
+ glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-include"
+ elif test "x$with_sysroot" = xyes; then
+ glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-root/usr/include"
+ else
+ glibc_header_dir="${with_sysroot}/usr/include"
+ fi
+ else
+ glibc_header_dir=/usr/include
+ fi
+ grep '^[ ]*#[ ]*define[ ][ ]*__LONG_DOUBLE_MATH_OPTIONAL' \
+ $glibc_header_dir/bits/wordsize.h > /dev/null 2>&1 \
+ && gcc_cv_target_ldbl128=yes])
+ ;;
+esac
+if test x$gcc_cv_target_ldbl128 = xyes; then
+ AC_DEFINE(TARGET_DEFAULT_LONG_DOUBLE_128, 1,
+ [Define if TFmode long double should be the default])
+fi
+
# Find out what GC implementation we want, or may, use.
AC_ARG_WITH(gc,
[ --with-gc={page,zone} choose the garbage collection mechanism to use
--- gcc/configure.jj 2006-01-31 11:20:41.000000000 +0100
+++ gcc/configure 2006-01-31 14:21:03.000000000 +0100
@@ -932,6 +932,7 @@ Optional Packages:
--with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib
--without-libiconv-prefix don't search for libiconv in includedir and libdir
--with-system-libunwind use installed libunwind
+ --with-long-double-128 Use 128-bit long double by default.
--with-gc={page,zone} choose the garbage collection mechanism to use
with the compiler
--with-system-zlib use installed libz
@@ -7642,7 +7643,7 @@ if test "${gcc_cv_prog_makeinfo_modern+s
else
ac_prog_version=`$MAKEINFO --version 2>&1 |
sed -n 's/^.*GNU texinfo.* \([0-9][0-9.]*\).*$/\1/p'`
- echo "configure:7645: version of makeinfo is $ac_prog_version" >&5
+ echo "configure:7646: version of makeinfo is $ac_prog_version" >&5
case $ac_prog_version in
'') gcc_cv_prog_makeinfo_modern=no;;
4.[4-9]*)
@@ -15693,6 +15694,46 @@ _ACEOF
fi
+# Check if TFmode long double should be used by default or not.
+# Some glibc targets used DFmode long double, but with glibc 2.4
+# and later they can use TFmode.
+case "$target" in
+ powerpc*-*-*gnu* | \
+ sparc*-*-linux* | \
+ s390*-*-linux* | \
+ alpha*-*-linux*)
+
+# Check whether --with-long-double-128 or --without-long-double-128 was given.
+if test "${with_long_double_128+set}" = set; then
+ withval="$with_long_double_128"
+ gcc_cv_target_ldbl128="$with_long_double_128"
+else
+ gcc_cv_target_ldbl128=no
+ if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x; then
+ if test "x$with_sysroot" = x; then
+ glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-include"
+ elif test "x$with_sysroot" = xyes; then
+ glibc_header_dir="${exec_prefix}/${target_noncanonical}/sys-root/usr/include"
+ else
+ glibc_header_dir="${with_sysroot}/usr/include"
+ fi
+ else
+ glibc_header_dir=/usr/include
+ fi
+ grep '^ *#[ ]*define[ ][ ]*__LONG_DOUBLE_MATH_OPTIONAL' \
+ $glibc_header_dir/bits/wordsize.h > /dev/null 2>&1 \
+ && gcc_cv_target_ldbl128=yes
+fi;
+ ;;
+esac
+if test x$gcc_cv_target_ldbl128 = xyes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define TARGET_DEFAULT_LONG_DOUBLE_128 1
+_ACEOF
+
+fi
+
# Find out what GC implementation we want, or may, use.
# Check whether --with-gc or --without-gc was given.
--- gcc/config.in.jj 2005-12-27 17:31:45.000000000 +0100
+++ gcc/config.in 2006-01-31 14:20:26.000000000 +0100
@@ -1283,6 +1283,12 @@
#endif
+/* Define if TFmode long double should be the default */
+#ifndef USED_FOR_TARGET
+#undef TARGET_DEFAULT_LONG_DOUBLE_128
+#endif
+
+
/* Define if your target C library provides stack protector support */
#ifndef USED_FOR_TARGET
#undef TARGET_LIBC_PROVIDES_SSP
--- libstdc++-v3/libmath/stubs.c.jj 2005-11-12 18:07:17.000000000 +0100
+++ libstdc++-v3/libmath/stubs.c 2006-01-31 14:20:26.000000000 +0100
@@ -453,3 +453,87 @@ tanhl(long double x)
return tanh((double) x);
}
#endif
+
+#if defined(_GLIBCXX_SYMVER) && defined(PIC) \
+ && defined(_GLIBCXX_LONG_DOUBLE_COMPAT)
+
+#define _GLIBCXX_MATHL_WRAPPER0(name, argdecl, args) \
+double \
+__ ## name ## l_wrapper argdecl \
+{ \
+ return name args; \
+} \
+asm (".symver __ " #name "l_wrapper, " #name "l@GLIBCXX_3.4")
+#define _GLIBCXX_MATHL_WRAPPER(name) \
+ _GLIBCXX_MATHL_WRAPPER0 (name, (double x), (x))
+#define _GLIBCXX_MATHL_WRAPPER2(name) \
+ _GLIBCXX_MATHL_WRAPPER0 (name, (double x, double y), (x, y))
+
+#ifdef HAVE_ACOSL
+_GLIBCXX_MATHL_WRAPPER (acos);
+#endif
+#ifdef HAVE_ASINL
+_GLIBCXX_MATHL_WRAPPER (asin);
+#endif
+#ifdef HAVE_ATAN2L
+_GLIBCXX_MATHL_WRAPPER2 (atan2);
+#endif
+#ifdef HAVE_ATANL
+_GLIBCXX_MATHL_WRAPPER (atan);
+#endif
+#ifdef HAVE_CEILL
+_GLIBCXX_MATHL_WRAPPER (ceil);
+#endif
+#ifdef HAVE_COSHL
+_GLIBCXX_MATHL_WRAPPER (cosh);
+#endif
+#ifdef HAVE_COSL
+_GLIBCXX_MATHL_WRAPPER (cos);
+#endif
+#ifdef HAVE_EXPL
+_GLIBCXX_MATHL_WRAPPER (exp);
+#endif
+#ifdef HAVE_FLOORL
+_GLIBCXX_MATHL_WRAPPER (floor);
+#endif
+#ifdef HAVE_FMODL
+_GLIBCXX_MATHL_WRAPPER2 (fmod);
+#endif
+#ifdef HAVE_FREXPL
+_GLIBCXX_MATHL_WRAPPER0 (frexp, (double x, int *y), (x, y));
+#endif
+#ifdef HAVE_HYPOTL
+_GLIBCXX_MATHL_WRAPPER (hypot);
+#endif
+#ifdef HAVE_LDEXPL
+_GLIBCXX_MATHL_WRAPPER0 (ldexp, (double x, int y), (x, y));
+#endif
+#ifdef HAVE_LOG10L
+_GLIBCXX_MATHL_WRAPPER (log10);
+#endif
+#ifdef HAVE_LOGL
+_GLIBCXX_MATHL_WRAPPER (log);
+#endif
+#ifdef HAVE_MODL
+_GLIBCXX_MATHL_WRAPPER0 (mod, (double x, double *y), (x, y));
+#endif
+#ifdef HAVE_POWL
+_GLIBCXX_MATHL_WRAPPER2 (pow);
+#endif
+#ifdef HAVE_SINHL
+_GLIBCXX_MATHL_WRAPPER (sinh);
+#endif
+#ifdef HAVE_SINL
+_GLIBCXX_MATHL_WRAPPER (sin);
+#endif
+#ifdef HAVE_SQRTL
+_GLIBCXX_MATHL_WRAPPER (sqrt);
+#endif
+#ifdef HAVE_TANHL
+_GLIBCXX_MATHL_WRAPPER (tanh);
+#endif
+#ifdef HAVE_TANL
+_GLIBCXX_MATHL_WRAPPER (tan);
+#endif
+
+#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
--- libstdc++-v3/include/bits/locale_facets.h.jj 2005-12-27 17:31:47.000000000 +0100
+++ libstdc++-v3/include/bits/locale_facets.h 2006-01-31 14:20:26.000000000 +0100
@@ -2111,6 +2111,14 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
ios_base::iostate& __err, void*& __v) const
{ return this->do_get(__in, __end, __io, __err, __v); }
+#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
+ private:
+ iter_type
+ __get(iter_type __in, iter_type __end, ios_base& __io,
+ ios_base::iostate& __err, double& __v) const
+ { return this->__do_get(__in, __end, __io, __err, __v); }
+#endif
+
protected:
/// Destructor.
virtual ~num_get() { }
@@ -2176,13 +2184,25 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
double&) const;
+#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;
+
+#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
//@}
};
@@ -2375,6 +2395,13 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
const void* __v) const
{ return this->do_put(__s, __f, __fill, __v); }
+#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
+ private:
+ iter_type
+ __put(iter_type __s, ios_base& __f, char_type __fill, double __v) const
+ { return this->__do_put(__s, __f, __fill, __v); }
+#endif
+
protected:
template<typename _ValueT>
iter_type
@@ -2438,11 +2465,21 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
virtual iter_type
do_put(iter_type, ios_base&, char_type __fill, double __v) const;
+#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;
+
+#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
//@}
};
@@ -4052,6 +4089,14 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
ios_base::iostate& __err, string_type& __digits) const
{ return this->do_get(__s, __end, __intl, __io, __err, __digits); }
+#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
+ private:
+ iter_type
+ __get(iter_type __s, iter_type __end, bool __intl, ios_base& __io,
+ ios_base::iostate& __err, double& __units) const
+ { return this->__do_get(__s, __end, __intl, __io, __err, __units); }
+#endif
+
protected:
/// Destructor.
virtual
@@ -4064,9 +4109,15 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
* value. This function is a hook for derived classes to change the
* value returned. @see get() for details.
*/
+#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 +4130,12 @@ _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;
+#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<bool _Intl>
iter_type
_M_extract(iter_type __s, iter_type __end, ios_base& __io,
@@ -4168,6 +4225,14 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
char_type __fill, const string_type& __digits) const
{ return this->do_put(__s, __intl, __io, __fill, __digits); }
+#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
+ private:
+ iter_type
+ __put(iter_type __s, bool __intl, ios_base& __io,
+ char_type __fill, double __units) const
+ { return this->__do_put(__s, __intl, __io, __fill, __units); }
+#endif
+
protected:
/// Destructor.
virtual
@@ -4191,9 +4256,15 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
* @param units Place to store result of parsing.
* @return Iterator after writing.
*/
+#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 +4288,12 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill,
const string_type& __digits) const;
+#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<bool _Intl>
iter_type
_M_insert(iter_type __s, ios_base& __io, char_type __fill,
--- libstdc++-v3/libsupc++/tinfo2.cc.jj 2005-11-12 18:07:29.000000000 +0100
+++ libstdc++-v3/libsupc++/tinfo2.cc 2006-02-01 17:06:08.000000000 +0100
@@ -165,3 +165,22 @@ __pointer_catch (const __pbase_type_info
}
} // namespace std
+
+#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
--- libstdc++-v3/scripts/as_symver_filter.jj 2006-01-31 14:20:26.000000000 +0100
+++ libstdc++-v3/scripts/as_symver_filter 2006-01-31 14:20:26.000000000 +0100
@@ -0,0 +1,26 @@
+#!/bin/sh
+# Assembly filter put in between cc1 and as that allows to pretend
+# that .symver symbol, symbol@@SYMBOLVER is supported by replacing
+# all occurences of symbol except symbol@ with a unique symbol name.
+# In addition to this, it handles two artificial assembly directives:
+# .endchunk_start and .endchunk_end.
+# These surround a block of assembly that is placed at the end of
+# the assembly file.
+
+# First argument is the original assembly file (*.sv).
+# Second argument is a temporary file for sed script (*.se).
+# Third argument is either a name of the output assembly file (*.s)
+# or -, in which case the output is stdout.
+LC_ALL=C
+export LC_ALL
+sed -n -e 's/^.*[^ ]*\.symver[ ][ ]*\([A-Za-z0-9_.][A-Za-z0-9_.]*\)[ ]*,[ ]*\1@@.*$/\1/p' \
+ "$1" | \
+sed -e 's/^.*$/s~^&$~_U&~;s~^&[^A-Za-z0-9_.@]~_U\&~;s~\\([^A-Za-z0-9_.]\\)&$~\\1_U&~;s~\\([^A-Za-z0-9_.]\\)&\\([^A-Za-z0-9_.@]\\)~\\1_U&\\2~g;/' \
+ > "$2"
+echo '/^[ ]*\.endchunk_start[ ]*$/,/^[ ]*\.endchunk_end[ ]*$/{/^[ ]*\.endchunk_\(start\|end\)[ ]*$/!H;d};$G' \
+ >> "$2"
+if [ "x$3" = "x-" ]; then
+ sed -f "$2" "$1"
+else
+ sed -f "$2" "$1" > "$3"
+fi
--- libstdc++-v3/src/complex_io.cc.jj 2005-12-27 17:31:49.000000000 +0100
+++ libstdc++-v3/src/complex_io.cc 2006-02-01 13:49:57.000000000 +0100
@@ -92,3 +92,18 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
#endif //_GLIBCXX_USE_WCHAR_T
_GLIBCXX_END_NAMESPACE
+
+#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
--- libstdc++-v3/src/limits.cc.jj 2005-12-27 17:31:49.000000000 +0100
+++ libstdc++-v3/src/limits.cc 2006-02-01 16:35:52.000000000 +0100
@@ -448,3 +448,33 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
const float_round_style numeric_limits<long double>::round_style;
_GLIBCXX_END_NAMESPACE
+
+#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
--- libstdc++-v3/src/Makefile.am.jj 2006-01-03 09:24:34.000000000 +0100
+++ libstdc++-v3/src/Makefile.am 2006-02-01 18:28:31.000000000 +0100
@@ -33,10 +33,15 @@ libstdc++-symbols.ver: ${glibcxx_srcdir
$(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
@@ -193,6 +198,17 @@ concept-inst.lo: concept-inst.cc
concept-inst.o: concept-inst.cc
$(CXXCOMPILE) -D_GLIBCXX_CONCEPT_CHECKS -fimplicit-templates -c $<
+# Use special rules for {,w}locale-inst.cc compilation, as we need to do
+# some dirty assembly massaging when building with _GLIBCXX_LONG_DOUBLE_COMPAT.
+locale-inst.lo: locale-inst.cc
+ $(LTCXXCOMPILE) $(SYMVER_CXXFLAGS) -c $<
+locale-inst.o: locale-inst.cc
+ $(CXXCOMPILE) $(SYMVER_CXXFLAGS) -c $<
+wlocale-inst.lo: wlocale-inst.cc
+ $(LTCXXCOMPILE) $(SYMVER_CXXFLAGS) -c $<
+wlocale-inst.o: wlocale-inst.cc
+ $(CXXCOMPILE) $(SYMVER_CXXFLAGS) -c $<
+
# 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
--- libstdc++-v3/src/Makefile.in.jj 2006-01-03 09:24:34.000000000 +0100
+++ libstdc++-v3/src/Makefile.in 2006-02-01 18:28:47.000000000 +0100
@@ -189,6 +189,7 @@ SECTION_LDFLAGS = @SECTION_LDFLAGS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
+SYMVER_CXXFLAGS = @SYMVER_CXXFLAGS@
SYMVER_FILE = @SYMVER_FILE@
TOPLEVEL_INCLUDES = @TOPLEVEL_INCLUDES@
USE_NLS = @USE_NLS@
@@ -681,10 +682,15 @@ uninstall-am: uninstall-info-am uninstal
@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 +743,17 @@ concept-inst.lo: concept-inst.cc
concept-inst.o: concept-inst.cc
$(CXXCOMPILE) -D_GLIBCXX_CONCEPT_CHECKS -fimplicit-templates -c $<
+# Use special rules for {,w}locale-inst.cc compilation, as we need to do
+# some dirty assembly massaging when building with _GLIBCXX_LONG_DOUBLE_COMPAT.
+locale-inst.lo: locale-inst.cc
+ $(LTCXXCOMPILE) $(SYMVER_CXXFLAGS) -c $<
+locale-inst.o: locale-inst.cc
+ $(CXXCOMPILE) $(SYMVER_CXXFLAGS) -c $<
+wlocale-inst.lo: wlocale-inst.cc
+ $(LTCXXCOMPILE) $(SYMVER_CXXFLAGS) -c $<
+wlocale-inst.o: wlocale-inst.cc
+ $(CXXCOMPILE) $(SYMVER_CXXFLAGS) -c $<
+
# Added bits to build debug library.
@GLIBCXX_BUILD_DEBUG_TRUE@all-local: build_debug
@GLIBCXX_BUILD_DEBUG_TRUE@install-data-local: install_debug
--- libstdc++-v3/src/istream-inst.cc.jj 2006-01-03 09:24:34.000000000 +0100
+++ libstdc++-v3/src/istream-inst.cc 2006-02-01 18:04:45.000000000 +0100
@@ -96,3 +96,17 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
#endif
_GLIBCXX_END_NAMESPACE
+
+#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
--- libstdc++-v3/src/locale-inst.cc.jj 2005-12-27 17:31:49.000000000 +0100
+++ libstdc++-v3/src/locale-inst.cc 2006-02-01 17:57:09.000000000 +0100
@@ -37,6 +37,8 @@
// Instantiation configuration.
#ifndef C
# define C char
+# define Cc "c"
+# define Cs c
#endif
_GLIBCXX_BEGIN_NAMESPACE(std)
@@ -48,6 +50,30 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
template struct __moneypunct_cache<C, true>;
template class moneypunct_byname<C, false>;
template class moneypunct_byname<C, true>;
+#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
+ template<typename _CharT, typename _InIter>
+ _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<true>(__beg, __end, __io, __err, __str);
+ else
+ __beg = _M_extract<false>(__beg, __end, __io, __err, __str);
+ std::__convert_to_v(__str.c_str(), __units, __err, _S_get_c_locale());
+ return __beg;
+ }
+ template<typename _CharT, typename _OutIter>
+ _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 class money_get<C, istreambuf_iterator<C> >;
template class money_put<C, ostreambuf_iterator<C> >;
template
@@ -78,6 +104,26 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
template class numpunct<C>;
template struct __numpunct_cache<C>;
template class numpunct_byname<C>;
+#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
+ template<typename _CharT, typename _InIter>
+ _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;
+ }
+
+ template<typename _CharT, typename _OutIter>
+ _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 class num_get<C, istreambuf_iterator<C> >;
template class num_put<C, ostreambuf_iterator<C> >;
template
@@ -315,3 +361,86 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
#endif
_GLIBCXX_END_NAMESPACE
+
+#ifdef _GLIBCXX_LONG_DOUBLE_COMPAT
+
+#define _GLIBCXX_LDBL_CONCAT7_(a, b, c, d, e, f, g) \
+ a ## b ## c ## d ## e ## f ## g
+#define _GLIBCXX_LDBL_CONCAT7(a, b, c, d, e, f, g) \
+ _GLIBCXX_LDBL_CONCAT7_ (a, b, c, d, e, f, g)
+#define _GLIBCXX_LDBL_CONCAT9_(a, b, c, d, e, f, g, h, i) \
+ a ## b ## c ## d ## e ## f ## g ## h ## i
+#define _GLIBCXX_LDBL_CONCAT9(a, b, c, d, e, f, g, h, i) \
+ _GLIBCXX_LDBL_CONCAT9_ (a, b, c, d, e, f, g, h, i)
+#define _GLIBCXX_LDBL_LCOMPAT1(p1, p2, dbl, ldbl) \
+ extern "C" void \
+ _GLIBCXX_LDBL_CONCAT7 (p1, Cs, p2, Cs, St11char_traitsI, Cs, ldbl) (void) \
+ __attribute__ ((alias (#p1 Cc #p2 Cc "St11char_traitsI" Cc #dbl), weak))
+#define _GLIBCXX_LDBL_LCOMPAT2(p1, p2, dbl, ldbl) \
+ extern "C" void \
+ _GLIBCXX_LDBL_CONCAT9 (p1, Cs, p2, Cs, St11char_traitsI, Cs, ldbl, Cs, e) \
+ (void) \
+ __attribute__ ((alias (#p1 Cc #p2 Cc "St11char_traitsI" Cc #dbl Cc "d"), \
+ weak))
+#define _GLIBCXX_LDBL_LCOMPAT3(p1, p2, dbl, p3, ldbl) \
+ extern "C" void \
+ _GLIBCXX_LDBL_CONCAT9 (p1, Cs, p2, Cs, St11char_traitsI, Cs, ldbl, Cs, p3) \
+ (void) \
+ __attribute__ ((alias (#p1 Cc #p2 Cc "St11char_traitsI" Cc #dbl Cc #p3), \
+ weak))
+_GLIBCXX_LDBL_LCOMPAT1 (_ZNKSt7num_getI, St19istreambuf_iteratorI,
+ EEE5__getES3_S3_RSt8ios_baseRSt12_Ios_IostateRd,
+ EEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRe);
+_GLIBCXX_LDBL_LCOMPAT1 (_ZNKSt7num_getI, St19istreambuf_iteratorI,
+ EEE8__do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRd,
+ EEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRe);
+_GLIBCXX_LDBL_LCOMPAT3 (_ZNKSt7num_putI, St19ostreambuf_iteratorI,
+ EEE15_M_insert_floatIdEES3_S3_RSt8ios_base, cT_,
+ EEE15_M_insert_floatIeEES3_S3_RSt8ios_base);
+_GLIBCXX_LDBL_LCOMPAT2 (_ZNKSt7num_putI, St19ostreambuf_iteratorI,
+ EEE5__putES3_RSt8ios_base,
+ EEE3putES3_RSt8ios_base);
+_GLIBCXX_LDBL_LCOMPAT2 (_ZNKSt7num_putI, St19ostreambuf_iteratorI,
+ EEE8__do_putES3_RSt8ios_base,
+ EEE6do_putES3_RSt8ios_base);
+_GLIBCXX_LDBL_LCOMPAT1 (_ZNKSt9money_getI, St19istreambuf_iteratorI,
+ EEE5__getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRd,
+ EEE3getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRe);
+_GLIBCXX_LDBL_LCOMPAT1 (_ZNKSt9money_getI, St19istreambuf_iteratorI,
+ EEE8__do_getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRd,
+ EEE6do_getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRe);
+_GLIBCXX_LDBL_LCOMPAT2 (_ZNKSt9money_putI, St19ostreambuf_iteratorI,
+ EEE5__putES3_bRSt8ios_base,
+ EEE3putES3_bRSt8ios_base);
+_GLIBCXX_LDBL_LCOMPAT2 (_ZNKSt9money_putI, St19ostreambuf_iteratorI,
+ EEE8__do_putES3_bRSt8ios_base,
+ EEE6do_putES3_bRSt8ios_base);
+
+#if defined(_GLIBCXX_SYMVER) && defined (PIC)
+
+#if __LONG_MAX__ == 2147483647L
+#define _GLIBCXX_LDBL_VTABLE_ENTRY_SIZE 4
+#else
+#define _GLIBCXX_LDBL_VTABLE_ENTRY_SIZE 8
+#endif
+#define _GLIBCXX_LDBL_VTABLE_2(ldbl, size, entsize) \
+ asm ("\n.endchunk_start\n" \
+ ".weak _V" ldbl "\n" \
+ ".set _V" ldbl ", " ldbl "\n" \
+ ".size _V" ldbl ", " #size "*" #entsize "\n" \
+ ".symver _V" ldbl ", " ldbl "@GLIBCXX_3.4\n" \
+ ".symver " ldbl ", " ldbl "@@GLIBCXX_LDBL_3.4\n" \
+ ".type " ldbl ", @object\n" \
+ ".endchunk_end\n")
+#define _GLIBCXX_LDBL_VTABLE_1(ldbl, size, entsize) \
+ _GLIBCXX_LDBL_VTABLE_2 (ldbl, size, entsize)
+#define _GLIBCXX_LDBL_VTABLE(ldbl, size) \
+ _GLIBCXX_LDBL_VTABLE_1 (ldbl, size, _GLIBCXX_LDBL_VTABLE_ENTRY_SIZE)
+_GLIBCXX_LDBL_VTABLE ("_ZTVSt7num_getI"Cc"St19istreambuf_iteratorI"Cc"St11char_traitsI"Cc"EEE", 15);
+_GLIBCXX_LDBL_VTABLE ("_ZTVSt7num_putI"Cc"St19ostreambuf_iteratorI"Cc"St11char_traitsI"Cc"EEE", 12);
+_GLIBCXX_LDBL_VTABLE ("_ZTVSt9money_getI"Cc"St19istreambuf_iteratorI"Cc"St11char_traitsI"Cc"EEE", 6);
+_GLIBCXX_LDBL_VTABLE ("_ZTVSt9money_putI"Cc"St19ostreambuf_iteratorI"Cc"St11char_traitsI"Cc"EEE", 6);
+
+#endif // _GLIBCXX_SYMVER && PIC
+
+#endif // _GLIBCXX_LONG_DOUBLE_COMPAT
--- libstdc++-v3/src/ostream-inst.cc.jj 2006-01-03 09:24:34.000000000 +0100
+++ libstdc++-v3/src/ostream-inst.cc 2006-02-01 18:05:26.000000000 +0100
@@ -97,3 +97,17 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
#endif
_GLIBCXX_END_NAMESPACE
+
+#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
--- libstdc++-v3/src/wlocale-inst.cc.jj 2005-11-12 18:07:30.000000000 +0100
+++ libstdc++-v3/src/wlocale-inst.cc 2006-02-01 17:57:13.000000000 +0100
@@ -35,5 +35,7 @@
#ifdef _GLIBCXX_USE_WCHAR_T
#define C wchar_t
+#define Cc "w"
+#define Cs w
#include "locale-inst.cc"
#endif
--- libstdc++-v3/config/locale/gnu/c_locale.cc.jj 2005-12-27 17:31:51.000000000 +0100
+++ libstdc++-v3/config/locale/gnu/c_locale.cc 2006-02-01 17:10:34.000000000 +0100
@@ -135,3 +135,12 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
const char* const* const locale::_S_categories = __gnu_cxx::category_names;
_GLIBCXX_END_NAMESPACE
+
+#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
--- libstdc++-v3/config/locale/generic/c_locale.cc.jj 2005-12-27 17:31:51.000000000 +0100
+++ libstdc++-v3/config/locale/generic/c_locale.cc 2006-02-01 17:10:23.000000000 +0100
@@ -171,3 +171,12 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
const char* const* const locale::_S_categories = __gnu_cxx::category_names;
_GLIBCXX_END_NAMESPACE
+
+#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
--- libstdc++-v3/config/os/gnu-linux/ldbl-extra.ver.jj 2006-01-31 14:20:26.000000000 +0100
+++ libstdc++-v3/config/os/gnu-linux/ldbl-extra.ver 2006-02-01 18:17:57.000000000 +0100
@@ -0,0 +1,46 @@
+# Appended to version file.
+
+GLIBCXX_LDBL_3.4 {
+ _ZNSt14numeric_limitsIg*;
+ _ZNKSt7num_getI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateRg;
+ _ZNKSt7num_getI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEE5__getES3_S3_RSt8ios_baseRSt12_Ios_IostateRd;
+ _ZNKSt7num_getI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRg;
+ _ZNKSt7num_getI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEE8__do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRd;
+ _ZTVSt7num_getI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEE;
+ _ZNKSt7num_putI[cw]St19ostreambuf_iteratorI[cw]St11char_traitsI[cw]EEE15_M_insert_floatIgEES3_S3_RSt8ios_base[cw]cT_;
+ _ZNKSt7num_putI[cw]St19ostreambuf_iteratorI[cw]St11char_traitsI[cw]EEE3putES3_RSt8ios_base[cw]g;
+ _ZNKSt7num_putI[cw]St19ostreambuf_iteratorI[cw]St11char_traitsI[cw]EEE5__putES3_RSt8ios_base[cw]d;
+ _ZNKSt7num_putI[cw]St19ostreambuf_iteratorI[cw]St11char_traitsI[cw]EEE6do_putES3_RSt8ios_base[cw]g;
+ _ZNKSt7num_putI[cw]St19ostreambuf_iteratorI[cw]St11char_traitsI[cw]EEE8__do_putES3_RSt8ios_base[cw]d;
+ _ZTVSt7num_putI[cw]St19ostreambuf_iteratorI[cw]St11char_traitsI[cw]EEE;
+ _ZNKSt9money_getI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEE3getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRg;
+ _ZNKSt9money_getI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEE5__getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRd;
+ _ZNKSt9money_getI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEE6do_getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRg;
+ _ZNKSt9money_getI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEE8__do_getES3_S3_bRSt8ios_baseRSt12_Ios_IostateRd;
+ _ZTVSt9money_getI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEE;
+ _ZNKSt9money_putI[cw]St19ostreambuf_iteratorI[cw]St11char_traitsI[cw]EEE3putES3_bRSt8ios_base[cw]g;
+ _ZNKSt9money_putI[cw]St19ostreambuf_iteratorI[cw]St11char_traitsI[cw]EEE5__putES3_bRSt8ios_base[cw]d;
+ _ZNKSt9money_putI[cw]St19ostreambuf_iteratorI[cw]St11char_traitsI[cw]EEE6do_putES3_bRSt8ios_base[cw]g;
+ _ZNKSt9money_putI[cw]St19ostreambuf_iteratorI[cw]St11char_traitsI[cw]EEE8__do_putES3_bRSt8ios_base[cw]d;
+ _ZTVSt9money_putI[cw]St19ostreambuf_iteratorI[cw]St11char_traitsI[cw]EEE;
+ _ZNSirsERg;
+ _ZNSolsEg;
+ _ZNSt13basic_istreamIwSt11char_traitsIwEErsERg;
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEElsEg;
+ _ZSt14__convert_to_vIgEvPKcRT_RSt12_Ios_IostateRKP15__locale_struct;
+ _ZStlsIg[cw]St11char_traitsI[cw]EERSt13basic_ostreamIT0_T1_ES6_RKSt7complexIT_E;
+ _ZStrsIg[cw]St11char_traitsI[cw]EERSt13basic_istreamIT0_T1_ES6_RSt7complexIT_E;
+};
+
+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;
+};
--- libstdc++-v3/config/abi/pre/gnu.ver.jj 2006-01-03 09:24:34.000000000 +0100
+++ libstdc++-v3/config/abi/pre/gnu.ver 2006-02-01 18:15:31.000000000 +0100
@@ -90,7 +90,12 @@ GLIBCXX_3.4 {
std::locale::_S_normalize_category*;
std::locale::_[T-Za-z]*;
# std::[A-Zm-r]*;
- std::[A-Zm-n]*;
+ std::[A-Z]*;
+ std::m[^o]*;
+ std::money[^_]*;
+ std::money_base*;
+ std::n[^u]*;
+ std::num[^e_]*;
std::[p-r]*;
std::ostrstream*;
std::out_of_range*;
@@ -254,7 +259,7 @@ GLIBCXX_3.4 {
_ZNSi[0-9][a-h]*;
_ZNSi[0-9][j-z]*;
_ZNSi6ignoreE[il][il];
- _ZNSirsE*;
+ _ZNSirsE*[^g];
# std::basic_istream<wchar_t>
_ZNSt13basic_istreamIwSt11char_traitsIwEEC*;
@@ -263,7 +268,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 +286,7 @@ GLIBCXX_3.4 {
_ZNKSo6sentrycvbEv;
_ZNSo8_M_write*;
_ZNSo[0-9][a-z]*;
- _ZNSolsE*;
+ _ZNSolsE*[^g];
# std::basic_ostream<wchar_t>
_ZNSt13basic_ostreamIwSt11char_traitsIwEEC*;
@@ -294,7 +299,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*;
@@ -324,16 +329,28 @@ GLIBCXX_3.4 {
_ZSt9has_facet*;
# std::num_get
- _ZNKSt7num_getI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEE*;
+ _ZNKSt7num_getI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEE[^58]*[^g];
+ _ZNSt7num_get*;
# std::num_put
- _ZNKSt7num_putI[cw]St19ostreambuf_iteratorI[cw]St11char_traitsI[cw]EEE*;
+ _ZNKSt7num_putI[cw]St19ostreambuf_iteratorI[cw]St11char_traitsI[cw]EEE[^158]*[^g];
+ _ZNKSt7num_putI[cw]St19ostreambuf_iteratorI[cw]St11char_traitsI[cw]EEE1[^5]*;
+ _ZNKSt7num_putI[cw]St19ostreambuf_iteratorI[cw]St11char_traitsI[cw]EEE15_M_insert_floatI[de]*;
+ _ZNSt7num_put*;
# std::money_get
- _ZNKSt9money_getI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEE*;
+ _ZNKSt9money_getI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEE[^58]*[^g];
+ _ZNSt9money_get*;
# std::money_put
- _ZNKSt9money_putI[cw]St19ostreambuf_iteratorI[cw]St11char_traitsI[cw]EEE*;
+ _ZNKSt9money_putI[cw]St19ostreambuf_iteratorI[cw]St11char_traitsI[cw]EEE[^58]*[^g];
+ _ZNSt9money_put*;
+
+ _ZSt9use_facetISt7num_*;
+ _ZSt9use_facetISt9money_*;
+
+ # std::numeric_limits
+ _ZNSt14numeric_limitsI[^g]*;
# std::_Rb_tree
_ZSt18_Rb_tree_decrementPKSt18_Rb_tree_node_base;
@@ -362,7 +379,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;
@@ -661,10 +678,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 +757,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 +772,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;
--- libstdc++-v3/configure.jj 2006-01-31 14:06:41.000000000 +0100
+++ libstdc++-v3/configure 2006-01-31 14:22:48.000000000 +0100
@@ -309,7 +309,7 @@ ac_includes_default="\
# include <unistd.h>
#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 baseline_dir SYMVER_CXXFLAGS 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.
@@ -89646,6 +89646,77 @@ done
+SYMVER_CXXFLAGS=
+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"
+ $CC $CFLAGS -dumpspecs \
+ | sed '/^\*invoke_as:/{N;s/%{!S:-o %|.s |/%{!S:-o %{DPIC:%g.sv |/;a\
+ as_symver_filter %g.sv %g.se %|.s ;:%|.s } |
+;}' > as_symver_specs
+ SYMVER_CXXFLAGS="-specs=\$(top_builddir)/as_symver_specs -B\$(top_srcdir)/scripts/"
+ fi
+esac
+
+
# Propagate the target-specific source directories through the build chain.
ATOMICITY_SRCDIR=config/${atomicity_dir}
ATOMIC_WORD_SRCDIR=config/${atomic_word_dir}
@@ -90819,6 +90890,7 @@ s,@ENABLE_SYMVERS_GNU_NAMESPACE_FALSE@,$
s,@ENABLE_SYMVERS_DARWIN_TRUE@,$ENABLE_SYMVERS_DARWIN_TRUE,;t t
s,@ENABLE_SYMVERS_DARWIN_FALSE@,$ENABLE_SYMVERS_DARWIN_FALSE,;t t
s,@baseline_dir@,$baseline_dir,;t t
+s,@SYMVER_CXXFLAGS@,$SYMVER_CXXFLAGS,;t t
s,@ATOMICITY_SRCDIR@,$ATOMICITY_SRCDIR,;t t
s,@ATOMIC_WORD_SRCDIR@,$ATOMIC_WORD_SRCDIR,;t t
s,@CPU_DEFINES_SRCDIR@,$CPU_DEFINES_SRCDIR,;t t
--- libstdc++-v3/configure.ac.jj 2006-01-26 16:36:02.000000000 +0100
+++ libstdc++-v3/configure.ac 2006-01-31 14:20:26.000000000 +0100
@@ -287,6 +287,30 @@ GLIBCXX_ENABLE_SYMVERS([yes])
# This depends on GLIBCXX_ENABLE_SYMVERS and GLIBCXX_IS_NATIVE.
GLIBCXX_CONFIGURE_TESTSUITE
+SYMVER_CXXFLAGS=
+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"
+ $CC $CFLAGS -dumpspecs \
+ | sed '/^\*invoke_as:/{N;s/%{!S:-o %|.s |/%{!S:-o %{DPIC:%g.sv |/;a\
+ as_symver_filter %g.sv %g.se %|.s ;:%|.s } |
+;}' > as_symver_specs
+ SYMVER_CXXFLAGS="-specs=\$(top_builddir)/as_symver_specs -B\$(top_srcdir)/scripts/"
+ fi
+esac
+AC_SUBST(SYMVER_CXXFLAGS)
+
# Propagate the target-specific source directories through the build chain.
ATOMICITY_SRCDIR=config/${atomicity_dir}
ATOMIC_WORD_SRCDIR=config/${atomic_word_dir}
--- libstdc++-v3/config.h.in.jj 2006-01-31 14:06:41.000000000 +0100
+++ libstdc++-v3/config.h.in 2006-01-31 14:20:26.000000000 +0100
@@ -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
--- libstdc++-v3/Makefile.in.jj 2005-12-27 17:31:55.000000000 +0100
+++ libstdc++-v3/Makefile.in 2006-02-01 18:28:48.000000000 +0100
@@ -187,6 +187,7 @@ SECTION_LDFLAGS = @SECTION_LDFLAGS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
+SYMVER_CXXFLAGS = @SYMVER_CXXFLAGS@
SYMVER_FILE = @SYMVER_FILE@
TOPLEVEL_INCLUDES = @TOPLEVEL_INCLUDES@
USE_NLS = @USE_NLS@
Jakub
- References:
- Re: [RFC PATCH] Optionally use -mlong-double-128 by default on {powerpc{,64},s390{,x},sparc,alpha}-linux
- Re: [RFC PATCH] Optionally use -mlong-double-128 by default on {powerpc{,64},s390{,x},sparc,alpha}-linux
- Re: [RFC PATCH] Optionally use -mlong-double-128 by default on {powerpc{,64},s390{,x},sparc,alpha}-linux