On Tuesday 17 February 2009 00:52, rhabarber1848 wrote: > Denys Vlasenko wrote: > > > Please post include/math.h file from this build environment, > > unabridged (gzip it). And .config too. > > Attached you will find both files, thanks in advance.
Try this patch (or just pull latest svn). I added a new test in test/math/ and it caught a few goofs. (need to add the same test for float functions...) ---------- Forwarded Message ---------- Subject: svn commit: trunk/uClibc: include libc/sysdeps/linux/common/bits l etc... Date: Tuesday 17 February 2009 02:45 From: [email protected] To: [email protected] Author: vda Date: 2009-02-17 01:45:32 +0000 (Tue, 17 Feb 2009) New Revision: 25345 Log: test/math/compile_test.c: "are long double functions even compile/link?" test *: fix everything which prevents above from building Added: trunk/uClibc/test/math/compile_test.c Modified: trunk/uClibc/include/math.h trunk/uClibc/libc/sysdeps/linux/common/bits/mathcalls.h trunk/uClibc/libm/Makefile.in trunk/uClibc/libm/ldouble_wrappers.c trunk/uClibc/test/math/Makefile trunk/uClibc/test/math/libm-test.inc Changeset: Modified: trunk/uClibc/include/math.h =================================================================== --- trunk/uClibc/include/math.h 2009-02-16 14:08:47 UTC (rev 25344) +++ trunk/uClibc/include/math.h 2009-02-17 01:45:32 UTC (rev 25345) @@ -52,38 +52,46 @@ so we can easily declare each function as both `name' and `__name', and can declare the float versions `namef' and `__namef'. */ -#define __MATHCALL(function,suffix, args) \ - __MATHDECL (_Mdouble_,function,suffix, args) -#define __MATHDECL(type, function,suffix, args) \ - __MATHDECL_1(type, function,suffix, args); +#define __MATHDECL_1(type,function,suffix,args) \ + extern type __MATH_PRECNAME(function,suffix) args __THROW -#define __MATHCALLX(function,suffix, args, attrib) \ - __MATHDECLX (_Mdouble_,function,suffix, args, attrib) -#define __MATHDECL_1(type, function,suffix, args) \ - extern type __MATH_PRECNAME(function,suffix) args __THROW -#define __MATHDECLX(type, function,suffix, args, attrib) \ - __MATHDECL_1(type, function,suffix, args) __attribute__ (attrib); \ +#define __MATHDECL(type,function,suffix,args) \ + __MATHDECL_1(type,function,suffix,args); + +#define __MATHCALL(function,suffix,args) \ + __MATHDECL(_Mdouble_,function,suffix,args) + +#define __MATHDECLX(type,function,suffix,args,attrib) \ + __MATHDECL_1(type,function,suffix,args) __attribute__ (attrib); \ __MATHDECLI_MAINVARIANT(function) +#define __MATHCALLX(function,suffix,args,attrib) \ + __MATHDECLX(_Mdouble_,function,suffix,args,attrib) + /* Decls which are also used internally in libm. Only the main variant is used internally, no need to try to avoid relocs for the {l,f} variants. */ -#define __MATHCALLI(function,suffix, args) \ - __MATHDECLI (_Mdouble_,function,suffix, args) -#define __MATHDECLI(type, function,suffix, args) \ - __MATHDECL_1(type, function,suffix, args); \ +#define __MATHDECLI(type,function,suffix,args) \ + __MATHDECL_1(type,function,suffix,args); \ __MATHDECLI_MAINVARIANT(function) + +#define __MATHCALLI(function,suffix,args) \ + __MATHDECLI(_Mdouble_,function,suffix,args) + /* Private helpers for purely macro impls below. Only make __foo{,f,l} visible but not (the macro-only) foo. */ #if defined _LIBC -# define __MATHDECL_PRIV(type, function,suffix, args, attrib) \ - __MATHDECL_1(type, __CONCAT(__,function),suffix, args) __attribute__ (attrib); \ +# define __MATHDECL_PRIV(type,function,suffix,args,attrib) \ + __MATHDECL_1(type,__CONCAT(__,function),suffix,args) __attribute__ (attrib); \ libm_hidden_proto(__MATH_PRECNAME(__##function,suffix)) #else -# define __MATHDECL_PRIV(type, function,suffix, args, attrib) \ - __MATHDECL_1(type, __CONCAT(__,function),suffix, args) __attribute__ (attrib); +# define __MATHDECL_PRIV(type,function,suffix,args,attrib) \ + __MATHDECL_1(type,__CONCAT(__,function),suffix,args) __attribute__ (attrib); #endif + +/* Include the file of declarations, declaring souble versions */ + #if defined _LIBC # define __MATHDECLI_MAINVARIANT(x) libm_hidden_proto(x) #else @@ -124,7 +132,8 @@ # undef _Mdouble_END_NAMESPACE # undef __MATH_PRECNAME -# if (__STDC__ - 0 || __GNUC__ - 0) \ + +# if (defined __STDC__ || defined __GNUC__) \ && (defined __UCLIBC_HAS_LONG_DOUBLE_MATH__ || defined __LDBL_COMPAT) # ifdef __LDBL_COMPAT @@ -147,11 +156,10 @@ instead of `double' and appending l to each function name. */ # undef __MATHDECL_1 -# define __MATHDECL_2(type, function,suffix, args, alias) \ - extern type __REDIRECT_NTH(__MATH_PRECNAME(function,suffix), \ - args, alias) -# define __MATHDECL_1(type, function,suffix, args) \ - __MATHDECL_2(type, function,suffix, args, __CONCAT(function,suffix)) +# define __MATHDECL_2(type,function,suffix,args,alias) \ + extern type __REDIRECT_NTH(__MATH_PRECNAME(function,suffix),args,alias) +# define __MATHDECL_1(type,function,suffix,args) \ + __MATHDECL_2(type,function,suffix,args,__CONCAT(function,suffix)) # endif # ifndef _Mlong_double_ Modified: trunk/uClibc/libc/sysdeps/linux/common/bits/mathcalls.h =================================================================== --- trunk/uClibc/libc/sysdeps/linux/common/bits/mathcalls.h 2009-02-16 14:08:47 UTC (rev 25344) +++ trunk/uClibc/libc/sysdeps/linux/common/bits/mathcalls.h 2009-02-17 01:45:32 UTC (rev 25345) @@ -48,6 +48,13 @@ #endif +/* __MATHCALLX includes libm_hidden_def + * __MATHCALLI includes libm_hidden_def too + * __MATHCALL does not + * __MATHDECL_PRIV includes libm_hidden_def and declared only __foo, not foo + */ + + /* Trigonometric functions. */ _Mdouble_BEGIN_NAMESPACE Modified: trunk/uClibc/libm/Makefile.in =================================================================== --- trunk/uClibc/libm/Makefile.in 2009-02-16 14:08:47 UTC (rev 25344) +++ trunk/uClibc/libm/Makefile.in 2009-02-17 01:45:32 UTC (rev 25345) @@ -85,10 +85,10 @@ ceill.o copysignl.o coshl.o cosl.o erfcl.o erfl.o exp2l.o expl.o \ expm1l.o fabsl.o finitel.o fdiml.o floorl.o fmal.o fmaxl.o fminl.o fmodl.o fpclassifyl.o \ frexpl.o gammal.o hypotl.o ilogbl.o isinfl.o isnanl.o ldexpl.o lgammal.o llrintl.o \ - llroundl.o log10l.o log1pl.o XXXlog2l.o logbl.o logl.o lrintl.o lroundl.o \ + llroundl.o log10l.o log1pl.o log2l.o logbl.o logl.o lrintl.o lroundl.o \ modfl.o nearbyintl.o nextafterl.o XXXnexttowardl.o powl.o remainderl.o \ remquol.o rintl.o roundl.o scalblnl.o scalbnl.o __signbitl.o sinhl.o sinl.o sqrtl.o \ - tanhl.o tanl.o tgammal.o truncl.o + tanhl.o tanl.o tgammal.o truncl.o significandl.o else # This list of math functions was taken from POSIX/IEEE 1003.1b-1993 libm_CSRC := \ Modified: trunk/uClibc/libm/ldouble_wrappers.c =================================================================== --- trunk/uClibc/libm/ldouble_wrappers.c 2009-02-16 14:08:47 UTC (rev 25344) +++ trunk/uClibc/libm/ldouble_wrappers.c 2009-02-17 01:45:32 UTC (rev 25345) @@ -309,6 +309,15 @@ } #endif +#ifdef L_gammal +/* WRAPPER1(gamma) won't work, tries to call __GI_xxx, + * and gamma() hasn't got one. */ +long double gammal(long double x) +{ + return (long double) gamma((double) x); +} +#endif + #ifdef L_hypotl long double hypotl (long double x, long double y) { @@ -348,7 +357,11 @@ #endif #ifdef L_log2l -WRAPPER1(log2) +/* WRAPPER1(log2) won't work */ +long double log2l(long double x) +{ + return (long double) log2((double)x); +} #endif #ifdef L_logbl @@ -438,6 +451,8 @@ } #endif +/* scalb is an obsolete function */ + #ifdef L_sinhl WRAPPER1(sinh) #endif @@ -466,18 +481,30 @@ WRAPPER1(trunc) #endif +#ifdef L_significandl +/* WRAPPER1(significand) won't work, tries to call __GI_xxx, + * and significand() hasn't got one. */ +long double significandl(long double x) +{ + return (long double) significand((double) x); +} +#endif + #ifdef __DO_C99_MATH__ #ifdef L_fpclassifyl -int_WRAPPER1(__fpclassify); +int_WRAPPER1(__fpclassify) +libm_hidden_def(__fpclassifyl) #endif #ifdef L_finitel int_WRAPPER1(__finite) +libm_hidden_def(__finitel) #endif #ifdef L___signbitl int_WRAPPER1(__signbit) +libm_hidden_def(__signbitl) #endif #ifdef L_isnanl Modified: trunk/uClibc/test/math/Makefile =================================================================== --- trunk/uClibc/test/math/Makefile 2009-02-16 14:08:47 UTC (rev 25344) +++ trunk/uClibc/test/math/Makefile 2009-02-17 01:45:32 UTC (rev 25345) @@ -1,9 +1,11 @@ # uClibc math tests # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. +include ../../.config + TESTS := basic-test rint tst-definitions test-fpucw test-float test-ifloat test-double test-idouble ifeq ($(strip $(UCLIBC_HAS_LONG_DOUBLE_MATH)),y) -TESTS += test-ldouble test-ildouble +TESTS += test-ldouble test-ildoubl compile_test else CFLAGS_basic-test := -DNO_LONG_DOUBLE endif Added: trunk/uClibc/test/math/compile_test.c =================================================================== --- trunk/uClibc/test/math/compile_test.c (rev 0) +++ trunk/uClibc/test/math/compile_test.c 2009-02-17 01:45:32 UTC (rev 25345) @@ -0,0 +1,71 @@ +#include <math.h> + +void testl(long double long_double_x, int int_x, long long_x) +{ +__finitel(long_double_x); +__fpclassifyl(long_double_x); +__isinfl(long_double_x); +__isnanl(long_double_x); +__signbitl(long_double_x); +acoshl(long_double_x); +acosl(long_double_x); +asinhl(long_double_x); +asinl(long_double_x); +atan2l(long_double_x, long_double_x); +atanhl(long_double_x); +atanl(long_double_x); +cbrtl(long_double_x); +ceill(long_double_x); +copysignl(long_double_x, long_double_x); +coshl(long_double_x); +cosl(long_double_x); +erfcl(long_double_x); +erfl(long_double_x); +exp2l(long_double_x); +expl(long_double_x); +expm1l(long_double_x); +fabsl(long_double_x); +fdiml(long_double_x, long_double_x); +floorl(long_double_x); +fmal(long_double_x, long_double_x, long_double_x); +fmaxl(long_double_x, long_double_x); +fminl(long_double_x, long_double_x); +fmodl(long_double_x, long_double_x); +frexpl(long_double_x, &int_x); +hypotl(long_double_x, long_double_x); +ilogbl(long_double_x); +ldexpl(long_double_x, int_x); +lgammal(long_double_x); +llrintl(long_double_x); +llroundl(long_double_x); +log10l(long_double_x); +log1pl(long_double_x); +log2l(long_double_x); +logbl(long_double_x); +logl(long_double_x); +lrintl(long_double_x); +lroundl(long_double_x); +modfl(long_double_x, &long_double_x); +nearbyintl(long_double_x); +nextafterl(long_double_x, long_double_x); +nexttowardl(long_double_x, long_double_x); +powl(long_double_x, long_double_x); +remainderl(long_double_x, long_double_x); +remquol(long_double_x, long_double_x, &int_x); +rintl(long_double_x); +roundl(long_double_x); +scalblnl(long_double_x, long_x); +scalbnl(long_double_x, int_x); +sinhl(long_double_x); +sinl(long_double_x); +sqrtl(long_double_x); +tanhl(long_double_x); +tanl(long_double_x); +tgammal(long_double_x); +truncl(long_double_x); +} + +int main(int argc, char **argv) +{ + return (long) &testl; +} Modified: trunk/uClibc/test/math/libm-test.inc =================================================================== --- trunk/uClibc/test/math/libm-test.inc 2009-02-16 14:08:47 UTC (rev 25344) +++ trunk/uClibc/test/math/libm-test.inc 2009-02-17 01:45:32 UTC (rev 25345) @@ -4231,8 +4231,8 @@ static void scalb_test (void) { - START (scalb); +#ifndef TEST_LDOUBLE /* uclibc doesn't have scalbl */ TEST_ff_f (scalb, 2.0, 0.5, nan_value, INVALID_EXCEPTION); TEST_ff_f (scalb, 3.0, -2.5, nan_value, INVALID_EXCEPTION); @@ -4283,7 +4283,7 @@ TEST_ff_f (scalb, 0.8L, 4, 12.8L); TEST_ff_f (scalb, -0.854375L, 5, -27.34L); - +#endif END (scalb); } _______________________________________________ uClibc mailing list [email protected] http://lists.busybox.net/mailman/listinfo/uclibc
