This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] long double update


Here is an updated version of Jakub's patch from

http://sourceware.org/ml/libc-alpha/2004-07/msg00026.html

I had to make a few changes to get it to merge cleanly with latest CVS 
head.

In moving forward with my ppc64 long double patch from

http://sources.redhat.com/ml/libc-alpha/2005-03/msg00156.html

I'm thinking of breaking up Jakub's patch into arch neutral and arch 
specific portions because I'm not familiar with the sparc specific stuff.

-- 
Dwayne Grant McConnell <decimal@us.ibm.com>
Lotus Notes Mail: Dwayne McConnell [Mail]/Austin/IBM@IBMUS
Lotus Notes Calendar: Dwayne McConnell [Calendar]/Austin/IBM@IBMUS

2004-07-12  Jakub Jelinek  <jakub@redhat.com>

	* extra-lib.mk (object-suffixes-$(lib)): Add
	$($(lib)-extra-object-suffixes).
	* math/math.h [__NO_LONG_DOUBLE_MATH] (__nldbl_nexttowardf): New
	prototype.
	(nexttowardf): Redirect to __nldbl_nexttowardf.
	(nexttoward): Redirect to nextafter.
	(__MATHDECL_2, __MATHDECL_1): Redirect *l functions to
	non-*l versions if __LONG_DOUBLE_MATH_OPTIONAL and
	__NO_LONG_DOUBLE_MATH.
	* math/complex.h (__MATHDECL_1): Likewise.
	* math/bits/mathcalls.h (nexttoward): Don't prototype if
	__NLDBL_COMPAT.
	* misc/sys/cdefs.h: Include bits/wordsize.h.
	(__NLDBL_REDIR, __NLDBL_REDIR2): Define.

	* libio/stdio.h (fprintf, printf, sprintf, vfprintf, vprintf, vsprintf,
	fscanf, scanf, sscanf, snprintf, vsnprintf, vfscanf, vscanf, vsscanf,
	vasprintf, __asprintf, asprintf, vdprintf, dprintf, obstack_printf,
	obstack_vprintf): Add __NLDBL_REDIR.
	* libio/libioP.h: Include bits/wordsize.h.
	[__LONG_DOUBLE_MATH_OPTIONAL]: Include stdbool.h, math_ldbl_opt.h.
	(NLDBL_0, NLDBL_ARG, NLDBL_DECL, DBL_IS_LDBL): Define.
	(___vfprintf, ___vfwprintf, ___vdprintf, ___vsprintf,
	___obstack_vprintf, ___vasprintf, ___vsnprintf, ___vswprintf,
	__IO_vfscanf, __IO_vfwscanf, ___vsscanf, ___vswscanf): New prototypes.
	* wcsmbs/wchar.h: Include bits/wordsize.h.
	(fwprintf, wprintf, swprintf, vfwprintf, vwprintf, vswprintf, fwscanf,
	wscanf, swscanf, vfwscanf, vwscanf, vswscanf): Add __NLDBL_REDIR.
	* stdio-common/printf.h: Include bits/wordsize.h.
	(printf_size): Add __NLDBL_REDIR.
	* libio/libio.h (_IO_vfscanf, _IO_vfprintf, _IO_vfwscanf,
	_IO_vfwprintf): Add __NLDBL_REDIR.
	* libio/swscanf.c: Handle __LONG_DOUBLE_MATH_OPTIONAL.
	* libio/vwprintf.c: Likewise.
	* libio/vsnprintf.c: Likewise.
	* libio/fwprintf.c: Likewise.
	* libio/fwscanf.c: Likewise.
	* libio/obprintf.c: Likewise.
	* libio/wscanf.c: Likewise.
	* libio/iovsprintf.c: Likewise.
	* libio/vwscanf.c: Likewise.
	* libio/vswprintf.c: Likewise.
	* libio/swprintf.c: Likewise.
	* libio/vscanf.c: Likewise.
	* libio/iovsscanf.c: Likewise.
	* libio/iovdprintf.c: Likewise.
	* libio/wprintf.c: Likewise.
	* libio/iovswscanf.c: Likewise.
	* libio/vasprintf.c: Likewise.
	* stdio-common/scanf.c: Likewise.
	* stdio-common/fscanf.c: Likewise.
	* stdio-common/printf_size.c: Likewise.
	* stdio-common/sscanf.c: Likewise.
	* stdio-common/vfscanf.c: Likewise.
	* stdio-common/fprintf.c: Likewise.
	* stdio-common/printf.c: Likewise.
	* stdio-common/asprintf.c: Likewise.
	* stdio-common/vfprintf.c: Likewise.
	* stdio-common/sprintf.c: Likewise.
	* stdio-common/dprintf.c: Likewise.
	* stdio-common/vprintf.c: Likewise.
	* stdio-common/snprintf.c: Likewise.
	* stdio-common/printf_fp.c: Likewise.

	* stdlib/stdlib.h (strtold, strtold_l, __strtold_internal): Add
	__NLDBL_REDIR2.
	* wcsmbs/wchar.h (wcstold, wcstold_l, __wcstold_internal): Likewise.
	* stdlib/strtod_l.c: Include math_ldbl_opt.h.
	(____STRTOF_INTERNAL): Define.
	(INTERNAL (__STRTOF)): Rename to ____STRTOF_INTERNAL.
	(__STRTOF): Call ____STRTOF_INTERNAL instead.
	[LONG_DOUBLE_COMPAT] (strtold_l, wcstold_l, __strtold_l, __wcstold_l):
	Add compatibility symbols.
	* stdlib/strtod.c: Include math_ldbl_opt.h.
	[LONG_DOUBLE_COMPAT] (strtold, wcstold, __strtold_internal,
	__wcstold_internal): Add compatibility symbols.
	* stdlib/strtold.c: Include bits/wordsize.h, wchar.h.
	(NEW, NEW1): Define.
	(__new_strtold, __new_wcstold): New prototypes.
	(____new_strtold_internal, ____new_wcstold_internal): Likewise.
	Add libc_hidden_proto.
	(STRTOF): Define to NEW (*told).
	[__LONG_DOUBLE_MATH_OPTIONAL] (wcstold, strtold): Add
	long_double_symbol.
	[__LONG_DOUBLE_MATH_OPTIONAL] (__wcstold_internal,
	__strtold_internal): Likewise. Add libc_hidden_ver.

	* stdlib/stdlib.h (qecvt, qfcvt, qgcvt, qecvt_r, qfcvt_r): Add
	__NLDBL_REDIR2.
	* include/stdlib.h (ecvt_r, fcvt_r, qecvt_r, qfcvt_r): Remove
	libc_hidden_proto.
	(__ecvt, __fcvt, __gcvt, __ecvt_r, __fcvt_r, __qecvt, __qfcvt,
	__qgcvt, __qecvt_r, __qfcvt_r): New prototypes.
	* misc/efgcvt_r.c: Include shlib-compat.h.
	(LONG_DOUBLE_CVT): Define.
	(__APPEND, __APPEND2): Define.
	(*fcvt_r): Use __APPEND instead of APPEND.  Remove libc_hidden_def.
	(*ecvt_r): Likewise.
	(cvt_symbol): Define.  Use it on fcvt_r and ecvt_r.
	* misc/efgcvt.c: Include shlib-compat.h.
	(LONG_DOUBLE_CVT): Define.
	(__APPEND, __APPEND2): Define.
	(fcvt): Use __APPEND instead of APPEND.  Remove libc_hidden_def.
	(ecvt, gcvt): Likewise.
	(cvt_symbol): Define.  Use it on fcvt, ecvt and gcvt.

	* stdlib/monetary.h: Include bits/wordsize.h.
	(strfmon, strfmon_l): Add __NLDBL_REDIR.
	* include/monetary.h: Include stdbool.h and bits/wordsize.h.
	(__vstrfmon_l): Add bool argument if __LONG_DOUBLE_MATH_OPTIONAL.
	* stdlib/strfmon.c: Handle __LONG_DOUBLE_MATH_OPTIONAL.
	* stdlib/strfmon_l.c: Handle __LONG_DOUBLE_MATH_OPTIONAL.

	* math/conj.c: Moved to...
	* sysdeps/generic/conj.c: ... here.  New file.
	* math/carg.c: Moved to...
	* sysdeps/generic/carg.c: ... here. New file.
	* math/cabsl.c: Moved to...
	* sysdeps/generic/cabsl.c: ... here. New file.
	* math/cimagl.c: Moved to...
	* sysdeps/generic/cimagl.c: ... here. New file.
	* math/cabs.c: Moved to...
	* sysdeps/generic/cabs.c: ... here. New file.
	* math/conjl.c: Moved to...
	* sysdeps/generic/conjl.c: ... here. New file.
	* math/creall.c: Moved to...
	* sysdeps/generic/creall.c: ... here. New file.
	* math/creal.c: Moved to...
	* sysdeps/generic/creal.c: ... here. New file.
	* math/cimag.c: Moved to...
	* sysdeps/generic/cimag.c: ... here. New file.
	* math/cargl.c: Moved to...
	* sysdeps/generic/cargl.c: ... here. New file.

	* sysdeps/generic/math_ldbl_opt.h: New file.
	* sysdeps/generic/w_j1l.c (j1l, y1l): Rename to __
	prefixed variants.  Add weak_alias.
	* sysdeps/generic/w_j0l.c (j0l, y0l): Likewise.
	* sysdeps/generic/w_jnl.c (jnl, ynl): Likewise.
	* sysdeps/ieee754/ldbl-96/s_nexttoward.c (__nexttowardl): Remove
	strong_alias.
	(nexttowardl): Remove weak_alias.
	* sysdeps/ieee754/ldbl-96/s_erfl.c (__erfl, __erfcl): Remove
	strong_alias.
	(erfl, erfcl): Remove weak_alias.

	* sysdeps/ieee754/ldbl-64-128/s_asinhl.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_atanl.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_cbrtl.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_ceill.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_copysignl.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_cosl.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_erfl.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_expm1l.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_fabsl.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_finitel.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_floorl.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_frexpl.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_ilogbl.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_isinfl.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_isnanl.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_llrintl.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_llroundl.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_log1pl.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_logbl.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_lrintl.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_lroundl.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_modfl.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_nearbyintl.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_nextafterl.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_nexttoward.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_nexttowardf.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_nexttowardfd.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_remquol.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_rintl.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_roundl.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_scalblnl.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_scalbnl.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_signbitl.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_sincosl.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_sinl.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_tanhl.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_tanl.c: New file.
	* sysdeps/ieee754/ldbl-64-128/s_truncl.c: New file.
	* sysdeps/ieee754/ldbl-64-128/strtold_l.c: New file.
	* sysdeps/ieee754/ldbl-64-128/w_expl.c: New file.
	* sysdeps/ieee754/ldbl-opt/Makefile: New file.
	* sysdeps/ieee754/ldbl-opt/cabs.c: New file.
	* sysdeps/ieee754/ldbl-opt/cabsl.c: New file.
	* sysdeps/ieee754/ldbl-opt/carg.c: New file.
	* sysdeps/ieee754/ldbl-opt/cargl.c: New file.
	* sysdeps/ieee754/ldbl-opt/cimag.c: New file.
	* sysdeps/ieee754/ldbl-opt/cimagl.c: New file.
	* sysdeps/ieee754/ldbl-opt/conj.c: New file.
	* sysdeps/ieee754/ldbl-opt/conjl.c: New file.
	* sysdeps/ieee754/ldbl-opt/creal.c: New file.
	* sysdeps/ieee754/ldbl-opt/creall.c: New file.
	* sysdeps/ieee754/ldbl-opt/libio-compat.c: New file.
	* sysdeps/ieee754/ldbl-opt/math_ldbl_opt.h: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-acos.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-acosh.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-asin.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-asinh.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-asprintf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-atan.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-atan2.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-atanh.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-cabs.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-cacos.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-cacosh.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-carg.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-casin.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-casinh.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-catan.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-catanh.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-cbrt.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-ccos.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-ccosh.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-ceil.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-cexp.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-cimag.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-clog.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-clog10.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-compat.h: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-conj.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-copysign.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-cos.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-cosh.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-cpow.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-cproj.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-creal.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-csin.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-csinh.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-csqrt.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-ctan.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-ctanh.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-dprintf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-drem.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-erf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-erfc.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-exp.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-exp10.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-exp2.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-expm1.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-fabs.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-fdim.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-finite.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-floor.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-fma.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-fmax.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-fmin.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-fmod.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-fprintf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-frexp.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-fscanf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-fwprintf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-fwscanf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-gamma.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-hypot.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-ilogb.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-iovfscanf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-isinf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-isnan.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-j0.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-j1.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-jn.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-ldexp.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-lgamma.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-lgamma_r.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-llrint.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-llround.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-log.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-log10.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-log1p.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-log2.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-logb.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-lrint.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-lround.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-modf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-nan.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-nearbyint.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-nextafter.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-nexttoward.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-nexttowardf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-obstack_printf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-obstack_vprintf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-pow.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-pow10.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-printf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-printf_fp.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-printf_size.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-qecvt.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-qecvt_r.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-qfcvt.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-qfcvt_r.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-qgcvt.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-remainder.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-remquo.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-rint.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-round.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-scalb.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-scalbln.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-scalbn.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-scanf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-signbit.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-significand.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-sin.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-sincos.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-sinh.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-snprintf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-sprintf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-sqrt.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-sscanf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-strtold.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-strtold_l.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-strtoldint.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-swprintf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-swscanf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-tan.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-tanh.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-tgamma.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-trunc.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-vasprintf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-vdprintf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-vfprintf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-vfscanf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-vfwprintf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-vfwscanf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-vprintf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-vscanf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-vsnprintf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-vsprintf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-vsscanf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-vswprintf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-vswscanf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-vwprintf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-vwscanf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-wcstold.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-wcstold_l.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-wcstoldint.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-wprintf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-wscanf.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-y0.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-y1.c: New file.
	* sysdeps/ieee754/ldbl-opt/nldbl-yn.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_asinh.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_atan.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_cacos.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_cacosh.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_cacoshl.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_cacosl.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_casin.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_casinh.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_casinhl.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_casinl.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_catan.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_catanh.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_catanhl.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_catanl.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_cbrt.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_ccos.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_ccosh.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_ccoshl.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_ccosl.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_ceil.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_cexp.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_cexpl.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_clog.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_clog10.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_clog10l.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_clogl.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_copysign.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_cpow.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_cpowl.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_cproj.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_cprojl.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_csin.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_csinh.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_csinhl.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_csinl.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_csqrt.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_csqrtl.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_ctan.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_ctanh.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_ctanhl.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_ctanl.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_erf.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_expm1.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_fabs.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_fdim.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_fdiml.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_finite.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_floor.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_fma.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_fmal.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_fmax.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_fmaxl.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_fmin.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_fminl.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_frexp.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_ilogb.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_isinf.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_isnan.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_ldexp.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_ldexpl.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_llrint.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_llround.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_log1p.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_logb.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_lrint.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_lround.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_modf.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_nan.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_nanl.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_nearbyint.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_nextafter.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_remquo.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_rint.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_round.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_scalbln.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_scalbn.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_signbit.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_significand.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_significandl.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_sin.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_sincos.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_tan.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_tanh.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_trunc.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_acos.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_acosh.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_acoshl.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_acosl.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_asin.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_asinl.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_atan2.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_atan2l.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_atanh.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_atanhl.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_cosh.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_coshl.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_drem.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_dreml.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_exp.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_exp10.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_exp10l.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_exp2.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_exp2l.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_fmod.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_fmodl.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_hypot.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_hypotl.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_j0.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_j0l.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_j1.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_j1l.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_jn.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_jnl.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_lgamma.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_lgamma_r.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_lgammal.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_lgammal_r.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_log.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_log10.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_log10l.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_log2.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_log2l.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_logl.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_pow.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_powl.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_remainder.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_remainderl.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_scalb.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_scalbl.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_sinh.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_sinhl.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_sqrt.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_sqrtl.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_tgamma.c: New file.
	* sysdeps/ieee754/ldbl-opt/w_tgammal.c: New file.

	* sysdeps/unix/sysv/linux/sparc/bits/wordsize.h: New file.
	* sysdeps/unix/sysv/linux/sparc/sparc32/Implies: New file.
	* sysdeps/unix/sysv/linux/sparc/sparc32/configure.in: New file.
	* sysdeps/unix/sysv/linux/sparc/sparc32/configure: New file.
	* sysdeps/sparc/sparc32/Implies: Move ldbl-128 first and flt-32
	after dbl-64.
	* sysdeps/unix/sysv/linux/sparc/sparc32/Makefile (long-double-fcts):
	Set to optional.
	(long-double-fcts-ver): Set to GLIBC_2_3_4.
	(sysdep-CFLAGS): Add -mlong-double-128.
	* sysdeps/unix/sysv/linux/sparc/sparc32/Versions (libc): Add
	functions which use IEEE quad long double for GLIBC_2.3.4.
	Add __nldbl_* wrappers for GLIBC_2.3.4.
	(libm): Add functions which use IEEE quad long double for GLIBC_2.3.4.
	Add __nldbl_nexttowardf@@GLIBC_2.3.4.
	* sysdeps/sparc/sparc32/fpu/s_fabsl.c: New file.
	* sysdeps/sparc/sparc32/fpu/s_fabs.c: New file.
	* sysdeps/sparc/sparc32/fpu/s_fabsf.S: New file.
	* sysdeps/sparc/sparc32/fpu/e_sqrtl.c: New file.
	* sysdeps/sparc/sparc32/soft-fp/q_qtoui.c: Removed.
	* sysdeps/sparc/sparc32/soft-fp/q_uxtoq.c: Removed.
	* sysdeps/sparc/sparc32/soft-fp/q_qtox.c: Removed.
	* sysdeps/sparc/sparc32/soft-fp/q_uitoq.c: Removed.
	* sysdeps/sparc/sparc32/soft-fp/q_xtoq.c: Removed.
	* sysdeps/sparc/sparc32/soft-fp/q_qtoux.c: Removed.
	* sysdeps/sparc/sparc32/soft-fp/q_lltoq.c: New file.
	* sysdeps/sparc/sparc32/soft-fp/q_utoq.c: New file.
	* sysdeps/sparc/sparc32/soft-fp/q_qtou.c: New file.
	* sysdeps/sparc/sparc32/soft-fp/q_ulltoq.c: New file.
	* sysdeps/sparc/sparc32/soft-fp/q_qtoull.c: New file.
	* sysdeps/sparc/sparc32/soft-fp/q_qtoll.c: New file.
	* sysdeps/sparc/sparc32/soft-fp/Versions: New file.
	* sysdeps/sparc/fpu/bits/mathinline.h (__unordered_cmp,
	__unordered_v9cmp): Define differently depending on
	-m32 -mlong-double-{64,128}.
	(__signbitl, sqrtl, __ieee754_sqrtl): New inlines.
	* sysdeps/sparc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove.
	* sysdeps/sparc/sparc32/soft-fp/Makefile (sparc32-quad-routines):
	Set.
	(sysdep-routines): Add sparc32-quad-routines.
	* sysdeps/sparc/sparc32/soft-fp/sfp-machine.h: Include stdlib.h.
	(FP_HANDLE_EXCEPTIONS): Call ___Q_simulate_exceptions as a normal
	function.
	* sysdeps/sparc/sparc32/soft-fp/q_sqrt.c (__ieee754_sqrtl): New
	alias to _Q_sqrt.
	* sysdeps/sparc/sparc32/soft-fp/q_div.c (_Q_div): Fix a typo.
	* sysdeps/sparc/sparc64/soft-fp/sfp-machine.h: Include stdlib.h.
	* sysdeps/sparc/sparc32/fpu/libm-test-ulps: Update.

diff -urN libc.orig/extra-lib.mk libc/extra-lib.mk
--- libc.orig/extra-lib.mk	2004-12-02 17:54:47.000000000 -0500
+++ libc/extra-lib.mk	2005-11-11 13:30:38.733606736 -0500
@@ -9,7 +9,9 @@
 lib := $(firstword $(extra-libs-left))
 extra-libs-left := $(filter-out $(lib),$(extra-libs-left))
 
-object-suffixes-$(lib) := $(filter-out $($(lib)-inhibit-o),$(object-suffixes))
+object-suffixes-$(lib) := $(filter-out $($(lib)-inhibit-o),\
+				       $(object-suffixes) \
+				       $($(lib)-extra-object-suffixes))
 
 ifneq (,$($(lib)-static-only-routines))
 ifneq (,$(filter yesyes%,$(build-shared)$(elf)$($(lib).so-version)))
diff -urN libc.orig/include/monetary.h libc/include/monetary.h
--- libc.orig/include/monetary.h	2004-03-14 15:43:05.000000000 -0500
+++ libc/include/monetary.h	2005-11-11 13:30:38.000000000 -0500
@@ -1,5 +1,7 @@
 #include <stdlib/monetary.h>
 #include <stdarg.h>
+#include <stdio.h>
+#include <libioP.h>
 
 extern ssize_t __vstrfmon_l (char *s, size_t maxsize, __locale_t loc,
-			     const char *format, va_list ap);
+			     const char *format, va_list ap NLDBL_DECL);
diff -urN libc.orig/include/stdlib.h libc/include/stdlib.h
--- libc.orig/include/stdlib.h	2005-07-15 06:47:18.000000000 -0400
+++ libc/include/stdlib.h	2005-11-11 13:30:38.683614336 -0500
@@ -23,10 +23,6 @@
 libc_hidden_proto (getenv)
 libc_hidden_proto (bsearch)
 libc_hidden_proto (qsort)
-libc_hidden_proto (ecvt_r)
-libc_hidden_proto (fcvt_r)
-libc_hidden_proto (qecvt_r)
-libc_hidden_proto (qfcvt_r)
 libc_hidden_proto (lrand48_r)
 libc_hidden_proto (wctomb)
 libc_hidden_proto (__secure_getenv)
@@ -184,6 +180,28 @@
   return ____strtoull_l_internal (__nptr, __endptr, __base, 0, __loc);
 }
 
+extern char *__ecvt (double __value, int __ndigit, int *__restrict __decpt,
+		     int *__restrict __sign);
+extern char *__fcvt (double __value, int __ndigit, int *__restrict __decpt,
+		     int *__restrict __sign);
+extern char *__gcvt (double __value, int __ndigit, char *__buf);
+extern int __ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
+		     int *__restrict __sign, char *__restrict __buf,
+		     size_t __len);
+extern int __fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
+		     int *__restrict __sign, char *__restrict __buf,
+		     size_t __len);
+extern char *__qecvt (long double __value, int __ndigit,
+		      int *__restrict __decpt, int *__restrict __sign);
+extern char *__qfcvt (long double __value, int __ndigit,
+		      int *__restrict __decpt, int *__restrict __sign);
+extern char *__qgcvt (long double __value, int __ndigit, char *__buf);
+extern int __qecvt_r (long double __value, int __ndigit,
+		      int *__restrict __decpt, int *__restrict __sign,
+		      char *__restrict __buf, size_t __len);
+extern int __qfcvt_r (long double __value, int __ndigit,
+		      int *__restrict __decpt, int *__restrict __sign,
+		      char *__restrict __buf, size_t __len);
 
 # ifndef NOT_IN_libc
 #  undef MB_CUR_MAX
diff -urN libc.orig/libio/fwprintf.c libc/libio/fwprintf.c
--- libc.orig/libio/fwprintf.c	2001-08-17 03:05:37.000000000 -0400
+++ libc/libio/fwprintf.c	2005-11-11 13:30:38.000000000 -0500
@@ -1,4 +1,5 @@
-/* Copyright (C) 1991, 1997, 1999, 2000, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1997, 1999, 2000, 2001, 2004
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -16,11 +17,11 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
+#include "libioP.h"
 #include <stdarg.h>
 #include <stdio.h>
 #include <wchar.h>
 
-
 /* Write formatted output to STREAM from the format string FORMAT.  */
 /* VARARGS2 */
 int
@@ -30,9 +31,15 @@
   int done;
 
   va_start (arg, format);
-  done = __vfwprintf (stream, format, arg);
+  done = ___vfwprintf (stream, format, arg NLDBL_0);
   va_end (arg);
 
   return done;
 }
+
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+weak_alias (__fwprintf, ___fwprintf)
+long_double_symbol (libc, ___fwprintf, fwprintf);
+#else
 weak_alias (__fwprintf, fwprintf)
+#endif
diff -urN libc.orig/libio/fwscanf.c libc/libio/fwscanf.c
--- libc.orig/libio/fwscanf.c	2001-07-06 00:54:54.000000000 -0400
+++ libc/libio/fwscanf.c	2005-11-11 13:30:38.000000000 -0500
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1997, 1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1997, 1999, 2000, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -16,6 +16,7 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
+#include <libioP.h>
 #include <stdarg.h>
 #include <stdio.h>
 #include <wchar.h>
@@ -23,14 +24,20 @@
 /* Read formatted input from STREAM according to the format string FORMAT.  */
 /* VARARGS2 */
 int
-fwscanf (FILE *stream, const wchar_t *format, ...)
+__fwscanf (FILE *stream, const wchar_t *format, ...)
 {
   va_list arg;
   int done;
 
   va_start (arg, format);
-  done = __vfwscanf (stream, format, arg);
+  done = __IO_vfwscanf (stream, format, arg, NULL NLDBL_0);
   va_end (arg);
 
   return done;
 }
+
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+long_double_symbol (libc, __fwscanf, fwscanf);
+#else
+strong_alias (__fwscanf, fwscanf)
+#endif
diff -urN libc.orig/libio/iovdprintf.c libc/libio/iovdprintf.c
--- libc.orig/libio/iovdprintf.c	2003-03-27 06:53:59.000000000 -0500
+++ libc/libio/iovdprintf.c	2005-11-11 13:30:38.000000000 -0500
@@ -1,4 +1,5 @@
-/* Copyright (C) 1995,1997-2000,2001,2002,2003 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -29,10 +30,7 @@
 #include <stdio_ext.h>
 
 int
-_IO_vdprintf (d, format, arg)
-     int d;
-     const char *format;
-     _IO_va_list arg;
+___vdprintf (int d, const char *format, _IO_va_list arg NLDBL_DECL)
 {
   struct _IO_FILE_plus tmpfil;
   struct _IO_wide_data wd;
@@ -57,13 +55,21 @@
 		     _IO_NO_READS+_IO_NO_WRITES+_IO_IS_APPENDING)
      | _IO_DELETE_DONT_CLOSE);
 
-  done = INTUSE(_IO_vfprintf) (&tmpfil.file, format, arg);
+  done = ___vfprintf (&tmpfil.file, format, arg NLDBL_ARG);
 
   _IO_FINISH (&tmpfil.file);
 
   return done;
 }
 
-#ifdef weak_alias
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+int
+_IO_vdprintf (int d, const char *format, _IO_va_list arg)
+{
+  return ___vdprintf (d, format, arg, 0);
+}
+long_double_symbol (libc, _IO_vdprintf, vdprintf);
+#elif defined weak_alias
+strong_alias (___vdprintf, _IO_vdprintf)
 weak_alias (_IO_vdprintf, vdprintf)
 #endif
diff -urN libc.orig/libio/iovsprintf.c libc/libio/iovsprintf.c
--- libc.orig/libio/iovsprintf.c	2003-05-27 03:39:21.000000000 -0400
+++ libc/libio/iovsprintf.c	2005-11-11 13:30:38.000000000 -0500
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1997-2003 Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1997-2003, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -25,14 +25,13 @@
    This exception applies to code released by its copyright holders
    in files containing the exception.  */
 
-#include "libioP.h"
+#include <libioP.h>
+#include <stdio.h>
 #include "strfile.h"
 
 int
-_IO_vsprintf (string, format, args)
-     char *string;
-     const char *format;
-     _IO_va_list args;
+___vsprintf (char *string, const char *format, _IO_va_list args
+	     NLDBL_DECL)
 {
   _IO_strfile sf;
   int ret;
@@ -43,12 +42,23 @@
   _IO_no_init (&sf._sbf._f, _IO_USER_LOCK, -1, NULL, NULL);
   _IO_JUMPS ((struct _IO_FILE_plus *) &sf._sbf) = &_IO_str_jumps;
   _IO_str_init_static_internal (&sf, string, -1, string);
-  ret = INTUSE(_IO_vfprintf) ((_IO_FILE *) &sf._sbf, format, args);
+  ret = ___vfprintf ((_IO_FILE *) &sf._sbf, format, args NLDBL_ARG);
   _IO_putc_unlocked ('\0', (_IO_FILE *) &sf._sbf);
   return ret;
 }
-INTDEF(_IO_vsprintf)
 
-#ifdef weak_alias
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+int
+__IO_vsprintf (char *string, const char *format, _IO_va_list args)
+{
+  return ___vsprintf (string, format, args, 0);
+}
+weak_alias (__IO_vsprintf, __vsprintf)
+long_double_symbol (libc, __IO_vsprintf, _IO_vsprintf);
+long_double_symbol (libc, __vsprintf, vsprintf);
+INTDEF2(__IO_vsprintf, _IO_vsprintf)
+#elif defined weak_alias
+strong_alias (___vsprintf, _IO_vsprintf)
+INTDEF(_IO_vsprintf)
 weak_alias (_IO_vsprintf, vsprintf)
 #endif
diff -urN libc.orig/libio/iovsscanf.c libc/libio/iovsscanf.c
--- libc.orig/libio/iovsscanf.c	2003-05-27 03:39:21.000000000 -0400
+++ libc/libio/iovsscanf.c	2005-11-11 13:30:38.000000000 -0500
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1997-2003 Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1997-2003, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -25,14 +25,12 @@
    This exception applies to code released by its copyright holders
    in files containing the exception.  */
 
-#include "libioP.h"
+#include <libioP.h>
 #include "strfile.h"
 
 int
-_IO_vsscanf (string, format, args)
-     const char *string;
-     const char *format;
-     _IO_va_list args;
+___vsscanf (const char *string, const char *format, _IO_va_list args
+	    NLDBL_DECL)
 {
   int ret;
   _IO_strfile sf;
@@ -42,11 +40,23 @@
   _IO_no_init (&sf._sbf._f, _IO_USER_LOCK, -1, NULL, NULL);
   _IO_JUMPS ((struct _IO_FILE_plus *) &sf._sbf) = &_IO_str_jumps;
   _IO_str_init_static_internal (&sf, (char*)string, 0, NULL);
-  ret = INTUSE(_IO_vfscanf) ((_IO_FILE *) &sf._sbf, format, args, NULL);
+  ret = __IO_vfscanf ((_IO_FILE *) &sf._sbf, format, args, NULL NLDBL_ARG);
   return ret;
 }
 
-#ifdef weak_alias
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+
+int
+weak_function
+_IO_vsscanf (const char *string, const char *format, _IO_va_list args)
+{
+  return ___vsscanf (string, format, args, 0);
+}
+weak_alias (_IO_vsscanf, __IO_vsscanf)
+long_double_symbol (libc, _IO_vsscanf, __vsscanf);
+long_double_symbol (libc, __IO_vsscanf, vsscanf);
+#elif defined weak_alias
+strong_alias (___vsscanf, _IO_vsscanf)
 weak_alias (_IO_vsscanf, __vsscanf)
 weak_alias (_IO_vsscanf, vsscanf)
 #endif
diff -urN libc.orig/libio/iovswscanf.c libc/libio/iovswscanf.c
--- libc.orig/libio/iovswscanf.c	2002-08-04 16:37:03.000000000 -0400
+++ libc/libio/iovswscanf.c	2005-11-11 13:30:38.000000000 -0500
@@ -1,4 +1,5 @@
-/* Copyright (C) 1993, 1997-2000, 2001, 2002 Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1997, 1998, 1999, 2000, 2001, 2002, 2004
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -30,10 +31,8 @@
 #include <wchar.h>
 
 int
-vswscanf (string, format, args)
-     const wchar_t *string;
-     const wchar_t *format;
-     _IO_va_list args;
+___vswscanf (const wchar_t *string, const wchar_t *format, _IO_va_list args
+	     NLDBL_DECL)
 {
   int ret;
   _IO_strfile sf;
@@ -44,7 +43,20 @@
   _IO_no_init (&sf._sbf._f, _IO_USER_LOCK, 0, &wd, &_IO_wstr_jumps);
   _IO_fwide (&sf._sbf._f, 1);
   _IO_wstr_init_static (&sf._sbf._f, (wchar_t *)string, 0, NULL);
-  ret = _IO_vfwscanf ((_IO_FILE *) &sf._sbf, format, args, NULL);
+  ret = __IO_vfwscanf ((_IO_FILE *) &sf._sbf, format, args, NULL NLDBL_ARG);
   return ret;
 }
+
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+
+int
+__vswscanf (const wchar_t *string, const wchar_t *format, _IO_va_list args)
+{
+  return ___vswscanf (string, format, args, 0);
+}
+long_double_symbol (libc, __vswscanf, vswscanf);
+libc_hidden_ver (__vswscanf, vswscanf)
+#else
+strong_alias (___vswscanf, vswscanf)
 libc_hidden_def (vswscanf)
+#endif
diff -urN libc.orig/libio/libio.h libc/libio/libio.h
--- libc.orig/libio/libio.h	2005-02-16 20:16:15.000000000 -0500
+++ libc/libio/libio.h	2005-11-11 13:30:38.660617832 -0500
@@ -471,10 +471,13 @@
 # define _IO_cleanup_region_end(_Doit) /**/
 #endif /* !_IO_MTSAFE_IO */
 
-extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict,
-			_IO_va_list, int *__restrict) __THROW;
-extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict,
-			 _IO_va_list) __THROW;
+extern int __NLDBL_REDIR (_IO_vfscanf,
+			  (_IO_FILE * __restrict, const char * __restrict,
+			   _IO_va_list, int *__restrict)) __THROW;
+extern int __NLDBL_REDIR (_IO_vfprintf,
+			  (_IO_FILE *__restrict, const char *__restrict,
+			   _IO_va_list)) __THROW;
+
 extern _IO_ssize_t _IO_padn (_IO_FILE *, int, _IO_ssize_t) __THROW;
 extern _IO_size_t _IO_sgetn (_IO_FILE *, void *, _IO_size_t) __THROW;
 
@@ -520,10 +523,13 @@
      __result; })
 # endif
 
-extern int _IO_vfwscanf (_IO_FILE * __restrict, const wchar_t * __restrict,
-			 _IO_va_list, int *__restrict) __THROW;
-extern int _IO_vfwprintf (_IO_FILE *__restrict, const wchar_t *__restrict,
-			  _IO_va_list) __THROW;
+extern int __NLDBL_REDIR (_IO_vfwscanf,
+			  (_IO_FILE * __restrict, const wchar_t * __restrict,
+			   _IO_va_list, int *__restrict)) __THROW;
+extern int __NLDBL_REDIR (_IO_vfwprintf,
+			  (_IO_FILE *__restrict, const wchar_t *__restrict,
+			   _IO_va_list)) __THROW;
+
 extern _IO_ssize_t _IO_wpadn (_IO_FILE *, wint_t, _IO_ssize_t) __THROW;
 extern void _IO_free_wbackup_area (_IO_FILE *) __THROW;
 #endif
diff -urN libc.orig/libio/libioP.h libc/libio/libioP.h
--- libc.orig/libio/libioP.h	2004-11-27 14:23:30.000000000 -0500
+++ libc/libio/libioP.h	2005-11-11 13:30:38.663617376 -0500
@@ -998,3 +998,49 @@
   if ((fp->_flags & _IO_USER_LOCK) == 0)
     _IO_funlockfile (fp);
 }
+
+#include <bits/wordsize.h>
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+# include <stdbool.h>
+# include <math_ldbl_opt.h>
+# define NLDBL_0	, 0
+# define NLDBL_ARG	, dbl_is_ldbl
+# define NLDBL_DECL	, bool dbl_is_ldbl
+# define DBL_IS_LDBL	dbl_is_ldbl
+#else
+# include <math.h>
+# define NLDBL_0
+# define NLDBL_ARG
+# define NLDBL_DECL
+# ifdef __NO_LONG_DOUBLE_MATH
+#  define DBL_IS_LDBL	1
+# else
+#  define DBL_IS_LDBL	0
+# endif
+#endif
+
+extern int ___vfprintf (_IO_FILE *__restrict, const char *__restrict,
+			_IO_va_list NLDBL_DECL) attribute_hidden;
+extern int ___vfwprintf (_IO_FILE *__restrict, const wchar_t *__restrict,
+			_IO_va_list NLDBL_DECL) attribute_hidden;
+extern int ___vdprintf (int, const char *, _IO_va_list NLDBL_DECL)
+     attribute_hidden;
+extern int ___vsprintf (char *, const char *, _IO_va_list NLDBL_DECL)
+     attribute_hidden;
+struct obstack;
+extern int ___obstack_vprintf (struct obstack *, const char *, _IO_va_list
+			       NLDBL_DECL) attribute_hidden;
+extern int ___vasprintf (char **, const char *, _IO_va_list NLDBL_DECL)
+     attribute_hidden;
+extern int ___vsnprintf (char *, _IO_size_t, const char *, _IO_va_list
+			 NLDBL_DECL) attribute_hidden;
+extern int ___vswprintf (wchar_t *, _IO_size_t, const wchar_t *, _IO_va_list
+			 NLDBL_DECL) attribute_hidden;
+extern int __IO_vfscanf (_IO_FILE *, const char *, _IO_va_list, int *
+			 NLDBL_DECL) attribute_hidden;
+extern int __IO_vfwscanf (_IO_FILE *, const wchar_t *, _IO_va_list, int *
+			  NLDBL_DECL) attribute_hidden;
+extern int ___vsscanf (const char *, const char *, _IO_va_list NLDBL_DECL)
+     attribute_hidden;
+extern int ___vswscanf (const wchar_t *, const wchar_t *, _IO_va_list
+			NLDBL_DECL) attribute_hidden;
diff -urN libc.orig/libio/obprintf.c libc/libio/obprintf.c
--- libc.orig/libio/obprintf.c	2004-01-14 13:40:03.000000000 -0500
+++ libc/libio/obprintf.c	2005-11-11 13:30:38.000000000 -0500
@@ -119,7 +119,8 @@
 
 
 int
-_IO_obstack_vprintf (struct obstack *obstack, const char *format, va_list args)
+___obstack_vprintf (struct obstack *obstack, const char *format, va_list args
+		    NLDBL_DECL)
 {
   struct obstack_FILE
     {
@@ -166,7 +167,7 @@
 
   new_f.ofile.obstack = obstack;
 
-  result = INTUSE(_IO_vfprintf) (&new_f.ofile.file.file, format, args);
+  result = ___vfprintf (&new_f.ofile.file.file, format, args NLDBL_ARG);
 
   /* Shrink the buffer to the space we really currently need.  */
   obstack_blank_fast (obstack, (new_f.ofile.file.file._IO_write_ptr
@@ -174,10 +175,30 @@
 
   return result;
 }
-#ifdef weak_alias
-weak_alias (_IO_obstack_vprintf, obstack_vprintf)
-#endif
 
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+int
+_IO_obstack_vprintf (struct obstack *obstack, const char *format, va_list args)
+{
+  return ___obstack_vprintf (obstack, format, args, 0);
+}
+
+int
+_IO_obstack_printf (struct obstack *obstack, const char *format, ...)
+{
+  int result;
+  va_list ap;
+  va_start (ap, format);
+  result = ___obstack_vprintf (obstack, format, ap, 0);
+  va_end (ap);
+  return result;
+}
+long_double_symbol (libc, _IO_obstack_vprintf, obstack_vprintf);
+long_double_symbol (libc, _IO_obstack_printf, obstack_printf);
+
+#else
+
+strong_alias (___obstack_vprintf, _IO_obstack_vprintf)
 
 int
 _IO_obstack_printf (struct obstack *obstack, const char *format, ...)
@@ -189,6 +210,8 @@
   va_end (ap);
   return result;
 }
-#ifdef weak_alias
+# ifdef weak_alias
+weak_alias (_IO_obstack_vprintf, obstack_vprintf)
 weak_alias (_IO_obstack_printf, obstack_printf)
+# endif
 #endif
diff -urN libc.orig/libio/stdio.h libc/libio/stdio.h
--- libc.orig/libio/stdio.h	2005-09-01 11:14:59.000000000 -0400
+++ libc/libio/stdio.h	2005-11-11 13:57:05.867639872 -0500
@@ -318,42 +318,47 @@
 
    This function is a possible cancellation point and therefore not
    marked with __THROW.  */
-extern int fprintf (FILE *__restrict __stream,
-		    __const char *__restrict __format, ...);
+extern int __NLDBL_REDIR (fprintf, (FILE *__restrict __stream,
+				    __const char *__restrict __format, ...));
 /* Write formatted output to stdout.
 
    This function is a possible cancellation point and therefore not
    marked with __THROW.  */
-extern int printf (__const char *__restrict __format, ...);
+extern int __NLDBL_REDIR (printf, (__const char *__restrict __format, ...));
 /* Write formatted output to S.  */
-extern int sprintf (char *__restrict __s,
-		    __const char *__restrict __format, ...) __THROW;
+extern int __NLDBL_REDIR (sprintf, (char *__restrict __s,
+				    __const char *__restrict __format, ...))
+     __THROW;
 
 /* Write formatted output to S from argument list ARG.
 
    This function is a possible cancellation point and therefore not
    marked with __THROW.  */
-extern int vfprintf (FILE *__restrict __s, __const char *__restrict __format,
-		     _G_va_list __arg);
+extern int __NLDBL_REDIR (vfprintf, (FILE *__restrict __s,
+				     __const char *__restrict __format,
+				     _G_va_list __arg));
 /* Write formatted output to stdout from argument list ARG.
 
    This function is a possible cancellation point and therefore not
    marked with __THROW.  */
-extern int vprintf (__const char *__restrict __format, _G_va_list __arg);
+extern int __NLDBL_REDIR (vprintf, (__const char *__restrict __format,
+				    _G_va_list __arg));
 /* Write formatted output to S from argument list ARG.  */
-extern int vsprintf (char *__restrict __s, __const char *__restrict __format,
-		     _G_va_list __arg) __THROW;
+extern int __NLDBL_REDIR (vsprintf, (char *__restrict __s,
+				     __const char *__restrict __format,
+				     _G_va_list __arg)) __THROW;
 __END_NAMESPACE_STD
 
 #if defined __USE_BSD || defined __USE_ISOC99 || defined __USE_UNIX98
 __BEGIN_NAMESPACE_C99
 /* Maximum chars of output to write in MAXLEN.  */
-extern int snprintf (char *__restrict __s, size_t __maxlen,
-		     __const char *__restrict __format, ...)
+extern int __NLDBL_REDIR (snprintf, (char *__restrict __s, size_t __maxlen,
+				     __const char *__restrict __format, ...))
      __THROW __attribute__ ((__format__ (__printf__, 3, 4)));
 
-extern int vsnprintf (char *__restrict __s, size_t __maxlen,
-		      __const char *__restrict __format, _G_va_list __arg)
+extern int __NLDBL_REDIR (vsnprintf, (char *__restrict __s, size_t __maxlen,
+				      __const char *__restrict __format,
+				      _G_va_list __arg))
      __THROW __attribute__ ((__format__ (__printf__, 3, 0)));
 __END_NAMESPACE_C99
 #endif
@@ -361,14 +366,15 @@
 #ifdef __USE_GNU
 /* Write formatted output to a string dynamically allocated with `malloc'.
    Store the address of the string in *PTR.  */
-extern int vasprintf (char **__restrict __ptr, __const char *__restrict __f,
-		      _G_va_list __arg)
+extern int __NLDBL_REDIR (vasprintf, (char **__restrict __ptr,
+				      __const char *__restrict __f,
+				      _G_va_list __arg))
      __THROW __attribute__ ((__format__ (__printf__, 2, 0)));
-extern int __asprintf (char **__restrict __ptr,
-		       __const char *__restrict __fmt, ...)
+extern int __NLDBL_REDIR (__asprintf, (char **__restrict __ptr,
+				       __const char *__restrict __fmt, ...))
      __THROW __attribute__ ((__format__ (__printf__, 2, 3)));
-extern int asprintf (char **__restrict __ptr,
-		     __const char *__restrict __fmt, ...)
+extern int __NLDBL_REDIR (asprintf, (char **__restrict __ptr,
+				     __const char *__restrict __fmt, ...))
      __THROW __attribute__ ((__format__ (__printf__, 2, 3)));
 
 /* Write formatted output to a file descriptor.
@@ -377,10 +383,11 @@
    cancellation point.  But due to similarity with an POSIX interface
    or due to the implementation they are cancellation points and
    therefore not marked with __THROW.  */
-extern int vdprintf (int __fd, __const char *__restrict __fmt,
-		     _G_va_list __arg)
+extern int __NLDBL_REDIR (vdprintf, (int __fd, __const char *__restrict __fmt,
+				     _G_va_list __arg))
      __attribute__ ((__format__ (__printf__, 2, 0)));
-extern int dprintf (int __fd, __const char *__restrict __fmt, ...)
+extern int __NLDBL_REDIR (dprintf, (int __fd, __const char *__restrict __fmt,
+				    ...))
      __attribute__ ((__format__ (__printf__, 2, 3)));
 #endif
 
@@ -390,16 +397,16 @@
 
    This function is a possible cancellation point and therefore not
    marked with __THROW.  */
-extern int fscanf (FILE *__restrict __stream,
-		   __const char *__restrict __format, ...) __wur;
+extern int __NLDBL_REDIR (fscanf, (FILE *__restrict __stream,
+				   __const char *__restrict __format, ...) __wur);
 /* Read formatted input from stdin.
 
    This function is a possible cancellation point and therefore not
    marked with __THROW.  */
-extern int scanf (__const char *__restrict __format, ...) __wur;
+extern int __NLDBL_REDIR (scanf, (__const char *__restrict __format, ...) __wur);
 /* Read formatted input from S.  */
-extern int sscanf (__const char *__restrict __s,
-		   __const char *__restrict __format, ...) __THROW;
+extern int __NLDBL_REDIR (sscanf, (__const char *__restrict __s,
+		   __const char *__restrict __format, ...) __THROW);
 __END_NAMESPACE_STD
 
 #ifdef	__USE_ISOC99
@@ -408,20 +415,23 @@
 
    This function is a possible cancellation point and therefore not
    marked with __THROW.  */
-extern int vfscanf (FILE *__restrict __s, __const char *__restrict __format,
-		    _G_va_list __arg)
+extern int __NLDBL_REDIR (vfscanf, (FILE *__restrict __s,
+				    __const char *__restrict __format,
+				    _G_va_list __arg))
      __attribute__ ((__format__ (__scanf__, 2, 0))) __wur;
 
 /* Read formatted input from stdin into argument list ARG.
 
    This function is a possible cancellation point and therefore not
    marked with __THROW.  */
-extern int vscanf (__const char *__restrict __format, _G_va_list __arg)
+extern int __NLDBL_REDIR (vscanf,  (__const char *__restrict __format,
+				    _G_va_list __arg))
      __attribute__ ((__format__ (__scanf__, 1, 0))) __wur;
 
 /* Read formatted input from S into argument list ARG.  */
-extern int vsscanf (__const char *__restrict __s,
-		    __const char *__restrict __format, _G_va_list __arg)
+extern int __NLDBL_REDIR (vsscanf, (__const char *__restrict __s,
+				    __const char *__restrict __format,
+				    _G_va_list __arg))
      __THROW __attribute__ ((__format__ (__scanf__, 2, 0)));
 __END_NAMESPACE_C99
 #endif /* Use ISO C9x.  */
@@ -791,12 +801,14 @@
 struct obstack;			/* See <obstack.h>.  */
 
 /* Write formatted output to an obstack.  */
-extern int obstack_printf (struct obstack *__restrict __obstack,
-			   __const char *__restrict __format, ...)
+extern int __NLDBL_REDIR (obstack_printf,
+			  (struct obstack *__restrict __obstack,
+			   __const char *__restrict __format, ...))
      __THROW __attribute__ ((__format__ (__printf__, 2, 3)));
-extern int obstack_vprintf (struct obstack *__restrict __obstack,
-			    __const char *__restrict __format,
-			    _G_va_list __args)
+extern int __NLDBL_REDIR (obstack_vprintf,
+			  (struct obstack *__restrict __obstack,
+			   __const char *__restrict __format,
+			   _G_va_list __args))
      __THROW __attribute__ ((__format__ (__printf__, 2, 0)));
 #endif /* Use GNU.  */
 
diff -urN libc.orig/libio/swprintf.c libc/libio/swprintf.c
--- libc.orig/libio/swprintf.c	2003-03-05 14:58:03.000000000 -0500
+++ libc/libio/swprintf.c	2005-11-11 13:30:38.000000000 -0500
@@ -1,5 +1,5 @@
-/* Copyright (C) 1991,1995,1997,1998,1999,2000,2003
-	Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1995, 1997, 1998, 1999, 2000, 2003, 2004
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -17,20 +17,27 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
+#include "libioP.h"
 #include <stdarg.h>
 #include <wchar.h>
 
 /* Write formatted output into S, according to the format string FORMAT.  */
 /* VARARGS3 */
 int
-swprintf (wchar_t *s, size_t n, const wchar_t *format, ...)
+__swprintf (wchar_t *s, size_t n, const wchar_t *format, ...)
 {
   va_list arg;
   int done;
 
   va_start (arg, format);
-  done = __vswprintf (s, n, format, arg);
+  done = ___vswprintf (s, n, format, arg NLDBL_0);
   va_end (arg);
 
   return done;
 }
+
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+long_double_symbol (libc, __swprintf, swprintf);
+#else
+strong_alias (__swprintf, swprintf)
+#endif
diff -urN libc.orig/libio/swscanf.c libc/libio/swscanf.c
--- libc.orig/libio/swscanf.c	2003-03-05 14:58:03.000000000 -0500
+++ libc/libio/swscanf.c	2005-11-11 13:30:38.000000000 -0500
@@ -1,4 +1,5 @@
-/* Copyright (C) 1991,1995,1996,1998,1999,2003 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1995, 1996, 1998, 1999, 2003, 2004
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -16,20 +17,27 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
+#include <libioP.h>
 #include <stdarg.h>
 #include <wchar.h>
 
 /* Read formatted input from S, according to the format string FORMAT.  */
 /* VARARGS2 */
 int
-swscanf (const wchar_t *s, const wchar_t *format, ...)
+___swscanf (const wchar_t *s, const wchar_t *format, ...)
 {
   va_list arg;
   int done;
 
   va_start (arg, format);
-  done = vswscanf (s, format, arg);
+  done = ___vswscanf (s, format, arg NLDBL_0);
   va_end (arg);
 
   return done;
 }
+
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+long_double_symbol (libc, ___swscanf, swscanf);
+#else
+strong_alias (___swscanf, swscanf)
+#endif
diff -urN libc.orig/libio/vasprintf.c libc/libio/vasprintf.c
--- libc.orig/libio/vasprintf.c	2004-09-26 01:10:53.000000000 -0400
+++ libc/libio/vasprintf.c	2005-11-11 13:30:38.666616920 -0500
@@ -27,16 +27,14 @@
 
 #include <malloc.h>
 #include <string.h>
-#include "libioP.h"
-#include "stdio.h"
+#include <libioP.h>
+#include <stdio.h>
 #include <stdio_ext.h>
 #include "strfile.h"
 
 int
-_IO_vasprintf (result_ptr, format, args)
-     char **result_ptr;
-     const char *format;
-     _IO_va_list args;
+___vasprintf (char **result_ptr, const char *format, _IO_va_list args
+	      NLDBL_DECL)
 {
   /* Initial size of the buffer to be used.  Will be doubled each time an
      overflow occurs.  */
@@ -58,7 +56,7 @@
   sf._sbf._f._flags &= ~_IO_USER_BUF;
   sf._s._allocate_buffer = (_IO_alloc_type) malloc;
   sf._s._free_buffer = (_IO_free_type) free;
-  ret = INTUSE(_IO_vfprintf) (&sf._sbf._f, format, args);
+  ret = ___vfprintf (&sf._sbf._f, format, args NLDBL_ARG);
   if (ret < 0)
     {
       free (sf._sbf._f._IO_buf_base);
@@ -88,6 +86,16 @@
   return ret;
 }
 
-#ifdef weak_alias
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+int
+weak_function
+_IO_vasprintf (char **result_ptr, const char *format, _IO_va_list args)
+{
+  return ___vasprintf (result_ptr, format, args, 0);
+}
+
+long_double_symbol (libc, _IO_vasprintf, vasprintf);
+#elif defined weak_alias
+strong_alias (___vasprintf, _IO_vasprintf)
 weak_alias (_IO_vasprintf, vasprintf)
 #endif
diff -urN libc.orig/libio/vscanf.c libc/libio/vscanf.c
--- libc.orig/libio/vscanf.c	2002-02-25 20:43:50.000000000 -0500
+++ libc/libio/vscanf.c	2005-11-11 13:30:38.000000000 -0500
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1997, 2002 Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1997, 2002, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -25,8 +25,8 @@
    This exception applies to code released by its copyright holders
    in files containing the exception.  */
 
-#include "libioP.h"
-#include "stdio.h"
+#include <libioP.h>
+#include <stdio.h>
 
 #undef vscanf
 
@@ -35,9 +35,12 @@
      const char *format;
      _IO_va_list args;
 {
-  return INTUSE(_IO_vfscanf) (_IO_stdin, format, args, NULL);
+  return __IO_vfscanf (_IO_stdin, format, args, NULL NLDBL_0);
 }
 
-#ifdef weak_alias
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+weak_alias (_IO_vscanf, __vscanf)
+long_double_symbol (libc, __vscanf, vscanf);
+#elif defined weak_alias
 weak_alias (_IO_vscanf, vscanf)
 #endif
diff -urN libc.orig/libio/vsnprintf.c libc/libio/vsnprintf.c
--- libc.orig/libio/vsnprintf.c	2004-10-18 00:17:15.000000000 -0400
+++ libc/libio/vsnprintf.c	2005-11-11 13:54:07.729568912 -0500
@@ -25,7 +25,8 @@
    This exception applies to code released by its copyright holders
    in files containing the exception.  */
 
-#include "libioP.h"
+#include <libioP.h>
+#include <stdio.h>
 #include "strfile.h"
 
 static int _IO_strn_overflow (_IO_FILE *fp, int c) __THROW;
@@ -93,11 +94,8 @@
 
 
 int
-_IO_vsnprintf (string, maxlen, format, args)
-     char *string;
-     _IO_size_t maxlen;
-     const char *format;
-     _IO_va_list args;
+___vsnprintf (char *string, _IO_size_t maxlen, const char *format,
+	      _IO_va_list args NLDBL_DECL)
 {
   _IO_strnfile sf;
   int ret;
@@ -117,14 +115,26 @@
   _IO_JUMPS ((struct _IO_FILE_plus *) &sf.f._sbf) = &_IO_strn_jumps;
   string[0] = '\0';
   _IO_str_init_static_internal (&sf.f, string, maxlen - 1, string);
-  ret = INTUSE(_IO_vfprintf) ((_IO_FILE *) &sf.f._sbf, format, args);
+  ret = ___vfprintf ((_IO_FILE *) &sf.f._sbf, format, args NLDBL_ARG);
 
   if (sf.f._sbf._f._IO_buf_base != sf.overflow_buf)
     *sf.f._sbf._f._IO_write_ptr = '\0';
   return ret;
 }
 
-#ifdef weak_alias
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+int
+weak_function
+_IO_vsnprintf (char *string, _IO_size_t maxlen, const char *format,
+               _IO_va_list args)
+{
+  return ___vsnprintf (string, maxlen, format, args, 0);
+}
+weak_alias (_IO_vsnprintf, __IO_vsnprintf)
+long_double_symbol (libc, _IO_vsnprintf, vsnprintf);
+long_double_symbol (libc, __IO_vsnprintf, __vsnprintf);
+#elif defined weak_alias
+strong_alias (___vsnprintf, _IO_vsnprintf)
 weak_alias (_IO_vsnprintf, __vsnprintf)
 weak_alias (_IO_vsnprintf, vsnprintf)
 #endif
diff -urN libc.orig/libio/vswprintf.c libc/libio/vswprintf.c
--- libc.orig/libio/vswprintf.c	2005-07-15 06:14:19.000000000 -0400
+++ libc/libio/vswprintf.c	2005-11-11 13:30:38.659617984 -0500
@@ -27,7 +27,7 @@
 
 #include "libioP.h"
 #include "strfile.h"
-
+#include <wchar.h>
 
 static wint_t _IO_wstrn_overflow (_IO_FILE *fp, wint_t c) __THROW;
 
@@ -92,11 +92,8 @@
 
 
 int
-_IO_vswprintf (string, maxlen, format, args)
-     wchar_t *string;
-     _IO_size_t maxlen;
-     const wchar_t *format;
-     _IO_va_list args;
+___vswprintf (wchar_t *string, _IO_size_t maxlen, const wchar_t *format,
+	      _IO_va_list args NLDBL_DECL)
 {
   _IO_wstrnfile sf;
   int ret;
@@ -114,7 +111,7 @@
   _IO_fwide (&sf.f._sbf._f, 1);
   string[0] = L'\0';
   _IO_wstr_init_static (&sf.f._sbf._f, string, maxlen - 1, string);
-  ret = _IO_vfwprintf ((_IO_FILE *) &sf.f._sbf, format, args);
+  ret = ___vfwprintf ((_IO_FILE *) &sf.f._sbf, format, args NLDBL_ARG);
 
   if (sf.f._sbf._f._wide_data->_IO_buf_base == sf.overflow_buf)
     /* ISO C99 requires swprintf/vswprintf to return an error if the
@@ -127,7 +124,17 @@
   return ret;
 }
 
-#ifdef weak_alias
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+int
+_IO_vswprintf (wchar_t *string, _IO_size_t maxlen, const wchar_t *format,
+               _IO_va_list args)
+{
+  return ___vswprintf (string, maxlen, format, args, 0);
+}
+weak_alias (_IO_vswprintf, __vswprintf)
+long_double_symbol (libc, _IO_vswprintf, vswprintf);
+#elif defined weak_alias
+strong_alias (___vswprintf, _IO_vswprintf)
 weak_alias (_IO_vswprintf, __vswprintf)
 weak_alias (_IO_vswprintf, vswprintf)
 #endif
diff -urN libc.orig/libio/vwprintf.c libc/libio/vwprintf.c
--- libc.orig/libio/vwprintf.c	2001-08-17 03:05:37.000000000 -0400
+++ libc/libio/vwprintf.c	2005-11-11 13:30:38.000000000 -0500
@@ -1,4 +1,5 @@
-/* Copyright (C) 1991,1993,1995,1997,1999,2001 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1993, 1995, 1997, 1999, 2001, 2004
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -16,6 +17,7 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
+#include "libioP.h"
 #include <stdarg.h>
 #include <stdio.h>
 #include <wchar.h>
@@ -23,9 +25,13 @@
 /* Write formatted output to stdout according to the
    format string FORMAT, using the argument list in ARG.  */
 int
-vwprintf (format, arg)
-     const wchar_t *format;
-     __gnuc_va_list arg;
+__vwprintf (const wchar_t *format, __gnuc_va_list arg)
 {
-  return __vfwprintf (stdout, format, arg);
+  return ___vfwprintf (stdout, format, arg NLDBL_0);
 }
+
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL 
+long_double_symbol (libc, __vwprintf, vwprintf);
+#else
+strong_alias (__vwprintf, vwprintf)
+#endif
diff -urN libc.orig/libio/vwscanf.c libc/libio/vwscanf.c
--- libc.orig/libio/vwscanf.c	2001-07-06 00:55:32.000000000 -0400
+++ libc/libio/vwscanf.c	2005-11-11 13:30:38.000000000 -0500
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1997, 1999 Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1997, 1999, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -29,9 +29,13 @@
 #include <wchar.h>
 
 int
-vwscanf (format, args)
-     const wchar_t *format;
-     _IO_va_list args;
+___vwscanf (const wchar_t *format, _IO_va_list args)
 {
-  return _IO_vfwscanf (_IO_stdin, format, args, NULL);
+  return __IO_vfwscanf (_IO_stdin, format, args, NULL NLDBL_0);
 }
+
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+long_double_symbol (libc, ___vwscanf, vwscanf);
+#else
+strong_alias (___vwscanf, vwscanf)
+#endif
diff -urN libc.orig/libio/wprintf.c libc/libio/wprintf.c
--- libc.orig/libio/wprintf.c	2001-08-17 03:05:37.000000000 -0400
+++ libc/libio/wprintf.c	2005-11-11 13:30:38.000000000 -0500
@@ -1,4 +1,5 @@
-/* Copyright (C) 1991,1995,1996,1997,1999,2001 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1995, 1996, 1997, 1999, 2001, 2004
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -16,6 +17,7 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
+#include "libioP.h"
 #include <stdarg.h>
 #include <stdio.h>
 #include <wchar.h>
@@ -23,14 +25,20 @@
 /* Write formatted output to stdout from the format string FORMAT.  */
 /* VARARGS1 */
 int
-wprintf (const wchar_t *format, ...)
+__wprintf (const wchar_t *format, ...)
 {
   va_list arg;
   int done;
 
   va_start (arg, format);
-  done = __vfwprintf (stdout, format, arg);
+  done = ___vfwprintf (stdout, format, arg NLDBL_0);
   va_end (arg);
 
   return done;
 }
+
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+long_double_symbol (libc, __wprintf, wprintf);
+#else
+strong_alias (__wprintf, wprintf)
+#endif
diff -urN libc.orig/libio/wscanf.c libc/libio/wscanf.c
--- libc.orig/libio/wscanf.c	2001-07-06 00:55:32.000000000 -0400
+++ libc/libio/wscanf.c	2005-11-11 13:30:38.000000000 -0500
@@ -1,4 +1,5 @@
-/* Copyright (C) 1991, 1995, 1996, 1997, 1999 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1995, 1996, 1997, 1999, 2004
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -16,22 +17,28 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
+#include <libioP.h>
 #include <stdarg.h>
 #include <stdio.h>
 #include <wchar.h>
 
-
 /* Read formatted input from stdin according to the format string FORMAT.  */
 /* VARARGS1 */
 int
-wscanf (const wchar_t *format, ...)
+___wscanf (const wchar_t *format, ...)
 {
   va_list arg;
   int done;
 
   va_start (arg, format);
-  done = _IO_vfwscanf (stdin, format, arg, NULL);
+  done = __IO_vfwscanf (stdin, format, arg, NULL NLDBL_0);
   va_end (arg);
 
   return done;
 }
+
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+long_double_symbol (libc, ___wscanf, wscanf);
+#else
+strong_alias (___wscanf, wscanf)
+#endif
diff -urN libc.orig/math/bits/mathcalls.h libc/math/bits/mathcalls.h
--- libc.orig/math/bits/mathcalls.h	2003-01-12 14:10:08.000000000 -0500
+++ libc/math/bits/mathcalls.h	2005-11-11 13:30:38.000000000 -0500
@@ -281,7 +281,7 @@
 
 /* Return X + epsilon if X < Y, X - epsilon if X > Y.  */
 __MATHCALLX (nextafter,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
-# ifdef __USE_ISOC99
+# if defined __USE_ISOC99 && !defined __NLDBL_COMPAT
 __MATHCALLX (nexttoward,, (_Mdouble_ __x, long double __y), (__const__));
 # endif
 
diff -urN libc.orig/math/cabs.c libc/math/cabs.c
--- libc.orig/math/cabs.c	2001-07-06 00:55:35.000000000 -0400
+++ libc/math/cabs.c	2005-11-11 13:30:38.000000000 -0500
@@ -1,33 +0,0 @@
-/* Return the complex absolute value of double complex value.
-   Copyright (C) 1997, 1998 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include <complex.h>
-#include <math.h>
-
-double
-__cabs (double _Complex z)
-{
-  return __hypot (__real__ z, __imag__ z);
-}
-weak_alias (__cabs, cabs)
-#ifdef NO_LONG_DOUBLE
-strong_alias (__cabs, __cabsl)
-weak_alias (__cabs, cabsl)
-#endif
diff -urN libc.orig/math/cabsl.c libc/math/cabsl.c
--- libc.orig/math/cabsl.c	2001-07-06 00:55:35.000000000 -0400
+++ libc/math/cabsl.c	2005-11-11 13:30:38.000000000 -0500
@@ -1,29 +0,0 @@
-/* Return the complex absolute value of long double complex value.
-   Copyright (C) 1997, 1998 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include <complex.h>
-#include <math.h>
-
-long double
-__cabsl (long double _Complex z)
-{
-  return __hypotl (__real__ z, __imag__ z);
-}
-weak_alias (__cabsl, cabsl)
diff -urN libc.orig/math/carg.c libc/math/carg.c
--- libc.orig/math/carg.c	2001-07-06 00:55:35.000000000 -0400
+++ libc/math/carg.c	2005-11-11 13:30:38.000000000 -0500
@@ -1,33 +0,0 @@
-/* Compute argument of complex double value.
-   Copyright (C) 1997 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include <complex.h>
-#include <math.h>
-
-double
-__carg (__complex__ double x)
-{
-  return __atan2 (__imag__ x, __real__ x);
-}
-weak_alias (__carg, carg)
-#ifdef NO_LONG_DOUBLE
-strong_alias (__carg, __cargl)
-weak_alias (__carg, cargl)
-#endif
diff -urN libc.orig/math/cargl.c libc/math/cargl.c
--- libc.orig/math/cargl.c	2001-07-06 00:55:35.000000000 -0400
+++ libc/math/cargl.c	2005-11-11 13:30:38.000000000 -0500
@@ -1,29 +0,0 @@
-/* Compute argument of complex long double value.
-   Copyright (C) 1997 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include <complex.h>
-#include <math.h>
-
-long double
-__cargl (__complex__ long double x)
-{
-  return __atan2l (__imag__ x, __real__ x);
-}
-weak_alias (__cargl, cargl)
diff -urN libc.orig/math/cimag.c libc/math/cimag.c
--- libc.orig/math/cimag.c	2001-07-06 00:55:35.000000000 -0400
+++ libc/math/cimag.c	2005-11-11 13:30:38.000000000 -0500
@@ -1,32 +0,0 @@
-/* Return imaginary part of complex double value.
-   Copyright (C) 1997, 1998 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include <complex.h>
-
-double
-__cimag (double _Complex z)
-{
-  return __imag__ z;
-}
-weak_alias (__cimag, cimag)
-#ifdef NO_LONG_DOUBLE
-strong_alias (__cimag, __cimagl)
-weak_alias (__cimag, cimagl)
-#endif
diff -urN libc.orig/math/cimagl.c libc/math/cimagl.c
--- libc.orig/math/cimagl.c	2001-07-06 00:55:35.000000000 -0400
+++ libc/math/cimagl.c	2005-11-11 13:30:38.000000000 -0500
@@ -1,28 +0,0 @@
-/* Return imaginary part of complex long double value.
-   Copyright (C) 1997, 1998 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include <complex.h>
-
-long double
-__cimagl (long double _Complex z)
-{
-  return __imag__ z;
-}
-weak_alias (__cimagl, cimagl)
diff -urN libc.orig/math/complex.h libc/math/complex.h
--- libc.orig/math/complex.h	2001-07-06 00:55:35.000000000 -0400
+++ libc/math/complex.h	2005-11-11 13:30:38.000000000 -0500
@@ -84,7 +84,14 @@
 
 /* And the long double versions.  It is non-critical to define them
    here unconditionally since `long double' is required in ISO C99.  */
-#if __STDC__ - 0 || __GNUC__ - 0 && !defined __NO_LONG_DOUBLE_MATH
+#if (__STDC__ - 0 || __GNUC__ - 0) \
+    && (!defined __NO_LONG_DOUBLE_MATH || defined __NLDBL_COMPAT)
+# ifdef __NLDBL_COMPAT
+#  undef __MATHDECL_1
+#  define __MATHDECL_1(type, function, args) \
+  extern type __REDIRECT(__MATH_PRECNAME(function), args, function) __THROW
+# endif
+
 # ifndef _Mlong_double_
 #  define _Mlong_double_	long double
 # endif
diff -urN libc.orig/math/conj.c libc/math/conj.c
--- libc.orig/math/conj.c	2001-07-06 00:55:35.000000000 -0400
+++ libc/math/conj.c	2005-11-11 13:30:38.000000000 -0500
@@ -1,32 +0,0 @@
-/* Return complex conjugate of complex double value.
-   Copyright (C) 1997, 1998 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include <complex.h>
-
-double _Complex
-__conj (double _Complex z)
-{
-  return ~z;
-}
-weak_alias (__conj, conj)
-#ifdef NO_LONG_DOUBLE
-strong_alias (__conj, __conjl)
-weak_alias (__conj, conjl)
-#endif
diff -urN libc.orig/math/conjl.c libc/math/conjl.c
--- libc.orig/math/conjl.c	2001-07-06 00:55:35.000000000 -0400
+++ libc/math/conjl.c	2005-11-11 13:30:38.000000000 -0500
@@ -1,28 +0,0 @@
-/* Return complex conjugate of complex long double value.
-   Copyright (C) 1997, 1998 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include <complex.h>
-
-long double _Complex
-__conjl (long double _Complex z)
-{
-  return ~z;
-}
-weak_alias (__conjl, conjl)
diff -urN libc.orig/math/creal.c libc/math/creal.c
--- libc.orig/math/creal.c	2001-07-06 00:55:35.000000000 -0400
+++ libc/math/creal.c	2005-11-11 13:30:38.000000000 -0500
@@ -1,32 +0,0 @@
-/* Return real part of complex double value.
-   Copyright (C) 1997, 1998 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include <complex.h>
-
-double
-__creal (double _Complex z)
-{
-  return __real__ z;
-}
-weak_alias (__creal, creal)
-#ifdef NO_LONG_DOUBLE
-strong_alias (__creal, __creall)
-weak_alias (__creal, creall)
-#endif
diff -urN libc.orig/math/creall.c libc/math/creall.c
--- libc.orig/math/creall.c	2001-07-06 00:55:35.000000000 -0400
+++ libc/math/creall.c	2005-11-11 13:30:38.000000000 -0500
@@ -1,28 +0,0 @@
-/* Return real part of complex long double value.
-   Copyright (C) 1997, 1998 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include <complex.h>
-
-long double
-__creall (long double _Complex z)
-{
-  return __real__ z;
-}
-weak_alias (__creall, creall)
diff -urN libc.orig/math/math.h libc/math/math.h
--- libc.orig/math/math.h	2004-12-16 13:35:41.000000000 -0500
+++ libc/math/math.h	2005-11-11 13:30:38.000000000 -0500
@@ -96,9 +96,35 @@
 # undef _Mdouble_END_NAMESPACE
 # undef	__MATH_PRECNAME
 
-# if (__STDC__ - 0 || __GNUC__ - 0) && !defined __NO_LONG_DOUBLE_MATH
+# if (__STDC__ - 0 || __GNUC__ - 0) \
+     && (!defined __NO_LONG_DOUBLE_MATH || defined __NLDBL_COMPAT)
+#  ifdef __NLDBL_COMPAT
+
+#   ifdef __USE_ISOC99 
+extern _Mfloat_ __nldbl_nexttowardf (_Mfloat_ __x, long double __y)
+				    __attribute__ ((__const__)) __THROW;
+#    ifdef __REDIRECT
+extern _Mfloat_ __REDIRECT (nexttowardf, (_Mfloat_ __x, long double __y),
+			    __nldbl_nexttowardf)
+			   __attribute__ ((__const__)) __THROW;
+extern _Mdouble_ __REDIRECT (nexttoward, (_Mdouble_ __x, long double __y),
+			     nextafter) __attribute__ ((__const__)) __THROW;
+#    else
+#     define nexttowardf __nldbl_nexttowardf
+#     define nexttoward nextafter
+#    endif
+#   endif
+
 /* Include the file of declarations again, this time using `long double'
    instead of `double' and appending l to each function name.  */
+              
+#   undef __MATHDECL_1
+#   define __MATHDECL_2(type, function,suffix, args, alias) \
+  extern type __REDIRECT(__MATH_PRECNAME(function,suffix), \
+			 args, alias) __THROW
+#   define __MATHDECL_1(type, function,suffix, args) \
+  __MATHDECL_2(type, function,suffix, args, __CONCAT(function,suffix))
+#  endif
 
 #  ifndef _Mlong_double_
 #   define _Mlong_double_	long double
diff -urN libc.orig/misc/efgcvt.c libc/misc/efgcvt.c
--- libc.orig/misc/efgcvt.c	2002-11-01 15:43:38.000000000 -0500
+++ libc/misc/efgcvt.c	2005-11-11 13:30:38.000000000 -0500
@@ -23,6 +23,7 @@
 #include <sys/param.h>
 #include <float.h>
 #include <bits/libc-lock.h>
+#include <shlib-compat.h>
 
 #ifndef FLOAT_TYPE
 # define FLOAT_TYPE double
@@ -44,10 +45,14 @@
 #  error "NDIGIT_MAX must be precomputed"
 #  define NDIGIT_MAX (lrint (ceil (M_LN2 / M_LN10 * DBL_MANT_DIG + 1.0)))
 # endif
+#else
+# define LONG_DOUBLE_CVT
 #endif
 
 #define APPEND(a, b) APPEND2 (a, b)
 #define APPEND2(a, b) a##b
+#define __APPEND(a, b) __APPEND2 (a, b)
+#define __APPEND2(a, b) __##a##b
 
 
 #define FCVT_BUFFER APPEND (FUNC_PREFIX, fcvt_buffer)
@@ -60,14 +65,14 @@
 libc_freeres_ptr (static char *FCVT_BUFPTR);
 
 char *
-APPEND (FUNC_PREFIX, fcvt) (value, ndigit, decpt, sign)
+__APPEND (FUNC_PREFIX, fcvt) (value, ndigit, decpt, sign)
      FLOAT_TYPE value;
      int ndigit, *decpt, *sign;
 {
   if (FCVT_BUFPTR == NULL)
     {
-      if (APPEND (FUNC_PREFIX, fcvt_r) (value, ndigit, decpt, sign,
-					FCVT_BUFFER, MAXDIG) != -1)
+      if (__APPEND (FUNC_PREFIX, fcvt_r) (value, ndigit, decpt, sign,
+					  FCVT_BUFFER, MAXDIG) != -1)
 	return FCVT_BUFFER;
 
       FCVT_BUFPTR = (char *) malloc (FCVT_MAXDIG);
@@ -75,26 +80,26 @@
 	return FCVT_BUFFER;
     }
 
-  (void) APPEND (FUNC_PREFIX, fcvt_r) (value, ndigit, decpt, sign,
-				       FCVT_BUFPTR, FCVT_MAXDIG);
+  (void) __APPEND (FUNC_PREFIX, fcvt_r) (value, ndigit, decpt, sign,
+					 FCVT_BUFPTR, FCVT_MAXDIG);
 
   return FCVT_BUFPTR;
 }
 
 
 char *
-APPEND (FUNC_PREFIX, ecvt) (value, ndigit, decpt, sign)
+__APPEND (FUNC_PREFIX, ecvt) (value, ndigit, decpt, sign)
      FLOAT_TYPE value;
      int ndigit, *decpt, *sign;
 {
-  (void) APPEND (FUNC_PREFIX, ecvt_r) (value, ndigit, decpt, sign,
-				       ECVT_BUFFER, MAXDIG);
+  (void) __APPEND (FUNC_PREFIX, ecvt_r) (value, ndigit, decpt, sign,
+					 ECVT_BUFFER, MAXDIG);
 
   return ECVT_BUFFER;
 }
 
 char *
-APPEND (FUNC_PREFIX, gcvt) (value, ndigit, buf)
+__APPEND (FUNC_PREFIX, gcvt) (value, ndigit, buf)
      FLOAT_TYPE value;
      int ndigit;
      char *buf;
@@ -102,3 +107,27 @@
   sprintf (buf, "%.*" FLOAT_FMT_FLAG "g", MIN (ndigit, NDIGIT_MAX), value);
   return buf;
 }
+
+#if defined LONG_DOUBLE_OPTIONAL && \
+    SHLIB_COMPAT(libc, GLIBC_2_0, LONG_DOUBLE_OPTIONAL)
+# ifdef LONG_DOUBLE_CVT
+#  define cvt_symbol(symbol) \
+  cvt_symbol_1 (libc, __APPEND (FUNC_PREFIX, symbol), \
+              APPEND (FUNC_PREFIX, symbol), LONG_DOUBLE_OPTIONAL)
+#  define cvt_symbol_1(lib, local, symbol, version) \
+    versioned_symbol (lib, local, symbol, version)
+# else
+#  define cvt_symbol(symbol) \
+  cvt_symbol_1 (libc, __APPEND (FUNC_PREFIX, symbol), \
+              APPEND (q, symbol), GLIBC_2_0); \
+  strong_alias (__APPEND (FUNC_PREFIX, symbol), APPEND (FUNC_PREFIX, symbol))
+#  define cvt_symbol_1(lib, local, symbol, version) \
+  compat_symbol (lib, local, symbol, version)
+# endif
+#else
+# define cvt_symbol(symbol) \
+  strong_alias (__APPEND (FUNC_PREFIX, symbol), APPEND (FUNC_PREFIX, symbol))
+#endif
+cvt_symbol(fcvt);
+cvt_symbol(ecvt);
+cvt_symbol(gcvt);
diff -urN libc.orig/misc/efgcvt_r.c libc/misc/efgcvt_r.c
--- libc.orig/misc/efgcvt_r.c	2004-12-22 14:55:46.000000000 -0500
+++ libc/misc/efgcvt_r.c	2005-11-11 13:30:38.685614032 -0500
@@ -25,6 +25,7 @@
 #include <math.h>
 #include <stdlib.h>
 #include <sys/param.h>
+#include <shlib-compat.h>
 
 #ifndef FLOAT_TYPE
 # define FLOAT_TYPE double
@@ -55,10 +56,14 @@
 #  error "FLOAT_MIN_10_NORM must be precomputed"
 #  define FLOAT_MIN_10_NORM	exp10 (DBL_MIN_10_EXP)
 # endif
+#else
+# define LONG_DOUBLE_CVT
 #endif
 
 #define APPEND(a, b) APPEND2 (a, b)
 #define APPEND2(a, b) a##b
+#define __APPEND(a, b) __APPEND2 (a, b)
+#define __APPEND2(a, b) __##a##b
 
 #define FLOOR APPEND(floor, FLOAT_NAME_EXT)
 #define FABS APPEND(fabs, FLOAT_NAME_EXT)
@@ -67,7 +72,7 @@
 
 
 int
-APPEND (FUNC_PREFIX, fcvt_r) (value, ndigit, decpt, sign, buf, len)
+__APPEND (FUNC_PREFIX, fcvt_r) (value, ndigit, decpt, sign, buf, len)
      FLOAT_TYPE value;
      int ndigit, *decpt, *sign;
      char *buf;
@@ -163,10 +168,9 @@
 
   return 0;
 }
-libc_hidden_def (APPEND (FUNC_PREFIX, fcvt_r))
 
 int
-APPEND (FUNC_PREFIX, ecvt_r) (value, ndigit, decpt, sign, buf, len)
+__APPEND (FUNC_PREFIX, ecvt_r) (value, ndigit, decpt, sign, buf, len)
      FLOAT_TYPE value;
      int ndigit, *decpt, *sign;
      char *buf;
@@ -229,11 +233,33 @@
       *sign = isfinite (value) ? signbit (value) != 0 : 0;
     }
   else
-    if (APPEND (FUNC_PREFIX, fcvt_r) (value, MIN (ndigit, NDIGIT_MAX) - 1,
-				      decpt, sign, buf, len))
+    if (__APPEND (FUNC_PREFIX, fcvt_r) (value, MIN (ndigit, NDIGIT_MAX) - 1,
+					decpt, sign, buf, len))
       return -1;
 
   *decpt += exponent;
   return 0;
 }
-libc_hidden_def (APPEND (FUNC_PREFIX, ecvt_r))
+
+#if defined LONG_DOUBLE_OPTIONAL && \
+    SHLIB_COMPAT(libc, GLIBC_2_0, LONG_DOUBLE_OPTIONAL)
+# ifdef LONG_DOUBLE_CVT
+#  define cvt_symbol(symbol) \
+  cvt_symbol_1 (libc, __APPEND (FUNC_PREFIX, symbol), \
+              APPEND (FUNC_PREFIX, symbol), LONG_DOUBLE_OPTIONAL)
+#  define cvt_symbol_1(lib, local, symbol, version) \
+    versioned_symbol (lib, local, symbol, version)
+# else
+#  define cvt_symbol(symbol) \
+  cvt_symbol_1 (libc, __APPEND (FUNC_PREFIX, symbol), \
+              APPEND (q, symbol), GLIBC_2_0); \
+  strong_alias (__APPEND (FUNC_PREFIX, symbol), APPEND (FUNC_PREFIX, symbol))
+#  define cvt_symbol_1(lib, local, symbol, version) \
+  compat_symbol (lib, local, symbol, version)
+# endif
+#else
+# define cvt_symbol(symbol) \
+  strong_alias (__APPEND (FUNC_PREFIX, symbol), APPEND (FUNC_PREFIX, symbol))
+#endif
+cvt_symbol(fcvt_r);
+cvt_symbol(ecvt_r);
diff -urN libc.orig/misc/sys/cdefs.h libc/misc/sys/cdefs.h
--- libc.orig/misc/sys/cdefs.h	2005-03-18 19:12:37.000000000 -0500
+++ libc/misc/sys/cdefs.h	2005-11-11 13:30:38.684614184 -0500
@@ -309,4 +309,27 @@
 # endif
 #endif
 
+#include <bits/wordsize.h>
+
+/* Optional long double support macro.  Use
+   extern type __NLDBL_REDIR (name, (arguments));
+   instead of
+   extern type name (arguments);
+   for functions which need to be versioned based on whether long double
+   is the same as double or bigger.
+   If it is bigger, the latest version of the function will be used,
+   if it is the same as double, it will be redirected to __nldbl_name
+   function (which is an alias to the older version of name).
+   If the function should be redirected to something other than __nldbl_name,
+   use __NLDBL_REDIR2 macro (e.g. strtold wants to redirect to strtod
+   if long double is the same as double).  */
+#if defined __NLDBL_COMPAT && defined __REDIRECT
+#  define __NLDBL_REDIR2(name, proto, alias) __REDIRECT (name, proto, alias)
+#  define __NLDBL_REDIR(name, proto) \
+  __NLDBL_REDIR2 (name, proto, __nldbl_##name)
+#else
+# define __NLDBL_REDIR2(name, proto, alias) name proto
+# define __NLDBL_REDIR(name, proto) name proto
+#endif
+
 #endif	 /* sys/cdefs.h */
Files libc.orig/po/be.mo and libc/po/be.mo differ
Files libc.orig/po/ca.mo and libc/po/ca.mo differ
Files libc.orig/po/cs.mo and libc/po/cs.mo differ
Files libc.orig/po/da.mo and libc/po/da.mo differ
Files libc.orig/po/de.mo and libc/po/de.mo differ
Files libc.orig/po/el.mo and libc/po/el.mo differ
Files libc.orig/po/en_GB.mo and libc/po/en_GB.mo differ
Files libc.orig/po/es.mo and libc/po/es.mo differ
Files libc.orig/po/fi.mo and libc/po/fi.mo differ
Files libc.orig/po/fr.mo and libc/po/fr.mo differ
Files libc.orig/po/gl.mo and libc/po/gl.mo differ
Files libc.orig/po/hr.mo and libc/po/hr.mo differ
Files libc.orig/po/hu.mo and libc/po/hu.mo differ
Files libc.orig/po/it.mo and libc/po/it.mo differ
Files libc.orig/po/ja.mo and libc/po/ja.mo differ
Files libc.orig/po/ko.mo and libc/po/ko.mo differ
Files libc.orig/po/nb.mo and libc/po/nb.mo differ
Files libc.orig/po/nl.mo and libc/po/nl.mo differ
Files libc.orig/po/pl.mo and libc/po/pl.mo differ
Files libc.orig/po/pt_BR.mo and libc/po/pt_BR.mo differ
Files libc.orig/po/ru.mo and libc/po/ru.mo differ
Files libc.orig/po/rw.mo and libc/po/rw.mo differ
Files libc.orig/po/sk.mo and libc/po/sk.mo differ
Files libc.orig/po/sv.mo and libc/po/sv.mo differ
Files libc.orig/po/tr.mo and libc/po/tr.mo differ
Files libc.orig/po/zh_CN.mo and libc/po/zh_CN.mo differ
Files libc.orig/po/zh_TW.mo and libc/po/zh_TW.mo differ
diff -urN libc.orig/stdio-common/asprintf.c libc/stdio-common/asprintf.c
--- libc.orig/stdio-common/asprintf.c	2004-03-18 19:21:39.000000000 -0500
+++ libc/stdio-common/asprintf.c	2005-11-11 13:30:38.000000000 -0500
@@ -19,25 +19,31 @@
 
 #include <stdarg.h>
 #include <stdio.h>
-
-#include <libio/libioP.h>
-#define vasprintf(s, f, a) _IO_vasprintf (s, f, a)
+#include <libioP.h>
 #undef __asprintf
 
 /* Write formatted output from FORMAT to a string which is
    allocated with malloc and stored in *STRING_PTR.  */
 /* VARARGS2 */
 int
-__asprintf (char **string_ptr, const char *format, ...)
+___asprintf (char **string_ptr, const char *format, ...)
 {
   va_list arg;
   int done;
 
   va_start (arg, format);
-  done = vasprintf (string_ptr, format, arg);
+  done = ___vasprintf (string_ptr, format, arg NLDBL_0);
   va_end (arg);
 
   return done;
 }
-INTDEF(__asprintf)
+INTDEF2(___asprintf, __asprintf)
+
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+weak_alias (___asprintf, ____asprintf)
+long_double_symbol (libc, ___asprintf, __asprintf);
+long_double_symbol (libc, ____asprintf, asprintf);
+#else
+strong_alias (___asprintf, __asprintf)
 weak_alias (__asprintf, asprintf)
+#endif
diff -urN libc.orig/stdio-common/dprintf.c libc/stdio-common/dprintf.c
--- libc.orig/stdio-common/dprintf.c	2004-03-18 19:21:39.000000000 -0500
+++ libc/stdio-common/dprintf.c	2005-11-11 13:30:38.000000000 -0500
@@ -18,22 +18,27 @@
 
 #include <stdarg.h>
 #include <stdio.h>
-
-#include <libio/libioP.h>
-#define vdprintf(d, f, a) _IO_vdprintf (d, f, a)
+#include <libioP.h>
 
 /* Write formatted output to D, according to the format string FORMAT.  */
 /* VARARGS2 */
 int
-dprintf (int d, const char *format, ...)
+__dprintf (int d, const char *format, ...)
 {
   va_list arg;
   int done;
 
   va_start (arg, format);
-  done = vdprintf (d, format, arg);
+  done = ___vdprintf (d, format, arg NLDBL_0);
   va_end (arg);
 
   return done;
 }
+
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+libc_hidden_ver (__dprintf, dprintf)
+long_double_symbol (libc, __dprintf, dprintf);
+#else
+strong_alias (__dprintf, dprintf)
 libc_hidden_def (dprintf)
+#endif
diff -urN libc.orig/stdio-common/fprintf.c libc/stdio-common/fprintf.c
--- libc.orig/stdio-common/fprintf.c	2004-03-18 19:21:39.000000000 -0500
+++ libc/stdio-common/fprintf.c	2005-11-11 13:30:38.000000000 -0500
@@ -16,27 +16,36 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
+#include <libioP.h>
 #include <stdarg.h>
 #include <stdio.h>
 
-
 /* Write formatted output to STREAM from the format string FORMAT.  */
 /* VARARGS2 */
 int
-fprintf (FILE *stream, const char *format, ...)
+__fprintf (FILE *stream, const char *format, ...)
 {
   va_list arg;
   int done;
 
   va_start (arg, format);
-  done = vfprintf (stream, format, arg);
+  done = ___vfprintf (stream, format, arg NLDBL_0);
   va_end (arg);
 
   return done;
 }
+
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+libc_hidden_ver (__fprintf, fprintf)
+long_double_symbol (libc, __fprintf, fprintf);
+weak_alias (__fprintf, __IO_fprintf)
+long_double_symbol (libc, __IO_fprintf, _IO_fprintf);
+#else
+strong_alias (__fprintf, fprintf)
 libc_hidden_def (fprintf)
 
 /* We define the function with the real name here.  But deep down in
    libio the original function _IO_fprintf is also needed.  So make
    an alias.  */
-weak_alias (fprintf, _IO_fprintf)
+weak_alias (__fprintf, _IO_fprintf)
+#endif
diff -urN libc.orig/stdio-common/fscanf.c libc/stdio-common/fscanf.c
--- libc.orig/stdio-common/fscanf.c	2001-07-06 00:55:40.000000000 -0400
+++ libc/stdio-common/fscanf.c	2005-11-11 13:30:38.000000000 -0500
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1997, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -16,20 +16,27 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
+#include <libioP.h>
 #include <stdarg.h>
 #include <stdio.h>
 
 /* Read formatted input from STREAM according to the format string FORMAT.  */
 /* VARARGS2 */
 int
-fscanf (FILE *stream, const char *format, ...)
+__fscanf (FILE *stream, const char *format, ...)
 {
   va_list arg;
   int done;
 
   va_start (arg, format);
-  done = __vfscanf (stream, format, arg);
+  done = __IO_vfscanf (stream, format, arg, NULL NLDBL_0);
   va_end (arg);
 
   return done;
 }
+
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+long_double_symbol (libc, __fscanf, fscanf);
+#else
+strong_alias (__fscanf, fscanf)
+#endif
diff -urN libc.orig/stdio-common/printf.c libc/stdio-common/printf.c
--- libc.orig/stdio-common/printf.c	2004-03-18 19:21:39.000000000 -0500
+++ libc/stdio-common/printf.c	2005-11-11 13:30:38.000000000 -0500
@@ -17,6 +17,7 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
+#include <libioP.h>
 #include <stdarg.h>
 #include <stdio.h>
 
@@ -25,18 +26,25 @@
 /* Write formatted output to stdout from the format string FORMAT.  */
 /* VARARGS1 */
 int
-printf (const char *format, ...)
+__printf (const char *format, ...)
 {
   va_list arg;
   int done;
 
   va_start (arg, format);
-  done = vfprintf (stdout, format, arg);
+  done = ___vfprintf (stdout, format, arg NLDBL_0);
   va_end (arg);
 
   return done;
 }
 
 #undef _IO_printf
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+strong_alias (__printf, __IO_printf)
+long_double_symbol (libc, __printf, printf);
+long_double_symbol (libc, __IO_printf, _IO_printf);
+#else
+strong_alias (__printf, printf);
 /* This is for libg++.  */
 strong_alias (printf, _IO_printf);
+#endif
diff -urN libc.orig/stdio-common/printf_fp.c libc/stdio-common/printf_fp.c
--- libc.orig/stdio-common/printf_fp.c	2004-03-24 16:51:47.000000000 -0500
+++ libc/stdio-common/printf_fp.c	2005-11-11 13:30:38.000000000 -0500
@@ -1,5 +1,6 @@
 /* Floating point output for `printf'.
-   Copyright (C) 1995-1999,2000,2001,2002,2003 Free Software Foundation, Inc.
+   Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
 
@@ -138,9 +139,9 @@
 
 
 int
-__printf_fp (FILE *fp,
-	     const struct printf_info *info,
-	     const void *const *args)
+___printf_fp (FILE *fp,
+	      const struct printf_info *info,
+	      const void *const *args)
 {
   /* The floating-point value to output.  */
   union
@@ -1153,7 +1154,30 @@
   }
   return done;
 }
+
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+libc_hidden_ver (___printf_fp, __printf_fp)
+long_double_symbol (libc, ___printf_fp, __printf_fp);
+
+int
+attribute_compat_text_section
+__nldbl___printf_fp (FILE *fp,
+		     const struct printf_info *info,
+		     const void *const *args)
+{
+  struct printf_info info_no_ldbl = *info;
+
+  info_no_ldbl.is_long_double = 0;
+  return ___printf_fp (fp, &info_no_ldbl, args);
+}
+
+# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0)
+compat_symbol (libc, __nldbl___printf_fp, __printf_fp, GLIBC_2_0);
+# endif
+#else
+strong_alias (___printf_fp, __printf_fp)
 libc_hidden_def (__printf_fp)
+#endif
 
 /* Return the number of extra grouping characters that will be inserted
    into a number with INTDIG_MAX integer digits.  */
diff -urN libc.orig/stdio-common/printf.h libc/stdio-common/printf.h
--- libc.orig/stdio-common/printf.h	2001-07-23 19:42:48.000000000 -0400
+++ libc/stdio-common/printf.h	2005-11-11 13:30:38.000000000 -0500
@@ -1,4 +1,5 @@
-/* Copyright (C) 1991-1993,1995-1999,2000,2001 Free Software Foundation, Inc.
+/* Copyright (C) 1991-1993, 1995-1999, 2000, 2001, 2004
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -130,9 +131,10 @@
    of magnitude used for numbers ('k' for kilo, 'm' for mega etc).  If
    the format specifier is a uppercase character powers of 1000 are
    used.  Otherwise powers of 1024.  */
-extern int printf_size (FILE *__restrict __fp,
-			__const struct printf_info *__info,
-			__const void *__const *__restrict __args) __THROW;
+extern int __NLDBL_REDIR (printf_size,
+			  (FILE *__restrict __fp,
+			   __const struct printf_info *__info,
+			   __const void *__const *__restrict __args)) __THROW;
 
 /* This is the appropriate argument information function for `printf_size'.  */
 extern int printf_size_info (__const struct printf_info *__restrict
diff -urN libc.orig/stdio-common/printf_size.c libc/stdio-common/printf_size.c
--- libc.orig/stdio-common/printf_size.c	2004-08-04 17:43:30.000000000 -0400
+++ libc/stdio-common/printf_size.c	2005-11-11 13:30:38.668616616 -0500
@@ -86,7 +86,7 @@
 
 
 int
-printf_size (FILE *fp, const struct printf_info *info, const void *const *args)
+__printf_size (FILE *fp, const struct printf_info *info, const void *const *args)
 {
   /* Units for the both formats.  */
 #define BINARY_UNITS	" kmgtpezy"
@@ -234,6 +234,27 @@
   return done;
 }
 
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+# undef printf_size
+long_double_symbol (libc, __printf_size, printf_size);
+
+int
+attribute_compat_text_section
+__nldbl_printf_size (FILE *fp, const struct printf_info *info,
+		     const void *const *args)
+{
+  struct printf_info info_no_ldbl = *info;
+
+  info_no_ldbl.is_long_double = 0;
+  return __printf_size (fp, &info_no_ldbl, args);
+}
+# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_1)
+compat_symbol (libc, __nldbl_printf_size, printf_size, GLIBC_2_1);
+# endif
+#else
+strong_alias (__printf_size, printf_size)
+#endif
+
 /* This is the function used by `vfprintf' to determine number and
    type of the arguments.  */
 int
diff -urN libc.orig/stdio-common/scanf.c libc/stdio-common/scanf.c
--- libc.orig/stdio-common/scanf.c	2004-03-18 19:21:39.000000000 -0500
+++ libc/stdio-common/scanf.c	2005-11-11 13:30:38.000000000 -0500
@@ -19,21 +19,25 @@
 
 #include <stdarg.h>
 #include <stdio.h>
-
 #include <libioP.h>
 
-
 /* Read formatted input from stdin according to the format string FORMAT.  */
 /* VARARGS1 */
 int
-scanf (const char *format, ...)
+__scanf (const char *format, ...)
 {
   va_list arg;
   int done;
 
   va_start (arg, format);
-  done = INTUSE(_IO_vfscanf) (stdin, format, arg, NULL);
+  done = __IO_vfscanf (stdin, format, arg, NULL NLDBL_0);
   va_end (arg);
 
   return done;
 }
+
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+long_double_symbol (libc, __scanf, scanf);
+#else
+strong_alias (__scanf, scanf)
+#endif
diff -urN libc.orig/stdio-common/snprintf.c libc/stdio-common/snprintf.c
--- libc.orig/stdio-common/snprintf.c	2004-03-18 19:21:39.000000000 -0500
+++ libc/stdio-common/snprintf.c	2005-11-11 13:30:38.000000000 -0500
@@ -18,9 +18,7 @@
 
 #include <stdarg.h>
 #include <stdio.h>
-
-#include <libio/libioP.h>
-#define __vsnprintf(s, l, f, a) _IO_vsnprintf (s, l, f, a)
+#include <libioP.h>
 
 /* Write formatted output into S, according to the format
    string FORMAT, writing no more than MAXLEN characters.  */
@@ -32,9 +30,14 @@
   int done;
 
   va_start (arg, format);
-  done = __vsnprintf (s, maxlen, format, arg);
+  done = ___vsnprintf (s, maxlen, format, arg NLDBL_0);
   va_end (arg);
 
   return done;
 }
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+weak_alias (__snprintf, ___snprintf)
+long_double_symbol (libc, ___snprintf, snprintf);
+#else
 weak_alias (__snprintf, snprintf)
+#endif
diff -urN libc.orig/stdio-common/sprintf.c libc/stdio-common/sprintf.c
--- libc.orig/stdio-common/sprintf.c	2004-03-18 19:21:39.000000000 -0500
+++ libc/stdio-common/sprintf.c	2005-11-11 13:30:38.000000000 -0500
@@ -19,23 +19,30 @@
 
 #include <stdarg.h>
 #include <stdio.h>
-#include <libio/iolibio.h>
-#define vsprintf(s, f, a) INTUSE(_IO_vsprintf) (s, f, a)
+#include <libioP.h>
 
 /* Write formatted output into S, according to the format string FORMAT.  */
 /* VARARGS2 */
 int
-sprintf (char *s, const char *format, ...)
+__sprintf (char *s, const char *format, ...)
 {
   va_list arg;
   int done;
 
   va_start (arg, format);
-  done = vsprintf (s, format, arg);
+  done = ___vsprintf (s, format, arg NLDBL_0);
   va_end (arg);
 
   return done;
 }
-libc_hidden_def (sprintf)
 
-strong_alias(sprintf, _IO_sprintf)
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+libc_hidden_ver (__sprintf, sprintf)
+strong_alias (__sprintf, __IO_sprintf)
+long_double_symbol (libc, __sprintf, sprintf);
+long_double_symbol (libc, __IO_sprintf, _IO_sprintf);
+#else
+strong_alias (__sprintf, sprintf)
+libc_hidden_def (sprintf)
+strong_alias (__sprintf, _IO_sprintf)
+#endif
diff -urN libc.orig/stdio-common/sscanf.c libc/stdio-common/sscanf.c
--- libc.orig/stdio-common/sscanf.c	2004-03-18 19:21:39.000000000 -0500
+++ libc/stdio-common/sscanf.c	2005-11-11 13:30:38.000000000 -0500
@@ -19,25 +19,33 @@
 
 #include <stdarg.h>
 #include <stdio.h>
-#include <libio/iolibio.h>
-#define __vsscanf(s, f, a) _IO_vsscanf (s, f, a)
+#include <libioP.h>
 
 /* Read formatted input from S, according to the format string FORMAT.  */
 /* VARARGS2 */
 int
-sscanf (const char *s, const char *format, ...)
+__sscanf (const char *s, const char *format, ...)
 {
   va_list arg;
   int done;
 
   va_start (arg, format);
-  done = __vsscanf (s, format, arg);
+  done = ___vsscanf (s, format, arg NLDBL_0);
   va_end (arg);
 
   return done;
 }
-libc_hidden_def (sscanf)
-
 #undef _IO_sscanf
+
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+# undef sscanf
+long_double_symbol (libc, __sscanf, sscanf);
+libc_hidden_ver (__sscanf, sscanf)
+strong_alias (__sscanf, __IO_sscanf)
+long_double_symbol (libc, __IO_sscanf, _IO_sscanf);
+#else
+strong_alias (__sscanf, sscanf)
+libc_hidden_def (sscanf)
 /* This is for libg++.  */
 strong_alias (sscanf, _IO_sscanf)
+#endif
diff -urN libc.orig/stdio-common/vfprintf.c libc/stdio-common/vfprintf.c
--- libc.orig/stdio-common/vfprintf.c	2005-11-05 16:48:58.000000000 -0500
+++ libc/stdio-common/vfprintf.c	2005-11-11 13:53:21.115597680 -0500
@@ -18,8 +18,10 @@
 
 #include <ctype.h>
 #include <limits.h>
+#include <math.h>
 #include <printf.h>
 #include <stdarg.h>
+#include <stdbool.h>
 #include <stdint.h>
 #include <stdlib.h>
 #include <string.h>
@@ -63,8 +65,9 @@
     } while (0)
 #define UNBUFFERED_P(S) ((S)->_IO_file_flags & _IO_UNBUFFERED)
 
+#undef vfprintf
 #ifndef COMPILE_WPRINTF
-# define vfprintf	_IO_vfprintf
+# define vfprintf	___vfprintf
 # define CHAR_T		char
 # define UCHAR_T	unsigned char
 # define INT_T		int
@@ -80,7 +83,7 @@
 # define ORIENT		if (_IO_vtable_offset (s) == 0 && _IO_fwide (s, -1) != -1)\
 			  return -1
 #else
-# define vfprintf	_IO_vfwprintf
+# define vfprintf	___vfwprintf
 # define CHAR_T		wchar_t
 /* This is a hack!!!  There should be a type uwchar_t.  */
 # define UCHAR_T	unsigned int /* uwchar_t */
@@ -159,7 +162,8 @@
 
 
 /* Helper function to provide temporary buffering for unbuffered streams.  */
-static int buffered_vfprintf (FILE *stream, const CHAR_T *fmt, va_list)
+static int buffered_vfprintf (FILE *stream, const CHAR_T *fmt, va_list
+			      NLDBL_DECL)
      __THROW __attribute__ ((noinline)) internal_function;
 
 /* Handle unknown format specifier.  */
@@ -178,7 +182,7 @@
 
 /* The function itself.  */
 int
-vfprintf (FILE *s, const CHAR_T *format, va_list ap)
+vfprintf (FILE *s, const CHAR_T *format, va_list ap NLDBL_DECL)
 {
   /* The character used as thousands separator.  */
 #ifdef COMPILE_WPRINTF
@@ -758,6 +762,9 @@
 									      \
 	if (fspec == NULL)						      \
 	  {								      \
+	    if (DBL_IS_LDBL)						      \
+	      is_long_double = 0;					      \
+									      \
 	    struct printf_info info = { .prec = prec,			      \
 					.width = width,			      \
 					.spec = spec,			      \
@@ -785,6 +792,11 @@
 	else								      \
 	  {								      \
 	    ptr = (const void *) &args_value[fspec->data_arg];		      \
+	    if (DBL_IS_LDBL)						      \
+	      {								      \
+		fspec->data_arg_type = PA_DOUBLE;			      \
+		fspec->info.is_long_double = 0;				      \
+	      }								      \
 									      \
 	    function_done = __printf_fp (s, &fspec->info, &ptr);	      \
 	  }								      \
@@ -808,6 +820,9 @@
 									      \
 	if (fspec == NULL)						      \
 	  {								      \
+	    if (DBL_IS_LDBL)						      \
+	      is_long_double = 0;					      \
+									      \
 	    struct printf_info info = { .prec = prec,			      \
 					.width = width,			      \
 					.spec = spec,			      \
@@ -834,6 +849,8 @@
 	else								      \
 	  {								      \
 	    ptr = (const void *) &args_value[fspec->data_arg];		      \
+	    if (DBL_IS_LDBL)						      \
+	      fspec->info.is_long_double = 0;				      \
 									      \
 	    function_done = __printf_fphex (s, &fspec->info, &ptr);	      \
 	  }								      \
@@ -1243,7 +1260,7 @@
   if (UNBUFFERED_P (s))
     /* Use a helper function which will allocate a local temporary buffer
        for the stream and then call us again.  */
-    return buffered_vfprintf (s, format, ap);
+    return buffered_vfprintf (s, format, ap NLDBL_ARG);
 
   /* Initialize local variables.  */
   done = 0;
@@ -1704,7 +1721,15 @@
 	T (PA_INT|PA_FLAG_LONG_LONG, pa_long_long_int, long long int);
 	T (PA_FLOAT, pa_double, double);	/* Promoted.  */
 	T (PA_DOUBLE, pa_double, double);
-	T (PA_DOUBLE|PA_FLAG_LONG_DOUBLE, pa_long_double, long double);
+	case PA_DOUBLE|PA_FLAG_LONG_DOUBLE:
+	  if (DBL_IS_LDBL)
+	    {
+	      args_value[cnt].pa_double = va_arg (ap_save, double);
+	      args_type[cnt] &= ~PA_FLAG_LONG_DOUBLE;
+	    }
+	  else
+	    args_value[cnt].pa_long_double = va_arg (ap_save, long double);
+	  break;
 	T (PA_STRING, pa_string, const char *);
 	T (PA_WSTRING, pa_wstring, const wchar_t *);
 	T (PA_POINTER, pa_pointer, void *);
@@ -2086,7 +2111,7 @@
 static int
 internal_function
 buffered_vfprintf (register _IO_FILE *s, const CHAR_T *format,
-		   _IO_va_list args)
+		   _IO_va_list args NLDBL_DECL)
 {
   CHAR_T buf[_IO_BUFSIZ];
   struct helper_file helper;
@@ -2120,9 +2145,9 @@
 
   /* Now print to helper instead.  */
 #ifndef COMPILE_WPRINTF
-  result = INTUSE(_IO_vfprintf) (hp, format, args);
+  result = ___vfprintf (hp, format, args NLDBL_ARG);
 #else
-  result = vfprintf (hp, format, args);
+  result = vfprintf (hp, format, args NLDBL_ARG);
 #endif
 
   /* Lock stream.  */
@@ -2154,12 +2179,38 @@
 }
 
 #undef vfprintf
-#ifdef strong_alias
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+
+# include <math_ldbl_opt.h>
+
+# ifdef COMPILE_WPRINTF
+int
+weak_function
+__vfwprintf (FILE *s, const CHAR_T *format, va_list ap)
+{
+  return ___vfwprintf (s, format, ap, 0);
+}
+long_double_symbol (libc, __vfwprintf, vfwprintf);
+# else
+int
+__vfprintf (FILE *s, const CHAR_T *format, va_list ap)
+{
+  return ___vfprintf (s, format, ap, 0);
+}
+strong_alias (__vfprintf, __new_vfprintf)
+long_double_symbol (libc, __vfprintf, _IO_vfprintf);
+long_double_symbol (libc, __new_vfprintf, vfprintf);
+libc_hidden_ver (__vfprintf, vfprintf)
+INTDEF2 (__vfprintf, _IO_vfprintf)
+# endif
+#elif defined strong_alias
 /* This is for glibc.  */
 # ifdef COMPILE_WPRINTF
+strong_alias (___vfwprintf, _IO_vfwprintf);
 strong_alias (_IO_vfwprintf, __vfwprintf);
 weak_alias (_IO_vfwprintf, vfwprintf);
 # else
+strong_alias (___vfprintf, _IO_vfprintf);
 strong_alias (_IO_vfprintf, vfprintf);
 libc_hidden_def (vfprintf)
 INTDEF(_IO_vfprintf)
diff -urN libc.orig/stdio-common/vfscanf.c libc/stdio-common/vfscanf.c
--- libc.orig/stdio-common/vfscanf.c	2005-04-26 16:52:22.000000000 -0400
+++ libc/stdio-common/vfscanf.c	2005-11-11 13:30:38.672616008 -0500
@@ -20,6 +20,7 @@
 #include <errno.h>
 #include <limits.h>
 #include <ctype.h>
+#include <math.h>
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdint.h>
@@ -178,18 +179,12 @@
    Return the number of assignments made, or -1 for an input error.  */
 #ifdef COMPILE_WSCANF
 int
-_IO_vfwscanf (s, format, argptr, errp)
-     _IO_FILE *s;
-     const wchar_t *format;
-     _IO_va_list argptr;
-     int *errp;
+__IO_vfwscanf (_IO_FILE *s, const wchar_t *format, _IO_va_list argptr,
+	       int *errp NLDBL_DECL)
 #else
 int
-_IO_vfscanf (s, format, argptr, errp)
-     _IO_FILE *s;
-     const char *format;
-     _IO_va_list argptr;
-     int *errp;
+__IO_vfscanf (_IO_FILE *s, const char *format, _IO_va_list argptr, int *errp
+	      NLDBL_DECL)
 #endif
 {
   va_list arg;
@@ -1891,7 +1886,7 @@
 	scan_float:
 	  /* Convert the number.  */
 	  ADDW (L_('\0'));
-	  if (flags & LONGDBL)
+	  if ((flags & LONGDBL) && !DBL_IS_LDBL)
 	    {
 	      long double d = __strtold_internal (wp, &tw, flags & GROUP);
 	      if (!(flags & SUPPRESS) && tw != wp)
@@ -2454,24 +2449,68 @@
   return done;
 }
 
-#ifdef COMPILE_WSCANF
+#ifndef __LONG_DOUBLE_MATH_OPTIONAL
+# ifdef COMPILE_WSCANF
+strong_alias (__IO_vfwscanf, _IO_vfwscanf)
+
 int
 __vfwscanf (FILE *s, const wchar_t *format, va_list argptr)
 {
-  return _IO_vfwscanf (s, format, argptr, NULL);
+  return __IO_vfwscanf (s, format, argptr, NULL);
 }
-#else
+weak_alias (__vfwscanf, vfwscanf)
+# else
+strong_alias (__IO_vfscanf, _IO_vfscanf)
+
 int
 __vfscanf (FILE *s, const char *format, va_list argptr)
 {
-  return INTUSE(_IO_vfscanf) (s, format, argptr, NULL);
+  return __IO_vfscanf (s, format, argptr, NULL);
 }
 libc_hidden_def (__vfscanf)
-#endif
-
-#ifdef COMPILE_WSCANF
-weak_alias (__vfwscanf, vfwscanf)
-#else
 weak_alias (__vfscanf, vfscanf)
 INTDEF(_IO_vfscanf)
+# endif
+#else
+
+# include <math_ldbl_opt.h>
+
+
+# ifdef COMPILE_WSCANF
+int
+_IO_vfwscanf (_IO_FILE *s, const wchar_t *format, _IO_va_list argptr,
+		int *errp)
+{
+  return __IO_vfwscanf (s, format, argptr, errp, 0);
+}
+
+int
+__vfwscanf (FILE *s, const wchar_t *format, va_list argptr)
+{
+  return __IO_vfwscanf (s, format, argptr, NULL, 0);
+}
+weak_alias (__vfwscanf, ___vfwscanf)
+
+long_double_symbol (libc, ___vfwscanf, vfwscanf);
+# else
+int
+___IO_vfscanf (_IO_FILE *s, const char *format, _IO_va_list argptr, int *errp)
+{
+  return __IO_vfscanf (s, format, argptr, errp, 0);
+}
+
+int
+___vfscanf (FILE *s, const char *format, va_list argptr)
+{
+  return __IO_vfscanf (s, format, argptr, NULL, 0);
+}
+weak_alias (___vfscanf, ____vfscanf)
+
+long_double_symbol (libc, ___IO_vfscanf, _IO_vfscanf);
+long_double_symbol (libc, ___vfscanf, __vfscanf);
+long_double_symbol (libc, ____vfscanf, vfscanf);
+libc_hidden_ver (___vfscanf, __vfscanf)
+INTDEF2(___IO_vfscanf, _IO_vfscanf)
+# endif
+
 #endif
diff -urN libc.orig/stdio-common/vprintf.c libc/stdio-common/vprintf.c
--- libc.orig/stdio-common/vprintf.c	2001-07-06 00:55:41.000000000 -0400
+++ libc/stdio-common/vprintf.c	2005-11-11 13:30:38.000000000 -0500
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1993, 1995, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1993, 1995, 1997, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -19,15 +19,20 @@
 #include <stdarg.h>
 #undef	__OPTIMIZE__	/* Avoid inline `vprintf' function.  */
 #include <stdio.h>
+#include <libioP.h>
 
 #undef	vprintf
 
 /* Write formatted output to stdout according to the
    format string FORMAT, using the argument list in ARG.  */
 int
-vprintf (format, arg)
-     const char *format;
-     __gnuc_va_list arg;
+__vprintf (const char *format, __gnuc_va_list arg)
 {
-  return vfprintf (stdout, format, arg);
+  return ___vfprintf (stdout, format, arg NLDBL_0);
 }
+
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+long_double_symbol (libc, __vprintf, vprintf);
+#else
+strong_alias (__vprintf, vprintf)
+#endif
diff -urN libc.orig/stdlib/monetary.h libc/stdlib/monetary.h
--- libc.orig/stdlib/monetary.h	2002-08-27 19:36:11.000000000 -0400
+++ libc/stdlib/monetary.h	2005-11-11 13:30:38.000000000 -0500
@@ -26,27 +26,29 @@
 #define __need_size_t
 #include <stddef.h>
 #include <bits/types.h>
+#include <bits/wordsize.h>
 
 #ifndef	__ssize_t_defined
 typedef __ssize_t ssize_t;
 # define __ssize_t_defined
 #endif
 
-
 __BEGIN_DECLS
 
 /* Formatting a monetary value according to the current locale.  */
-extern ssize_t strfmon (char *__restrict __s, size_t __maxsize,
-			__const char *__restrict __format, ...)
+extern ssize_t __NLDBL_REDIR (strfmon,
+			      (char *__restrict __s, size_t __maxsize,
+			       __const char *__restrict __format, ...))
      __THROW __attribute_format_strfmon__ (3, 4);
 
 #ifdef __USE_GNU
 # include <xlocale.h>
 
 /* Formatting a monetary value according to the current locale.  */
-extern ssize_t strfmon_l (char *__restrict __s, size_t __maxsize,
-			  __locale_t loc,
-			  __const char *__restrict __format, ...)
+extern ssize_t __NLDBL_REDIR (strfmon_l,
+			      (char *__restrict __s, size_t __maxsize,
+			       __locale_t loc,
+			       __const char *__restrict __format, ...))
      __THROW __attribute_format_strfmon__ (4, 5);
 #endif
 
diff -urN libc.orig/stdlib/stdlib.h libc/stdlib/stdlib.h
--- libc.orig/stdlib/stdlib.h	2005-09-17 11:42:47.000000000 -0400
+++ libc/stdlib/stdlib.h	2005-11-11 13:52:24.125612080 -0500
@@ -173,9 +173,11 @@
 extern float strtof (__const char *__restrict __nptr,
 		     char **__restrict __endptr) __THROW __nonnull ((1)) __wur;
 
-extern long double strtold (__const char *__restrict __nptr,
-			    char **__restrict __endptr)
-     __THROW __nonnull ((1)) __wur;
+extern long double __NLDBL_REDIR2 (strtold,
+ 				   (__const char *__restrict __nptr,
+				    char **__restrict __endptr)
+				   __THROW __nonnull ((1)) __wur,
+				   strtod);
 __END_NAMESPACE_C99
 #endif
 
@@ -266,10 +268,12 @@
 		       char **__restrict __endptr, __locale_t __loc)
      __THROW __nonnull ((1, 3)) __wur;
 
-extern long double strtold_l (__const char *__restrict __nptr,
-			      char **__restrict __endptr,
-			      __locale_t __loc)
-     __THROW __nonnull ((1, 3)) __wur;
+extern long double __NLDBL_REDIR2 (strtold_l,
+				   (__const char *__restrict __nptr,
+				    char **__restrict __endptr,
+				    __locale_t __loc)
+				   __THROW __nonnull ((1, 3)) __wur,
+				   strtod_l);
 #endif /* GNU */
 
 
@@ -282,10 +286,12 @@
 extern float __strtof_internal (__const char *__restrict __nptr,
 				char **__restrict __endptr, int __group)
      __THROW __nonnull ((1)) __wur;
-extern long double __strtold_internal (__const char *__restrict __nptr,
-				       char **__restrict __endptr,
-				       int __group)
-     __THROW __nonnull ((1)) __wur;
+extern long double __NLDBL_REDIR2 (__strtold_internal,
+				   (__const char *__restrict __nptr,
+				    char **__restrict __endptr,
+				    int __group)
+				   __THROW __nonnull ((1)) __wur,
+				   __strtod_internal);
 #ifndef __strtol_internal_defined
 extern long int __strtol_internal (__const char *__restrict __nptr,
 				   char **__restrict __endptr,
@@ -353,8 +359,10 @@
 extern __inline long double
 __NTH (strtold (__const char *__restrict __nptr, char **__restrict __endptr))
 {
+#  ifndef __NLDBL_COMPAT
   return __strtold_internal (__nptr, __endptr, 0);
 }
+#  endif
 __END_NAMESPACE_C99
 # endif
 
@@ -835,14 +843,20 @@
 
 # ifdef __USE_MISC
 /* Long double versions of above functions.  */
-extern char *qecvt (long double __value, int __ndigit,
-		    int *__restrict __decpt, int *__restrict __sign)
-     __THROW __nonnull ((3, 4)) __wur;
-extern char *qfcvt (long double __value, int __ndigit,
-		    int *__restrict __decpt, int *__restrict __sign)
-     __THROW __nonnull ((3, 4)) __wur;
-extern char *qgcvt (long double __value, int __ndigit, char *__buf)
-     __THROW __nonnull ((3)) __wur;
+extern char *__NLDBL_REDIR2 (qecvt,
+			     (long double __value, int __ndigit,
+			      int *__restrict __decpt, int *__restrict __sign)
+			     __THROW __nonnull ((3, 4)) __wur,
+			     ecvt);
+extern char *__NLDBL_REDIR2 (qfcvt,
+			     (long double __value, int __ndigit,
+			      int *__restrict __decpt, int *__restrict __sign)
+			     __THROW __nonnull ((3, 4)) __wur,
+			     fcvt);
+extern char *__NLDBL_REDIR2 (qgcvt,
+			     (long double __value, int __ndigit, char *__buf)
+			     __THROW __nonnull ((3)) __wur,
+			     gcvt);
 
 
 /* Reentrant version of the functions above which provide their own
@@ -854,14 +868,18 @@
 		   int *__restrict __sign, char *__restrict __buf,
 		   size_t __len) __THROW __nonnull ((3, 4, 5));
 
-extern int qecvt_r (long double __value, int __ndigit,
-		    int *__restrict __decpt, int *__restrict __sign,
-		    char *__restrict __buf, size_t __len)
-     __THROW __nonnull ((3, 4, 5));
-extern int qfcvt_r (long double __value, int __ndigit,
-		    int *__restrict __decpt, int *__restrict __sign,
-		    char *__restrict __buf, size_t __len)
-     __THROW __nonnull ((3, 4, 5));
+extern int __NLDBL_REDIR2 (qecvt_r,
+			   (long double __value, int __ndigit,
+			    int *__restrict __decpt, int *__restrict __sign,
+			    char *__restrict __buf, size_t __len)
+			   __THROW __nonnull ((3, 4, 5)),
+			   ecvt_r);
+extern int __NLDBL_REDIR2 (qfcvt_r,
+			   (long double __value, int __ndigit,
+			    int *__restrict __decpt, int *__restrict __sign,
+			    char *__restrict __buf, size_t __len)
+			   __THROW __nonnull ((3, 4, 5)),
+			   fcvt_r);
 # endif	/* misc */
 #endif	/* use MISC || use X/Open Unix */
 
diff -urN libc.orig/stdlib/strfmon.c libc/stdlib/strfmon.c
--- libc.orig/stdlib/strfmon.c	2004-03-14 15:46:27.000000000 -0500
+++ libc/stdlib/strfmon.c	2005-11-11 13:30:38.000000000 -0500
@@ -25,15 +25,39 @@
 
 
 ssize_t
-strfmon (char *s, size_t maxsize, const char *format, ...)
+__strfmon (char *s, size_t maxsize, const char *format, ...)
 {
   va_list ap;
 
   va_start (ap, format);
 
-  ssize_t res = __vstrfmon_l (s, maxsize, _NL_CURRENT_LOCALE, format, ap);
+  ssize_t res = __vstrfmon_l (s, maxsize, _NL_CURRENT_LOCALE, format, ap
+			      NLDBL_0);
 
   va_end (ap);
 
   return res;
 }
+
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+long_double_symbol (libc, __strfmon, strfmon);
+
+ssize_t
+attribute_compat_text_section
+__nldbl_strfmon (char *s, size_t maxsize, const char *format, ...)
+{
+  va_list ap;
+
+  va_start (ap, format);
+  ssize_t res = __vstrfmon_l (s, maxsize, _NL_CURRENT_LOCALE, format, ap, 1);
+  va_end (ap);
+  return res;
+}
+
+# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0)
+compat_symbol (libc, __nldbl_strfmon, strfmon, GLIBC_2_0);
+# endif
+
+#else
+strong_alias (__strfmon, strfmon)
+#endif
diff -urN libc.orig/stdlib/strfmon_l.c libc/stdlib/strfmon_l.c
--- libc.orig/stdlib/strfmon_l.c	2004-08-04 17:40:51.000000000 -0400
+++ libc/stdlib/strfmon_l.c	2005-11-11 13:30:38.530637592 -0500
@@ -23,10 +23,7 @@
 #include <langinfo.h>
 #include <locale.h>
 #include <monetary.h>
-#ifdef USE_IN_LIBIO
-# include "../libio/libioP.h"
-# include "../libio/strfile.h"
-#endif
+#include "../libio/strfile.h"
 #include <printf.h>
 #include <stdarg.h>
 #include <stdio.h>
@@ -88,17 +85,13 @@
    be specified in format string.  */
 ssize_t
 __vstrfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format,
-	      va_list ap)
+	      va_list ap NLDBL_DECL)
 {
   struct locale_data *current = loc->__locales[LC_MONETARY];
-#ifdef USE_IN_LIBIO
   _IO_strfile f;
 # ifdef _IO_MTSAFE_IO
   _IO_lock_t lock;
 # endif
-#else
-  FILE f;
-#endif
   struct printf_info info;
   char *dest;			/* Pointer so copy the output.  */
   const char *fmt;		/* Pointer that walks through format.  */
@@ -278,7 +271,8 @@
       if (*fmt == 'L')
 	{
 	  ++fmt;
-	  is_long_double = 1;
+	  if (!DBL_IS_LDBL)
+	    is_long_double = 1;
 	}
 
       /* Handle format specifier.  */
@@ -633,16 +627,46 @@
 }
 
 ssize_t
-__strfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format, ...)
+___strfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format, ...)
 {
   va_list ap;
 
   va_start (ap, format);
 
-  ssize_t res = __vstrfmon_l (s, maxsize, loc, format, ap);
+  ssize_t res = __vstrfmon_l (s, maxsize, loc, format, ap NLDBL_0);
 
   va_end (ap);
 
   return res;
 }
+
+#ifndef __LONG_DOUBLE_MATH_OPTIONAL
+strong_alias (___strfmon_l, __strfmon_l)
 weak_alias (__strfmon_l, strfmon_l)
+#else
+long_double_symbol (libc, ___strfmon_l, __strfmon_l);
+weak_alias (___strfmon_l, ____strfmon_l)
+long_double_symbol (libc, ____strfmon_l, strfmon_l);
+
+ssize_t
+attribute_compat_text_section
+__nldbl___strfmon_l (char *s, size_t maxsize, __locale_t loc,
+		     const char *format, ...)
+{
+  va_list ap;
+
+  va_start (ap, format);
+  ssize_t res = __vstrfmon_l (s, maxsize, loc, format, ap, 1);
+  va_end (ap);
+  return res;
+}
+weak_alias (__nldbl___strfmon_l, __nldbl_strfmon_l)
+
+# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_1)
+compat_symbol (libc, __nldbl___strfmon_l, __strfmon_l, GLIBC_2_1);
+# endif
+# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_3)
+compat_symbol (libc, __nldbl_strfmon_l, strfmon_l, GLIBC_2_3);
+# endif
+
+#endif
diff -urN libc.orig/stdlib/strtod.c libc/stdlib/strtod.c
--- libc.orig/stdlib/strtod.c	2004-03-14 15:48:09.000000000 -0500
+++ libc/stdlib/strtod.c	2005-11-11 13:30:38.000000000 -0500
@@ -24,6 +24,7 @@
 
 
 #ifndef FLOAT
+# include <math_ldbl_opt.h>
 # define FLOAT double
 # ifdef USE_WIDE_CHAR
 #  define STRTOF wcstod
@@ -68,3 +69,15 @@
 {
   return INTERNAL(STRTOF_L) (nptr, endptr, 0, _NL_CURRENT_LOCALE);
 }
+
+#ifdef LONG_DOUBLE_COMPAT
+# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0)
+#  ifdef USE_WIDE_CHAR
+compat_symbol (libc, wcstod, wcstold, GLIBC_2_0);
+compat_symbol (libc, __wcstod_internal, __wcstold_internal, GLIBC_2_0);
+#  else
+compat_symbol (libc, strtod, strtold, GLIBC_2_0);
+compat_symbol (libc, __strtod_internal, __strtold_internal, GLIBC_2_0);
+#  endif
+# endif
+#endif
diff -urN libc.orig/stdlib/strtod_l.c libc/stdlib/strtod_l.c
--- libc.orig/stdlib/strtod_l.c	2005-09-28 02:06:51.000000000 -0400
+++ libc/stdlib/strtod_l.c	2005-11-11 13:30:38.523638656 -0500
@@ -28,6 +28,7 @@
    `strtof.c', `wcstod.c', `wcstold.c', and `wcstof.c' to produce the
    `long double' and `float' versions of the reader.  */
 #ifndef FLOAT
+# include <math_ldbl_opt.h>
 # define FLOAT		double
 # define FLT		DBL
 # ifdef USE_WIDE_CHAR
@@ -406,6 +407,9 @@
 
 #define INTERNAL(x) INTERNAL1(x)
 #define INTERNAL1(x) __##x##_internal
+#ifndef ____STRTOF_INTERNAL
+# define ____STRTOF_INTERNAL INTERNAL (__STRTOF)
+#endif
 
 /* This file defines a function to check for correct grouping.  */
 #include "grouping.h"
@@ -417,7 +421,7 @@
    return 0.0.  If the number is too big to be represented, set `errno' to
    ERANGE and return HUGE_VAL with the appropriate sign.  */
 FLOAT
-INTERNAL (__STRTOF) (nptr, endptr, group, loc)
+____STRTOF_INTERNAL (nptr, endptr, group, loc)
      const STRING_TYPE *nptr;
      STRING_TYPE **endptr;
      int group;
@@ -1557,7 +1561,7 @@
   /* NOTREACHED */
 }
 #if defined _LIBC && !defined USE_WIDE_CHAR
-libc_hidden_def (INTERNAL (__STRTOF))
+libc_hidden_def (____STRTOF_INTERNAL)
 #endif
 
 /* External user entry point.  */
@@ -1571,6 +1575,23 @@
      STRING_TYPE **endptr;
      __locale_t loc;
 {
-  return INTERNAL (__STRTOF) (nptr, endptr, 0, loc);
+  return ____STRTOF_INTERNAL (nptr, endptr, 0, loc);
 }
 weak_alias (__STRTOF, STRTOF)
+
+#ifdef LONG_DOUBLE_COMPAT
+# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_1)
+#  ifdef USE_WIDE_CHAR
+compat_symbol (libc, __wcstod_l, __wcstold_l, GLIBC_2_1);
+#  else
+compat_symbol (libc, __strtod_l, __strtold_l, GLIBC_2_1);
+#  endif
+# endif
+# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_3)
+#  ifdef USE_WIDE_CHAR
+compat_symbol (libc, wcstod_l, wcstold_l, GLIBC_2_3);
+#  else
+compat_symbol (libc, strtod_l, strtold_l, GLIBC_2_3);
+#  endif
+# endif
+#endif
diff -urN libc.orig/stdlib/strtold.c libc/stdlib/strtold.c
--- libc.orig/stdlib/strtold.c	2004-03-14 15:50:34.000000000 -0500
+++ libc/stdlib/strtold.c	2005-11-11 13:30:38.000000000 -0500
@@ -21,15 +21,43 @@
 /* The actual implementation for all floating point sizes is in strtod.c.
    These macros tell it to produce the `float' version, `strtof'.  */
 
+#include <bits/wordsize.h>
+
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+# include <wchar.h>
+# define NEW(x) NEW1(x)
+# define NEW1(x) __new_##x
+long double ____new_strtold_internal (const char *, char **, int);
+long double __new_strtold (const char *, char **);
+long double ____new_wcstold_internal (const wchar_t *, wchar_t **, int);
+long double __new_wcstold (const wchar_t *, wchar_t **);
+libc_hidden_proto (____new_strtold_internal)
+libc_hidden_proto (____new_wcstold_internal)
+#else
+# define NEW(x) x
+#endif
+
 #define	FLOAT		long double
 #define	FLT		LDBL
 #ifdef USE_WIDE_CHAR
-# define STRTOF		wcstold
+# define STRTOF		NEW (wcstold)
 # define STRTOF_L	__wcstold_l
 #else
-# define STRTOF		strtold
+# define STRTOF		NEW (strtold)
 # define STRTOF_L	__strtold_l
 #endif
 
-
 #include "strtod.c"
+
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+# include <math_ldbl_opt.h>
+# ifdef USE_WIDE_CHAR
+long_double_symbol (libc, __new_wcstold, wcstold);
+long_double_symbol (libc, ____new_wcstold_internal, __wcstold_internal);
+libc_hidden_ver (____new_wcstold_internal, __wcstold_internal)
+# else
+long_double_symbol (libc, __new_strtold, strtold);
+long_double_symbol (libc, ____new_strtold_internal, __strtold_internal);
+libc_hidden_ver (____new_strtold_internal, __strtold_internal)
+# endif
+#endif
diff -urN libc.orig/sysdeps/generic/cabs.c libc/sysdeps/generic/cabs.c
--- libc.orig/sysdeps/generic/cabs.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/generic/cabs.c	2005-11-11 13:30:38.000000000 -0500
@@ -0,0 +1,33 @@
+/* Return the complex absolute value of double complex value.
+   Copyright (C) 1997, 1998 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <complex.h>
+#include <math.h>
+
+double
+__cabs (double _Complex z)
+{
+  return __hypot (__real__ z, __imag__ z);
+}
+weak_alias (__cabs, cabs)
+#ifdef NO_LONG_DOUBLE
+strong_alias (__cabs, __cabsl)
+weak_alias (__cabs, cabsl)
+#endif
diff -urN libc.orig/sysdeps/generic/cabsl.c libc/sysdeps/generic/cabsl.c
--- libc.orig/sysdeps/generic/cabsl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/generic/cabsl.c	2005-11-11 13:30:38.000000000 -0500
@@ -0,0 +1,29 @@
+/* Return the complex absolute value of long double complex value.
+   Copyright (C) 1997, 1998 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <complex.h>
+#include <math.h>
+
+long double
+__cabsl (long double _Complex z)
+{
+  return __hypotl (__real__ z, __imag__ z);
+}
+weak_alias (__cabsl, cabsl)
diff -urN libc.orig/sysdeps/generic/carg.c libc/sysdeps/generic/carg.c
--- libc.orig/sysdeps/generic/carg.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/generic/carg.c	2005-11-11 13:30:38.000000000 -0500
@@ -0,0 +1,33 @@
+/* Compute argument of complex double value.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <complex.h>
+#include <math.h>
+
+double
+__carg (__complex__ double x)
+{
+  return __atan2 (__imag__ x, __real__ x);
+}
+weak_alias (__carg, carg)
+#ifdef NO_LONG_DOUBLE
+strong_alias (__carg, __cargl)
+weak_alias (__carg, cargl)
+#endif
diff -urN libc.orig/sysdeps/generic/cargl.c libc/sysdeps/generic/cargl.c
--- libc.orig/sysdeps/generic/cargl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/generic/cargl.c	2005-11-11 13:30:38.000000000 -0500
@@ -0,0 +1,29 @@
+/* Compute argument of complex long double value.
+   Copyright (C) 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <complex.h>
+#include <math.h>
+
+long double
+__cargl (__complex__ long double x)
+{
+  return __atan2l (__imag__ x, __real__ x);
+}
+weak_alias (__cargl, cargl)
diff -urN libc.orig/sysdeps/generic/cimag.c libc/sysdeps/generic/cimag.c
--- libc.orig/sysdeps/generic/cimag.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/generic/cimag.c	2005-11-11 13:30:38.000000000 -0500
@@ -0,0 +1,32 @@
+/* Return imaginary part of complex double value.
+   Copyright (C) 1997, 1998 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <complex.h>
+
+double
+__cimag (double _Complex z)
+{
+  return __imag__ z;
+}
+weak_alias (__cimag, cimag)
+#ifdef NO_LONG_DOUBLE
+strong_alias (__cimag, __cimagl)
+weak_alias (__cimag, cimagl)
+#endif
diff -urN libc.orig/sysdeps/generic/cimagl.c libc/sysdeps/generic/cimagl.c
--- libc.orig/sysdeps/generic/cimagl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/generic/cimagl.c	2005-11-11 13:30:38.000000000 -0500
@@ -0,0 +1,28 @@
+/* Return imaginary part of complex long double value.
+   Copyright (C) 1997, 1998 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <complex.h>
+
+long double
+__cimagl (long double _Complex z)
+{
+  return __imag__ z;
+}
+weak_alias (__cimagl, cimagl)
diff -urN libc.orig/sysdeps/generic/conj.c libc/sysdeps/generic/conj.c
--- libc.orig/sysdeps/generic/conj.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/generic/conj.c	2005-11-11 13:30:38.000000000 -0500
@@ -0,0 +1,32 @@
+/* Return complex conjugate of complex double value.
+   Copyright (C) 1997, 1998 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <complex.h>
+
+double _Complex
+__conj (double _Complex z)
+{
+  return ~z;
+}
+weak_alias (__conj, conj)
+#ifdef NO_LONG_DOUBLE
+strong_alias (__conj, __conjl)
+weak_alias (__conj, conjl)
+#endif
diff -urN libc.orig/sysdeps/generic/conjl.c libc/sysdeps/generic/conjl.c
--- libc.orig/sysdeps/generic/conjl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/generic/conjl.c	2005-11-11 13:30:38.000000000 -0500
@@ -0,0 +1,28 @@
+/* Return complex conjugate of complex long double value.
+   Copyright (C) 1997, 1998 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <complex.h>
+
+long double _Complex
+__conjl (long double _Complex z)
+{
+  return ~z;
+}
+weak_alias (__conjl, conjl)
diff -urN libc.orig/sysdeps/generic/creal.c libc/sysdeps/generic/creal.c
--- libc.orig/sysdeps/generic/creal.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/generic/creal.c	2005-11-11 13:30:38.000000000 -0500
@@ -0,0 +1,32 @@
+/* Return real part of complex double value.
+   Copyright (C) 1997, 1998 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <complex.h>
+
+double
+__creal (double _Complex z)
+{
+  return __real__ z;
+}
+weak_alias (__creal, creal)
+#ifdef NO_LONG_DOUBLE
+strong_alias (__creal, __creall)
+weak_alias (__creal, creall)
+#endif
diff -urN libc.orig/sysdeps/generic/creall.c libc/sysdeps/generic/creall.c
--- libc.orig/sysdeps/generic/creall.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/generic/creall.c	2005-11-11 13:30:38.000000000 -0500
@@ -0,0 +1,28 @@
+/* Return real part of complex long double value.
+   Copyright (C) 1997, 1998 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <complex.h>
+
+long double
+__creall (long double _Complex z)
+{
+  return __real__ z;
+}
+weak_alias (__creall, creall)
diff -urN libc.orig/sysdeps/generic/math_ldbl_opt.h libc/sysdeps/generic/math_ldbl_opt.h
--- libc.orig/sysdeps/generic/math_ldbl_opt.h	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/generic/math_ldbl_opt.h	2005-11-11 13:30:38.000000000 -0500
@@ -0,0 +1,2 @@
+#define LONG_DOUBLE_COMPAT(lib, introduced) 0
+#define long_double_symbol(lib, local, symbol)
diff -urN libc.orig/sysdeps/generic/w_j0l.c libc/sysdeps/generic/w_j0l.c
--- libc.orig/sysdeps/generic/w_j0l.c	2001-02-16 20:43:10.000000000 -0500
+++ libc/sysdeps/generic/w_j0l.c	2005-11-11 13:30:38.000000000 -0500
@@ -26,9 +26,9 @@
 #include "math_private.h"
 
 #ifdef __STDC__
-	long double j0l(long double x)		/* wrapper j0l */
+	long double __j0l(long double x)		/* wrapper j0l */
 #else
-	long double j0l(x)				/* wrapper j0 */
+	long double __j0l(x)				/* wrapper j0 */
 	long double x;
 #endif
 {
@@ -43,11 +43,12 @@
 	    return z;
 #endif
 }
+weak_alias (__j0l, j0l)
 
 #ifdef __STDC__
-	long double y0l(long double x)		/* wrapper y0l */
+	long double __y0l(long double x)		/* wrapper y0l */
 #else
-	long double y0l(x)				/* wrapper y0 */
+	long double __y0l(x)				/* wrapper y0 */
 	long double x;
 #endif
 {
@@ -71,3 +72,5 @@
 	    return z;
 #endif
 }
+
+weak_alias (__y0l, y0l)
diff -urN libc.orig/sysdeps/generic/w_j1l.c libc/sysdeps/generic/w_j1l.c
--- libc.orig/sysdeps/generic/w_j1l.c	2001-02-16 20:43:24.000000000 -0500
+++ libc/sysdeps/generic/w_j1l.c	2005-11-11 13:30:38.000000000 -0500
@@ -26,9 +26,9 @@
 #include "math_private.h"
 
 #ifdef __STDC__
-	long double j1l(long double x)	/* wrapper j1l */
+	long double __j1l(long double x)	/* wrapper j1l */
 #else
-	long double j1l(x)			/* wrapper j1l */
+	long double __j1l(x)			/* wrapper j1l */
 	long double x;
 #endif
 {
@@ -44,11 +44,12 @@
 	    return z;
 #endif
 }
+weak_alias (__j1l, j1l)
 
 #ifdef __STDC__
-	long double y1l(long double x)	/* wrapper y1l */
+	long double __y1l(long double x)	/* wrapper y1l */
 #else
-	long double y1l(x)			/* wrapper y1l */
+	long double __y1l(x)			/* wrapper y1l */
 	long double x;
 #endif
 {
@@ -72,3 +73,4 @@
 	    return z;
 #endif
 }
+weak_alias (__y1l, y1l)
diff -urN libc.orig/sysdeps/generic/w_jnl.c libc/sysdeps/generic/w_jnl.c
--- libc.orig/sysdeps/generic/w_jnl.c	2001-02-16 20:43:38.000000000 -0500
+++ libc/sysdeps/generic/w_jnl.c	2005-11-11 13:30:38.000000000 -0500
@@ -48,9 +48,9 @@
 #include "math_private.h"
 
 #ifdef __STDC__
-	long double jnl(int n, long double x)	/* wrapper jnl */
+	long double __jnl(int n, long double x)	/* wrapper jnl */
 #else
-	long double jnl(n,x)			/* wrapper jnl */
+	long double __jnl(n,x)			/* wrapper jnl */
 	long double x; int n;
 #endif
 {
@@ -66,11 +66,12 @@
 	    return z;
 #endif
 }
+weak_alias (__jnl, jnl)
 
 #ifdef __STDC__
-	long double ynl(int n, long double x)	/* wrapper ynl */
+	long double __ynl(int n, long double x)	/* wrapper ynl */
 #else
-	long double ynl(n,x)			/* wrapper ynl */
+	long double __ynl(n,x)			/* wrapper ynl */
 	long double x; int n;
 #endif
 {
@@ -94,3 +95,4 @@
 	    return z;
 #endif
 }
+weak_alias (__ynl, ynl)
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_asinhl.c libc/sysdeps/ieee754/ldbl-64-128/s_asinhl.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_asinhl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_asinhl.c	2005-11-11 13:30:38.643620416 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/ieee754/ldbl-128/s_asinhl.c>
+long_double_symbol (libm, __asinhl, asinhl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_atanl.c libc/sysdeps/ieee754/ldbl-64-128/s_atanl.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_atanl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_atanl.c	2005-11-11 13:30:38.635621632 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/ieee754/ldbl-128/s_atanl.c>
+long_double_symbol (libm, __atanl, atanl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_cbrtl.c libc/sysdeps/ieee754/ldbl-64-128/s_cbrtl.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_cbrtl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_cbrtl.c	2005-11-11 13:30:38.645620112 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/ieee754/ldbl-128/s_cbrtl.c>
+long_double_symbol (libm, __cbrtl, cbrtl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_ceill.c libc/sysdeps/ieee754/ldbl-64-128/s_ceill.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_ceill.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_ceill.c	2005-11-11 13:30:38.631622240 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/ieee754/ldbl-128/s_ceill.c>
+long_double_symbol (libm, __ceill, ceill);
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_copysignl.c libc/sysdeps/ieee754/ldbl-64-128/s_copysignl.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_copysignl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_copysignl.c	2005-11-11 13:30:38.639621024 -0500
@@ -0,0 +1,9 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/ieee754/ldbl-128/s_copysignl.c>
+#ifdef IS_IN_libm
+long_double_symbol (libm, __copysignl, copysignl);
+#else
+long_double_symbol (libc, __copysignl, copysignl);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_cosl.c libc/sysdeps/ieee754/ldbl-64-128/s_cosl.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_cosl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_cosl.c	2005-11-11 13:30:38.634621784 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/ieee754/ldbl-128/s_cosl.c>
+long_double_symbol (libm, __cosl, cosl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_erfl.c libc/sysdeps/ieee754/ldbl-64-128/s_erfl.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_erfl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_erfl.c	2005-11-11 13:30:38.633621936 -0500
@@ -0,0 +1,6 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/ieee754/ldbl-128/s_erfl.c>
+long_double_symbol (libm, __erfl, erfl);
+long_double_symbol (libm, __erfcl, erfcl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_expm1l.c libc/sysdeps/ieee754/ldbl-64-128/s_expm1l.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_expm1l.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_expm1l.c	2005-11-11 13:30:38.640620872 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/ieee754/ldbl-128/s_expm1l.c>
+long_double_symbol (libm, __expm1l, expm1l);
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_fabsl.c libc/sysdeps/ieee754/ldbl-64-128/s_fabsl.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_fabsl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_fabsl.c	2005-11-11 13:30:38.636621480 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/ieee754/ldbl-128/s_fabsl.c>
+long_double_symbol (libm, __fabsl, fabsl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_finitel.c libc/sysdeps/ieee754/ldbl-64-128/s_finitel.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_finitel.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_finitel.c	2005-11-11 13:30:38.635621632 -0500
@@ -0,0 +1,17 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#undef hidden_def
+#define hidden_def(x)
+#define __finitel(arg) ___finitel(arg)
+#include <sysdeps/ieee754/ldbl-128/s_finitel.c>
+#undef __finitel
+hidden_ver (___finitel, __finitel)
+_weak_alias (___finitel, ____finitel)
+#ifdef IS_IN_libm
+long_double_symbol (libm, ____finitel, finitel);
+long_double_symbol (libm, ___finitel, __finitel);
+#else
+long_double_symbol (libc, ____finitel, finitel);
+long_double_symbol (libc, ___finitel, __finitel);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_floorl.c libc/sysdeps/ieee754/ldbl-64-128/s_floorl.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_floorl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_floorl.c	2005-11-11 13:30:38.632622088 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/ieee754/ldbl-128/s_floorl.c>
+long_double_symbol (libm, __floorl, floorl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_frexpl.c libc/sysdeps/ieee754/ldbl-64-128/s_frexpl.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_frexpl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_frexpl.c	2005-11-11 13:30:38.637621328 -0500
@@ -0,0 +1,9 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/ieee754/ldbl-128/s_frexpl.c>
+#ifdef IS_IN_libm
+long_double_symbol (libm, __frexpl, frexpl);
+#else
+long_double_symbol (libc, __frexpl, frexpl);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_ilogbl.c libc/sysdeps/ieee754/ldbl-64-128/s_ilogbl.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_ilogbl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_ilogbl.c	2005-11-11 13:30:38.645620112 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/ieee754/ldbl-128/s_ilogbl.c>
+long_double_symbol (libm, __ilogbl, ilogbl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_isinfl.c libc/sysdeps/ieee754/ldbl-64-128/s_isinfl.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_isinfl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_isinfl.c	2005-11-11 13:30:38.642620568 -0500
@@ -0,0 +1,16 @@
+#include <math_ldbl_opt.h>
+#ifndef IS_IN_libm
+# undef weak_alias
+# define weak_alias(n,a)
+# undef hidden_def
+# define hidden_def(x)
+# define __isinfl(arg) ___isinfl(arg)
+#endif
+#include <sysdeps/ieee754/ldbl-128/s_isinfl.c>
+#ifndef IS_IN_libm
+# undef __isinfl
+hidden_ver (___isinfl, __isinfl)
+_weak_alias (___isinfl, ____isinfl)
+long_double_symbol (libc, ____isinfl, isinfl);
+long_double_symbol (libc, ___isinfl, __isinfl);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_isnanl.c libc/sysdeps/ieee754/ldbl-64-128/s_isnanl.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_isnanl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_isnanl.c	2005-11-11 13:30:38.645620112 -0500
@@ -0,0 +1,16 @@
+#include <math_ldbl_opt.h>
+#ifndef IS_IN_libm
+# undef weak_alias
+# define weak_alias(n,a)
+# undef hidden_def
+# define hidden_def(x)
+# define __isnanl(arg) ___isnanl(arg)
+#endif
+#include <sysdeps/ieee754/ldbl-128/s_isnanl.c>
+#ifndef IS_IN_libm
+# undef __isnanl
+hidden_ver (___isnanl, __isnanl)
+_weak_alias (___isnanl, ____isnanl)
+long_double_symbol (libc, ____isnanl, isnanl);
+long_double_symbol (libc, ___isnanl, __isnanl);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_llrintl.c libc/sysdeps/ieee754/ldbl-64-128/s_llrintl.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_llrintl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_llrintl.c	2005-11-11 13:30:38.637621328 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/ieee754/ldbl-128/s_llrintl.c>
+long_double_symbol (libm, __llrintl, llrintl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_llroundl.c libc/sysdeps/ieee754/ldbl-64-128/s_llroundl.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_llroundl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_llroundl.c	2005-11-11 13:30:38.640620872 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/ieee754/ldbl-128/s_llroundl.c>
+long_double_symbol (libm, __llroundl, llroundl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_log1pl.c libc/sysdeps/ieee754/ldbl-64-128/s_log1pl.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_log1pl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_log1pl.c	2005-11-11 13:30:38.631622240 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/ieee754/ldbl-128/s_log1pl.c>
+long_double_symbol (libm, __log1pl, log1pl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_logbl.c libc/sysdeps/ieee754/ldbl-64-128/s_logbl.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_logbl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_logbl.c	2005-11-11 13:30:38.632622088 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/ieee754/ldbl-128/s_logbl.c>
+long_double_symbol (libm, __logbl, logbl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_lrintl.c libc/sysdeps/ieee754/ldbl-64-128/s_lrintl.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_lrintl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_lrintl.c	2005-11-11 13:30:38.639621024 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/ieee754/ldbl-128/s_lrintl.c>
+long_double_symbol (libm, __lrintl, lrintl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_lroundl.c libc/sysdeps/ieee754/ldbl-64-128/s_lroundl.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_lroundl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_lroundl.c	2005-11-11 13:30:38.633621936 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/ieee754/ldbl-128/s_lroundl.c>
+long_double_symbol (libm, __lroundl, lroundl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_modfl.c libc/sysdeps/ieee754/ldbl-64-128/s_modfl.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_modfl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_modfl.c	2005-11-11 13:30:38.638621176 -0500
@@ -0,0 +1,9 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/ieee754/ldbl-128/s_modfl.c>
+#ifdef IS_IN_libm
+long_double_symbol (libm, __modfl, modfl);
+#else
+long_double_symbol (libc, __modfl, modfl);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_nearbyintl.c libc/sysdeps/ieee754/ldbl-64-128/s_nearbyintl.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_nearbyintl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_nearbyintl.c	2005-11-11 13:30:38.642620568 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/ieee754/ldbl-128/s_nearbyintl.c>
+long_double_symbol (libm, __nearbyintl, nearbyintl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_nextafterl.c libc/sysdeps/ieee754/ldbl-64-128/s_nextafterl.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_nextafterl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_nextafterl.c	2005-11-11 13:30:38.635621632 -0500
@@ -0,0 +1,6 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/ieee754/ldbl-128/s_nextafterl.c>
+long_double_symbol (libm, __nextafterl, nextafterl);
+long_double_symbol (libm, __nexttowardl, nexttowardl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_nexttoward.c libc/sysdeps/ieee754/ldbl-64-128/s_nexttoward.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_nexttoward.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_nexttoward.c	2005-11-11 13:30:38.633621936 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/ieee754/ldbl-128/s_nexttoward.c>
+long_double_symbol (libm, __nexttoward, nexttoward);
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_nexttowardf.c libc/sysdeps/ieee754/ldbl-64-128/s_nexttowardf.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_nexttowardf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_nexttowardf.c	2005-11-11 13:30:38.643620416 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/ieee754/ldbl-128/s_nexttowardf.c>
+long_double_symbol (libm, __nexttowardf, nexttowardf);
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_nexttowardfd.c libc/sysdeps/ieee754/ldbl-64-128/s_nexttowardfd.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_nexttowardfd.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_nexttowardfd.c	2005-11-11 13:30:38.644620264 -0500
@@ -0,0 +1,77 @@
+/* Single precision version of nexttoward.c.
+   Conversion to IEEE single float by Jakub Jelinek, jj@ultra.linux.cz. */
+/*
+ * ====================================================
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+ *
+ * Developed at SunPro, a Sun Microsystems, Inc. business.
+ * Permission to use, copy, modify, and distribute this
+ * software is freely granted, provided that this notice
+ * is preserved.
+ * ====================================================
+ */
+
+/* IEEE functions
+ *	__nexttowardfd(x,y)
+ *	return the next machine floating-point number of x in the
+ *	direction toward y.
+ * This is for machines which use different binary type for double and
+ * long double conditionally, y is long double equal to double.
+ *   Special cases:
+ */
+
+#include <math_ldbl_opt.h>
+
+float __nldbl_nexttowardf(float x, double y);
+
+float __nldbl_nexttowardf(float x, double y)
+{
+	int32_t hx,hy,ix,iy;
+	u_int32_t ly;
+
+	GET_FLOAT_WORD(hx,x);
+	EXTRACT_WORDS(hy,ly,y);
+	ix = hx&0x7fffffff;		/* |x| */
+	iy = hy&0x7fffffff;		/* |y| */
+
+	if((ix>0x7f800000) ||				   /* x is nan */
+	   ((iy>=0x7ff00000)&&((iy-0x7ff00000)|ly)!=0))    /* y is nan */
+	   return x+y;
+	if((double) x==y) return y;		/* x=y, return y */
+	if(ix==0) {				/* x == 0 */
+	    float x2;
+	    SET_FLOAT_WORD(x,(u_int32_t)(hy&0x80000000)|1);/* return +-minsub*/
+	    x2 = x*x;
+	    if(x2==x) return x2; else return x; /* raise underflow flag */
+	}
+	if(hx>=0) {				/* x > 0 */
+	    if(hy<0||(ix>>23)>(iy>>20)-0x380
+	       || ((ix>>23)==(iy>>20)-0x380
+		   && (ix&0x7fffff)>(((hy<<3)|(ly>>29))&0x7fffff)))	/* x > y, x -= ulp */
+		hx -= 1;
+	    else				/* x < y, x += ulp */
+		hx += 1;
+	} else {				/* x < 0 */
+	    if(hy>=0||(ix>>23)>(iy>>20)-0x380
+	       || ((ix>>23)==(iy>>20)-0x380
+		   && (ix&0x7fffff)>(((hy<<3)|(ly>>29))&0x7fffff)))	/* x < y, x -= ulp */
+		hx -= 1;
+	    else				/* x > y, x += ulp */
+		hx += 1;
+	}
+	hy = hx&0x7f800000;
+	if(hy>=0x7f800000) return x+x;	/* overflow  */
+	if(hy<0x00800000) {		/* underflow */
+	    float x2 = x*x;
+	    if(x2!=x) {		/* raise underflow flag */
+		SET_FLOAT_WORD(x2,hx);
+		return x2;
+	    }
+	}
+	SET_FLOAT_WORD(x,hx);
+	return x;
+}
+
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __nldbl_nexttowardf, nexttowardf, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_remquol.c libc/sysdeps/ieee754/ldbl-64-128/s_remquol.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_remquol.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_remquol.c	2005-11-11 13:30:38.643620416 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/ieee754/ldbl-128/s_remquol.c>
+long_double_symbol (libm, __remquol, remquol);
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_rintl.c libc/sysdeps/ieee754/ldbl-64-128/s_rintl.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_rintl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_rintl.c	2005-11-11 13:30:38.639621024 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/ieee754/ldbl-128/s_rintl.c>
+long_double_symbol (libm, __rintl, rintl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_roundl.c libc/sysdeps/ieee754/ldbl-64-128/s_roundl.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_roundl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_roundl.c	2005-11-11 13:30:38.636621480 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/ieee754/ldbl-128/s_roundl.c>
+long_double_symbol (libm, __roundl, roundl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_scalblnl.c libc/sysdeps/ieee754/ldbl-64-128/s_scalblnl.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_scalblnl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_scalblnl.c	2005-11-11 13:30:38.640620872 -0500
@@ -0,0 +1,9 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/ieee754/ldbl-128/s_scalblnl.c>
+#ifdef IS_IN_libm
+long_double_symbol (libm, __scalblnl, scalblnl);
+#else
+long_double_symbol (libc, __scalblnl, scalblnl);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_scalbnl.c libc/sysdeps/ieee754/ldbl-64-128/s_scalbnl.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_scalbnl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_scalbnl.c	2005-11-11 13:30:38.638621176 -0500
@@ -0,0 +1,9 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/ieee754/ldbl-128/s_scalbnl.c>
+#ifdef IS_IN_libm
+long_double_symbol (libm, __scalbnl, scalbnl);
+#else
+long_double_symbol (libc, __scalbnl, scalbnl);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_signbitl.c libc/sysdeps/ieee754/ldbl-64-128/s_signbitl.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_signbitl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_signbitl.c	2005-11-11 13:30:38.636621480 -0500
@@ -0,0 +1,11 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#define __signbitl(arg) ___signbitl(arg)
+#include <sysdeps/ieee754/ldbl-128/s_signbitl.c>
+#undef __signbitl
+#ifdef IS_IN_libm
+long_double_symbol (libm, ___signbitl, __signbitl);
+#else
+long_double_symbol (libc, ___signbitl, __signbitl);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_sincosl.c libc/sysdeps/ieee754/ldbl-64-128/s_sincosl.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_sincosl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_sincosl.c	2005-11-11 13:30:38.637621328 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/ieee754/ldbl-128/s_sincosl.c>
+long_double_symbol (libm, __sincosl, sincosl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_sinl.c libc/sysdeps/ieee754/ldbl-64-128/s_sinl.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_sinl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_sinl.c	2005-11-11 13:30:38.644620264 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/ieee754/ldbl-128/s_sinl.c>
+long_double_symbol (libm, __sinl, sinl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_tanhl.c libc/sysdeps/ieee754/ldbl-64-128/s_tanhl.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_tanhl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_tanhl.c	2005-11-11 13:30:38.632622088 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/ieee754/ldbl-128/s_tanhl.c>
+long_double_symbol (libm, __tanhl, tanhl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_tanl.c libc/sysdeps/ieee754/ldbl-64-128/s_tanl.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_tanl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_tanl.c	2005-11-11 13:30:38.638621176 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/ieee754/ldbl-128/s_tanl.c>
+long_double_symbol (libm, __tanl, tanl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/strtold_l.c libc/sysdeps/ieee754/ldbl-64-128/strtold_l.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/strtold_l.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/strtold_l.c	2005-11-11 13:30:38.641620720 -0500
@@ -0,0 +1,63 @@
+/* Copyright (C) 1999, 2004 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <math.h>
+#include <stdlib.h>
+#include <wchar.h>
+#include <xlocale.h>
+
+/* The actual implementation for all floating point sizes is in strtod.c.
+   These macros tell it to produce the `long double' version, `strtold'.  */
+
+#define FLOAT		long double
+#define FLT		LDBL
+#ifdef USE_WIDE_CHAR
+extern long double ____new_wcstold_l (const wchar_t *, wchar_t **, __locale_t);
+# define STRTOF		__new_wcstold_l
+# define __STRTOF	____new_wcstold_l
+# define ____STRTOF_INTERNAL ____wcstold_l_internal
+#else
+extern long double ____new_strtold_l (const char *, char **, __locale_t);
+# define STRTOF		__new_strtold_l
+# define __STRTOF	____new_strtold_l
+# define ____STRTOF_INTERNAL ____strtold_l_internal
+#endif
+#define MPN2FLOAT	__mpn_construct_long_double
+#define FLOAT_HUGE_VAL	HUGE_VALL
+#define SET_MANTISSA(flt, mant) \
+  do { union ieee854_long_double u;					      \
+       u.d = (flt);							      \
+       u.ieee.mantissa0 = 0x8000;					      \
+       u.ieee.mantissa1 = 0;						      \
+       u.ieee.mantissa2 = ((mant) >> 32);	      			      \
+       u.ieee.mantissa3 = (mant) & 0xffffffff;				      \
+       (flt) = u.d;							      \
+  } while (0)
+
+#include <strtod_l.c>
+
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+# include <math_ldbl_opt.h>
+# ifdef USE_WIDE_CHAR
+long_double_symbol (libc, __new_wcstold_l, wcstold_l);
+long_double_symbol (libc, ____new_wcstold_l, __wcstold_l);
+# else
+long_double_symbol (libc, __new_strtold_l, strtold_l);
+long_double_symbol (libc, ____new_strtold_l, __strtold_l);
+# endif
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/s_truncl.c libc/sysdeps/ieee754/ldbl-64-128/s_truncl.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/s_truncl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/s_truncl.c	2005-11-11 13:30:38.634621784 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/ieee754/ldbl-128/s_truncl.c>
+long_double_symbol (libm, __truncl, truncl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-64-128/w_expl.c libc/sysdeps/ieee754/ldbl-64-128/w_expl.c
--- libc.orig/sysdeps/ieee754/ldbl-64-128/w_expl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-64-128/w_expl.c	2005-11-11 13:30:38.641620720 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/ieee754/ldbl-128/w_expl.c>
+long_double_symbol (libm, __expl, expl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-96/s_erfl.c libc/sysdeps/ieee754/ldbl-96/s_erfl.c
--- libc.orig/sysdeps/ieee754/ldbl-96/s_erfl.c	2002-08-27 22:30:22.000000000 -0400
+++ libc/sysdeps/ieee754/ldbl-96/s_erfl.c	2005-11-11 13:30:38.000000000 -0500
@@ -341,10 +341,6 @@
 }
 
 weak_alias (__erfl, erfl)
-#ifdef NO_LONG_DOUBLE
-strong_alias (__erf, __erfl)
-weak_alias (__erf, erfl)
-#endif
 #ifdef __STDC__
      long double
      __erfcl (long double x)
@@ -456,7 +452,3 @@
 }
 
 weak_alias (__erfcl, erfcl)
-#ifdef NO_LONG_DOUBLE
-strong_alias (__erfc, __erfcl)
-weak_alias (__erfc, erfcl)
-#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-96/s_nexttoward.c libc/sysdeps/ieee754/ldbl-96/s_nexttoward.c
--- libc.orig/sysdeps/ieee754/ldbl-96/s_nexttoward.c	2003-12-07 16:21:10.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-96/s_nexttoward.c	2005-11-11 13:30:38.000000000 -0500
@@ -99,7 +99,3 @@
 	return x;
 }
 weak_alias (__nexttoward, nexttoward)
-#ifdef NO_LONG_DOUBLE
-strong_alias (__nexttoward, __nexttowardl)
-weak_alias (__nexttoward, nexttowardl)
-#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/cabs.c libc/sysdeps/ieee754/ldbl-opt/cabs.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/cabs.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/cabs.c	2005-11-11 13:30:38.586629080 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/cabs.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __cabs, cabsl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/cabsl.c libc/sysdeps/ieee754/ldbl-opt/cabsl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/cabsl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/cabsl.c	2005-11-11 13:30:38.571631360 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/cabsl.c>
+long_double_symbol (libm, __cabsl, cabsl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/carg.c libc/sysdeps/ieee754/ldbl-opt/carg.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/carg.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/carg.c	2005-11-11 13:30:38.569631664 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/carg.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __carg, cargl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/cargl.c libc/sysdeps/ieee754/ldbl-opt/cargl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/cargl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/cargl.c	2005-11-11 13:30:38.626623000 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/cargl.c>
+long_double_symbol (libm, __cargl, cargl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/cimag.c libc/sysdeps/ieee754/ldbl-opt/cimag.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/cimag.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/cimag.c	2005-11-11 13:30:38.622623608 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/cimag.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __cimag, cimagl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/cimagl.c libc/sysdeps/ieee754/ldbl-opt/cimagl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/cimagl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/cimagl.c	2005-11-11 13:30:38.582629688 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/cimagl.c>
+long_double_symbol (libm, __cimagl, cimagl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/conj.c libc/sysdeps/ieee754/ldbl-opt/conj.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/conj.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/conj.c	2005-11-11 13:30:38.569631664 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/conj.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __conj, conjl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/conjl.c libc/sysdeps/ieee754/ldbl-opt/conjl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/conjl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/conjl.c	2005-11-11 13:30:38.587628928 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/conjl.c>
+long_double_symbol (libm, __conjl, conjl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/creal.c libc/sysdeps/ieee754/ldbl-opt/creal.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/creal.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/creal.c	2005-11-11 13:30:38.608625736 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/creal.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __creal, creall, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/creall.c libc/sysdeps/ieee754/ldbl-opt/creall.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/creall.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/creall.c	2005-11-11 13:30:38.590628472 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/creall.c>
+long_double_symbol (libm, __creall, creall);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/libio-compat.c libc/sysdeps/ieee754/ldbl-opt/libio-compat.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/libio-compat.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/libio-compat.c	2005-11-11 13:30:38.602626648 -0500
@@ -0,0 +1,434 @@
+/* *printf* family compatibility routines for IEEE double as long double
+   Copyright (C) 2004 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Jakub Jelinek <jakub@cygnus.com>, 2004.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <libioP.h>
+#include <wchar.h>
+
+/* Compatibility with IEEE double as long double.
+   Real long double is used by default for most programs, so
+   we don't need to split this into one file per function for the
+   sake of statically linked programs.  */
+
+int
+attribute_compat_text_section
+__nldbl___asprintf (char **string_ptr, const char *fmt, ...)
+{
+  va_list arg;
+  int done;
+
+  va_start (arg, fmt);
+  done = ___vasprintf (string_ptr, fmt, arg, 1);
+  va_end (arg);
+          
+  return done;
+}
+weak_alias (__nldbl___asprintf, __nldbl_asprintf)
+
+int
+attribute_compat_text_section
+__nldbl_dprintf (int d, const char *fmt, ...)
+{
+  va_list arg;
+  int done;
+
+  va_start (arg, fmt);
+  done = ___vdprintf (d, fmt, arg, 1);
+  va_end (arg);
+
+  return done;
+}
+
+int
+attribute_compat_text_section
+__nldbl_fprintf (FILE *stream, const char *fmt, ...)
+{
+  va_list arg;
+  int done;
+
+  va_start (arg, fmt);
+  done = ___vfprintf (stream, fmt, arg, 1);
+  va_end (arg);
+
+  return done;
+}
+weak_alias (__nldbl_fprintf, __nldbl__IO_fprintf)
+
+int
+attribute_compat_text_section weak_function
+__nldbl_fwprintf (FILE *stream, const wchar_t *fmt, ...)
+{
+  va_list arg;
+  int done;
+
+  va_start (arg, fmt);
+  done = ___vfwprintf (stream, fmt, arg, 1);
+  va_end (arg);
+
+  return done;
+}
+
+int
+attribute_compat_text_section
+__nldbl_printf (const char *fmt, ...)
+{
+  va_list arg;
+  int done;
+
+  va_start (arg, fmt);
+  done = ___vfprintf (stdout, fmt, arg, 1);
+  va_end (arg);
+
+  return done;
+}
+strong_alias (__nldbl_printf, __nldbl__IO_printf)
+
+int
+attribute_compat_text_section
+__nldbl_sprintf (char *s, const char *fmt, ...)
+{
+  va_list arg;
+  int done;
+
+  va_start (arg, fmt);
+  done = ___vsprintf (s, fmt, arg, 1);
+  va_end (arg);
+
+  return done;
+}
+strong_alias (__nldbl_sprintf, __nldbl__IO_sprintf)
+
+int
+attribute_compat_text_section
+__nldbl_vfprintf (FILE *s, const char *fmt, va_list ap)
+{
+  return ___vfprintf (s, fmt, ap, 1);
+}
+strong_alias (__nldbl_vfprintf, __nldbl__IO_vfprintf)
+
+int
+attribute_compat_text_section
+__nldbl__IO_vsprintf (char *string, const char *fmt, va_list ap)
+{
+  return ___vsprintf (string, fmt, ap, 1);
+}
+weak_alias (__nldbl__IO_vsprintf, __nldbl_vsprintf)
+
+int
+attribute_compat_text_section
+__nldbl_obstack_vprintf (struct obstack *obstack, const char *fmt,
+			 va_list ap)
+{
+  return ___obstack_vprintf (obstack, fmt, ap, 1);
+}
+
+int
+attribute_compat_text_section
+__nldbl_obstack_printf (struct obstack *obstack, const char *fmt, ...)
+{
+  int result;
+  va_list ap;
+  va_start (ap, fmt);
+  result = ___obstack_vprintf (obstack, fmt, ap, 1);
+  va_end (ap);
+  return result;
+}
+
+int
+attribute_compat_text_section weak_function
+__nldbl_snprintf (char *s, size_t maxlen, const char *fmt, ...)
+{
+  va_list arg;
+  int done;
+
+  va_start (arg, fmt);
+  done = ___vsnprintf (s, maxlen, fmt, arg, 1);
+  va_end (arg);
+
+  return done;
+}
+
+int
+attribute_compat_text_section
+__nldbl_swprintf (wchar_t *s, size_t n, const wchar_t *fmt, ...)
+{
+  va_list arg;
+  int done;
+
+  va_start (arg, fmt);
+  done = ___vswprintf (s, n, fmt, arg, 1);
+  va_end (arg);
+
+  return done;
+}
+
+int
+attribute_compat_text_section weak_function
+__nldbl_vasprintf (char **result_ptr, const char *fmt, va_list ap)
+{
+  return ___vasprintf (result_ptr, fmt, ap, 1);
+}
+
+int
+attribute_compat_text_section
+__nldbl_vdprintf (int d, const char *fmt, va_list arg)
+{
+  return ___vdprintf (d, fmt, arg, 1);
+}
+
+int
+attribute_compat_text_section weak_function
+__nldbl_vfwprintf (FILE *s, const wchar_t *fmt, va_list ap)
+{
+  return ___vfwprintf (s, fmt, ap, 1);
+}
+
+int
+attribute_compat_text_section
+__nldbl_vprintf (const char *fmt, va_list ap)
+{
+  return ___vfprintf (stdout, fmt, ap, 1);
+}
+
+int
+attribute_compat_text_section
+__nldbl_vsnprintf (char *string, size_t maxlen, const char *fmt,
+		   va_list ap)
+{
+  return ___vsnprintf (string, maxlen, fmt, ap, 1);
+}
+weak_alias (__nldbl_vsnprintf, __nldbl___vsnprintf)
+
+int
+attribute_compat_text_section weak_function
+__nldbl_vswprintf (wchar_t *string, size_t maxlen, const wchar_t *fmt,
+		   va_list ap)
+{
+  return ___vswprintf (string, maxlen, fmt, ap, 1);
+}
+
+int
+attribute_compat_text_section
+__nldbl_vwprintf (const wchar_t *fmt, va_list ap)
+{
+  return ___vfwprintf (stdout, fmt, ap, 1);
+}
+
+int
+attribute_compat_text_section
+__nldbl_wprintf (const wchar_t *fmt, ...)
+{
+  va_list arg;
+  int done;
+
+  va_start (arg, fmt);
+  done = ___vfwprintf (stdout, fmt, arg, 1);
+  va_end (arg);
+
+  return done;
+}
+
+int
+attribute_compat_text_section
+__nldbl__IO_vfscanf (FILE *s, const char *fmt, _IO_va_list ap,
+		    int *errp)
+{
+  return __IO_vfscanf (s, fmt, ap, errp, 1);
+}
+
+int
+attribute_compat_text_section
+__nldbl___vfscanf (FILE *s, const char *fmt, va_list ap)
+{
+  return __IO_vfscanf (s, fmt, ap, NULL, 1);
+}
+weak_alias (__nldbl___vfscanf, __nldbl_vfscanf)
+
+int
+attribute_compat_text_section
+__nldbl_sscanf (const char *s, const char *fmt, ...)
+{
+  va_list arg;
+  int done;
+
+  va_start (arg, fmt);
+  done = ___vsscanf (s, fmt, arg, 1);
+  va_end (arg);
+
+  return done;
+}
+strong_alias (__nldbl_sscanf, __nldbl__IO_sscanf)
+
+int
+attribute_compat_text_section
+__nldbl___vsscanf (const char *string, const char *fmt, va_list ap)
+{
+  return ___vsscanf (string, fmt, ap, 1);
+}
+weak_alias (__nldbl___vsscanf, __nldbl_vsscanf)
+
+int
+attribute_compat_text_section weak_function
+__nldbl_vscanf (const char *fmt, va_list ap)
+{
+  return __IO_vfscanf (stdin, fmt, ap, NULL, 1);
+}
+
+int
+attribute_compat_text_section
+__nldbl_fscanf (FILE *stream, const char *fmt, ...)
+{
+  va_list arg;
+  int done;
+
+  va_start (arg, fmt);
+  done = __IO_vfscanf (stream, fmt, arg, NULL, 1);
+  va_end (arg);
+
+  return done;
+}
+
+int
+attribute_compat_text_section
+__nldbl_scanf (const char *fmt, ...)
+{
+  va_list arg;
+  int done;
+
+  va_start (arg, fmt);
+  done = __IO_vfscanf (stdin, fmt, arg, NULL, 1);
+  va_end (arg);
+
+  return done;
+}
+
+int
+attribute_compat_text_section
+__nldbl_vfwscanf (FILE *s, const wchar_t *fmt, va_list ap)
+{
+  return __IO_vfwscanf (s, fmt, ap, NULL, 1);
+}
+
+int
+attribute_compat_text_section
+__nldbl_swscanf (const wchar_t *s, const wchar_t *fmt, ...)
+{
+  va_list arg;
+  int done;
+
+  va_start (arg, fmt);
+  done = ___vswscanf (s, fmt, arg, 1);
+  va_end (arg);
+
+  return done;
+}
+
+int
+attribute_compat_text_section
+__nldbl_vswscanf (const wchar_t *string, const wchar_t *fmt, va_list ap)
+{
+  return ___vswscanf (string, fmt, ap, 1);
+}
+
+int
+attribute_compat_text_section weak_function
+__nldbl_vwscanf (const wchar_t *fmt, va_list ap)
+{
+  return __IO_vfwscanf (stdin, fmt, ap, NULL, 1);
+}
+
+int
+attribute_compat_text_section
+__nldbl_fwscanf (FILE *stream, const wchar_t *fmt, ...)
+{
+  va_list arg;
+  int done;
+
+  va_start (arg, fmt);
+  done = __IO_vfwscanf (stream, fmt, arg, NULL, 1);
+  va_end (arg);
+
+  return done;
+}
+
+int
+attribute_compat_text_section
+__nldbl_wscanf (const wchar_t *fmt, ...)
+{
+  va_list arg;
+  int done;
+
+  va_start (arg, fmt);
+  done = __IO_vfwscanf (stdin, fmt, arg, NULL, 1);
+  va_end (arg);
+
+  return done;
+}
+
+#if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0)
+compat_symbol (libc, __nldbl__IO_printf, _IO_printf, GLIBC_2_0);
+compat_symbol (libc, __nldbl__IO_sprintf, _IO_sprintf, GLIBC_2_0);
+compat_symbol (libc, __nldbl__IO_vfprintf, _IO_vfprintf, GLIBC_2_0);
+compat_symbol (libc, __nldbl__IO_vsprintf, _IO_vsprintf, GLIBC_2_0);
+compat_symbol (libc, __nldbl_dprintf, dprintf, GLIBC_2_0);
+compat_symbol (libc, __nldbl_fprintf, fprintf, GLIBC_2_0);
+compat_symbol (libc, __nldbl_printf, printf, GLIBC_2_0);
+compat_symbol (libc, __nldbl_sprintf, sprintf, GLIBC_2_0);
+compat_symbol (libc, __nldbl_vfprintf, vfprintf, GLIBC_2_0);
+compat_symbol (libc, __nldbl_vprintf, vprintf, GLIBC_2_0);
+compat_symbol (libc, __nldbl__IO_fprintf, _IO_fprintf, GLIBC_2_0);
+compat_symbol (libc, __nldbl___vsnprintf, __vsnprintf, GLIBC_2_0);
+compat_symbol (libc, __nldbl_asprintf, asprintf, GLIBC_2_0);
+compat_symbol (libc, __nldbl_obstack_printf, obstack_printf, GLIBC_2_0);
+compat_symbol (libc, __nldbl_obstack_vprintf, obstack_vprintf, GLIBC_2_0);
+compat_symbol (libc, __nldbl_snprintf, snprintf, GLIBC_2_0);
+compat_symbol (libc, __nldbl_vasprintf, vasprintf, GLIBC_2_0);
+compat_symbol (libc, __nldbl_vdprintf, vdprintf, GLIBC_2_0);
+compat_symbol (libc, __nldbl_vsnprintf, vsnprintf, GLIBC_2_0);
+compat_symbol (libc, __nldbl_vsprintf, vsprintf, GLIBC_2_0);
+compat_symbol (libc, __nldbl__IO_sscanf, _IO_sscanf, GLIBC_2_0);
+compat_symbol (libc, __nldbl__IO_vfscanf, _IO_vfscanf, GLIBC_2_0);
+compat_symbol (libc, __nldbl___vfscanf, __vfscanf, GLIBC_2_0);
+compat_symbol (libc, __nldbl___vsscanf, __vsscanf, GLIBC_2_0);
+compat_symbol (libc, __nldbl_fscanf, fscanf, GLIBC_2_0);
+compat_symbol (libc, __nldbl_scanf, scanf, GLIBC_2_0);
+compat_symbol (libc, __nldbl_sscanf, sscanf, GLIBC_2_0);
+compat_symbol (libc, __nldbl_vfscanf, vfscanf, GLIBC_2_0);
+compat_symbol (libc, __nldbl_vscanf, vscanf, GLIBC_2_0);
+compat_symbol (libc, __nldbl_vsscanf, vsscanf, GLIBC_2_0);
+#endif
+#if LONG_DOUBLE_COMPAT(libc, GLIBC_2_1)
+compat_symbol (libc, __nldbl___asprintf, __asprintf, GLIBC_2_1);
+#endif
+#if LONG_DOUBLE_COMPAT(libc, GLIBC_2_2)
+compat_symbol (libc, __nldbl_swprintf, swprintf, GLIBC_2_2);
+compat_symbol (libc, __nldbl_vwprintf, vwprintf, GLIBC_2_2);
+compat_symbol (libc, __nldbl_wprintf, wprintf, GLIBC_2_2);
+compat_symbol (libc, __nldbl_fwprintf, fwprintf, GLIBC_2_2);
+compat_symbol (libc, __nldbl_vfwprintf, vfwprintf, GLIBC_2_2);
+compat_symbol (libc, __nldbl_vswprintf, vswprintf, GLIBC_2_2);
+compat_symbol (libc, __nldbl_fwscanf, fwscanf, GLIBC_2_2);
+compat_symbol (libc, __nldbl_swscanf, swscanf, GLIBC_2_2);
+compat_symbol (libc, __nldbl_vfwscanf, vfwscanf, GLIBC_2_2);
+compat_symbol (libc, __nldbl_vswscanf, vswscanf, GLIBC_2_2);
+compat_symbol (libc, __nldbl_vwscanf, vwscanf, GLIBC_2_2);
+compat_symbol (libc, __nldbl_wscanf, wscanf, GLIBC_2_2);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/Makefile libc/sysdeps/ieee754/ldbl-opt/Makefile
--- libc.orig/sysdeps/ieee754/ldbl-opt/Makefile	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/Makefile	2005-11-11 13:30:38.573631056 -0500
@@ -0,0 +1,50 @@
+ifeq ($(subdir),misc)
+misc-CPPFLAGS += -DLONG_DOUBLE_OPTIONAL=$(long-double-fcts-ver)
+endif
+
+ifeq ($(subdir),libio)
+libio-CPPFLAGS += -DLONG_DOUBLE_OPTIONAL=$(long-double-fcts-ver)
+routines += libio-compat
+endif
+
+ifeq ($(subdir),stdio-common)
+stdio-common-CPPFLAGS += -DLONG_DOUBLE_OPTIONAL=$(long-double-fcts-ver)
+endif
+
+ifeq ($(subdir),stdlib)
+stdlib-CPPFLAGS += -DLONG_DOUBLE_OPTIONAL=$(long-double-fcts-ver)
+endif
+
+ifeq ($(subdir),wcsmbs)
+wcsmbs-CPPFLAGS += -DLONG_DOUBLE_OPTIONAL=$(long-double-fcts-ver)
+endif
+
+ifeq ($(subdir),math)
+libm-routines += s_nexttowardfd
+math-CPPFLAGS += -DLONG_DOUBLE_OPTIONAL=$(long-double-fcts-ver)
+
+extra-libs += libnldbl
+libnldbl-calls = asprintf dprintf fprintf fscanf fwprintf fwscanf iovfscanf \
+		 obstack_printf obstack_vprintf printf scanf snprintf \
+		 sprintf sscanf swprintf swscanf vasprintf vdprintf vfprintf \
+		 vfscanf vfwprintf vfwscanf vprintf vscanf vsnprintf \
+		 vsprintf vsscanf vswprintf vswscanf vwprintf vwscanf \
+		 wprintf wscanf printf_fp printf_size \
+		 strtold strtold_l strtoldint wcstold wcstold_l wcstoldint \
+		 qecvt qfcvt qgcvt qecvt_r qfcvt_r \
+		 isinf isnan finite signbit scalb log2 lgamma_r ceil \
+		 significand acos asin atan cos sin tan cosh sinh \
+		 tanh acosh asinh atanh exp log log10 exp10 pow10 expm1 \
+		 log1p logb exp2 sqrt cbrt fabs floor j0 j1 y0 y1 erf erfc \
+		 lgamma tgamma gamma rint nearbyint round trunc \
+		 copysign fdim fmax fmin nextafter pow hypot fmod drem \
+		 remainder ldexp scalbn frexp modf scalbln fma nan sincos \
+		 jn yn ilogb remquo lrint lround llrint llround nexttowardf \
+		 nexttoward conj cacos cacosh casin catan catanh ccos ccosh \
+		 casinh cexp clog cproj csin csinh csqrt ctan ctanh cpow \
+		 cabs carg cimag creal clog10
+libnldbl-routines = $(libnldbl-calls:%=nldbl-%)
+libnldbl-inhibit-o = .os .ob .og .op .o
+libnldbl-extra-object-suffixes += .oS
+
+endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/math_ldbl_opt.h libc/sysdeps/ieee754/ldbl-opt/math_ldbl_opt.h
--- libc.orig/sysdeps/ieee754/ldbl-opt/math_ldbl_opt.h	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/math_ldbl_opt.h	2005-11-11 13:30:38.577630448 -0500
@@ -0,0 +1,23 @@
+#include <math.h>
+#include <math/math_private.h>
+#include <shlib-compat.h>
+#ifdef LONG_DOUBLE_OPTIONAL
+# define LONG_DOUBLE_COMPAT(lib, introduced) \
+    SHLIB_COMPAT(lib, introduced, LONG_DOUBLE_OPTIONAL)
+#else
+# define LONG_DOUBLE_COMPAT(lib, introduced) 0
+#endif
+#define long_double_symbol(lib, local, symbol) \
+  long_double_symbol_1 (lib, local, symbol, LONG_DOUBLE_OPTIONAL)
+#if defined HAVE_ELF && defined SHARED && defined DO_VERSIONING
+# define long_double_symbol_1(lib, local, symbol, version) \
+  versioned_symbol (lib, local, symbol, version)
+#elif defined HAVE_WEAK_SYMBOLS
+/* Note that weak_alias cannot be used - it is defined to nothing
+   in most of the files.  */
+# define long_double_symbol_1(lib, local, symbol, version) \
+  _weak_alias (local, symbol)
+#else
+# define long_double_symbol_1(lib, local, symbol, version) \
+  strong_alias (local, symbol)
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-acos.c libc/sysdeps/ieee754/ldbl-opt/nldbl-acos.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-acos.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-acos.c	2005-11-11 13:30:38.693612816 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+acosl (double x)
+{
+  return acos (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-acosh.c libc/sysdeps/ieee754/ldbl-opt/nldbl-acosh.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-acosh.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-acosh.c	2005-11-11 13:30:38.700611752 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+acoshl (double x)
+{
+  return acosh (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-asin.c libc/sysdeps/ieee754/ldbl-opt/nldbl-asin.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-asin.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-asin.c	2005-11-11 13:30:38.693612816 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+asinl (double x)
+{
+  return asin (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-asinh.c libc/sysdeps/ieee754/ldbl-opt/nldbl-asinh.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-asinh.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-asinh.c	2005-11-11 13:30:38.700611752 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+asinhl (double x)
+{
+  return asinh (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-asprintf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-asprintf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-asprintf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-asprintf.c	2005-11-11 13:30:38.615624672 -0500
@@ -0,0 +1,17 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+__asprintf (char **string_ptr, const char *fmt, ...)
+{
+  va_list arg;
+  int done;
+
+  va_start (arg, fmt);
+  done = __nldbl_vasprintf (string_ptr, fmt, arg);
+  va_end (arg);
+          
+  return done;
+}
+extern __typeof (__asprintf) asprintf attribute_hidden;
+weak_alias (__asprintf, asprintf)
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-atan2.c libc/sysdeps/ieee754/ldbl-opt/nldbl-atan2.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-atan2.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-atan2.c	2005-11-11 13:30:38.694612664 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+atan2l (double x, double y)
+{
+  return atan2 (x, y);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-atan.c libc/sysdeps/ieee754/ldbl-opt/nldbl-atan.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-atan.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-atan.c	2005-11-11 13:30:38.694612664 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+atanl (double x)
+{
+  return atan (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-atanh.c libc/sysdeps/ieee754/ldbl-opt/nldbl-atanh.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-atanh.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-atanh.c	2005-11-11 13:30:38.701611600 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+atanhl (double x)
+{
+  return atanh (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-cabs.c libc/sysdeps/ieee754/ldbl-opt/nldbl-cabs.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-cabs.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-cabs.c	2005-11-11 13:30:38.729607344 -0500
@@ -0,0 +1,9 @@
+#include "nldbl-compat.h"
+#include <complex.h>
+
+double
+attribute_hidden
+cabsl (double _Complex x)
+{
+  return cabs (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-cacos.c libc/sysdeps/ieee754/ldbl-opt/nldbl-cacos.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-cacos.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-cacos.c	2005-11-11 13:30:38.722608408 -0500
@@ -0,0 +1,9 @@
+#include "nldbl-compat.h"
+#include <complex.h>
+
+double _Complex
+attribute_hidden
+cacosl (double _Complex x)
+{
+  return cacos (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-cacosh.c libc/sysdeps/ieee754/ldbl-opt/nldbl-cacosh.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-cacosh.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-cacosh.c	2005-11-11 13:30:38.723608256 -0500
@@ -0,0 +1,9 @@
+#include "nldbl-compat.h"
+#include <complex.h>
+
+double _Complex
+attribute_hidden
+cacoshl (double _Complex x)
+{
+  return cacosh (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-carg.c libc/sysdeps/ieee754/ldbl-opt/nldbl-carg.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-carg.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-carg.c	2005-11-11 13:30:38.729607344 -0500
@@ -0,0 +1,9 @@
+#include "nldbl-compat.h"
+#include <complex.h>
+
+double
+attribute_hidden
+cargl (double _Complex x)
+{
+  return carg (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-casin.c libc/sysdeps/ieee754/ldbl-opt/nldbl-casin.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-casin.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-casin.c	2005-11-11 13:30:38.723608256 -0500
@@ -0,0 +1,9 @@
+#include "nldbl-compat.h"
+#include <complex.h>
+
+double _Complex
+attribute_hidden
+casinl (double _Complex x)
+{
+  return casin (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-casinh.c libc/sysdeps/ieee754/ldbl-opt/nldbl-casinh.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-casinh.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-casinh.c	2005-11-11 13:30:38.725607952 -0500
@@ -0,0 +1,9 @@
+#include "nldbl-compat.h"
+#include <complex.h>
+
+double _Complex
+attribute_hidden
+casinhl (double _Complex x)
+{
+  return casinh (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-catan.c libc/sysdeps/ieee754/ldbl-opt/nldbl-catan.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-catan.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-catan.c	2005-11-11 13:30:38.723608256 -0500
@@ -0,0 +1,9 @@
+#include "nldbl-compat.h"
+#include <complex.h>
+
+double _Complex
+attribute_hidden
+catanl (double _Complex x)
+{
+  return catan (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-catanh.c libc/sysdeps/ieee754/ldbl-opt/nldbl-catanh.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-catanh.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-catanh.c	2005-11-11 13:30:38.724608104 -0500
@@ -0,0 +1,9 @@
+#include "nldbl-compat.h"
+#include <complex.h>
+
+double _Complex
+attribute_hidden
+catanhl (double _Complex x)
+{
+  return catanh (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-cbrt.c libc/sysdeps/ieee754/ldbl-opt/nldbl-cbrt.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-cbrt.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-cbrt.c	2005-11-11 13:30:38.705610992 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+cbrtl (double x)
+{
+  return cbrt (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-ccos.c libc/sysdeps/ieee754/ldbl-opt/nldbl-ccos.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-ccos.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-ccos.c	2005-11-11 13:30:38.724608104 -0500
@@ -0,0 +1,9 @@
+#include "nldbl-compat.h"
+#include <complex.h>
+
+double _Complex
+attribute_hidden
+ccosl (double _Complex x)
+{
+  return ccos (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-ccosh.c libc/sysdeps/ieee754/ldbl-opt/nldbl-ccosh.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-ccosh.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-ccosh.c	2005-11-11 13:30:38.725607952 -0500
@@ -0,0 +1,9 @@
+#include "nldbl-compat.h"
+#include <complex.h>
+
+double _Complex
+attribute_hidden
+ccoshl (double _Complex x)
+{
+  return ccosh (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-ceil.c libc/sysdeps/ieee754/ldbl-opt/nldbl-ceil.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-ceil.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-ceil.c	2005-11-11 13:30:38.732606888 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+ceill (double x)
+{
+  return ceil (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-cexp.c libc/sysdeps/ieee754/ldbl-opt/nldbl-cexp.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-cexp.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-cexp.c	2005-11-11 13:30:38.725607952 -0500
@@ -0,0 +1,9 @@
+#include "nldbl-compat.h"
+#include <complex.h>
+
+double _Complex
+attribute_hidden
+cexpl (double _Complex x)
+{
+  return cexp (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-cimag.c libc/sysdeps/ieee754/ldbl-opt/nldbl-cimag.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-cimag.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-cimag.c	2005-11-11 13:30:38.730607192 -0500
@@ -0,0 +1,9 @@
+#include "nldbl-compat.h"
+#include <complex.h>
+
+double
+attribute_hidden
+cimagl (double _Complex x)
+{
+  return cimag (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-clog10.c libc/sysdeps/ieee754/ldbl-opt/nldbl-clog10.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-clog10.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-clog10.c	2005-11-11 13:30:38.730607192 -0500
@@ -0,0 +1,11 @@
+#include "nldbl-compat.h"
+#include <complex.h>
+
+double _Complex
+attribute_hidden
+clog10l (double _Complex x)
+{
+  return clog10 (x);
+}
+extern __typeof (clog10l) __clog10l attribute_hidden;
+weak_alias (clog10l, __clog10l)
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-clog.c libc/sysdeps/ieee754/ldbl-opt/nldbl-clog.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-clog.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-clog.c	2005-11-11 13:30:38.726607800 -0500
@@ -0,0 +1,9 @@
+#include "nldbl-compat.h"
+#include <complex.h>
+
+double _Complex
+attribute_hidden
+clogl (double _Complex x)
+{
+  return clog (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-compat.h libc/sysdeps/ieee754/ldbl-opt/nldbl-compat.h
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-compat.h	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-compat.h	2005-11-11 13:30:38.616624520 -0500
@@ -0,0 +1,51 @@
+/* Prototypes for compatibility double == long double entry points.
+   Copyright (C) 2004 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Jakub Jelinek <jakub@cygnus.com>, 2004.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef __NLDBL_COMPAT_H
+#define __NLDBL_COMPAT_H	1
+
+/* Avoid long double prototypes.  */
+#define __NO_LONG_DOUBLE_MATH	1
+#include <stdarg.h>
+#include <stdio.h>
+#include <libioP.h>
+#include <printf.h>
+#include <wchar.h>
+#include <math.h>
+
+extern __typeof (_IO_vfscanf) __nldbl__IO_vfscanf;
+extern __typeof (vfwscanf) __nldbl_vfwscanf;
+extern __typeof (obstack_vprintf) __nldbl_obstack_vprintf;
+extern __typeof (vasprintf) __nldbl_vasprintf;
+extern __typeof (vasprintf) __nldbl_vasprintf;
+extern __typeof (vdprintf) __nldbl_vdprintf;
+extern __typeof (vdprintf) __nldbl_vdprintf;
+extern __typeof (vfprintf) __nldbl_vfprintf;
+extern __typeof (vfprintf) __nldbl_vfprintf;
+extern __typeof (vfwprintf) __nldbl_vfwprintf;
+extern __typeof (vsnprintf) __nldbl_vsnprintf;
+extern __typeof (vsprintf) __nldbl_vsprintf;
+extern __typeof (vsscanf) __nldbl_vsscanf;
+extern __typeof (vswprintf) __nldbl_vswprintf;
+extern __typeof (vswscanf) __nldbl_vswscanf;
+extern __typeof (__printf_fp) __nldbl___printf_fp;
+extern __typeof (printf_size) __nldbl_printf_size;
+
+#endif /* __NLDBL_COMPAT_H */
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-conj.c libc/sysdeps/ieee754/ldbl-opt/nldbl-conj.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-conj.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-conj.c	2005-11-11 13:30:38.722608408 -0500
@@ -0,0 +1,9 @@
+#include "nldbl-compat.h"
+#include <complex.h>
+
+double _Complex
+attribute_hidden
+conjl (double _Complex x)
+{
+  return conj (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-copysign.c libc/sysdeps/ieee754/ldbl-opt/nldbl-copysign.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-copysign.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-copysign.c	2005-11-11 13:30:38.711610080 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+copysignl (double x, double y)
+{
+  return copysign (x, y);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-cos.c libc/sysdeps/ieee754/ldbl-opt/nldbl-cos.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-cos.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-cos.c	2005-11-11 13:30:38.695612512 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+cosl (double x)
+{
+  return cos (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-cosh.c libc/sysdeps/ieee754/ldbl-opt/nldbl-cosh.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-cosh.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-cosh.c	2005-11-11 13:30:38.696612360 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+coshl (double x)
+{
+  return cosh (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-cpow.c libc/sysdeps/ieee754/ldbl-opt/nldbl-cpow.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-cpow.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-cpow.c	2005-11-11 13:30:38.728607496 -0500
@@ -0,0 +1,9 @@
+#include "nldbl-compat.h"
+#include <complex.h>
+
+double _Complex
+attribute_hidden
+cpowl (double _Complex x, double _Complex y)
+{
+  return cpow (x, y);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-cproj.c libc/sysdeps/ieee754/ldbl-opt/nldbl-cproj.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-cproj.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-cproj.c	2005-11-11 13:30:38.726607800 -0500
@@ -0,0 +1,9 @@
+#include "nldbl-compat.h"
+#include <complex.h>
+
+double _Complex
+attribute_hidden
+cprojl (double _Complex x)
+{
+  return cproj (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-creal.c libc/sysdeps/ieee754/ldbl-opt/nldbl-creal.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-creal.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-creal.c	2005-11-11 13:30:38.730607192 -0500
@@ -0,0 +1,9 @@
+#include "nldbl-compat.h"
+#include <complex.h>
+
+double
+attribute_hidden
+creall (double _Complex x)
+{
+  return creal (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-csin.c libc/sysdeps/ieee754/ldbl-opt/nldbl-csin.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-csin.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-csin.c	2005-11-11 13:30:38.727607648 -0500
@@ -0,0 +1,9 @@
+#include "nldbl-compat.h"
+#include <complex.h>
+
+double _Complex
+attribute_hidden
+csinl (double _Complex x)
+{
+  return csin (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-csinh.c libc/sysdeps/ieee754/ldbl-opt/nldbl-csinh.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-csinh.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-csinh.c	2005-11-11 13:30:38.727607648 -0500
@@ -0,0 +1,9 @@
+#include "nldbl-compat.h"
+#include <complex.h>
+
+double _Complex
+attribute_hidden
+csinhl (double _Complex x)
+{
+  return csinh (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-csqrt.c libc/sysdeps/ieee754/ldbl-opt/nldbl-csqrt.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-csqrt.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-csqrt.c	2005-11-11 13:30:38.727607648 -0500
@@ -0,0 +1,9 @@
+#include "nldbl-compat.h"
+#include <complex.h>
+
+double _Complex
+attribute_hidden
+csqrtl (double _Complex x)
+{
+  return csqrt (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-ctan.c libc/sysdeps/ieee754/ldbl-opt/nldbl-ctan.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-ctan.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-ctan.c	2005-11-11 13:30:38.728607496 -0500
@@ -0,0 +1,9 @@
+#include "nldbl-compat.h"
+#include <complex.h>
+
+double _Complex
+attribute_hidden
+ctanl (double _Complex x)
+{
+  return ctan (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-ctanh.c libc/sysdeps/ieee754/ldbl-opt/nldbl-ctanh.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-ctanh.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-ctanh.c	2005-11-11 13:30:38.728607496 -0500
@@ -0,0 +1,9 @@
+#include "nldbl-compat.h"
+#include <complex.h>
+
+double _Complex
+attribute_hidden
+ctanhl (double _Complex x)
+{
+  return ctanh (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-dprintf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-dprintf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-dprintf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-dprintf.c	2005-11-11 13:30:38.619624064 -0500
@@ -0,0 +1,15 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+dprintf (int d, const char *fmt, ...)
+{
+  va_list arg;
+  int done;
+
+  va_start (arg, fmt);
+  done = __nldbl_vdprintf (d, fmt, arg);
+  va_end (arg);
+
+  return done;
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-drem.c libc/sysdeps/ieee754/ldbl-opt/nldbl-drem.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-drem.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-drem.c	2005-11-11 13:30:38.714609624 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+dreml (double x, double y)
+{
+  return drem (x, y);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-erf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-erf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-erf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-erf.c	2005-11-11 13:30:38.708610536 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+erfl (double x)
+{
+  return erf (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-erfc.c libc/sysdeps/ieee754/ldbl-opt/nldbl-erfc.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-erfc.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-erfc.c	2005-11-11 13:30:38.708610536 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+erfcl (double x)
+{
+  return erfc (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-exp10.c libc/sysdeps/ieee754/ldbl-opt/nldbl-exp10.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-exp10.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-exp10.c	2005-11-11 13:30:38.703611296 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+exp10l (double x)
+{
+  return exp10 (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-exp2.c libc/sysdeps/ieee754/ldbl-opt/nldbl-exp2.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-exp2.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-exp2.c	2005-11-11 13:30:38.705610992 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+exp2l (double x)
+{
+  return exp2 (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-exp.c libc/sysdeps/ieee754/ldbl-opt/nldbl-exp.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-exp.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-exp.c	2005-11-11 13:30:38.702611448 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+expl (double x)
+{
+  return exp (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-expm1.c libc/sysdeps/ieee754/ldbl-opt/nldbl-expm1.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-expm1.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-expm1.c	2005-11-11 13:30:38.704611144 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+expm1l (double x)
+{
+  return expm1 (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-fabs.c libc/sysdeps/ieee754/ldbl-opt/nldbl-fabs.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-fabs.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-fabs.c	2005-11-11 13:30:38.706610840 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+fabsl (double x)
+{
+  return fabs (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-fdim.c libc/sysdeps/ieee754/ldbl-opt/nldbl-fdim.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-fdim.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-fdim.c	2005-11-11 13:30:38.712609928 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+fdiml (double x, double y)
+{
+  return fdim (x, y);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-finite.c libc/sysdeps/ieee754/ldbl-opt/nldbl-finite.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-finite.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-finite.c	2005-11-11 13:30:38.692612968 -0500
@@ -0,0 +1,10 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+__finitel (double x)
+{
+  return __finite (x);
+}
+extern __typeof (__finitel) finitel attribute_hidden;
+weak_alias (__finitel, finitel)
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-floor.c libc/sysdeps/ieee754/ldbl-opt/nldbl-floor.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-floor.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-floor.c	2005-11-11 13:30:38.706610840 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+floorl (double x)
+{
+  return floor (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-fma.c libc/sysdeps/ieee754/ldbl-opt/nldbl-fma.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-fma.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-fma.c	2005-11-11 13:30:38.717609168 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+fmal (double x, double y, double z)
+{
+  return fma (x, y, z);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-fmax.c libc/sysdeps/ieee754/ldbl-opt/nldbl-fmax.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-fmax.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-fmax.c	2005-11-11 13:30:38.712609928 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+fmaxl (double x, double y)
+{
+  return fmax (x, y);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-fmin.c libc/sysdeps/ieee754/ldbl-opt/nldbl-fmin.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-fmin.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-fmin.c	2005-11-11 13:30:38.712609928 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+fminl (double x, double y)
+{
+  return fmin (x, y);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-fmod.c libc/sysdeps/ieee754/ldbl-opt/nldbl-fmod.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-fmod.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-fmod.c	2005-11-11 13:30:38.714609624 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+fmodl (double x, double y)
+{
+  return fmod (x, y);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-fprintf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-fprintf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-fprintf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-fprintf.c	2005-11-11 13:30:38.568631816 -0500
@@ -0,0 +1,17 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+fprintf (FILE *stream, const char *fmt, ...)
+{
+  va_list arg;
+  int done;
+
+  va_start (arg, fmt);
+  done = __nldbl_vfprintf (stream, fmt, arg);
+  va_end (arg);
+
+  return done;
+}
+extern __typeof (fprintf) _IO_fprintf attribute_hidden;
+weak_alias (fprintf, _IO_fprintf)
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-frexp.c libc/sysdeps/ieee754/ldbl-opt/nldbl-frexp.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-frexp.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-frexp.c	2005-11-11 13:30:38.716609320 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+frexpl (double x, int *exponent)
+{
+  return frexp (x, exponent);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-fscanf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-fscanf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-fscanf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-fscanf.c	2005-11-11 13:30:38.580629992 -0500
@@ -0,0 +1,15 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+fscanf (FILE *stream, const char *fmt, ...)
+{
+  va_list arg;
+  int done;
+
+  va_start (arg, fmt);
+  done = __nldbl__IO_vfscanf (stream, fmt, arg, NULL);
+  va_end (arg);
+
+  return done;
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-fwprintf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-fwprintf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-fwprintf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-fwprintf.c	2005-11-11 13:30:38.590628472 -0500
@@ -0,0 +1,16 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+weak_function
+fwprintf (FILE *stream, const wchar_t *fmt, ...)
+{
+  va_list arg;
+  int done;
+
+  va_start (arg, fmt);
+  done = __nldbl_vfwprintf (stream, fmt, arg);
+  va_end (arg);
+
+  return done;
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-fwscanf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-fwscanf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-fwscanf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-fwscanf.c	2005-11-11 13:30:38.569631664 -0500
@@ -0,0 +1,15 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+fwscanf (FILE *stream, const wchar_t *fmt, ...)
+{
+  va_list arg;
+  int done;
+
+  va_start (arg, fmt);
+  done = __nldbl_vfwscanf (stream, fmt, arg);
+  va_end (arg);
+
+  return done;
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-gamma.c libc/sysdeps/ieee754/ldbl-opt/nldbl-gamma.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-gamma.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-gamma.c	2005-11-11 13:30:38.710610232 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+gammal (double x)
+{
+  return gamma (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-hypot.c libc/sysdeps/ieee754/ldbl-opt/nldbl-hypot.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-hypot.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-hypot.c	2005-11-11 13:30:38.714609624 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+hypotl (double x, double y)
+{
+  return hypot (x, y);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-ilogb.c libc/sysdeps/ieee754/ldbl-opt/nldbl-ilogb.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-ilogb.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-ilogb.c	2005-11-11 13:30:38.719608864 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+ilogbl (double x)
+{
+  return ilogb (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-iovfscanf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-iovfscanf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-iovfscanf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-iovfscanf.c	2005-11-11 13:30:38.576630600 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+_IO_vfscanf (FILE *s, const char *fmt, _IO_va_list ap, int *errp)
+{
+  return __nldbl__IO_vfscanf (s, fmt, ap, errp);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-isinf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-isinf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-isinf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-isinf.c	2005-11-11 13:30:38.692612968 -0500
@@ -0,0 +1,10 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+__isinfl (double x)
+{
+  return __isinf (x);
+}
+extern __typeof (__isinfl) isinfl attribute_hidden;
+weak_alias (__isinfl, isinfl)
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-isnan.c libc/sysdeps/ieee754/ldbl-opt/nldbl-isnan.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-isnan.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-isnan.c	2005-11-11 13:30:38.692612968 -0500
@@ -0,0 +1,10 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+__isnanl (double x)
+{
+  return __isnan (x);
+}
+extern __typeof (__isnanl) isnanl attribute_hidden;
+weak_alias (__isnanl, isnanl)
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-j0.c libc/sysdeps/ieee754/ldbl-opt/nldbl-j0.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-j0.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-j0.c	2005-11-11 13:30:38.707610688 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+j0l (double x)
+{
+  return j0 (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-j1.c libc/sysdeps/ieee754/ldbl-opt/nldbl-j1.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-j1.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-j1.c	2005-11-11 13:30:38.707610688 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+j1l (double x)
+{
+  return j1 (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-jn.c libc/sysdeps/ieee754/ldbl-opt/nldbl-jn.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-jn.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-jn.c	2005-11-11 13:30:38.718609016 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+jnl (int n, double x)
+{
+  return jn (n, x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-ldexp.c libc/sysdeps/ieee754/ldbl-opt/nldbl-ldexp.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-ldexp.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-ldexp.c	2005-11-11 13:30:38.715609472 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+ldexpl (double x, int exponent)
+{
+  return ldexp (x, exponent);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-lgamma.c libc/sysdeps/ieee754/ldbl-opt/nldbl-lgamma.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-lgamma.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-lgamma.c	2005-11-11 13:30:38.709610384 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+lgammal (double x)
+{
+  return lgamma (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-lgamma_r.c libc/sysdeps/ieee754/ldbl-opt/nldbl-lgamma_r.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-lgamma_r.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-lgamma_r.c	2005-11-11 13:30:38.732606888 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+lgammal_r (double x, int *signgamp)
+{
+  return lgamma_r (x, signgamp);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-llrint.c libc/sysdeps/ieee754/ldbl-opt/nldbl-llrint.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-llrint.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-llrint.c	2005-11-11 13:30:38.720608712 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+long long int
+attribute_hidden
+llrintl (double x)
+{
+  return llrint (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-llround.c libc/sysdeps/ieee754/ldbl-opt/nldbl-llround.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-llround.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-llround.c	2005-11-11 13:30:38.721608560 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+long long int
+attribute_hidden
+llroundl (double x)
+{
+  return llround (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-log10.c libc/sysdeps/ieee754/ldbl-opt/nldbl-log10.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-log10.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-log10.c	2005-11-11 13:30:38.703611296 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+log10l (double x)
+{
+  return log10 (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-log1p.c libc/sysdeps/ieee754/ldbl-opt/nldbl-log1p.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-log1p.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-log1p.c	2005-11-11 13:30:38.704611144 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+log1pl (double x)
+{
+  return log1p (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-log2.c libc/sysdeps/ieee754/ldbl-opt/nldbl-log2.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-log2.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-log2.c	2005-11-11 13:30:38.732606888 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+log2l (double x)
+{
+  return log2 (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-logb.c libc/sysdeps/ieee754/ldbl-opt/nldbl-logb.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-logb.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-logb.c	2005-11-11 13:30:38.704611144 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+logbl (double x)
+{
+  return logb (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-log.c libc/sysdeps/ieee754/ldbl-opt/nldbl-log.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-log.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-log.c	2005-11-11 13:30:38.702611448 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+logl (double x)
+{
+  return log (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-lrint.c libc/sysdeps/ieee754/ldbl-opt/nldbl-lrint.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-lrint.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-lrint.c	2005-11-11 13:30:38.720608712 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+long int
+attribute_hidden
+lrintl (double x)
+{
+  return lrint (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-lround.c libc/sysdeps/ieee754/ldbl-opt/nldbl-lround.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-lround.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-lround.c	2005-11-11 13:30:38.720608712 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+long int
+attribute_hidden
+lroundl (double x)
+{
+  return lround (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-modf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-modf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-modf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-modf.c	2005-11-11 13:30:38.716609320 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+modfl (double x, double *iptr)
+{
+  return modf (x, iptr);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-nan.c libc/sysdeps/ieee754/ldbl-opt/nldbl-nan.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-nan.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-nan.c	2005-11-11 13:30:38.717609168 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+nanl (const char *tag)
+{
+  return nan (tag);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-nearbyint.c libc/sysdeps/ieee754/ldbl-opt/nldbl-nearbyint.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-nearbyint.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-nearbyint.c	2005-11-11 13:30:38.710610232 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+nearbyintl (double x)
+{
+  return nearbyint (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-nextafter.c libc/sysdeps/ieee754/ldbl-opt/nldbl-nextafter.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-nextafter.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-nextafter.c	2005-11-11 13:30:38.713609776 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+nextafterl (double x, double y)
+{
+  return nextafter (x, y);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-nexttoward.c libc/sysdeps/ieee754/ldbl-opt/nldbl-nexttoward.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-nexttoward.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-nexttoward.c	2005-11-11 13:30:38.722608408 -0500
@@ -0,0 +1,14 @@
+#define nexttoward nexttoward_XXX
+#define nexttowardl nexttowardl_XXX
+#include "nldbl-compat.h"
+#undef nexttoward
+#undef nexttowardl
+
+double
+attribute_hidden
+nexttoward (double x, double y)
+{
+  return nextafter (x, y);
+}
+extern __typeof (nexttoward) nexttowardl attribute_hidden;
+strong_alias (nexttoward, nexttowardl)
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-nexttowardf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-nexttowardf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-nexttowardf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-nexttowardf.c	2005-11-11 13:30:38.721608560 -0500
@@ -0,0 +1,12 @@
+#define nexttowardf nexttowardf_XXX
+#include "nldbl-compat.h"
+#undef nexttowardf
+
+extern float __nldbl_nexttowardf (float x, double y);
+
+float
+attribute_hidden
+nexttowardf (float x, double y)
+{
+  return __nldbl_nexttowardf (x, y);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-obstack_printf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-obstack_printf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-obstack_printf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-obstack_printf.c	2005-11-11 13:30:38.570631512 -0500
@@ -0,0 +1,13 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+obstack_printf (struct obstack *obstack, const char *fmt, ...)
+{
+  int result;
+  va_list ap;
+  va_start (ap, fmt);
+  result = __nldbl_obstack_vprintf (obstack, fmt, ap);
+  va_end (ap);
+  return result;
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-obstack_vprintf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-obstack_vprintf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-obstack_vprintf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-obstack_vprintf.c	2005-11-11 13:30:38.565632272 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+obstack_vprintf (struct obstack *obstack, const char *fmt, va_list ap)
+{
+  return __nldbl_obstack_vprintf (obstack, fmt, ap);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-pow10.c libc/sysdeps/ieee754/ldbl-opt/nldbl-pow10.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-pow10.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-pow10.c	2005-11-11 13:30:38.703611296 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+pow10l (double x)
+{
+  return pow10 (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-pow.c libc/sysdeps/ieee754/ldbl-opt/nldbl-pow.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-pow.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-pow.c	2005-11-11 13:30:38.713609776 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+powl (double x, double y)
+{
+  return pow (x, y);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-printf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-printf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-printf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-printf.c	2005-11-11 13:30:38.578630296 -0500
@@ -0,0 +1,17 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+printf (const char *fmt, ...)
+{
+  va_list arg;
+  int done;
+
+  va_start (arg, fmt);
+  done = __nldbl_vfprintf (stdout, fmt, arg);
+  va_end (arg);
+
+  return done;
+}
+extern __typeof (printf) _IO_printf attribute_hidden;
+strong_alias (printf, _IO_printf)
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-printf_fp.c libc/sysdeps/ieee754/ldbl-opt/nldbl-printf_fp.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-printf_fp.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-printf_fp.c	2005-11-11 13:30:38.696612360 -0500
@@ -0,0 +1,9 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+__printf_fp (FILE *fp, const struct printf_info *info,
+	     const void *const *args)
+{
+  return __nldbl___printf_fp (fp, info, args);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-printf_size.c libc/sysdeps/ieee754/ldbl-opt/nldbl-printf_size.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-printf_size.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-printf_size.c	2005-11-11 13:30:38.696612360 -0500
@@ -0,0 +1,9 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+printf_size (FILE *__restrict fp, const struct printf_info *info,
+	     const void *const *__restrict args)
+{
+  return __nldbl_printf_size (fp, info, args);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-qecvt.c libc/sysdeps/ieee754/ldbl-opt/nldbl-qecvt.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-qecvt.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-qecvt.c	2005-11-11 13:30:38.699611904 -0500
@@ -0,0 +1,10 @@
+#define qecvt qecvt_XXX
+#include "nldbl-compat.h"
+#undef qecvt
+
+char *
+attribute_hidden
+qecvt (double val, int ndigit, int *__restrict decpt, int *__restrict sign)
+{
+  return ecvt (val, ndigit, decpt, sign);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-qecvt_r.c libc/sysdeps/ieee754/ldbl-opt/nldbl-qecvt_r.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-qecvt_r.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-qecvt_r.c	2005-11-11 13:30:38.701611600 -0500
@@ -0,0 +1,11 @@
+#define qecvt_r qecvt_r_XXX
+#include "nldbl-compat.h"
+#undef qecvt_r
+
+int
+attribute_hidden
+qecvt_r (double val, int ndigit, int *__restrict decpt, int *__restrict sign,
+	 char *__restrict buf, size_t len)
+{
+  return ecvt_r (val, ndigit, decpt, sign, buf, len);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-qfcvt.c libc/sysdeps/ieee754/ldbl-opt/nldbl-qfcvt.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-qfcvt.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-qfcvt.c	2005-11-11 13:30:38.699611904 -0500
@@ -0,0 +1,10 @@
+#define qfcvt qfcvt_XXX
+#include "nldbl-compat.h"
+#undef qfcvt
+
+char *
+attribute_hidden
+qfcvt (double val, int ndigit, int *__restrict decpt, int *__restrict sign)
+{
+  return fcvt (val, ndigit, decpt, sign);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-qfcvt_r.c libc/sysdeps/ieee754/ldbl-opt/nldbl-qfcvt_r.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-qfcvt_r.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-qfcvt_r.c	2005-11-11 13:30:38.701611600 -0500
@@ -0,0 +1,11 @@
+#define qfcvt_r qfcvt_r_XXX
+#include "nldbl-compat.h"
+#undef qfcvt_r
+
+int
+attribute_hidden
+qfcvt_r (double val, int ndigit, int *__restrict decpt, int *__restrict sign,
+	 char *__restrict buf, size_t len)
+{
+  return fcvt_r (val, ndigit, decpt, sign, buf, len);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-qgcvt.c libc/sysdeps/ieee754/ldbl-opt/nldbl-qgcvt.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-qgcvt.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-qgcvt.c	2005-11-11 13:30:38.699611904 -0500
@@ -0,0 +1,10 @@
+#define qgcvt qgcvt_XXX
+#include "nldbl-compat.h"
+#undef qgcvt
+
+char *
+attribute_hidden
+qgcvt (double val, int ndigit, char *buf)
+{
+  return gcvt (val, ndigit, buf);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-remainder.c libc/sysdeps/ieee754/ldbl-opt/nldbl-remainder.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-remainder.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-remainder.c	2005-11-11 13:30:38.715609472 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+remainderl (double x, double y)
+{
+  return remainder (x, y);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-remquo.c libc/sysdeps/ieee754/ldbl-opt/nldbl-remquo.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-remquo.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-remquo.c	2005-11-11 13:30:38.719608864 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+remquol (double x, double y, int *quo)
+{
+  return remquo (x, y, quo);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-rint.c libc/sysdeps/ieee754/ldbl-opt/nldbl-rint.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-rint.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-rint.c	2005-11-11 13:30:38.710610232 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+rintl (double x)
+{
+  return rint (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-round.c libc/sysdeps/ieee754/ldbl-opt/nldbl-round.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-round.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-round.c	2005-11-11 13:30:38.711610080 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+roundl (double x)
+{
+  return round (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-scalb.c libc/sysdeps/ieee754/ldbl-opt/nldbl-scalb.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-scalb.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-scalb.c	2005-11-11 13:30:38.731607040 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+scalbl (double x, double n)
+{
+  return scalb (x, n);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-scalbln.c libc/sysdeps/ieee754/ldbl-opt/nldbl-scalbln.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-scalbln.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-scalbln.c	2005-11-11 13:30:38.717609168 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+scalblnl (double x, long int n)
+{
+  return scalbln (x, n);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-scalbn.c libc/sysdeps/ieee754/ldbl-opt/nldbl-scalbn.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-scalbn.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-scalbn.c	2005-11-11 13:30:38.715609472 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+scalbnl (double x, int n)
+{
+  return scalbn (x, n);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-scanf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-scanf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-scanf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-scanf.c	2005-11-11 13:30:38.620623912 -0500
@@ -0,0 +1,15 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+scanf (const char *fmt, ...)
+{
+  va_list arg;
+  int done;
+
+  va_start (arg, fmt);
+  done = __nldbl__IO_vfscanf (stdin, fmt, arg, NULL);
+  va_end (arg);
+
+  return done;
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-signbit.c libc/sysdeps/ieee754/ldbl-opt/nldbl-signbit.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-signbit.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-signbit.c	2005-11-11 13:30:38.731607040 -0500
@@ -0,0 +1,10 @@
+#define __signbitl __signbitl_XXX
+#include "nldbl-compat.h"
+#undef __signbitl
+
+int
+attribute_hidden
+__signbitl (double x)
+{
+  return __signbit (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-significand.c libc/sysdeps/ieee754/ldbl-opt/nldbl-significand.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-significand.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-significand.c	2005-11-11 13:30:38.693612816 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+significandl (double x)
+{
+  return significand (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-sin.c libc/sysdeps/ieee754/ldbl-opt/nldbl-sin.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-sin.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-sin.c	2005-11-11 13:30:38.695612512 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+sinl (double x)
+{
+  return sin (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-sincos.c libc/sysdeps/ieee754/ldbl-opt/nldbl-sincos.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-sincos.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-sincos.c	2005-11-11 13:30:38.718609016 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+void
+attribute_hidden
+sincosl (double x, double *sinx, double *cosx)
+{
+  sincos (x, sinx, cosx);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-sinh.c libc/sysdeps/ieee754/ldbl-opt/nldbl-sinh.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-sinh.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-sinh.c	2005-11-11 13:30:38.697612208 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+sinhl (double x)
+{
+  return sinh (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-snprintf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-snprintf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-snprintf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-snprintf.c	2005-11-11 13:30:38.597627408 -0500
@@ -0,0 +1,16 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+weak_function
+snprintf (char *s, size_t maxlen, const char *fmt, ...)
+{
+  va_list arg;
+  int done;
+
+  va_start (arg, fmt);
+  done = __nldbl_vsnprintf (s, maxlen, fmt, arg);
+  va_end (arg);
+
+  return done;
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-sprintf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-sprintf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-sprintf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-sprintf.c	2005-11-11 13:30:38.594627864 -0500
@@ -0,0 +1,17 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+sprintf (char *s, const char *fmt, ...)
+{
+  va_list arg;
+  int done;
+
+  va_start (arg, fmt);
+  done = __nldbl_vsprintf (s, fmt, arg);
+  va_end (arg);
+
+  return done;
+}
+extern __typeof (sprintf) _IO_sprintf attribute_hidden;
+strong_alias (sprintf, _IO_sprintf)
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-sqrt.c libc/sysdeps/ieee754/ldbl-opt/nldbl-sqrt.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-sqrt.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-sqrt.c	2005-11-11 13:30:38.705610992 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+sqrtl (double x)
+{
+  return sqrt (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-sscanf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-sscanf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-sscanf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-sscanf.c	2005-11-11 13:30:38.613624976 -0500
@@ -0,0 +1,17 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+sscanf (const char *s, const char *fmt, ...)
+{
+  va_list arg;
+  int done;
+
+  va_start (arg, fmt);
+  done = __nldbl_vsscanf (s, fmt, arg);
+  va_end (arg);
+
+  return done;
+}
+extern __typeof (sscanf) _IO_sscanf attribute_hidden;
+strong_alias (sscanf, _IO_sscanf)
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-strtold.c libc/sysdeps/ieee754/ldbl-opt/nldbl-strtold.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-strtold.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-strtold.c	2005-11-11 13:30:38.697612208 -0500
@@ -0,0 +1,10 @@
+#define strtold strtold_XXX
+#include "nldbl-compat.h"
+#undef strtold
+
+double
+attribute_hidden
+strtold (const char *nptr, char **endptr)
+{
+  return strtod (nptr, endptr);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-strtoldint.c libc/sysdeps/ieee754/ldbl-opt/nldbl-strtoldint.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-strtoldint.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-strtoldint.c	2005-11-11 13:30:38.698612056 -0500
@@ -0,0 +1,10 @@
+#define __strtold_internal __strtold_internal_XXX
+#include "nldbl-compat.h"
+#undef __strtold_internal
+
+double
+attribute_hidden
+__strtold_internal (const char *nptr, char **endptr, int group)
+{
+  return __strtod_internal (nptr, endptr, group);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-strtold_l.c libc/sysdeps/ieee754/ldbl-opt/nldbl-strtold_l.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-strtold_l.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-strtold_l.c	2005-11-11 13:30:38.698612056 -0500
@@ -0,0 +1,20 @@
+#define strtold_l strtold_l_XXX
+#define __strtold_l __strtold_l_XXX
+#define __strtod_l __strtod_l_XXX
+#include "nldbl-compat.h"
+#undef strtold_l
+#undef __strtold_l
+#undef __strtod_l
+
+extern double
+__strtod_l (__const char *__restrict __nptr, char **__restrict __endptr,
+            __locale_t __loc);
+
+double
+attribute_hidden
+__strtold_l (const char *nptr, char **endptr, __locale_t loc)
+{
+  return __strtod_l (nptr, endptr, loc);
+}
+extern __typeof (__strtold_l) strtold_l attribute_hidden;
+weak_alias (__strtold_l, strtold_l)
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-swprintf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-swprintf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-swprintf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-swprintf.c	2005-11-11 13:30:38.588628776 -0500
@@ -0,0 +1,15 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+swprintf (wchar_t *s, size_t n, const wchar_t *fmt, ...)
+{
+  va_list arg;
+  int done;
+
+  va_start (arg, fmt);
+  done = __nldbl_vswprintf (s, n, fmt, arg);
+  va_end (arg);
+
+  return done;
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-swscanf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-swscanf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-swscanf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-swscanf.c	2005-11-11 13:30:38.581629840 -0500
@@ -0,0 +1,15 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+swscanf (const wchar_t *s, const wchar_t *fmt, ...)
+{
+  va_list arg;
+  int done;
+
+  va_start (arg, fmt);
+  done = __nldbl_vswscanf (s, fmt, arg);
+  va_end (arg);
+
+  return done;
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-tan.c libc/sysdeps/ieee754/ldbl-opt/nldbl-tan.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-tan.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-tan.c	2005-11-11 13:30:38.695612512 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+tanl (double x)
+{
+  return tan (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-tanh.c libc/sysdeps/ieee754/ldbl-opt/nldbl-tanh.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-tanh.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-tanh.c	2005-11-11 13:30:38.698612056 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+tanhl (double x)
+{
+  return tanh (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-tgamma.c libc/sysdeps/ieee754/ldbl-opt/nldbl-tgamma.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-tgamma.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-tgamma.c	2005-11-11 13:30:38.709610384 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+tgammal (double x)
+{
+  return tgamma (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-trunc.c libc/sysdeps/ieee754/ldbl-opt/nldbl-trunc.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-trunc.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-trunc.c	2005-11-11 13:30:38.711610080 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+truncl (double x)
+{
+  return trunc (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-vasprintf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-vasprintf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-vasprintf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-vasprintf.c	2005-11-11 13:30:38.603626496 -0500
@@ -0,0 +1,9 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+weak_function
+vasprintf (char **result_ptr, const char *fmt, va_list ap)
+{
+  return __nldbl_vasprintf (result_ptr, fmt, ap);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-vdprintf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-vdprintf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-vdprintf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-vdprintf.c	2005-11-11 13:30:38.612625128 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+vdprintf (int d, const char *fmt, va_list arg)
+{
+  return __nldbl_vdprintf (d, fmt, arg);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-vfprintf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-vfprintf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-vfprintf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-vfprintf.c	2005-11-11 13:30:38.576630600 -0500
@@ -0,0 +1,10 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+vfprintf (FILE *s, const char *fmt, va_list ap)
+{
+  return __nldbl_vfprintf (s, fmt, ap);
+}
+extern __typeof (vfprintf) _IO_vfprintf attribute_hidden;
+strong_alias (vfprintf, _IO_vfprintf)
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-vfscanf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-vfscanf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-vfscanf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-vfscanf.c	2005-11-11 13:30:38.624623304 -0500
@@ -0,0 +1,10 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+__vfscanf (FILE *s, const char *fmt, va_list ap)
+{
+  return __nldbl__IO_vfscanf (s, fmt, ap, NULL);
+}
+extern __typeof (__vfscanf) vfscanf attribute_hidden;
+weak_alias (__vfscanf, vfscanf)
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-vfwprintf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-vfwprintf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-vfwprintf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-vfwprintf.c	2005-11-11 13:30:38.617624368 -0500
@@ -0,0 +1,9 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+weak_function
+vfwprintf (FILE *s, const wchar_t *fmt, va_list ap)
+{
+  return __nldbl_vfwprintf (s, fmt, ap);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-vfwscanf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-vfwscanf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-vfwscanf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-vfwscanf.c	2005-11-11 13:30:38.606626040 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+vfwscanf (FILE *s, const wchar_t *fmt, va_list ap)
+{
+  return __nldbl_vfwscanf (s, fmt, ap);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-vprintf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-vprintf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-vprintf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-vprintf.c	2005-11-11 13:30:38.566632120 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+vprintf (const char *fmt, va_list ap)
+{
+  return __nldbl_vfprintf (stdout, fmt, ap);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-vscanf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-vscanf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-vscanf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-vscanf.c	2005-11-11 13:30:38.627622848 -0500
@@ -0,0 +1,9 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+weak_function
+vscanf (const char *fmt, va_list ap)
+{
+  return __nldbl__IO_vfscanf (stdin, fmt, ap, NULL);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-vsnprintf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-vsnprintf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-vsnprintf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-vsnprintf.c	2005-11-11 13:30:38.598627256 -0500
@@ -0,0 +1,10 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+vsnprintf (char *string, size_t maxlen, const char *fmt, va_list ap)
+{
+  return __nldbl_vsnprintf (string, maxlen, fmt, ap);
+}
+extern __typeof (vsnprintf) __vsnprintf attribute_hidden;
+weak_alias (vsnprintf, __vsnprintf)
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-vsprintf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-vsprintf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-vsprintf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-vsprintf.c	2005-11-11 13:30:38.611625280 -0500
@@ -0,0 +1,10 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+_IO_vsprintf (char *string, const char *fmt, va_list ap)
+{
+  return __nldbl_vsprintf (string, fmt, ap);
+}
+extern __typeof (_IO_vsprintf) vsprintf attribute_hidden;
+weak_alias (_IO_vsprintf, vsprintf)
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-vsscanf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-vsscanf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-vsscanf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-vsscanf.c	2005-11-11 13:30:38.597627408 -0500
@@ -0,0 +1,10 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+__vsscanf (const char *string, const char *fmt, va_list ap)
+{
+  return __nldbl_vsscanf (string, fmt, ap);
+}
+extern __typeof (__vsscanf) vsscanf attribute_hidden;
+weak_alias (__vsscanf, vsscanf)
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-vswprintf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-vswprintf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-vswprintf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-vswprintf.c	2005-11-11 13:30:38.611625280 -0500
@@ -0,0 +1,9 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+weak_function
+vswprintf (wchar_t *string, size_t maxlen, const wchar_t *fmt, va_list ap)
+{
+  return __nldbl_vswprintf (string, maxlen, fmt, ap);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-vswscanf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-vswscanf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-vswscanf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-vswscanf.c	2005-11-11 13:30:38.627622848 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+vswscanf (const wchar_t *string, const wchar_t *fmt, va_list ap)
+{
+  return __nldbl_vswscanf (string, fmt, ap);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-vwprintf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-vwprintf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-vwprintf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-vwprintf.c	2005-11-11 13:30:38.609625584 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+vwprintf (const wchar_t *fmt, va_list ap)
+{
+  return __nldbl_vfwprintf (stdout, fmt, ap);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-vwscanf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-vwscanf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-vwscanf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-vwscanf.c	2005-11-11 13:30:38.583629536 -0500
@@ -0,0 +1,9 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+weak_function
+vwscanf (const wchar_t *fmt, va_list ap)
+{
+  return __nldbl_vfwscanf (stdin, fmt, ap);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-wcstold.c libc/sysdeps/ieee754/ldbl-opt/nldbl-wcstold.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-wcstold.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-wcstold.c	2005-11-11 13:30:38.691613120 -0500
@@ -0,0 +1,10 @@
+#define wcstold wcstold_XXX
+#include "nldbl-compat.h"
+#undef wcstold
+
+double
+attribute_hidden
+wcstold (const wchar_t *nptr, wchar_t **endptr)
+{
+  return wcstod (nptr, endptr);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-wcstoldint.c libc/sysdeps/ieee754/ldbl-opt/nldbl-wcstoldint.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-wcstoldint.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-wcstoldint.c	2005-11-11 13:30:38.691613120 -0500
@@ -0,0 +1,10 @@
+#define __wcstold_internal __wcstold_internal_XXX
+#include "nldbl-compat.h"
+#undef __wcstold_internal
+
+double
+attribute_hidden
+__wcstold_internal (const wchar_t *nptr, wchar_t **endptr, int group)
+{
+  return __wcstod_internal (nptr, endptr, group);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-wcstold_l.c libc/sysdeps/ieee754/ldbl-opt/nldbl-wcstold_l.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-wcstold_l.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-wcstold_l.c	2005-11-11 13:30:38.691613120 -0500
@@ -0,0 +1,14 @@
+#define wcstold_l wcstold_l_XXX
+#define __wcstold_l __wcstold_l_XXX
+#include "nldbl-compat.h"
+#undef wcstold_l
+#undef __wcstold_l
+
+double
+attribute_hidden
+__wcstold_l (const wchar_t *nptr, wchar_t **endptr, __locale_t loc)
+{
+  return __wcstod_l (nptr, endptr, loc);
+}
+extern __typeof (__wcstold_l) wcstold_l attribute_hidden;
+weak_alias (__wcstold_l, wcstold_l)
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-wprintf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-wprintf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-wprintf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-wprintf.c	2005-11-11 13:30:38.591628320 -0500
@@ -0,0 +1,15 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+wprintf (const wchar_t *fmt, ...)
+{
+  va_list arg;
+  int done;
+
+  va_start (arg, fmt);
+  done = __nldbl_vfwprintf (stdout, fmt, arg);
+  va_end (arg);
+
+  return done;
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-wscanf.c libc/sysdeps/ieee754/ldbl-opt/nldbl-wscanf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-wscanf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-wscanf.c	2005-11-11 13:30:38.609625584 -0500
@@ -0,0 +1,15 @@
+#include "nldbl-compat.h"
+
+int
+attribute_hidden
+wscanf (const wchar_t *fmt, ...)
+{
+  va_list arg;
+  int done;
+
+  va_start (arg, fmt);
+  done = __nldbl_vfwscanf (stdin, fmt, arg);
+  va_end (arg);
+
+  return done;
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-y0.c libc/sysdeps/ieee754/ldbl-opt/nldbl-y0.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-y0.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-y0.c	2005-11-11 13:30:38.707610688 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+y0l (double x)
+{
+  return y0 (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-y1.c libc/sysdeps/ieee754/ldbl-opt/nldbl-y1.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-y1.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-y1.c	2005-11-11 13:30:38.708610536 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+y1l (double x)
+{
+  return y1 (x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-yn.c libc/sysdeps/ieee754/ldbl-opt/nldbl-yn.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/nldbl-yn.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/nldbl-yn.c	2005-11-11 13:30:38.718609016 -0500
@@ -0,0 +1,8 @@
+#include "nldbl-compat.h"
+
+double
+attribute_hidden
+ynl (int n, double x)
+{
+  return yn (n, x);
+}
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_asinh.c libc/sysdeps/ieee754/ldbl-opt/s_asinh.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_asinh.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_asinh.c	2005-11-11 13:30:38.573631056 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/ieee754/dbl-64/s_asinh.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __asinh, asinhl, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_atan.c libc/sysdeps/ieee754/ldbl-opt/s_atan.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_atan.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_atan.c	2005-11-11 13:30:38.579630144 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/ieee754/dbl-64/s_atan.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, atan, atanl, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_cacos.c libc/sysdeps/ieee754/ldbl-opt/s_cacos.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_cacos.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_cacos.c	2005-11-11 13:30:38.614624824 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/s_cacos.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __cacos, cacosl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_cacosh.c libc/sysdeps/ieee754/ldbl-opt/s_cacosh.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_cacosh.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_cacosh.c	2005-11-11 13:30:38.612625128 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/s_cacosh.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __cacosh, cacoshl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_cacoshl.c libc/sysdeps/ieee754/ldbl-opt/s_cacoshl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_cacoshl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_cacoshl.c	2005-11-11 13:30:38.625623152 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/s_cacoshl.c>
+long_double_symbol (libm, __cacoshl, cacoshl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_cacosl.c libc/sysdeps/ieee754/ldbl-opt/s_cacosl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_cacosl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_cacosl.c	2005-11-11 13:30:38.599627104 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/s_cacosl.c>
+long_double_symbol (libm, __cacosl, cacosl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_casin.c libc/sysdeps/ieee754/ldbl-opt/s_casin.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_casin.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_casin.c	2005-11-11 13:30:38.591628320 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/s_casin.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __casin, casinl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_casinh.c libc/sysdeps/ieee754/ldbl-opt/s_casinh.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_casinh.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_casinh.c	2005-11-11 13:30:38.566632120 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/s_casinh.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __casinh, casinhl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_casinhl.c libc/sysdeps/ieee754/ldbl-opt/s_casinhl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_casinhl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_casinhl.c	2005-11-11 13:30:38.570631512 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/s_casinhl.c>
+long_double_symbol (libm, __casinhl, casinhl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_casinl.c libc/sysdeps/ieee754/ldbl-opt/s_casinl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_casinl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_casinl.c	2005-11-11 13:30:38.605626192 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/s_casinl.c>
+long_double_symbol (libm, __casinl, casinl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_catan.c libc/sysdeps/ieee754/ldbl-opt/s_catan.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_catan.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_catan.c	2005-11-11 13:30:38.596627560 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/s_catan.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __catan, catanl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_catanh.c libc/sysdeps/ieee754/ldbl-opt/s_catanh.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_catanh.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_catanh.c	2005-11-11 13:30:38.589628624 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/s_catanh.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __catanh, catanhl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_catanhl.c libc/sysdeps/ieee754/ldbl-opt/s_catanhl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_catanhl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_catanhl.c	2005-11-11 13:30:38.594627864 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/s_catanhl.c>
+long_double_symbol (libm, __catanhl, catanhl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_catanl.c libc/sysdeps/ieee754/ldbl-opt/s_catanl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_catanl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_catanl.c	2005-11-11 13:30:38.575630752 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/s_catanl.c>
+long_double_symbol (libm, __catanl, catanl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_cbrt.c libc/sysdeps/ieee754/ldbl-opt/s_cbrt.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_cbrt.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_cbrt.c	2005-11-11 13:30:38.587628928 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/ieee754/dbl-64/s_cbrt.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __cbrt, cbrtl, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_ccos.c libc/sysdeps/ieee754/ldbl-opt/s_ccos.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_ccos.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_ccos.c	2005-11-11 13:30:38.574630904 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/s_ccos.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __ccos, ccosl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_ccosh.c libc/sysdeps/ieee754/ldbl-opt/s_ccosh.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_ccosh.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_ccosh.c	2005-11-11 13:30:38.570631512 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/s_ccosh.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __ccosh, ccoshl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_ccoshl.c libc/sysdeps/ieee754/ldbl-opt/s_ccoshl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_ccoshl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_ccoshl.c	2005-11-11 13:30:38.595627712 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/s_ccoshl.c>
+long_double_symbol (libm, __ccoshl, ccoshl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_ccosl.c libc/sysdeps/ieee754/ldbl-opt/s_ccosl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_ccosl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_ccosl.c	2005-11-11 13:30:38.595627712 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/s_ccosl.c>
+long_double_symbol (libm, __ccosl, ccosl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_ceil.c libc/sysdeps/ieee754/ldbl-opt/s_ceil.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_ceil.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_ceil.c	2005-11-11 13:30:38.617624368 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/ieee754/dbl-64/s_ceil.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __ceil, ceill, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_cexp.c libc/sysdeps/ieee754/ldbl-opt/s_cexp.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_cexp.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_cexp.c	2005-11-11 13:30:38.572631208 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/s_cexp.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __cexp, cexpl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_cexpl.c libc/sysdeps/ieee754/ldbl-opt/s_cexpl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_cexpl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_cexpl.c	2005-11-11 13:30:38.565632272 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/s_cexpl.c>
+long_double_symbol (libm, __cexpl, cexpl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_clog10.c libc/sysdeps/ieee754/ldbl-opt/s_clog10.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_clog10.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_clog10.c	2005-11-11 13:30:38.571631360 -0500
@@ -0,0 +1,7 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/s_clog10.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __clog10, __clog10l, GLIBC_2_1);
+compat_symbol (libm, clog10, clog10l, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_clog10l.c libc/sysdeps/ieee754/ldbl-opt/s_clog10l.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_clog10l.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_clog10l.c	2005-11-11 13:30:38.577630448 -0500
@@ -0,0 +1,10 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#define __clog10l __clog10l_internal
+#include <sysdeps/generic/s_clog10l.c>
+#undef __clog10l
+strong_alias (__clog10l_internal, __clog10l__internal)
+long_double_symbol (libm, __clog10l_internal, __clog10l);
+long_double_symbol (libm, __clog10l__internal, clog10l);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_clog.c libc/sysdeps/ieee754/ldbl-opt/s_clog.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_clog.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_clog.c	2005-11-11 13:30:38.583629536 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/s_clog.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __clog, clogl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_clogl.c libc/sysdeps/ieee754/ldbl-opt/s_clogl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_clogl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_clogl.c	2005-11-11 13:30:38.596627560 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/s_clogl.c>
+long_double_symbol (libm, __clogl, clogl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_copysign.c libc/sysdeps/ieee754/ldbl-opt/s_copysign.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_copysign.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_copysign.c	2005-11-11 13:30:38.604626344 -0500
@@ -0,0 +1,9 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/ieee754/dbl-64/s_copysign.c>
+#ifdef IS_IN_libm
+# if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __copysign, copysignl, GLIBC_2_0);
+# endif
+#elif LONG_DOUBLE_COMPAT(libc, GLIBC_2_0)
+compat_symbol (libc, __copysign, copysignl, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_cpow.c libc/sysdeps/ieee754/ldbl-opt/s_cpow.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_cpow.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_cpow.c	2005-11-11 13:30:38.564632424 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/s_cpow.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __cpow, cpowl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_cpowl.c libc/sysdeps/ieee754/ldbl-opt/s_cpowl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_cpowl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_cpowl.c	2005-11-11 13:30:38.602626648 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/s_cpowl.c>
+long_double_symbol (libm, __cpowl, cpowl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_cproj.c libc/sysdeps/ieee754/ldbl-opt/s_cproj.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_cproj.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_cproj.c	2005-11-11 13:30:38.618624216 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/s_cproj.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __cproj, cprojl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_cprojl.c libc/sysdeps/ieee754/ldbl-opt/s_cprojl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_cprojl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_cprojl.c	2005-11-11 13:30:38.623623456 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/s_cprojl.c>
+long_double_symbol (libm, __cprojl, cprojl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_csin.c libc/sysdeps/ieee754/ldbl-opt/s_csin.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_csin.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_csin.c	2005-11-11 13:30:38.584629384 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/s_csin.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __csin, csinl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_csinh.c libc/sysdeps/ieee754/ldbl-opt/s_csinh.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_csinh.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_csinh.c	2005-11-11 13:30:38.625623152 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/s_csinh.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __csinh, csinhl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_csinhl.c libc/sysdeps/ieee754/ldbl-opt/s_csinhl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_csinhl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_csinhl.c	2005-11-11 13:30:38.625623152 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/s_csinhl.c>
+long_double_symbol (libm, __csinhl, csinhl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_csinl.c libc/sysdeps/ieee754/ldbl-opt/s_csinl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_csinl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_csinl.c	2005-11-11 13:30:38.630622392 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/s_csinl.c>
+long_double_symbol (libm, __csinl, csinl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_csqrt.c libc/sysdeps/ieee754/ldbl-opt/s_csqrt.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_csqrt.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_csqrt.c	2005-11-11 13:30:38.597627408 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/s_csqrt.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __csqrt, csqrtl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_csqrtl.c libc/sysdeps/ieee754/ldbl-opt/s_csqrtl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_csqrtl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_csqrtl.c	2005-11-11 13:30:38.580629992 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/s_csqrtl.c>
+long_double_symbol (libm, __csqrtl, csqrtl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_ctan.c libc/sysdeps/ieee754/ldbl-opt/s_ctan.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_ctan.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_ctan.c	2005-11-11 13:30:38.585629232 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/s_ctan.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __ctan, ctanl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_ctanh.c libc/sysdeps/ieee754/ldbl-opt/s_ctanh.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_ctanh.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_ctanh.c	2005-11-11 13:30:38.581629840 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/s_ctanh.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __ctanh, ctanhl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_ctanhl.c libc/sysdeps/ieee754/ldbl-opt/s_ctanhl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_ctanhl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_ctanhl.c	2005-11-11 13:30:38.603626496 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/s_ctanhl.c>
+long_double_symbol (libm, __ctanhl, ctanhl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_ctanl.c libc/sysdeps/ieee754/ldbl-opt/s_ctanl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_ctanl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_ctanl.c	2005-11-11 13:30:38.631622240 -0500
@@ -0,0 +1,6 @@
+#include <complex.h>
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/s_ctanl.c>
+long_double_symbol (libm, __ctanl, ctanl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_erf.c libc/sysdeps/ieee754/ldbl-opt/s_erf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_erf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_erf.c	2005-11-11 13:30:38.604626344 -0500
@@ -0,0 +1,6 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/ieee754/dbl-64/s_erf.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __erf, erfl, GLIBC_2_0);
+compat_symbol (libm, __erfc, erfcl, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_expm1.c libc/sysdeps/ieee754/ldbl-opt/s_expm1.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_expm1.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_expm1.c	2005-11-11 13:30:38.592628168 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/ieee754/dbl-64/s_expm1.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __expm1, expm1l, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_fabs.c libc/sysdeps/ieee754/ldbl-opt/s_fabs.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_fabs.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_fabs.c	2005-11-11 13:30:38.593628016 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/ieee754/dbl-64/s_fabs.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __fabs, fabsl, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_fdim.c libc/sysdeps/ieee754/ldbl-opt/s_fdim.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_fdim.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_fdim.c	2005-11-11 13:30:38.590628472 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/s_fdim.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __fdim, fdiml, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_fdiml.c libc/sysdeps/ieee754/ldbl-opt/s_fdiml.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_fdiml.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_fdiml.c	2005-11-11 13:30:38.599627104 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/s_fdiml.c>
+long_double_symbol (libm, __fdiml, fdiml);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_finite.c libc/sysdeps/ieee754/ldbl-opt/s_finite.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_finite.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_finite.c	2005-11-11 13:30:38.566632120 -0500
@@ -0,0 +1,18 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/ieee754/dbl-64/s_finite.c>
+weak_alias (__finite, ___finite)
+#ifdef IS_IN_libm
+# if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __finite, __finitel, GLIBC_2_1);
+# endif
+# if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, ___finite, finitel, GLIBC_2_0);
+# endif
+#else
+# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0)
+compat_symbol (libm, __finite, __finitel, GLIBC_2_0);
+# endif
+# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0)
+compat_symbol (libc, ___finite, finitel, GLIBC_2_0);
+# endif
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_floor.c libc/sysdeps/ieee754/ldbl-opt/s_floor.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_floor.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_floor.c	2005-11-11 13:30:38.575630752 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/ieee754/dbl-64/s_floor.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __floor, floorl, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_fma.c libc/sysdeps/ieee754/ldbl-opt/s_fma.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_fma.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_fma.c	2005-11-11 13:30:38.608625736 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/s_fma.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __fma, fmal, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_fmal.c libc/sysdeps/ieee754/ldbl-opt/s_fmal.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_fmal.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_fmal.c	2005-11-11 13:30:38.618624216 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/s_fmal.c>
+long_double_symbol (libm, __fmal, fmal);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_fmax.c libc/sysdeps/ieee754/ldbl-opt/s_fmax.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_fmax.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_fmax.c	2005-11-11 13:30:38.591628320 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/s_fmax.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __fmax, fmaxl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_fmaxl.c libc/sysdeps/ieee754/ldbl-opt/s_fmaxl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_fmaxl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_fmaxl.c	2005-11-11 13:30:38.621623760 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/s_fmaxl.c>
+long_double_symbol (libm, __fmaxl, fmaxl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_fmin.c libc/sysdeps/ieee754/ldbl-opt/s_fmin.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_fmin.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_fmin.c	2005-11-11 13:30:38.574630904 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/s_fmin.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __fmin, fminl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_fminl.c libc/sysdeps/ieee754/ldbl-opt/s_fminl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_fminl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_fminl.c	2005-11-11 13:30:38.583629536 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/s_fminl.c>
+long_double_symbol (libm, __fminl, fminl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_frexp.c libc/sysdeps/ieee754/ldbl-opt/s_frexp.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_frexp.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_frexp.c	2005-11-11 13:30:38.584629384 -0500
@@ -0,0 +1,9 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/ieee754/dbl-64/s_frexp.c>
+#ifdef IS_IN_libm
+# if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __frexp, frexpl, GLIBC_2_0);
+# endif
+#elif LONG_DOUBLE_COMPAT(libc, GLIBC_2_0)
+compat_symbol (libc, __frexp, frexpl, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_ilogb.c libc/sysdeps/ieee754/ldbl-opt/s_ilogb.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_ilogb.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_ilogb.c	2005-11-11 13:30:38.610625432 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/ieee754/dbl-64/s_ilogb.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __ilogb, ilogbl, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_isinf.c libc/sysdeps/ieee754/ldbl-opt/s_isinf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_isinf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_isinf.c	2005-11-11 13:30:38.587628928 -0500
@@ -0,0 +1,8 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/ieee754/dbl-64/s_isinf.c>
+#ifndef IS_IN_libm
+# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0)
+compat_symbol (libc, __isinf, __isinfl, GLIBC_2_0);
+compat_symbol (libc, isinf, isinfl, GLIBC_2_0);
+# endif
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_isnan.c libc/sysdeps/ieee754/ldbl-opt/s_isnan.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_isnan.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_isnan.c	2005-11-11 13:30:38.629622544 -0500
@@ -0,0 +1,8 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/ieee754/dbl-64/s_isnan.c>
+#ifndef IS_IN_libm
+# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0)
+compat_symbol (libc, __isnan, __isnanl, GLIBC_2_0);
+compat_symbol (libc, isnan, isnanl, GLIBC_2_0);
+# endif
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_ldexp.c libc/sysdeps/ieee754/ldbl-opt/s_ldexp.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_ldexp.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_ldexp.c	2005-11-11 13:30:38.596627560 -0500
@@ -0,0 +1,9 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/s_ldexp.c>
+#ifdef IS_IN_libm
+# if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __ldexp, ldexpl, GLIBC_2_0);
+# endif
+#elif LONG_DOUBLE_COMPAT(libc, GLIBC_2_0)
+compat_symbol (libc, __ldexp, ldexpl, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_ldexpl.c libc/sysdeps/ieee754/ldbl-opt/s_ldexpl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_ldexpl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_ldexpl.c	2005-11-11 13:30:38.574630904 -0500
@@ -0,0 +1,9 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/s_ldexpl.c>
+#ifdef IS_IN_libm
+long_double_symbol (libm, __ldexpl, ldexpl);
+#else
+long_double_symbol (libc, __ldexpl, ldexpl);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_llrint.c libc/sysdeps/ieee754/ldbl-opt/s_llrint.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_llrint.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_llrint.c	2005-11-11 13:30:38.629622544 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/ieee754/dbl-64/s_llrint.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __llrint, llrintl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_llround.c libc/sysdeps/ieee754/ldbl-opt/s_llround.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_llround.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_llround.c	2005-11-11 13:30:38.626623000 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/ieee754/dbl-64/s_llround.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __llround, llroundl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_log1p.c libc/sysdeps/ieee754/ldbl-opt/s_log1p.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_log1p.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_log1p.c	2005-11-11 13:30:38.603626496 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/ieee754/dbl-64/s_log1p.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __log1p, log1pl, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_logb.c libc/sysdeps/ieee754/ldbl-opt/s_logb.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_logb.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_logb.c	2005-11-11 13:30:38.622623608 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/ieee754/dbl-64/s_logb.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __logb, logbl, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_lrint.c libc/sysdeps/ieee754/ldbl-opt/s_lrint.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_lrint.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_lrint.c	2005-11-11 13:30:38.573631056 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/ieee754/dbl-64/s_lrint.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __lrint, lrintl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_lround.c libc/sysdeps/ieee754/ldbl-opt/s_lround.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_lround.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_lround.c	2005-11-11 13:30:38.564632424 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/ieee754/dbl-64/s_lround.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __lround, lroundl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_modf.c libc/sysdeps/ieee754/ldbl-opt/s_modf.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_modf.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_modf.c	2005-11-11 13:30:38.629622544 -0500
@@ -0,0 +1,9 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/ieee754/dbl-64/s_modf.c>
+#ifdef IS_IN_libm
+# if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __modf, modfl, GLIBC_2_0);
+# endif
+#elif LONG_DOUBLE_COMPAT(libc, GLIBC_2_0)
+compat_symbol (libc, __modf, modfl, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_nan.c libc/sysdeps/ieee754/ldbl-opt/s_nan.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_nan.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_nan.c	2005-11-11 13:30:38.619624064 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/s_nan.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __nan, nanl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_nanl.c libc/sysdeps/ieee754/ldbl-opt/s_nanl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_nanl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_nanl.c	2005-11-11 13:30:38.618624216 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/s_nanl.c>
+long_double_symbol (libm, __nanl, nanl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_nearbyint.c libc/sysdeps/ieee754/ldbl-opt/s_nearbyint.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_nearbyint.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_nearbyint.c	2005-11-11 13:30:38.608625736 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/ieee754/dbl-64/s_nearbyint.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __nearbyint, nearbyintl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_nextafter.c libc/sysdeps/ieee754/ldbl-opt/s_nextafter.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_nextafter.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_nextafter.c	2005-11-11 13:30:38.602626648 -0500
@@ -0,0 +1,12 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/s_nextafter.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __nextafter, nextafterl, GLIBC_2_0);
+#endif
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+strong_alias (__nextafter, __nexttowardd)
+strong_alias (__nextafter, __nexttowardld)
+#undef nexttoward
+compat_symbol (libm, __nexttowardd, nexttoward, GLIBC_2_1);
+compat_symbol (libm, __nexttowardld, nexttowardl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_remquo.c libc/sysdeps/ieee754/ldbl-opt/s_remquo.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_remquo.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_remquo.c	2005-11-11 13:30:38.614624824 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/ieee754/dbl-64/s_remquo.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __remquo, remquol, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_rint.c libc/sysdeps/ieee754/ldbl-opt/s_rint.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_rint.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_rint.c	2005-11-11 13:30:38.582629688 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/ieee754/dbl-64/s_rint.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __rint, rintl, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_round.c libc/sysdeps/ieee754/ldbl-opt/s_round.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_round.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_round.c	2005-11-11 13:30:38.607625888 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/ieee754/dbl-64/s_round.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __round, roundl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_scalbln.c libc/sysdeps/ieee754/ldbl-opt/s_scalbln.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_scalbln.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_scalbln.c	2005-11-11 13:30:38.592628168 -0500
@@ -0,0 +1,9 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/ieee754/dbl-64/s_scalbln.c>
+#ifdef IS_IN_libm
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __scalbln, scalblnl, GLIBC_2_1);
+#endif
+#elif LONG_DOUBLE_COMPAT(libc, GLIBC_2_1)
+compat_symbol (libc, __scalbln, scalblnl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_scalbn.c libc/sysdeps/ieee754/ldbl-opt/s_scalbn.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_scalbn.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_scalbn.c	2005-11-11 13:30:38.567631968 -0500
@@ -0,0 +1,9 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/ieee754/dbl-64/s_scalbn.c>
+#ifdef IS_IN_libm
+# if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __scalbn, scalbnl, GLIBC_2_0);
+# endif
+#elif LONG_DOUBLE_COMPAT(libc, GLIBC_2_0)
+compat_symbol (libc, __scalbn, scalbnl, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_signbit.c libc/sysdeps/ieee754/ldbl-opt/s_signbit.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_signbit.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_signbit.c	2005-11-11 13:30:38.621623760 -0500
@@ -0,0 +1,9 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/ieee754/dbl-64/s_signbit.c>
+#ifdef IS_IN_libm
+# if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __signbit, __signbitl, GLIBC_2_1);
+# endif
+#elif LONG_DOUBLE_COMPAT(libc, GLIBC_2_1)
+compat_symbol (libc, __signbit, __signbitl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_significand.c libc/sysdeps/ieee754/ldbl-opt/s_significand.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_significand.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_significand.c	2005-11-11 13:30:38.580629992 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/s_significand.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __significand, significandl, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_significandl.c libc/sysdeps/ieee754/ldbl-opt/s_significandl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_significandl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_significandl.c	2005-11-11 13:30:38.610625432 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/s_significandl.c>
+long_double_symbol (libm, __significandl, significandl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_sin.c libc/sysdeps/ieee754/ldbl-opt/s_sin.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_sin.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_sin.c	2005-11-11 13:30:38.577630448 -0500
@@ -0,0 +1,10 @@
+/* dbl-64/s_sin.c uses NAN and sincos identifiers internally.  */
+#define sincos sincos_disable
+#include <math_ldbl_opt.h>
+#undef NAN
+#undef sincos
+#include <sysdeps/ieee754/dbl-64/s_sin.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __sin, sinl, GLIBC_2_0);
+compat_symbol (libm, __cos, cosl, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_sincos.c libc/sysdeps/ieee754/ldbl-opt/s_sincos.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_sincos.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_sincos.c	2005-11-11 13:30:38.630622392 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/ieee754/dbl-64/s_sincos.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __sincos, sincosl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_tan.c libc/sysdeps/ieee754/ldbl-opt/s_tan.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_tan.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_tan.c	2005-11-11 13:30:38.584629384 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/ieee754/dbl-64/s_tan.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, tan, tanl, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_tanh.c libc/sysdeps/ieee754/ldbl-opt/s_tanh.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_tanh.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_tanh.c	2005-11-11 13:30:38.579630144 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/ieee754/dbl-64/s_tanh.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __tanh, tanhl, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/s_trunc.c libc/sysdeps/ieee754/ldbl-opt/s_trunc.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/s_trunc.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/s_trunc.c	2005-11-11 13:30:38.567631968 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/ieee754/dbl-64/s_trunc.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __trunc, truncl, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_acos.c libc/sysdeps/ieee754/ldbl-opt/w_acos.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_acos.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_acos.c	2005-11-11 13:30:38.630622392 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/w_acos.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __acos, acosl, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_acosh.c libc/sysdeps/ieee754/ldbl-opt/w_acosh.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_acosh.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_acosh.c	2005-11-11 13:30:38.611625280 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/w_acosh.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __acosh, acoshl, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_acoshl.c libc/sysdeps/ieee754/ldbl-opt/w_acoshl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_acoshl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_acoshl.c	2005-11-11 13:30:38.605626192 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/w_acoshl.c>
+long_double_symbol (libm, __acoshl, acoshl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_acosl.c libc/sysdeps/ieee754/ldbl-opt/w_acosl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_acosl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_acosl.c	2005-11-11 13:30:38.585629232 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/w_acosl.c>
+long_double_symbol (libm, __acosl, acosl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_asin.c libc/sysdeps/ieee754/ldbl-opt/w_asin.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_asin.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_asin.c	2005-11-11 13:30:38.624623304 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/w_asin.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __asin, asinl, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_asinl.c libc/sysdeps/ieee754/ldbl-opt/w_asinl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_asinl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_asinl.c	2005-11-11 13:30:38.607625888 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/w_asinl.c>
+long_double_symbol (libm, __asinl, asinl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_atan2.c libc/sysdeps/ieee754/ldbl-opt/w_atan2.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_atan2.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_atan2.c	2005-11-11 13:30:38.606626040 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/w_atan2.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __atan2, atan2l, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_atan2l.c libc/sysdeps/ieee754/ldbl-opt/w_atan2l.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_atan2l.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_atan2l.c	2005-11-11 13:30:38.623623456 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/w_atan2l.c>
+long_double_symbol (libm, __atan2l, atan2l);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_atanh.c libc/sysdeps/ieee754/ldbl-opt/w_atanh.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_atanh.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_atanh.c	2005-11-11 13:30:38.607625888 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/w_atanh.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __atanh, atanhl, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_atanhl.c libc/sysdeps/ieee754/ldbl-opt/w_atanhl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_atanhl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_atanhl.c	2005-11-11 13:30:38.575630752 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/w_atanhl.c>
+long_double_symbol (libm, __atanhl, atanhl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_cosh.c libc/sysdeps/ieee754/ldbl-opt/w_cosh.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_cosh.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_cosh.c	2005-11-11 13:30:38.599627104 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/w_cosh.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __cosh, coshl, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_coshl.c libc/sysdeps/ieee754/ldbl-opt/w_coshl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_coshl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_coshl.c	2005-11-11 13:30:38.598627256 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/w_coshl.c>
+long_double_symbol (libm, __coshl, coshl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_drem.c libc/sysdeps/ieee754/ldbl-opt/w_drem.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_drem.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_drem.c	2005-11-11 13:30:38.578630296 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/w_drem.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __drem, dreml, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_dreml.c libc/sysdeps/ieee754/ldbl-opt/w_dreml.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_dreml.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_dreml.c	2005-11-11 13:30:38.592628168 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/w_dreml.c>
+long_double_symbol (libm, __dreml, dreml);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_exp10.c libc/sysdeps/ieee754/ldbl-opt/w_exp10.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_exp10.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_exp10.c	2005-11-11 13:30:38.589628624 -0500
@@ -0,0 +1,6 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/w_exp10.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __exp10, exp10l, GLIBC_2_1);
+compat_symbol (libm, __pow10, pow10l, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_exp10l.c libc/sysdeps/ieee754/ldbl-opt/w_exp10l.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_exp10l.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_exp10l.c	2005-11-11 13:30:38.572631208 -0500
@@ -0,0 +1,6 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/w_exp10l.c>
+long_double_symbol (libm, __exp10l, exp10l);
+long_double_symbol (libm, __pow10l, pow10l);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_exp2.c libc/sysdeps/ieee754/ldbl-opt/w_exp2.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_exp2.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_exp2.c	2005-11-11 13:30:38.628622696 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/w_exp2.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __exp2, exp2l, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_exp2l.c libc/sysdeps/ieee754/ldbl-opt/w_exp2l.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_exp2l.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_exp2l.c	2005-11-11 13:30:38.616624520 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/w_exp2l.c>
+long_double_symbol (libm, __exp2l, exp2l);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_exp.c libc/sysdeps/ieee754/ldbl-opt/w_exp.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_exp.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_exp.c	2005-11-11 13:30:38.615624672 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/ieee754/dbl-64/w_exp.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __exp, expl, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_fmod.c libc/sysdeps/ieee754/ldbl-opt/w_fmod.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_fmod.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_fmod.c	2005-11-11 13:30:38.593628016 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/w_fmod.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __fmod, fmodl, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_fmodl.c libc/sysdeps/ieee754/ldbl-opt/w_fmodl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_fmodl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_fmodl.c	2005-11-11 13:30:38.604626344 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/w_fmodl.c>
+long_double_symbol (libm, __fmodl, fmodl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_hypot.c libc/sysdeps/ieee754/ldbl-opt/w_hypot.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_hypot.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_hypot.c	2005-11-11 13:30:38.617624368 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/w_hypot.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __hypot, hypotl, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_hypotl.c libc/sysdeps/ieee754/ldbl-opt/w_hypotl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_hypotl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_hypotl.c	2005-11-11 13:30:38.571631360 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/w_hypotl.c>
+long_double_symbol (libm, __hypotl, hypotl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_j0.c libc/sysdeps/ieee754/ldbl-opt/w_j0.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_j0.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_j0.c	2005-11-11 13:30:38.578630296 -0500
@@ -0,0 +1,6 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/w_j0.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, j0, j0l, GLIBC_2_0);
+compat_symbol (libm, y0, y0l, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_j0l.c libc/sysdeps/ieee754/ldbl-opt/w_j0l.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_j0l.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_j0l.c	2005-11-11 13:30:38.613624976 -0500
@@ -0,0 +1,6 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/w_j0l.c>
+long_double_symbol (libm, __j0l, j0l);
+long_double_symbol (libm, __y0l, y0l);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_j1.c libc/sysdeps/ieee754/ldbl-opt/w_j1.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_j1.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_j1.c	2005-11-11 13:30:38.565632272 -0500
@@ -0,0 +1,6 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/w_j1.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, j1, j1l, GLIBC_2_0);
+compat_symbol (libm, y1, y1l, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_j1l.c libc/sysdeps/ieee754/ldbl-opt/w_j1l.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_j1l.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_j1l.c	2005-11-11 13:30:38.586629080 -0500
@@ -0,0 +1,6 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/w_j1l.c>
+long_double_symbol (libm, __j1l, j1l);
+long_double_symbol (libm, __y1l, y1l);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_jn.c libc/sysdeps/ieee754/ldbl-opt/w_jn.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_jn.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_jn.c	2005-11-11 13:30:38.588628776 -0500
@@ -0,0 +1,6 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/w_jn.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, jn, jnl, GLIBC_2_0);
+compat_symbol (libm, yn, ynl, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_jnl.c libc/sysdeps/ieee754/ldbl-opt/w_jnl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_jnl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_jnl.c	2005-11-11 13:30:38.622623608 -0500
@@ -0,0 +1,6 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/w_jnl.c>
+long_double_symbol (libm, __jnl, jnl);
+long_double_symbol (libm, __ynl, ynl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_lgamma.c libc/sysdeps/ieee754/ldbl-opt/w_lgamma.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_lgamma.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_lgamma.c	2005-11-11 13:30:38.568631816 -0500
@@ -0,0 +1,6 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/w_lgamma.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __lgamma, lgammal, GLIBC_2_0);
+compat_symbol (libm, __gamma, gammal, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_lgammal.c libc/sysdeps/ieee754/ldbl-opt/w_lgammal.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_lgammal.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_lgammal.c	2005-11-11 13:30:38.627622848 -0500
@@ -0,0 +1,6 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/w_lgammal.c>
+long_double_symbol (libm, __lgammal, lgammal);
+long_double_symbol (libm, __gammal, gammal);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_lgammal_r.c libc/sysdeps/ieee754/ldbl-opt/w_lgammal_r.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_lgammal_r.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_lgammal_r.c	2005-11-11 13:30:38.615624672 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/w_lgammal_r.c>
+long_double_symbol (libm, __lgammal_r, lgammal_r);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_lgamma_r.c libc/sysdeps/ieee754/ldbl-opt/w_lgamma_r.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_lgamma_r.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_lgamma_r.c	2005-11-11 13:30:38.579630144 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/w_lgamma_r.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __lgamma_r, lgammal_r, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_log10.c libc/sysdeps/ieee754/ldbl-opt/w_log10.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_log10.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_log10.c	2005-11-11 13:30:38.586629080 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/w_log10.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __log10, log10l, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_log10l.c libc/sysdeps/ieee754/ldbl-opt/w_log10l.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_log10l.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_log10l.c	2005-11-11 13:30:38.582629688 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/w_log10l.c>
+long_double_symbol (libm, __log10l, log10l);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_log2.c libc/sysdeps/ieee754/ldbl-opt/w_log2.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_log2.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_log2.c	2005-11-11 13:30:38.620623912 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/w_log2.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __log2, log2l, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_log2l.c libc/sysdeps/ieee754/ldbl-opt/w_log2l.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_log2l.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_log2l.c	2005-11-11 13:30:38.606626040 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/w_log2l.c>
+long_double_symbol (libm, __log2l, log2l);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_log.c libc/sysdeps/ieee754/ldbl-opt/w_log.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_log.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_log.c	2005-11-11 13:30:38.626623000 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/w_log.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __log, logl, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_logl.c libc/sysdeps/ieee754/ldbl-opt/w_logl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_logl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_logl.c	2005-11-11 13:30:38.623623456 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/w_logl.c>
+long_double_symbol (libm, __logl, logl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_pow.c libc/sysdeps/ieee754/ldbl-opt/w_pow.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_pow.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_pow.c	2005-11-11 13:30:38.621623760 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/w_pow.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __pow, powl, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_powl.c libc/sysdeps/ieee754/ldbl-opt/w_powl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_powl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_powl.c	2005-11-11 13:30:38.609625584 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/w_powl.c>
+long_double_symbol (libm, __powl, powl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_remainder.c libc/sysdeps/ieee754/ldbl-opt/w_remainder.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_remainder.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_remainder.c	2005-11-11 13:30:38.567631968 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/w_remainder.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __remainder, remainderl, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_remainderl.c libc/sysdeps/ieee754/ldbl-opt/w_remainderl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_remainderl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_remainderl.c	2005-11-11 13:30:38.628622696 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/w_remainderl.c>
+long_double_symbol (libm, __remainderl, remainderl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_scalb.c libc/sysdeps/ieee754/ldbl-opt/w_scalb.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_scalb.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_scalb.c	2005-11-11 13:30:38.620623912 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/w_scalb.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __scalb, scalbl, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_scalbl.c libc/sysdeps/ieee754/ldbl-opt/w_scalbl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_scalbl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_scalbl.c	2005-11-11 13:30:38.595627712 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/w_scalbl.c>
+long_double_symbol (libm, __scalbl, scalbl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_sinh.c libc/sysdeps/ieee754/ldbl-opt/w_sinh.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_sinh.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_sinh.c	2005-11-11 13:30:38.585629232 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/w_sinh.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __sinh, sinhl, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_sinhl.c libc/sysdeps/ieee754/ldbl-opt/w_sinhl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_sinhl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_sinhl.c	2005-11-11 13:30:38.613624976 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/w_sinhl.c>
+long_double_symbol (libm, __sinhl, sinhl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_sqrt.c libc/sysdeps/ieee754/ldbl-opt/w_sqrt.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_sqrt.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_sqrt.c	2005-11-11 13:30:38.589628624 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/w_sqrt.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)
+compat_symbol (libm, __sqrt, sqrtl, GLIBC_2_0);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_sqrtl.c libc/sysdeps/ieee754/ldbl-opt/w_sqrtl.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_sqrtl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_sqrtl.c	2005-11-11 13:30:38.594627864 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/w_sqrtl.c>
+long_double_symbol (libm, __sqrtl, sqrtl);
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_tgamma.c libc/sysdeps/ieee754/ldbl-opt/w_tgamma.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_tgamma.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_tgamma.c	2005-11-11 13:30:38.564632424 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#include <sysdeps/generic/w_tgamma.c>
+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)
+compat_symbol (libm, __tgamma, tgammal, GLIBC_2_1);
+#endif
diff -urN libc.orig/sysdeps/ieee754/ldbl-opt/w_tgammal.c libc/sysdeps/ieee754/ldbl-opt/w_tgammal.c
--- libc.orig/sysdeps/ieee754/ldbl-opt/w_tgammal.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/ieee754/ldbl-opt/w_tgammal.c	2005-11-11 13:30:38.612625128 -0500
@@ -0,0 +1,5 @@
+#include <math_ldbl_opt.h>
+#undef weak_alias
+#define weak_alias(n,a)
+#include <sysdeps/generic/w_tgammal.c>
+long_double_symbol (libm, __tgammal, tgammal);
diff -urN libc.orig/sysdeps/sparc/fpu/bits/mathdef.h libc/sysdeps/sparc/fpu/bits/mathdef.h
--- libc.orig/sysdeps/sparc/fpu/bits/mathdef.h	2004-03-15 16:44:11.000000000 -0500
+++ libc/sysdeps/sparc/fpu/bits/mathdef.h	2005-11-11 13:30:38.000000000 -0500
@@ -55,14 +55,3 @@
 # define FP_ILOGBNAN     (2147483647)
 
 #endif	/* ISO C99 */
-
-#ifndef __NO_LONG_DOUBLE_MATH
-
-# if __WORDSIZE == 32
-/* Signal that in 32bit ABI we do not really have a `long double'.
-   The disables the declaration of all the `long double' function
-   variants.  */
-#  define __NO_LONG_DOUBLE_MATH	1
-# endif
-
-#endif
diff -urN libc.orig/sysdeps/sparc/fpu/bits/mathinline.h libc/sysdeps/sparc/fpu/bits/mathinline.h
--- libc.orig/sysdeps/sparc/fpu/bits/mathinline.h	2004-10-14 12:12:48.000000000 -0400
+++ libc/sysdeps/sparc/fpu/bits/mathinline.h	2005-11-11 13:41:50.389579608 -0500
@@ -36,23 +36,52 @@
 
 # if __WORDSIZE == 32
 
-#  define __unordered_cmp(x, y) \
+#  ifndef __NO_LONG_DOUBLE_MATH
+
+#   define __unordered_cmp(x, y) \
+  (__extension__							      \
+   ({ unsigned __r;							      \
+      if (sizeof (x) == 4 && sizeof (y) == 4)				      \
+	{								      \
+	  float __x = (x); float __y = (y);				      \
+	  __asm__ ("fcmps %1,%2; st %%fsr, %0" : "=m" (__r) : "f" (__x),      \
+		   "f" (__y) : "cc");					      \
+	}								      \
+      else if (sizeof (x) <= 8 && sizeof (y) <= 8)			      \
+	{								      \
+	  double __x = (x); double __y = (y);				      \
+	  __asm__ ("fcmpd\t%1,%2\n\tst\t%%fsr,%0" : "=m" (__r) : "f" (__x),   \
+		   "f" (__y) : "cc");					      \
+	}								      \
+      else								      \
+	{								      \
+	  long double __x = (x); long double __y = (y);			      \
+	  extern int _Q_cmp (const long double a, const long double b);	      \
+	  __r = _Q_cmp (__x, __y) << 10;				      \
+	}								      \
+      __r; }))
+
+#  else
+
+#   define __unordered_cmp(x, y) \
   (__extension__							      \
    ({ unsigned __r;							      \
-      if (sizeof(x) == 4 && sizeof(y) == 4)				      \
+      if (sizeof (x) == 4 && sizeof (y) == 4)				      \
 	{								      \
 	  float __x = (x); float __y = (y);				      \
-	  __asm__("fcmps %1,%2; st %%fsr, %0" : "=m" (__r) : "f" (__x),	      \
-		  "f" (__y) : "cc");					      \
+	  __asm__ ("fcmps %1,%2; st %%fsr, %0" : "=m" (__r) : "f" (__x),      \
+		   "f" (__y) : "cc");					      \
 	}								      \
       else								      \
 	{								      \
 	  double __x = (x); double __y = (y);				      \
-	  __asm__("fcmpd\t%1,%2\n\tst\t%%fsr,%0" : "=m" (__r) : "f" (__x),    \
-		  "f" (__y) : "cc");					      \
+	  __asm__ ("fcmpd\t%1,%2\n\tst\t%%fsr,%0" : "=m" (__r) : "f" (__x),   \
+		   "f" (__y) : "cc");					      \
 	}								      \
       __r; }))
 
+#  endif
+
 #  define isgreater(x, y) ((__unordered_cmp (x, y) & (3 << 10)) == (2 << 10))
 #  define isgreaterequal(x, y) ((__unordered_cmp (x, y) & (1 << 10)) == 0)
 #  define isless(x, y) ((__unordered_cmp (x, y) & (3 << 10)) == (1 << 10))
@@ -65,22 +94,22 @@
 #  define __unordered_v9cmp(x, y, op, qop) \
   (__extension__							      \
    ({ unsigned __r;						      	      \
-      if (sizeof(x) == 4 && sizeof(y) == 4)				      \
+      if (sizeof (x) == 4 && sizeof (y) == 4)				      \
 	{								      \
 	  float __x = (x); float __y = (y);				      \
-	  __asm__("fcmps\t%%fcc3,%1,%2\n\tmov" op "\t%%fcc3,1,%0"	      \
-		  : "=r" (__r) : "f" (__x), "f" (__y), "0" (0) : "cc");	      \
+	  __asm__ ("fcmps\t%%fcc3,%1,%2\n\tmov" op "\t%%fcc3,1,%0"	      \
+		   : "=r" (__r) : "f" (__x), "f" (__y), "0" (0) : "cc");      \
 	}								      \
-      else if (sizeof(x) <= 8 && sizeof(y) <= 8)			      \
+      else if (sizeof (x) <= 8 && sizeof (y) <= 8)			      \
 	{								      \
 	  double __x = (x); double __y = (y);				      \
-	  __asm__("fcmpd\t%%fcc3,%1,%2\n\tmov" op "\t%%fcc3,1,%0"	      \
-		  : "=r" (__r) : "f" (__x), "f" (__y), "0" (0) : "cc");	      \
+	  __asm__ ("fcmpd\t%%fcc3,%1,%2\n\tmov" op "\t%%fcc3,1,%0"	      \
+		   : "=r" (__r) : "f" (__x), "f" (__y), "0" (0) : "cc");      \
 	}								      \
       else								      \
 	{								      \
 	  long double __x = (x); long double __y = (y);			      \
-	  extern int _Qp_cmp(const long double *a, const long double *b);     \
+	  extern int _Qp_cmp (const long double *a, const long double *b);    \
 	  __r = qop;						      	      \
 	}								      \
       __r; }))
@@ -127,12 +156,25 @@
   return __u.__i[0] < 0;
 }
 
+#    ifndef __NO_LONG_DOUBLE_MATH
+
+__MATH_INLINE int
+__signbitl (long double __x) __THROW
+{
+  __extension__ union { long double __l; int __i[4]; } __u = { __l: __x };
+  return __u.__i[0] < 0;
+}
+
+#    else
+
 __MATH_INLINE int
 __NTH (__signbitl (long double __x))
 {
   return __signbit ((double)__x);
 }
 
+#    endif /* __NO_LONG_DOUBLE_MATH */
+
 #   else /* sparc64 */
 
 __MATH_INLINE int
@@ -180,6 +222,13 @@
   _Qp_sqrt (&__r, &__x);
   return __r;
 }
+#   elif !defined __NO_LONG_DOUBLE_MATH
+__MATH_INLINE long double
+sqrtl (long double __x) __THROW
+{
+  extern long double _Q_sqrt (__const__ long double);
+  return _Q_sqrt (__x);
+}
 #   endif /* sparc64 */
 
 #  endif /* !__NO_MATH_INLINES && !GCC 3.2+ */
@@ -211,6 +260,13 @@
   _Qp_sqrt(&__r, &__x);
   return __r;
 }
+#   elif !defined __NO_LONG_DOUBLE_MATH
+__MATH_INLINE long double
+__ieee754_sqrtl (long double __x)
+{
+  extern long double _Q_sqrt (__const__ long double);
+  return _Q_sqrt (__x);
+}
 #   endif /* sparc64 */
 #  endif /* __LIBC_INTERNAL_MATH_INLINES */
 # endif /* gcc 2.8+ */
diff -urN libc.orig/sysdeps/sparc/sparc32/fpu/e_sqrtl.c libc/sysdeps/sparc/sparc32/fpu/e_sqrtl.c
--- libc.orig/sysdeps/sparc/sparc32/fpu/e_sqrtl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/sparc/sparc32/fpu/e_sqrtl.c	2005-11-11 13:30:38.000000000 -0500
@@ -0,0 +1 @@
+/* __ieee754_sqrtl is defined in q_sqrt.c.  */
diff -urN libc.orig/sysdeps/sparc/sparc32/fpu/libm-test-ulps libc/sysdeps/sparc/sparc32/fpu/libm-test-ulps
--- libc.orig/sysdeps/sparc/sparc32/fpu/libm-test-ulps	2004-12-17 01:49:58.000000000 -0500
+++ libc/sysdeps/sparc/sparc32/fpu/libm-test-ulps	2005-11-11 13:39:54.374653096 -0500
@@ -4,12 +4,18 @@
 Test "atan2 (-0.75, -1.0) == -2.49809154479650885165983415456218025":
 float: 3
 ifloat: 3
+ildouble: 1
+ldouble: 1
 Test "atan2 (0.75, -1.0) == 2.49809154479650885165983415456218025":
 float: 3
 ifloat: 3
+ildouble: 1
+ldouble: 1
 Test "atan2 (1.390625, 0.9296875) == 0.981498387184244311516296577615519772":
 float: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "atan2 (-0.00756827042671106339, -.001792735857538728036) == -1.80338464113663849327153994379639112":
 float: 6
 ifloat: 6
@@ -19,17 +25,26 @@
 float: 1
 ifloat: 1
 
+# cacos
+Test "Imaginary part of: cacos (0.75 + 1.25 i) == 1.11752014915610270578240049553777969 - 1.13239363160530819522266333696834467 i":
+ildouble: 1
+ldouble: 1
+
 # cacosh
 Test "Real part of: cacosh (-2 - 3 i) == -1.9833870299165354323470769028940395 + 2.1414491111159960199416055713254211 i":
 double: 1
 float: 7
 idouble: 1
 ifloat: 7
+ildouble: 5
+ldouble: 5
 Test "Imaginary part of: cacosh (-2 - 3 i) == -1.9833870299165354323470769028940395 + 2.1414491111159960199416055713254211 i":
 double: 1
 float: 3
 idouble: 1
 ifloat: 3
+ildouble: 1
+ldouble: 1
 
 # casin
 Test "Real part of: casin (0.75 + 1.25 i) == 0.453276177638793913448921196101971749 + 1.13239363160530819522266333696834467 i":
@@ -37,6 +52,9 @@
 float: 1
 idouble: 1
 ifloat: 1
+Test "Imaginary part of: casin (0.75 + 1.25 i) == 0.453276177638793913448921196101971749 + 1.13239363160530819522266333696834467 i":
+ildouble: 1
+ldouble: 1
 
 # casinh
 Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i":
@@ -44,19 +62,27 @@
 float: 1
 idouble: 5
 ifloat: 1
+ildouble: 4
+ldouble: 4
 Test "Imaginary part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i":
 double: 3
 float: 6
 idouble: 3
 ifloat: 6
+ildouble: 2
+ldouble: 2
 Test "Real part of: casinh (0.75 + 1.25 i) == 1.03171853444778027336364058631006594 + 0.911738290968487636358489564316731207 i":
 float: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "Imaginary part of: casinh (0.75 + 1.25 i) == 1.03171853444778027336364058631006594 + 0.911738290968487636358489564316731207 i":
 double: 1
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 
 # catan
 Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
@@ -70,6 +96,9 @@
 Test "Real part of: catan (0.75 + 1.25 i) == 1.10714871779409050301706546017853704 + 0.549306144334054845697622618461262852 i":
 float: 4
 ifloat: 4
+Test "Imaginary part of: catan (0.75 + 1.25 i) == 1.10714871779409050301706546017853704 + 0.549306144334054845697622618461262852 i":
+ildouble: 1
+ldouble: 1
 
 # catanh
 Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
@@ -81,11 +110,18 @@
 Test "Real part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
 double: 1
 idouble: 1
+ildouble: 1
+ldouble: 1
 Test "Imaginary part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
 float: 6
 ifloat: 6
+ildouble: 1
+ldouble: 1
 
 # cbrt
+Test "cbrt (-0.001) == -0.1":
+ildouble: 1
+ldouble: 1
 Test "cbrt (-27.0) == -3.0":
 double: 1
 idouble: 1
@@ -97,9 +133,14 @@
 idouble: 1
 
 # ccos
+Test "Real part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
+ildouble: 1
+ldouble: 1
 Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
 float: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "Real part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
 double: 1
 float: 1
@@ -113,9 +154,13 @@
 Test "Real part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
 float: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "Imaginary part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
 float: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "Real part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
 double: 1
 float: 1
@@ -126,12 +171,20 @@
 ifloat: 1
 
 # cexp
+Test "Real part of: cexp (-2.0 - 3.0 i) == -0.13398091492954261346140525546115575 - 0.019098516261135196432576240858800925 i":
+ildouble: 1
+ldouble: 1
 Test "Imaginary part of: cexp (-2.0 - 3.0 i) == -0.13398091492954261346140525546115575 - 0.019098516261135196432576240858800925 i":
 float: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "Real part of: cexp (0.75 + 1.25 i) == 0.667537446429131586942201977015932112 + 2.00900045494094876258347228145863909 i":
 float: 1
 ifloat: 1
+Test "Imaginary part of: cexp (0.75 + 1.25 i) == 0.667537446429131586942201977015932112 + 2.00900045494094876258347228145863909 i":
+ildouble: 1
+ldouble: 1
 
 # clog
 Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i":
@@ -140,57 +193,98 @@
 Test "Real part of: clog (0.75 + 1.25 i) == 0.376885901188190075998919126749298416 + 1.03037682652431246378774332703115153 i":
 float: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 
 # clog10
 Test "Imaginary part of: clog10 (-0 + inf i) == inf + pi/2*log10(e) i":
+double: 1
 float: 1
+idouble: 1
 ifloat: 1
 Test "Imaginary part of: clog10 (-0 - inf i) == inf - pi/2*log10(e) i":
+double: 1
 float: 1
+idouble: 1
 ifloat: 1
+Test "Real part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
+ildouble: 1
+ldouble: 1
 Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
 double: 1
 float: 5
 idouble: 1
 ifloat: 5
+ildouble: 1
+ldouble: 1
 Test "Imaginary part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i":
+double: 1
 float: 1
+idouble: 1
 ifloat: 1
 Test "Imaginary part of: clog10 (-3 - inf i) == inf - pi/2*log10(e) i":
+double: 1
 float: 1
+idouble: 1
 ifloat: 1
 Test "Imaginary part of: clog10 (-inf + 0 i) == inf + pi*log10(e) i":
+double: 1
 float: 1
+idouble: 1
 ifloat: 1
 Test "Imaginary part of: clog10 (-inf + 1 i) == inf + pi*log10(e) i":
+double: 1
 float: 1
+idouble: 1
 ifloat: 1
+Test "Imaginary part of: clog10 (-inf + inf i) == inf + 3/4 pi*log10(e) i":
+double: 1
+idouble: 1
 Test "Imaginary part of: clog10 (-inf - 0 i) == inf - pi*log10(e) i":
+double: 1
 float: 1
+idouble: 1
 ifloat: 1
 Test "Imaginary part of: clog10 (-inf - 1 i) == inf - pi*log10(e) i":
+double: 1
 float: 1
+idouble: 1
 ifloat: 1
 Test "Imaginary part of: clog10 (0 + inf i) == inf + pi/2*log10(e) i":
+double: 1
 float: 1
+idouble: 1
 ifloat: 1
 Test "Imaginary part of: clog10 (0 - inf i) == inf - pi/2*log10(e) i":
+double: 1
 float: 1
+idouble: 1
 ifloat: 1
 Test "Real part of: clog10 (0.75 + 1.25 i) == 0.163679467193165171449476605077428975 + 0.447486970040493067069984724340855636 i":
 float: 1
 ifloat: 1
+Test "Imaginary part of: clog10 (0.75 + 1.25 i) == 0.163679467193165171449476605077428975 + 0.447486970040493067069984724340855636 i":
+ildouble: 1
+ldouble: 1
 Test "Imaginary part of: clog10 (3 + inf i) == inf + pi/2*log10(e) i":
+double: 1
 float: 1
+idouble: 1
 ifloat: 1
 Test "Imaginary part of: clog10 (3 - inf i) == inf - pi/2*log10(e) i":
+double: 1
 float: 1
+idouble: 1
 ifloat: 1
 Test "Imaginary part of: clog10 (inf + inf i) == inf + pi/4*log10(e) i":
+double: 1
 float: 1
+idouble: 1
 ifloat: 1
 Test "Imaginary part of: clog10 (inf - inf i) == inf - pi/4*log10(e) i":
+double: 1
 float: 1
+idouble: 1
 ifloat: 1
 
 # cos
@@ -199,16 +293,22 @@
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "cos (M_PI_6l * 4.0) == -0.5":
 double: 2
 float: 1
 idouble: 2
 ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "cos (pi/2) == 0":
 double: 1
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 
 # cpow
 Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
@@ -222,16 +322,31 @@
 float: 4
 idouble: 1
 ifloat: 4
+ildouble: 4
+ldouble: 4
+Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 0.0 i) == 0.75 + 1.25 i":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: cpow (0.75 + 1.25 i, 1.0 + 0.0 i) == 0.75 + 1.25 i":
+ildouble: 1
+ldouble: 1
 Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 1.0 i) == 0.0846958290317209430433805274189191353 + 0.513285749182902449043287190519090481 i":
 double: 2
 float: 3
 idouble: 2
 ifloat: 3
+ildouble: 1
+ldouble: 1
+Test "Real part of: cpow (2 + 0 i, 10 + 0 i) == 1024.0 + 0.0 i":
+ildouble: 2
+ldouble: 2
 Test "Real part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i":
 double: 1
 float: 4
 idouble: 1
 ifloat: 4
+ildouble: 3
+ldouble: 3
 Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i":
 float: 2
 ifloat: 2
@@ -240,8 +355,21 @@
 float: 2
 idouble: 2
 ifloat: 2
+ildouble: 1
+ldouble: 1
+
+# csin
+Test "Imaginary part of: csin (-2 - 3 i) == -9.15449914691142957346729954460983256 + 4.16890695996656435075481305885375484 i":
+ildouble: 1
+ldouble: 1
+Test "Real part of: csin (0.75 + 1.25 i) == 1.28722291002649188575873510790565441 + 1.17210635989270256101081285116138863 i":
+ildouble: 1
+ldouble: 1
 
 # csinh
+Test "Real part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
+ildouble: 1
+ldouble: 1
 Test "Imaginary part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
 double: 1
 idouble: 1
@@ -256,17 +384,31 @@
 Test "Real part of: csqrt (-2 + 3 i) == 0.89597747612983812471573375529004348 + 1.6741492280355400404480393008490519 i":
 float: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "Real part of: csqrt (-2 - 3 i) == 0.89597747612983812471573375529004348 - 1.6741492280355400404480393008490519 i":
 float: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0.75 + 1.25 i) == 1.05065169626078392338656675760808326 + 0.594868882070379067881984030639932657 i":
+ildouble: 1
+ldouble: 1
 
 # ctan
 Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
 double: 1
 idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
+ildouble: 1
+ldouble: 1
 Test "Imaginary part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i":
 double: 1
 idouble: 1
+ildouble: 2
+ldouble: 2
 
 # ctanh
 Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
@@ -274,6 +416,11 @@
 float: 2
 idouble: 1
 ifloat: 2
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
+ildouble: 1
+ldouble: 1
 Test "Imaginary part of: ctanh (0 + pi/4 i) == 0.0 + 1.0 i":
 float: 1
 ifloat: 1
@@ -290,6 +437,9 @@
 Test "erfc (2.0) == 0.00467773498104726583793074363274707139":
 double: 1
 idouble: 1
+Test "erfc (27.0) == 0.523704892378925568501606768284954709e-318":
+ildouble: 1
+ldouble: 1
 Test "erfc (4.125) == 0.542340079956506600531223408575531062e-8":
 double: 1
 idouble: 1
@@ -310,14 +460,25 @@
 float: 2
 idouble: 6
 ifloat: 2
+ildouble: 1
+ldouble: 1
 
 # expm1
 Test "expm1 (0.75) == 1.11700001661267466854536981983709561":
 double: 1
 idouble: 1
 Test "expm1 (1) == M_El - 1.0":
+double: 1
 float: 1
+idouble: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# gamma
+Test "gamma (-0.5) == log(2*sqrt(pi))":
+ildouble: 1
+ldouble: 1
 
 # hypot
 Test "hypot (-0.7, -12.4) == 12.419742348374220601176836866763271":
@@ -359,9 +520,13 @@
 float: 1
 idouble: 2
 ifloat: 1
+ildouble: 2
+ldouble: 2
 Test "j0 (2.0) == 0.223890779141235668051827454649948626":
 float: 2
 ifloat: 2
+ildouble: 2
+ldouble: 2
 Test "j0 (4.0) == -3.9714980986384737228659076845169804197562E-1":
 double: 1
 float: 1
@@ -370,17 +535,32 @@
 Test "j0 (8.0) == 0.171650807137553906090869407851972001":
 float: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 
 # j1
+Test "j1 (-1.0) == -0.440050585744933515959682203718914913":
+ildouble: 1
+ldouble: 1
+Test "j1 (0.75) == 0.349243602174862192523281016426251335":
+ildouble: 1
+ldouble: 1
+Test "j1 (1.0) == 0.440050585744933515959682203718914913":
+ildouble: 1
+ldouble: 1
 Test "j1 (10.0) == 0.0434727461688614366697487680258592883":
 float: 2
 ifloat: 2
+ildouble: 2
+ldouble: 2
 Test "j1 (2.0) == 0.576724807756873387202448242269137087":
 double: 1
 idouble: 1
 Test "j1 (8.0) == 0.234636346853914624381276651590454612":
 double: 1
 idouble: 1
+ildouble: 4
+ldouble: 4
 
 # jn
 Test "jn (0, -4.0) == -3.9714980986384737228659076845169804197562E-1":
@@ -396,9 +576,13 @@
 float: 1
 idouble: 2
 ifloat: 1
+ildouble: 2
+ldouble: 2
 Test "jn (0, 2.0) == 0.223890779141235668051827454649948626":
 float: 2
 ifloat: 2
+ildouble: 2
+ldouble: 2
 Test "jn (0, 4.0) == -3.9714980986384737228659076845169804197562E-1":
 double: 1
 float: 1
@@ -407,30 +591,57 @@
 Test "jn (0, 8.0) == 0.171650807137553906090869407851972001":
 float: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "jn (1, -1.0) == -0.440050585744933515959682203718914913":
+ildouble: 1
+ldouble: 1
+Test "jn (1, 0.75) == 0.349243602174862192523281016426251335":
+ildouble: 1
+ldouble: 1
+Test "jn (1, 1.0) == 0.440050585744933515959682203718914913":
+ildouble: 1
+ldouble: 1
 Test "jn (1, 10.0) == 0.0434727461688614366697487680258592883":
 float: 2
 ifloat: 2
+ildouble: 2
+ldouble: 2
 Test "jn (1, 2.0) == 0.576724807756873387202448242269137087":
 double: 1
 idouble: 1
 Test "jn (1, 8.0) == 0.234636346853914624381276651590454612":
 double: 1
 idouble: 1
+ildouble: 4
+ldouble: 4
+Test "jn (10, -1.0) == 0.263061512368745320699785368779050294e-9":
+ildouble: 1
+ldouble: 1
 Test "jn (10, 0.125) == 0.250543369809369890173993791865771547e-18":
 double: 1
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "jn (10, 0.75) == 0.149621713117596814698712483621682835e-10":
 double: 1
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "jn (10, 1.0) == 0.263061512368745320699785368779050294e-9":
+ildouble: 1
+ldouble: 1
 Test "jn (10, 10.0) == 0.207486106633358857697278723518753428":
 double: 4
 float: 3
 idouble: 4
 ifloat: 3
+ildouble: 2
+ldouble: 2
 Test "jn (10, 2.0) == 0.251538628271673670963516093751820639e-6":
 float: 4
 ifloat: 4
@@ -449,6 +660,8 @@
 float: 1
 idouble: 3
 ifloat: 1
+ildouble: 2
+ldouble: 2
 Test "jn (3, 2.0) == 0.128943249474402051098793332969239835":
 double: 1
 float: 2
@@ -456,16 +669,23 @@
 ifloat: 2
 
 # lgamma
+Test "lgamma (-0.5) == log(2*sqrt(pi))":
+ildouble: 1
+ldouble: 1
 Test "lgamma (0.7) == 0.260867246531666514385732417016759578":
 double: 1
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "lgamma (1.2) == -0.853740900033158497197028392998854470e-1":
 double: 1
 float: 2
 idouble: 1
 ifloat: 2
+ildouble: 1
+ldouble: 1
 
 # log10
 Test "log10 (0.75) == -0.124938736608299953132449886193870744":
@@ -476,11 +696,21 @@
 Test "log10 (e) == log10(e)":
 float: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 
 # log1p
 Test "log1p (-0.25) == -0.287682072451780927439219005993827432":
 float: 1
 ifloat: 1
+Test "log1p (M_El - 1.0) == 1":
+ildouble: 1
+ldouble: 1
+
+# log2
+Test "log2 (0.75) == -.415037499278843818546261056052183492":
+ildouble: 1
+ldouble: 1
 
 # sincos
 Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
@@ -488,31 +718,58 @@
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res":
 double: 1
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "sincos (pi/2, &sin_res, &cos_res) puts 0 in cos_res":
 double: 1
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res":
 float: 1
 ifloat: 1
 
+# sqrt
+Test "sqrt (2) == M_SQRT2l":
+ildouble: 1
+ldouble: 1
+
 # tan
 Test "tan (pi/4) == 1":
 double: 1
 idouble: 1
 
+# tanh
+Test "tanh (-0.75) == -0.635148952387287319214434357312496495":
+ildouble: 1
+ldouble: 1
+Test "tanh (-1.0) == -0.7615941559557648881194582826047935904":
+ildouble: 1
+ldouble: 1
+Test "tanh (0.75) == 0.635148952387287319214434357312496495":
+ildouble: 1
+ldouble: 1
+Test "tanh (1.0) == 0.7615941559557648881194582826047935904":
+ildouble: 1
+ldouble: 1
+
 # tgamma
 Test "tgamma (-0.5) == -2 sqrt (pi)":
 double: 1
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "tgamma (0.5) == sqrt (pi)":
 float: 1
 ifloat: 1
@@ -521,6 +778,9 @@
 float: 1
 idouble: 1
 ifloat: 1
+Test "tgamma (4) == 6":
+ildouble: 1
+ldouble: 1
 
 # y0
 Test "y0 (1.0) == 0.0882569642156769579829267660235151628":
@@ -536,19 +796,28 @@
 Test "y0 (10.0) == 0.0556711672835993914244598774101900481":
 float: 1
 ifloat: 1
+ildouble: 3
+ldouble: 3
 Test "y0 (8.0) == 0.223521489387566220527323400498620359":
 double: 1
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 3
+ldouble: 3
 
 # y1
 Test "y1 (0.125) == -5.19993611253477499595928744876579921":
 double: 1
 idouble: 1
+Test "y1 (0.75) == -1.03759455076928541973767132140642198":
+ildouble: 1
+ldouble: 1
 Test "y1 (1.5) == -0.412308626973911295952829820633445323":
 float: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "y1 (10.0) == 0.249015424206953883923283474663222803":
 double: 3
 float: 1
@@ -559,11 +828,15 @@
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "y1 (8.0) == -0.158060461731247494255555266187483550":
 double: 1
 float: 2
 idouble: 1
 ifloat: 2
+ildouble: 1
+ldouble: 1
 
 # yn
 Test "yn (0, 1.0) == 0.0882569642156769579829267660235151628":
@@ -579,17 +852,26 @@
 Test "yn (0, 10.0) == 0.0556711672835993914244598774101900481":
 float: 1
 ifloat: 1
+ildouble: 3
+ldouble: 3
 Test "yn (0, 8.0) == 0.223521489387566220527323400498620359":
 double: 1
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 3
+ldouble: 3
 Test "yn (1, 0.125) == -5.19993611253477499595928744876579921":
 double: 1
 idouble: 1
+Test "yn (1, 0.75) == -1.03759455076928541973767132140642198":
+ildouble: 1
+ldouble: 1
 Test "yn (1, 1.5) == -0.412308626973911295952829820633445323":
 float: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "yn (1, 10.0) == 0.249015424206953883923283474663222803":
 double: 3
 float: 1
@@ -600,30 +882,44 @@
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "yn (1, 8.0) == -0.158060461731247494255555266187483550":
 double: 1
 float: 2
 idouble: 1
 ifloat: 2
+ildouble: 1
+ldouble: 1
 Test "yn (10, 0.125) == -127057845771019398.252538486899753195":
 double: 1
 idouble: 1
+ildouble: 2
+ldouble: 2
 Test "yn (10, 0.75) == -2133501638.90573424452445412893839236":
 double: 1
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 5
+ldouble: 5
 Test "yn (10, 1.0) == -121618014.278689189288130426667971145":
 double: 1
 idouble: 1
+ildouble: 1
+ldouble: 1
 Test "yn (10, 10.0) == -0.359814152183402722051986577343560609":
 double: 1
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 2
+ldouble: 2
 Test "yn (10, 2.0) == -129184.542208039282635913145923304214":
 double: 2
 idouble: 2
+ildouble: 2
+ldouble: 2
 Test "yn (3, 0.125) == -2612.69757350066712600220955744091741":
 double: 1
 idouble: 1
@@ -632,11 +928,15 @@
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 2
+ldouble: 2
 Test "yn (3, 10.0) == -0.251362657183837329779204747654240998":
 double: 1
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 Test "yn (3, 2.0) == -1.12778377684042778608158395773179238":
 double: 1
 idouble: 1
@@ -650,17 +950,25 @@
 float: 1
 ifloat: 1
 
+Function: Imaginary part of "cacos":
+ildouble: 1
+ldouble: 1
+
 Function: Real part of "cacosh":
 double: 1
 float: 7
 idouble: 1
 ifloat: 7
+ildouble: 5
+ldouble: 5
 
 Function: Imaginary part of "cacosh":
 double: 1
 float: 3
 idouble: 1
 ifloat: 3
+ildouble: 1
+ldouble: 1
 
 Function: Real part of "casin":
 double: 1
@@ -668,17 +976,25 @@
 idouble: 1
 ifloat: 1
 
+Function: Imaginary part of "casin":
+ildouble: 1
+ldouble: 1
+
 Function: Real part of "casinh":
 double: 5
 float: 1
 idouble: 5
 ifloat: 1
+ildouble: 4
+ldouble: 4
 
 Function: Imaginary part of "casinh":
 double: 3
 float: 6
 idouble: 3
 ifloat: 6
+ildouble: 2
+ldouble: 2
 
 Function: Real part of "catan":
 float: 4
@@ -689,50 +1005,72 @@
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 
 Function: Real part of "catanh":
 double: 4
 idouble: 4
+ildouble: 1
+ldouble: 1
 
 Function: Imaginary part of "catanh":
 float: 6
 ifloat: 6
+ildouble: 1
+ldouble: 1
 
 Function: "cbrt":
 double: 1
 idouble: 1
+ildouble: 1
+ldouble: 1
 
 Function: Real part of "ccos":
 double: 1
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 
 Function: Imaginary part of "ccos":
 float: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 
 Function: Real part of "ccosh":
 double: 1
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 
 Function: Imaginary part of "ccosh":
 float: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 
 Function: Real part of "cexp":
 float: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 
 Function: Imaginary part of "cexp":
 float: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 
 Function: Real part of "clog":
 float: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 
 Function: Imaginary part of "clog":
 float: 3
@@ -741,34 +1079,54 @@
 Function: Real part of "clog10":
 float: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 
 Function: Imaginary part of "clog10":
 double: 1
 float: 5
 idouble: 1
 ifloat: 5
+ildouble: 1
+ldouble: 1
 
 Function: "cos":
 double: 2
 float: 1
 idouble: 2
 ifloat: 1
+ildouble: 1
+ldouble: 1
 
 Function: Real part of "cpow":
 double: 2
 float: 4
 idouble: 2
 ifloat: 4
+ildouble: 1
+ldouble: 1
 
 Function: Imaginary part of "cpow":
 double: 2
 float: 2
 idouble: 2
 ifloat: 2
+ildouble: 1
+ldouble: 1
+
+Function: Real part of "csin":
+ildouble: 1
+ldouble: 1
+
+Function: Imaginary part of "csin":
+ildouble: 1
+ldouble: 1
 
 Function: Real part of "csinh":
 float: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 
 Function: Imaginary part of "csinh":
 double: 1
@@ -779,24 +1137,38 @@
 Function: Real part of "csqrt":
 float: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: Imaginary part of "csqrt":
+ildouble: 1
+ldouble: 1
 
 Function: Real part of "ctan":
 double: 1
 idouble: 1
+ildouble: 1
+ldouble: 1
 
 Function: Imaginary part of "ctan":
 double: 1
 idouble: 1
+ildouble: 2
+ldouble: 2
 
 Function: Real part of "ctanh":
 double: 1
 float: 2
 idouble: 1
 ifloat: 2
+ildouble: 1
+ldouble: 1
 
 Function: Imaginary part of "ctanh":
 float: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 
 Function: "erf":
 double: 1
@@ -805,18 +1177,28 @@
 Function: "erfc":
 double: 1
 idouble: 1
+ildouble: 1
+ldouble: 1
 
 Function: "exp10":
 double: 6
 float: 2
 idouble: 6
 ifloat: 2
+ildouble: 1
+ldouble: 1
 
 Function: "expm1":
 double: 1
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "gamma":
+ildouble: 1
+ldouble: 1
 
 Function: "hypot":
 float: 1
@@ -827,67 +1209,101 @@
 float: 2
 idouble: 2
 ifloat: 2
+ildouble: 2
+ldouble: 2
 
 Function: "j1":
 double: 1
 float: 2
 idouble: 1
 ifloat: 2
+ildouble: 4
+ldouble: 4
 
 Function: "jn":
 double: 4
 float: 4
 idouble: 4
 ifloat: 4
+ildouble: 4
+ldouble: 4
 
 Function: "lgamma":
 double: 1
 float: 2
 idouble: 1
 ifloat: 2
+ildouble: 1
+ldouble: 1
 
 Function: "log10":
 double: 1
 float: 2
 idouble: 1
 ifloat: 2
+ildouble: 1
+ldouble: 1
 
 Function: "log1p":
 float: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "log2":
+ildouble: 1
+ldouble: 1
 
 Function: "sincos":
 double: 1
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "sqrt":
+ildouble: 1
+ldouble: 1
 
 Function: "tan":
 double: 1
 idouble: 1
 
+Function: "tanh":
+ildouble: 1
+ldouble: 1
+
 Function: "tgamma":
 double: 1
 float: 1
 idouble: 1
 ifloat: 1
+ildouble: 1
+ldouble: 1
 
 Function: "y0":
 double: 2
 float: 1
 idouble: 2
 ifloat: 1
+ildouble: 3
+ldouble: 3
 
 Function: "y1":
 double: 3
 float: 2
 idouble: 3
 ifloat: 2
+ildouble: 1
+ldouble: 1
 
 Function: "yn":
 double: 3
 float: 2
 idouble: 3
 ifloat: 2
+ildouble: 5
+ldouble: 5
 
 # end of automatic generation
diff -urN libc.orig/sysdeps/sparc/sparc32/fpu/s_fabs.c libc/sysdeps/sparc/sparc32/fpu/s_fabs.c
--- libc.orig/sysdeps/sparc/sparc32/fpu/s_fabs.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/sparc/sparc32/fpu/s_fabs.c	2005-11-11 13:30:38.000000000 -0500
@@ -0,0 +1,5 @@
+double __fabs (double x)
+{
+  return __builtin_fabs (x);
+}
+weak_alias (__fabs, fabs)
diff -urN libc.orig/sysdeps/sparc/sparc32/fpu/s_fabsf.S libc/sysdeps/sparc/sparc32/fpu/s_fabsf.S
--- libc.orig/sysdeps/sparc/sparc32/fpu/s_fabsf.S	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/sparc/sparc32/fpu/s_fabsf.S	2005-11-11 13:30:38.000000000 -0500
@@ -0,0 +1,29 @@
+/* Float absolute value, sparc32 version.
+   Copyright (C) 2002 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <sysdep.h>
+
+ENTRY (__fabsf)
+	st	%o0, [%sp+64]
+	ld	[%sp+64], %f0
+	retl
+	 fabss	%f0, %f0
+END (__fabsf)
+weak_alias (__fabsf, fabsf)
diff -urN libc.orig/sysdeps/sparc/sparc32/fpu/s_fabsl.c libc/sysdeps/sparc/sparc32/fpu/s_fabsl.c
--- libc.orig/sysdeps/sparc/sparc32/fpu/s_fabsl.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/sparc/sparc32/fpu/s_fabsl.c	2005-11-11 13:30:38.000000000 -0500
@@ -0,0 +1,5 @@
+long double __fabsl (long double x)
+{
+  return __builtin_fabsl (x);
+}
+weak_alias (__fabsl, fabsl)
diff -urN libc.orig/sysdeps/sparc/sparc32/Implies libc/sysdeps/sparc/sparc32/Implies
--- libc.orig/sysdeps/sparc/sparc32/Implies	2000-09-05 10:23:07.000000000 -0400
+++ libc/sysdeps/sparc/sparc32/Implies	2005-11-11 13:30:38.000000000 -0500
@@ -1,5 +1,6 @@
 wordsize-32
 # SPARC uses IEEE 754 floating point.
-ieee754/flt-32
+ieee754/ldbl-128
 ieee754/dbl-64
+ieee754/flt-32
 sparc/sparc32/soft-fp
diff -urN libc.orig/sysdeps/sparc/sparc32/soft-fp/Makefile libc/sysdeps/sparc/sparc32/soft-fp/Makefile
--- libc.orig/sysdeps/sparc/sparc32/soft-fp/Makefile	2001-07-06 00:56:05.000000000 -0400
+++ libc/sysdeps/sparc/sparc32/soft-fp/Makefile	2005-11-11 13:30:38.000000000 -0500
@@ -1,6 +1,6 @@
 #  Software floating-point emulation.
 #  Makefile for SPARC v8 long double utility functions (_Q_*).
-#  Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+#  Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
 #  This file is part of the GNU C Library.
 #  Contributed by Jakub Jelinek (jj@ultra.linux.cz).
 #
@@ -20,13 +20,11 @@
 # Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
 # 02111-1307 USA.
 
-#  Currently gcc does not support TFmode long double on sparc32
-#  so these routines are not used.
-#ifeq ($(subdir),soft-fp)
-#sparc32-quad-routines := q_add q_cmp q_cmpe q_div q_dtoq q_feq q_fge	\
-#	q_fgt q_fle q_flt q_fne q_itoq q_mul q_neg q_qtod q_qtoi	\
-#	q_qtos q_qtoui q_qtoux q_qtox q_sqrt q_stoq q_sub q_uitoq	\
-#	q_uxtoq q_xtoq q_util
-#sysdep_routines += $(sparc32-quad-routines)
-#
-#endif
+ifeq ($(subdir),soft-fp)
+sparc32-quad-routines := q_add q_cmp q_cmpe q_div q_dtoq q_feq q_fge	\
+	q_fgt q_fle q_flt q_fne q_itoq q_mul q_neg q_qtod q_qtoi	\
+	q_qtos q_qtou q_qtoull q_qtoll q_sqrt q_stoq q_sub q_utoq	\
+	q_ulltoq q_lltoq q_util
+sysdep_routines += $(sparc32-quad-routines)
+
+endif
diff -urN libc.orig/sysdeps/sparc/sparc32/soft-fp/q_div.c libc/sysdeps/sparc/sparc32/soft-fp/q_div.c
--- libc.orig/sysdeps/sparc/sparc32/soft-fp/q_div.c	2001-07-06 00:56:05.000000000 -0400
+++ libc/sysdeps/sparc/sparc32/soft-fp/q_div.c	2005-11-11 13:30:38.000000000 -0500
@@ -35,5 +35,5 @@
   FP_DIV_Q(C, A, B);
   FP_PACK_Q(c, C);
   FP_HANDLE_EXCEPTIONS;
-  return long double;
+  return c;
 }
diff -urN libc.orig/sysdeps/sparc/sparc32/soft-fp/q_lltoq.c libc/sysdeps/sparc/sparc32/soft-fp/q_lltoq.c
--- libc.orig/sysdeps/sparc/sparc32/soft-fp/q_lltoq.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/sparc/sparc32/soft-fp/q_lltoq.c	2005-11-11 13:30:38.000000000 -0500
@@ -0,0 +1,38 @@
+/* Software floating-point emulation.
+   Return (long double)a
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Richard Henderson (rth@cygnus.com) and
+		  Jakub Jelinek (jj@ultra.linux.cz).
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include "soft-fp.h"
+#include "quad.h"
+
+long double _Q_lltoq(const long long a)
+{
+  FP_DECL_EX;
+  FP_DECL_Q(C);
+  long double c;
+  long long b = a;
+
+  FP_FROM_INT_Q(C, b, 64, long long);
+  FP_PACK_Q(c, C);
+  FP_CLEAR_EXCEPTIONS;
+  FP_HANDLE_EXCEPTIONS;
+  return c;
+}
diff -urN libc.orig/sysdeps/sparc/sparc32/soft-fp/q_qtoll.c libc/sysdeps/sparc/sparc32/soft-fp/q_qtoll.c
--- libc.orig/sysdeps/sparc/sparc32/soft-fp/q_qtoll.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/sparc/sparc32/soft-fp/q_qtoll.c	2005-11-11 13:30:38.000000000 -0500
@@ -0,0 +1,38 @@
+/* Software floating-point emulation.
+   Return (long long)a
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Richard Henderson (rth@cygnus.com) and
+		  Jakub Jelinek (jj@ultra.linux.cz).
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#define FP_ROUNDMODE FP_RND_ZERO
+#include "soft-fp.h"
+#include "quad.h"
+
+long long _Q_qtoll(const long double a)
+{
+  FP_DECL_EX;
+  FP_DECL_Q(A);
+  long long r;
+
+  FP_UNPACK_Q(A, a);
+  FP_TO_INT_Q(r, A, 64, 1);
+  FP_HANDLE_EXCEPTIONS;
+
+  return r;
+}
diff -urN libc.orig/sysdeps/sparc/sparc32/soft-fp/q_qtou.c libc/sysdeps/sparc/sparc32/soft-fp/q_qtou.c
--- libc.orig/sysdeps/sparc/sparc32/soft-fp/q_qtou.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/sparc/sparc32/soft-fp/q_qtou.c	2005-11-11 13:30:38.000000000 -0500
@@ -0,0 +1,38 @@
+/* Software floating-point emulation.
+   Return (unsigned int)a
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Richard Henderson (rth@cygnus.com) and
+		  Jakub Jelinek (jj@ultra.linux.cz).
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#define FP_ROUNDMODE FP_RND_ZERO
+#include "soft-fp.h"
+#include "quad.h"
+
+unsigned int _Q_qtou(const long double a)
+{
+  FP_DECL_EX;
+  FP_DECL_Q(A);
+  unsigned int r;
+
+  FP_UNPACK_Q(A, a);
+  FP_TO_INT_Q(r, A, 32, -1);
+  FP_HANDLE_EXCEPTIONS;
+
+  return r;
+}
diff -urN libc.orig/sysdeps/sparc/sparc32/soft-fp/q_qtoui.c libc/sysdeps/sparc/sparc32/soft-fp/q_qtoui.c
--- libc.orig/sysdeps/sparc/sparc32/soft-fp/q_qtoui.c	2001-07-06 00:56:05.000000000 -0400
+++ libc/sysdeps/sparc/sparc32/soft-fp/q_qtoui.c	2005-11-11 13:30:38.000000000 -0500
@@ -1,38 +0,0 @@
-/* Software floating-point emulation.
-   Return (unsigned int)a
-   Copyright (C) 1997,1999 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Richard Henderson (rth@cygnus.com) and
-		  Jakub Jelinek (jj@ultra.linux.cz).
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#define FP_ROUNDMODE FP_RND_ZERO
-#include "soft-fp.h"
-#include "quad.h"
-
-unsigned int _Q_qtoui(const long double a)
-{
-  FP_DECL_EX;
-  FP_DECL_Q(A);
-  unsigned int r;
-
-  FP_UNPACK_Q(A, a);
-  FP_TO_INT_Q(r, A, 32, -1);
-  FP_HANDLE_EXCEPTIONS;
-
-  return r;
-}
diff -urN libc.orig/sysdeps/sparc/sparc32/soft-fp/q_qtoull.c libc/sysdeps/sparc/sparc32/soft-fp/q_qtoull.c
--- libc.orig/sysdeps/sparc/sparc32/soft-fp/q_qtoull.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/sparc/sparc32/soft-fp/q_qtoull.c	2005-11-11 13:30:38.000000000 -0500
@@ -0,0 +1,38 @@
+/* Software floating-point emulation.
+   Return (unsigned long long)a
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Richard Henderson (rth@cygnus.com) and
+		  Jakub Jelinek (jj@ultra.linux.cz).
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#define FP_ROUNDMODE FP_RND_ZERO
+#include "soft-fp.h"
+#include "quad.h"
+
+unsigned long long _Q_qtoull(const long double a)
+{
+  FP_DECL_EX;
+  FP_DECL_Q(A);
+  unsigned long long r;
+
+  FP_UNPACK_Q(A, a);
+  FP_TO_INT_Q(r, A, 64, -1);
+  FP_HANDLE_EXCEPTIONS;
+
+  return r;
+}
diff -urN libc.orig/sysdeps/sparc/sparc32/soft-fp/q_qtoux.c libc/sysdeps/sparc/sparc32/soft-fp/q_qtoux.c
--- libc.orig/sysdeps/sparc/sparc32/soft-fp/q_qtoux.c	2001-07-06 00:56:05.000000000 -0400
+++ libc/sysdeps/sparc/sparc32/soft-fp/q_qtoux.c	2005-11-11 13:30:38.000000000 -0500
@@ -1,38 +0,0 @@
-/* Software floating-point emulation.
-   Return (unsigned long)a
-   Copyright (C) 1997,1999 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Richard Henderson (rth@cygnus.com) and
-		  Jakub Jelinek (jj@ultra.linux.cz).
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#define FP_ROUNDMODE FP_RND_ZERO
-#include "soft-fp.h"
-#include "quad.h"
-
-unsigned long long _Q_qtoux(const long double a)
-{
-  FP_DECL_EX;
-  FP_DECL_Q(A);
-  unsigned long long r;
-
-  FP_UNPACK_Q(A, a);
-  FP_TO_INT_Q(r, A, 64, -1);
-  FP_HANDLE_EXCEPTIONS;
-
-  return r;
-}
diff -urN libc.orig/sysdeps/sparc/sparc32/soft-fp/q_qtox.c libc/sysdeps/sparc/sparc32/soft-fp/q_qtox.c
--- libc.orig/sysdeps/sparc/sparc32/soft-fp/q_qtox.c	2001-07-06 00:56:05.000000000 -0400
+++ libc/sysdeps/sparc/sparc32/soft-fp/q_qtox.c	2005-11-11 13:30:38.000000000 -0500
@@ -1,38 +0,0 @@
-/* Software floating-point emulation.
-   Return (long)a
-   Copyright (C) 1997,1999 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Richard Henderson (rth@cygnus.com) and
-		  Jakub Jelinek (jj@ultra.linux.cz).
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#define FP_ROUNDMODE FP_RND_ZERO
-#include "soft-fp.h"
-#include "quad.h"
-
-long long _Q_qtox(const long double a)
-{
-  FP_DECL_EX;
-  FP_DECL_Q(A);
-  long long r;
-
-  FP_UNPACK_Q(A, a);
-  FP_TO_INT_Q(r, A, 64, 1);
-  FP_HANDLE_EXCEPTIONS;
-
-  return r;
-}
diff -urN libc.orig/sysdeps/sparc/sparc32/soft-fp/q_sqrt.c libc/sysdeps/sparc/sparc32/soft-fp/q_sqrt.c
--- libc.orig/sysdeps/sparc/sparc32/soft-fp/q_sqrt.c	2001-07-06 00:56:05.000000000 -0400
+++ libc/sysdeps/sparc/sparc32/soft-fp/q_sqrt.c	2005-11-11 13:30:38.000000000 -0500
@@ -36,3 +36,4 @@
   FP_HANDLE_EXCEPTIONS;
   return c;
 }
+strong_alias (_Q_sqrt, __ieee754_sqrtl);
diff -urN libc.orig/sysdeps/sparc/sparc32/soft-fp/q_uitoq.c libc/sysdeps/sparc/sparc32/soft-fp/q_uitoq.c
--- libc.orig/sysdeps/sparc/sparc32/soft-fp/q_uitoq.c	2001-07-06 00:56:05.000000000 -0400
+++ libc/sysdeps/sparc/sparc32/soft-fp/q_uitoq.c	2005-11-11 13:30:38.000000000 -0500
@@ -1,38 +0,0 @@
-/* Software floating-point emulation.
-   c = (long double)(a)
-   Copyright (C) 1997,1999 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Richard Henderson (rth@cygnus.com) and
-		  Jakub Jelinek (jj@ultra.linux.cz).
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include "soft-fp.h"
-#include "quad.h"
-
-long double _Q_uitoq(const unsigned int a)
-{
-  FP_DECL_EX;
-  FP_DECL_Q(C);
-  long double c;
-  unsigned int b = a;
-
-  FP_FROM_INT_Q(C, b, 32, int);
-  FP_PACK_Q(c, C);
-  FP_CLEAR_EXCEPTIONS;
-  FP_HANDLE_EXCEPTIONS;
-  return c;
-}
diff -urN libc.orig/sysdeps/sparc/sparc32/soft-fp/q_ulltoq.c libc/sysdeps/sparc/sparc32/soft-fp/q_ulltoq.c
--- libc.orig/sysdeps/sparc/sparc32/soft-fp/q_ulltoq.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/sparc/sparc32/soft-fp/q_ulltoq.c	2005-11-11 13:30:38.000000000 -0500
@@ -0,0 +1,38 @@
+/* Software floating-point emulation.
+   Return (long double)(a)
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Richard Henderson (rth@cygnus.com) and
+		  Jakub Jelinek (jj@ultra.linux.cz).
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include "soft-fp.h"
+#include "quad.h"
+
+long double _Q_ulltoq(const unsigned long long a)
+{
+  FP_DECL_EX;
+  FP_DECL_Q(C);
+  long double c;
+  unsigned long long b = a;
+
+  FP_FROM_INT_Q(C, b, 64, long long);
+  FP_PACK_Q(c, C);
+  FP_CLEAR_EXCEPTIONS;
+  FP_HANDLE_EXCEPTIONS;
+  return c;
+}
diff -urN libc.orig/sysdeps/sparc/sparc32/soft-fp/q_utoq.c libc/sysdeps/sparc/sparc32/soft-fp/q_utoq.c
--- libc.orig/sysdeps/sparc/sparc32/soft-fp/q_utoq.c	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/sparc/sparc32/soft-fp/q_utoq.c	2005-11-11 13:30:38.000000000 -0500
@@ -0,0 +1,38 @@
+/* Software floating-point emulation.
+   c = (long double)(a)
+   Copyright (C) 1997,1999 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Richard Henderson (rth@cygnus.com) and
+		  Jakub Jelinek (jj@ultra.linux.cz).
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include "soft-fp.h"
+#include "quad.h"
+
+long double _Q_utoq(const unsigned int a)
+{
+  FP_DECL_EX;
+  FP_DECL_Q(C);
+  long double c;
+  unsigned int b = a;
+
+  FP_FROM_INT_Q(C, b, 32, int);
+  FP_PACK_Q(c, C);
+  FP_CLEAR_EXCEPTIONS;
+  FP_HANDLE_EXCEPTIONS;
+  return c;
+}
diff -urN libc.orig/sysdeps/sparc/sparc32/soft-fp/q_uxtoq.c libc/sysdeps/sparc/sparc32/soft-fp/q_uxtoq.c
--- libc.orig/sysdeps/sparc/sparc32/soft-fp/q_uxtoq.c	2001-07-06 00:56:05.000000000 -0400
+++ libc/sysdeps/sparc/sparc32/soft-fp/q_uxtoq.c	2005-11-11 13:30:38.000000000 -0500
@@ -1,38 +0,0 @@
-/* Software floating-point emulation.
-   Return (long double)(a)
-   Copyright (C) 1997,1999 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Richard Henderson (rth@cygnus.com) and
-		  Jakub Jelinek (jj@ultra.linux.cz).
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include "soft-fp.h"
-#include "quad.h"
-
-long double _Q_uxtoq(const unsigned long long a)
-{
-  FP_DECL_EX;
-  FP_DECL_Q(C);
-  long double c;
-  unsigned long long b = a;
-
-  FP_FROM_INT_Q(C, b, 64, long long);
-  FP_PACK_Q(c, C);
-  FP_CLEAR_EXCEPTIONS;
-  FP_HANDLE_EXCEPTIONS;
-  return c;
-}
diff -urN libc.orig/sysdeps/sparc/sparc32/soft-fp/q_xtoq.c libc/sysdeps/sparc/sparc32/soft-fp/q_xtoq.c
--- libc.orig/sysdeps/sparc/sparc32/soft-fp/q_xtoq.c	2001-07-06 00:56:05.000000000 -0400
+++ libc/sysdeps/sparc/sparc32/soft-fp/q_xtoq.c	2005-11-11 13:30:38.000000000 -0500
@@ -1,38 +0,0 @@
-/* Software floating-point emulation.
-   Return (long double)a
-   Copyright (C) 1997,1999 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Richard Henderson (rth@cygnus.com) and
-		  Jakub Jelinek (jj@ultra.linux.cz).
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include "soft-fp.h"
-#include "quad.h"
-
-long double _Q_xtoq(const long long a)
-{
-  FP_DECL_EX;
-  FP_DECL_Q(C);
-  long double c;
-  long long b = a;
-
-  FP_FROM_INT_Q(C, b, 64, long long);
-  FP_PACK_Q(c, C);
-  FP_CLEAR_EXCEPTIONS;
-  FP_HANDLE_EXCEPTIONS;
-  return c;
-}
diff -urN libc.orig/sysdeps/sparc/sparc32/soft-fp/sfp-machine.h libc/sysdeps/sparc/sparc32/soft-fp/sfp-machine.h
--- libc.orig/sysdeps/sparc/sparc32/soft-fp/sfp-machine.h	2002-10-02 20:21:13.000000000 -0400
+++ libc/sysdeps/sparc/sparc32/soft-fp/sfp-machine.h	2005-11-11 13:30:38.000000000 -0500
@@ -22,6 +22,7 @@
    02111-1307 USA.  */
 
 #include <fpu_control.h>
+#include <stdlib.h>
 
 #define _FP_W_TYPE_SIZE		32
 #define _FP_W_TYPE		unsigned long
@@ -208,14 +209,5 @@
       	" : : "r" (___Q_numbers) : "f30");			\
     }								\
   else								\
-    {								\
-      __asm__ __volatile__("\
-        mov %0, %%o0\n\
-        mov %%o7, %%g1\n\
-        call ___Q_simulate_exceptions\n\
-         mov %%g1, %%o7\
-        " : : "r" (_fex) :					\
-        "g1", "g2", "g3", "g4", "g5", "o0", 			\
-        "o1", "o2", "o3", "o4", "o5", "cc");			\
-    }								\
+    ___Q_simulate_exceptions (_fex);			        \
 } while (0)
diff -urN libc.orig/sysdeps/sparc/sparc32/soft-fp/Versions libc/sysdeps/sparc/sparc32/soft-fp/Versions
--- libc.orig/sysdeps/sparc/sparc32/soft-fp/Versions	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/sparc/sparc32/soft-fp/Versions	2005-11-11 13:30:38.000000000 -0500
@@ -0,0 +1,8 @@
+libc {
+  GLIBC_2.3.4 {
+    _Q_add; _Q_cmp; _Q_cmpe; _Q_div; _Q_dtoq; _Q_feq; _Q_fge; _Q_fgt;
+    _Q_fle; _Q_flt; _Q_fne; _Q_itoq; _Q_mul; _Q_neg; _Q_qtod; _Q_qtoi;
+    _Q_qtos; _Q_qtou; _Q_qtoull; _Q_qtoll; _Q_sqrt; _Q_stoq; _Q_sub;
+    _Q_utoq; _Q_ulltoq; _Q_lltoq;
+  }
+}
diff -urN libc.orig/sysdeps/sparc/sparc64/soft-fp/sfp-machine.h libc/sysdeps/sparc/sparc64/soft-fp/sfp-machine.h
--- libc.orig/sysdeps/sparc/sparc64/soft-fp/sfp-machine.h	2001-07-06 00:56:05.000000000 -0400
+++ libc/sysdeps/sparc/sparc64/soft-fp/sfp-machine.h	2005-11-11 13:30:38.000000000 -0500
@@ -23,6 +23,7 @@
    
 #include <fpu_control.h>
 #include <fenv.h>
+#include <stdlib.h>
 
 #define _FP_W_TYPE_SIZE		64
 #define _FP_W_TYPE		unsigned long
diff -urN libc.orig/sysdeps/unix/sysv/linux/sparc/bits/wordsize.h libc/sysdeps/unix/sysv/linux/sparc/bits/wordsize.h
--- libc.orig/sysdeps/unix/sysv/linux/sparc/bits/wordsize.h	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/unix/sysv/linux/sparc/bits/wordsize.h	2005-11-11 13:30:38.000000000 -0500
@@ -0,0 +1,21 @@
+/* Determine the wordsize from the preprocessor defines.  */
+
+#if defined __arch64__ || defined __sparcv9
+# define __WORDSIZE	64
+#else
+# define __WORDSIZE	32
+#endif
+
+#if !defined __NO_LONG_DOUBLE_MATH && !defined __LONG_DOUBLE_MATH_OPTIONAL
+
+# if __WORDSIZE == 32
+/* Signal that in 32bit ABI we didn't used to have a `long double'.
+   The changes all the `long double' function variants to be redirects
+   to the double functions.  */
+#  define __LONG_DOUBLE_MATH_OPTIONAL   1
+#  ifndef __LONG_DOUBLE_128__
+#   define __NO_LONG_DOUBLE_MATH        1
+#   define __NLDBL_COMPAT		1
+#  endif
+# endif
+#endif
diff -urN libc.orig/sysdeps/unix/sysv/linux/sparc/sparc32/configure libc/sysdeps/unix/sysv/linux/sparc/sparc32/configure
--- libc.orig/sysdeps/unix/sysv/linux/sparc/sparc32/configure	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/unix/sysv/linux/sparc/sparc32/configure	2005-11-11 13:30:38.000000000 -0500
@@ -0,0 +1,9 @@
+ # Local configure fragment for sysdeps/sparc/sparc32.
+
+# Check whether compiler supports -mlong-double-128
+if ${CC-cc} $CFLAGS -mlong-double-128 -S -xc /dev/null -o /dev/null 2>&1
+then
+  :
+else
+  { echo "configure: error: sparc32 glibc requires gcc which supports -mlong-double-128 option" 1>&2; exit 1; }
+fi
diff -urN libc.orig/sysdeps/unix/sysv/linux/sparc/sparc32/configure.in libc/sysdeps/unix/sysv/linux/sparc/sparc32/configure.in
--- libc.orig/sysdeps/unix/sysv/linux/sparc/sparc32/configure.in	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/unix/sysv/linux/sparc/sparc32/configure.in	2005-11-11 13:30:38.000000000 -0500
@@ -0,0 +1,11 @@
+sinclude(./aclocal.m4)dnl Autoconf lossage
+GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
+# Local configure fragment for sysdeps/sparc/sparc32.
+
+# Check whether compiler supports -mlong-double-128
+if ${CC-cc} $CFLAGS -mlong-double-128 -S -xc /dev/null -o /dev/null 2>&1
+then
+  :
+else
+  AC_ERROR(sparc32 glibc requires gcc which supports -mlong-double-128 option)
+fi
diff -urN libc.orig/sysdeps/unix/sysv/linux/sparc/sparc32/Implies libc/sysdeps/unix/sysv/linux/sparc/sparc32/Implies
--- libc.orig/sysdeps/unix/sysv/linux/sparc/sparc32/Implies	1969-12-31 19:00:00.000000000 -0500
+++ libc/sysdeps/unix/sysv/linux/sparc/sparc32/Implies	2005-11-11 13:30:38.000000000 -0500
@@ -0,0 +1,2 @@
+ieee754/ldbl-64-128
+ieee754/ldbl-opt
diff -urN libc.orig/sysdeps/unix/sysv/linux/sparc/sparc32/Makefile libc/sysdeps/unix/sysv/linux/sparc/sparc32/Makefile
--- libc.orig/sysdeps/unix/sysv/linux/sparc/sparc32/Makefile	2005-07-02 18:40:34.000000000 -0400
+++ libc/sysdeps/unix/sysv/linux/sparc/sparc32/Makefile	2005-11-11 13:30:38.000000000 -0500
@@ -1,3 +1,10 @@
+# The Sparc `long double' is a distinct type we support if
+# -mlong-double-128 option is used (or when it becomes a default
+# when -mlong-double-64 is not used).
+long-double-fcts = yes
+long-double-fcts-ver = GLIBC_2_3_4
+sysdep-CFLAGS += -mlong-double-128
+
 asm-CPPFLAGS = -D__ASSEMBLY__
 ASFLAGS-.os += -fPIC
 LD += -melf32_sparc
diff -urN libc.orig/sysdeps/unix/sysv/linux/sparc/sparc32/Versions libc/sysdeps/unix/sysv/linux/sparc/sparc32/Versions
--- libc.orig/sysdeps/unix/sysv/linux/sparc/sparc32/Versions	2003-08-22 14:10:44.000000000 -0400
+++ libc/sysdeps/unix/sysv/linux/sparc/sparc32/Versions	2005-11-11 13:30:38.000000000 -0500
@@ -20,4 +20,68 @@
   GLIBC_2.3.3 {
     posix_fadvise64; posix_fallocate64;
   }
+  GLIBC_2.3.4 {
+    # IEEE quad long double functions (older symver is for
+    # IEEE double long double).
+    ldexpl; copysignl; finitel; frexpl; isinfl; isnanl; modfl;
+    __isinfl; __isnanl; __finitel; __signbitl;
+    scalblnl; scalbnl;
+    qecvt; qfcvt; qgcvt; qecvt_r; qfcvt_r;
+
+    strtold; __strtold_internal; wcstold; __wcstold_internal;
+    __strtold_l; strtold_l; __wcstold_l; wcstold_l;
+
+    strfmon; __strfmon_l; strfmon_l;
+    __nldbl_strfmon; __nldbl___strfmon_l; __nldbl_strfmon_l;
+
+    # *printf* family, using IEEE quad long double
+    __asprintf; asprintf; dprintf; fprintf; fwprintf; _IO_fprintf;
+    _IO_printf; _IO_sprintf; _IO_vfprintf; _IO_vsprintf; obstack_printf;
+    obstack_vprintf; printf; __printf_fp; printf_size; snprintf; sprintf;
+    swprintf; vasprintf; vdprintf; vfprintf; vfwprintf; vprintf; vsnprintf;
+    __vsnprintf; vsprintf; vswprintf; vwprintf; wprintf;
+
+    # *printf* family, using IEEE double as long double
+    # The standard functions are __REDIRECTed to these if -mlong-double-128
+    __nldbl___asprintf; __nldbl_asprintf; __nldbl_dprintf; __nldbl_fprintf;
+    __nldbl_fwprintf; __nldbl__IO_fprintf; __nldbl__IO_printf;
+    __nldbl__IO_sprintf; __nldbl__IO_vfprintf; __nldbl__IO_vsprintf;
+    __nldbl_obstack_printf; __nldbl_obstack_vprintf; __nldbl_printf;
+    __nldbl___printf_fp; __nldbl_printf_size; __nldbl_snprintf;
+    __nldbl_sprintf; __nldbl_swprintf; __nldbl_vasprintf; __nldbl_vdprintf;
+    __nldbl_vfprintf; __nldbl_vfwprintf; __nldbl_vprintf; __nldbl_vsnprintf;
+    __nldbl___vsnprintf; __nldbl_vsprintf; __nldbl_vswprintf;
+    __nldbl_vwprintf; __nldbl_wprintf;
+
+    # *scanf family, using IEEE quad long double
+    _IO_sscanf; _IO_vfscanf; __vfscanf; __vsscanf; fscanf; fwscanf; scanf;
+    sscanf; swscanf; vfscanf; vfwscanf; vscanf; vsscanf; vswscanf; vwscanf;
+    wscanf;
+
+    # *scanf family, using IEEE double as long double
+    __nldbl__IO_sscanf; __nldbl__IO_vfscanf; __nldbl___vfscanf;
+    __nldbl___vsscanf; __nldbl_fscanf; __nldbl_fwscanf; __nldbl_scanf;
+    __nldbl_sscanf; __nldbl_swscanf; __nldbl_vfscanf; __nldbl_vfwscanf;
+    __nldbl_vscanf; __nldbl_vsscanf; __nldbl_vswscanf; __nldbl_vwscanf;
+    __nldbl_wscanf;
+  }
+}
+libm {
+  GLIBC_2.3.4 {
+    # IEEE quad long double functions (older symver is for
+    # IEEE double as long double).
+    cabsl; cargl; cimagl; conjl; creall; cacosl; cacoshl; casinl;
+    catanl; catanhl; ccosl; ccoshl; casinhl; cexpl; clogl; __clog10l;
+    clog10l; cpowl; cprojl; csinl; csinhl; csqrtl; ctanl; ctanhl;
+    fdiml; fmal; fmaxl; fminl; ldexpl; nanl; nextafterl; nexttowardl;
+    significandl; acosl; acoshl; asinl; atan2l; atanhl; coshl; dreml;
+    exp10l; pow10l; exp2l; fmodl; hypotl; j0l; y0l; j1l; y1l; jnl; ynl;
+    lgammal; gammal; lgammal_r; logl; log10l; log2l; powl; remainderl;
+    scalbl; sinhl; sqrtl; tgammal; asinhl; atanl; cbrtl; ceill; copysignl;
+    erfl; erfcl; expm1l; fabsl; finitel; floorl; frexpl; ilogbl;
+    llrintl; llroundl; log1pl; logbl; lrintl; lroundl; modfl;
+    nearbyintl; remquol; rintl; roundl; scalblnl; scalbnl; sinl; cosl;
+    sincosl; tanl; tanhl; truncl; expl; __finitel; __signbitl;
+    nexttowardf; nexttoward; __nldbl_nexttowardf;
+  }
 }
diff -urN libc.orig/wcsmbs/wchar.h libc/wcsmbs/wchar.h
--- libc.orig/wcsmbs/wchar.h	2005-07-15 06:08:27.000000000 -0400
+++ libc/wcsmbs/wchar.h	2005-11-11 13:37:48.743582368 -0500
@@ -395,8 +395,10 @@
 /* Likewise for `float' and `long double' sizes of floating-point numbers.  */
 extern float wcstof (__const wchar_t *__restrict __nptr,
 		     wchar_t **__restrict __endptr) __THROW;
-extern long double wcstold (__const wchar_t *__restrict __nptr,
-			    wchar_t **__restrict __endptr) __THROW;
+extern long double __NLDBL_REDIR2 (wcstold,
+				   (__const wchar_t *__restrict __nptr,
+				    wchar_t **__restrict __endptr) __THROW,
+				   wcstod);
 #endif /* C99 */
 
 
@@ -489,9 +491,11 @@
 		       wchar_t **__restrict __endptr, __locale_t __loc)
      __THROW;
 
-extern long double wcstold_l (__const wchar_t *__restrict __nptr,
-			      wchar_t **__restrict __endptr,
-			      __locale_t __loc) __THROW;
+extern long double __NLDBL_REDIR2 (wcstold_l,
+				   (__const wchar_t *__restrict __nptr,
+				    wchar_t **__restrict __endptr,
+				    __locale_t __loc) __THROW,
+				   wcstod_l);
 #endif /* GNU */
 
 
@@ -503,9 +507,11 @@
 extern float __wcstof_internal (__const wchar_t *__restrict __nptr,
 				wchar_t **__restrict __endptr, int __group)
      __THROW;
-extern long double __wcstold_internal (__const wchar_t *__restrict __nptr,
-				       wchar_t **__restrict __endptr,
-				       int __group) __THROW;
+extern long double __NLDBL_REDIR2 (__wcstold_internal,
+				   (__const wchar_t *__restrict __nptr,
+				    wchar_t **__restrict __endptr,
+				    int __group) __THROW,
+				   __wcstod_internal);
 
 #ifndef __wcstol_internal_defined
 extern long int __wcstol_internal (__const wchar_t *__restrict __nptr,
@@ -561,11 +567,12 @@
 __NTH (wcstof (__const wchar_t *__restrict __nptr,
 	       wchar_t **__restrict __endptr))
 { return __wcstof_internal (__nptr, __endptr, 0); }
+#  ifndef __NLDBL_COMPAT
 extern __inline long double
 __NTH (wcstold (__const wchar_t *__restrict __nptr,
 		wchar_t **__restrict __endptr))
 { return __wcstold_internal (__nptr, __endptr, 0); }
-
+#  endif
 
 __extension__
 extern __inline long long int
@@ -605,59 +612,64 @@
 
    This function is a possible cancellation point and therefore not
    marked with __THROW.  */
-extern int fwprintf (__FILE *__restrict __stream,
-		     __const wchar_t *__restrict __format, ...)
+extern int __NLDBL_REDIR (fwprintf,
+			  (__FILE *__restrict __stream,
+			   __const wchar_t *__restrict __format, ...))
      /* __attribute__ ((__format__ (__wprintf__, 2, 3))) */;
 /* Write formatted output to stdout.
 
    This function is a possible cancellation point and therefore not
    marked with __THROW.  */
-extern int wprintf (__const wchar_t *__restrict __format, ...)
+extern int __NLDBL_REDIR (wprintf,
+			  (__const wchar_t *__restrict __format, ...))
      /* __attribute__ ((__format__ (__wprintf__, 1, 2))) */;
 /* Write formatted output of at most N characters to S.  */
-extern int swprintf (wchar_t *__restrict __s, size_t __n,
-		     __const wchar_t *__restrict __format, ...)
+extern int __NLDBL_REDIR (swprintf,
+			  (wchar_t *__restrict __s, size_t __n,
+			   __const wchar_t *__restrict __format, ...))
      __THROW /* __attribute__ ((__format__ (__wprintf__, 3, 4))) */;
 
 /* Write formatted output to S from argument list ARG.
 
    This function is a possible cancellation point and therefore not
    marked with __THROW.  */
-extern int vfwprintf (__FILE *__restrict __s,
-		      __const wchar_t *__restrict __format,
-		      __gnuc_va_list __arg)
+extern int __NLDBL_REDIR (vfwprintf, (__FILE *__restrict __s,
+				      __const wchar_t *__restrict __format,
+				      __gnuc_va_list __arg))
      /* __attribute__ ((__format__ (__wprintf__, 2, 0))) */;
 /* Write formatted output to stdout from argument list ARG.
 
    This function is a possible cancellation point and therefore not
    marked with __THROW.  */
-extern int vwprintf (__const wchar_t *__restrict __format,
-		     __gnuc_va_list __arg)
+extern int __NLDBL_REDIR (vwprintf, (__const wchar_t *__restrict __format,
+				     __gnuc_va_list __arg))
      /* __attribute__ ((__format__ (__wprintf__, 1, 0))) */;
 /* Write formatted output of at most N character to S from argument
    list ARG.  */
-extern int vswprintf (wchar_t *__restrict __s, size_t __n,
-		      __const wchar_t *__restrict __format,
-		      __gnuc_va_list __arg)
+extern int __NLDBL_REDIR (vswprintf, (wchar_t *__restrict __s, size_t __n,
+				      __const wchar_t *__restrict __format,
+				      __gnuc_va_list __arg))
      __THROW /* __attribute__ ((__format__ (__wprintf__, 3, 0))) */;
 
-
 /* Read formatted input from STREAM.
 
    This function is a possible cancellation point and therefore not
    marked with __THROW.  */
-extern int fwscanf (__FILE *__restrict __stream,
-		    __const wchar_t *__restrict __format, ...)
+extern int __NLDBL_REDIR (fwscanf,
+			  (__FILE *__restrict __stream,
+			   __const wchar_t *__restrict __format, ...))
      /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */;
 /* Read formatted input from stdin.
 
    This function is a possible cancellation point and therefore not
    marked with __THROW.  */
-extern int wscanf (__const wchar_t *__restrict __format, ...)
+extern int __NLDBL_REDIR (wscanf,
+			  (__const wchar_t *__restrict __format, ...))
      /* __attribute__ ((__format__ (__wscanf__, 1, 2))) */;
 /* Read formatted input from S.  */
-extern int swscanf (__const wchar_t *__restrict __s,
-		    __const wchar_t *__restrict __format, ...)
+extern int __NLDBL_REDIR (swscanf,
+			  (__const wchar_t *__restrict __s,
+			   __const wchar_t *__restrict __format, ...))
      __THROW /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */;
 
 __END_NAMESPACE_C99
@@ -670,21 +682,21 @@
 
    This function is a possible cancellation point and therefore not
    marked with __THROW.  */
-extern int vfwscanf (__FILE *__restrict __s,
-		     __const wchar_t *__restrict __format,
-		     __gnuc_va_list __arg)
+extern int __NLDBL_REDIR (vfwscanf, (__FILE *__restrict __s,
+				     __const wchar_t *__restrict __format,
+				     __gnuc_va_list __arg))
      /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */;
 /* Read formatted input from stdin into argument list ARG.
 
    This function is a possible cancellation point and therefore not
    marked with __THROW.  */
-extern int vwscanf (__const wchar_t *__restrict __format,
-		    __gnuc_va_list __arg)
+extern int __NLDBL_REDIR (vwscanf, (__const wchar_t *__restrict __format,
+				    __gnuc_va_list __arg))
      /* __attribute__ ((__format__ (__wscanf__, 1, 0))) */;
 /* Read formatted input from S into argument list ARG.  */
-extern int vswscanf (__const wchar_t *__restrict __s,
-		     __const wchar_t *__restrict __format,
-		     __gnuc_va_list __arg)
+extern int __NLDBL_REDIR (vswscanf, (__const wchar_t *__restrict __s,
+				     __const wchar_t *__restrict __format,
+				     __gnuc_va_list __arg))
      __THROW /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */;
 
 __END_NAMESPACE_C99


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]