[RFC PATCH] Optionally use -mlong-double-128 by default on {powerpc{,64},s390{,x},sparc,alpha}-linux

Benjamin Kosnik bkoz@redhat.com
Sat Jan 28 22:08:00 GMT 2006


> 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



More information about the Gcc-patches mailing list