Menu

#259 remove some rarely used math functions from the uClibc build

closed
nobody
5
2008-11-23
2008-11-15
No

This patch removes some rare math functions from a Linux uClibc build. The
system library uClibc doesn't have those math functions, and we'd get a
link error if we used them. A better fix would detect the presence of these
math functions is ./configure.

Index: umath.c

--- umath.c (revision 5)
+++ umath.c (working copy)
@@ -373,12 +373,29 @@
return result;
}

+#ifdef __UCLIBC__ /* defined if gcc complies for the Linux uclibc target */
+# undef HAVE_ALL_MATH
+#else
+# define HAVE_ALL_MATH 1
+#endif
+
double m_sin(double n) { return sin(n); }
double m_cos(double n) { return cos(n); }
double m_tan(double n) { return tan(n); }
double m_exp(double n) { return exp(n); }
double m_sqrt(double n) { return sqrt(n); }
+#if HAVE_ALL_MATH
double m_cbrt(double n) { return cbrt(n); }
+double m_asinh(double n) { return asinh(n); }
+double m_acosh(double n) { return acosh(n); }
+double m_atanh(double n) { return atanh(n); }
+double m_erf(double n) { return erf(n); }
+double m_erfc(double n) { return erfc(n); }
+double m_j0(double n) { return j0(n); }
+double m_j1(double n) { return j1(n); }
+double m_y0(double n) { return y0(n); }
+double m_y1(double n) { return y1(n); }
+#endif
double m_log(double n) { return log(n); }
double m_log10(double n) { return log10(n); }
double m_asin(double n) { return asin(n); }
@@ -387,19 +404,10 @@
double m_sinh(double n) { return sinh(n); }
double m_cosh(double n) { return cosh(n); }
double m_tanh(double n) { return tanh(n); }
-double m_asinh(double n) { return asinh(n); }
-double m_acosh(double n) { return acosh(n); }
-double m_atanh(double n) { return atanh(n); }
double m_int(double n) { return (int)(n); }
double m_floor(double n) { return floor(n); }
double m_ceil(double n) { return ceil(n); }
double m_fabs(double n) { return fabs(n); }
-double m_erf(double n) { return erf(n); }
-double m_erfc(double n) { return erfc(n); }
-double m_j0(double n) { return j0(n); }
-double m_j1(double n) { return j1(n); }
-double m_y0(double n) { return y0(n); }
-double m_y1(double n) { return y1(n); }

double calc(BW *bw, unsigned char *s)
{
@@ -414,7 +422,18 @@
v = get(USTR "tan"); v->func = m_tan;
v = get(USTR "exp"); v->func = m_exp;
v = get(USTR "sqrt"); v->func = m_sqrt;
+#if HAVE_ALL_MATH
v = get(USTR "cbrt"); v->func = m_cbrt;
+ v = get(USTR "asinh"); v->func = m_asinh;
+ v = get(USTR "acosh"); v->func = m_acosh;
+ v = get(USTR "atanh"); v->func = m_atanh;
+ v = get(USTR "erf"); v->func = m_erf;
+ v = get(USTR "erfc"); v->func = m_erfc;
+ v = get(USTR "j0"); v->func = m_j0;
+ v = get(USTR "j1"); v->func = m_j1;
+ v = get(USTR "y0"); v->func = m_y0;
+ v = get(USTR "y1"); v->func = m_y1;
+#endif
v = get(USTR "ln"); v->func = m_log;
v = get(USTR "log"); v->func = m_log10;
v = get(USTR "asin"); v->func = m_asin;
@@ -425,19 +444,10 @@
v = get(USTR "sinh"); v->func = m_sinh;
v = get(USTR "cosh"); v->func = m_cosh;
v = get(USTR "tanh"); v->func = m_tanh;
- v = get(USTR "asinh"); v->func = m_asinh;
- v = get(USTR "acosh"); v->func = m_acosh;
- v = get(USTR "atanh"); v->func = m_atanh;
v = get(USTR "int"); v->func = m_int;
v = get(USTR "floor"); v->func = m_floor;
v = get(USTR "ceil"); v->func = m_ceil;
v = get(USTR "abs"); v->func = m_fabs;
- v = get(USTR "erf"); v->func = m_erf;
- v = get(USTR "erfc"); v->func = m_erfc;
- v = get(USTR "j0"); v->func = m_j0;
- v = get(USTR "j1"); v->func = m_j1;
- v = get(USTR "y0"); v->func = m_y0;
- v = get(USTR "y1"); v->func = m_y1;
}

v = get(USTR "top");

Discussion

  • Joe Allen

    Joe Allen - 2008-11-23

    This is now fixed in CVS: we check for a macro or function for each math function.

     
  • Joe Allen

    Joe Allen - 2008-11-23
    • status: open --> closed
     

Log in to post a comment.