This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
Re: [RFC PATCH] Optionally use -mlong-double-128 by default on {powerpc{,64},s390{,x},sparc,alpha}-linux
- From: Benjamin Kosnik <bkoz at redhat dot com>
- To: Jakub Jelinek <jakub at redhat dot com>
- Cc: rth at redhat dot com, gcc-patches at gcc dot gnu dot org, libstdc++ at gcc dot gnu dot org
- Date: Sat, 28 Jan 2006 15:51:46 -0600
- 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>
> 2006-01-27 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.
> * 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.
> (AM_CXXFLAGS): Add SYMVER_CXXFLAGS.
> * src/Makefile.in: Rebuilt.
OK
> * 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 []: Likewise.
I would like to move the _GLIBCXX_LONG_DOUBLE_COMPAT bits into src/compatibility.cc.
I'm having problems applying this patch to mainline.
In general, I think this approach is sane.
> Also, there is another problem I haven't thought of before.
> 8 virtual tables contain pointers to methods with long double
> arguments:
> _ZTVSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE
> _ZTVSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE
> _ZTVSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE
> _ZTVSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE
> _ZTVSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE
> _ZTVSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE
> _ZTVSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE
> _ZTVSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE
>
> Are any objects of those classes ever created inside of libstdc++.so.6
> or just in user code and passed over to libstdc++ routines?
Created inside libstdc++.
> If the latter, then we can simply (well, certainly not very simple)
> duplicate the virtual table and make it
> _ZTVSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@GLIBCXX_3.4
> plus
> _ZTVSt7num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_LDBL_3.4
-benjamin