From de7db6e927e568c52eaffeb51d7726a094ed0180 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Fri, 16 Mar 2012 21:16:32 -0400 Subject: [PATCH] fix namespace issues for lgamma, etc. standard functions cannot depend on nonstandard symbols --- src/internal/libm.h | 2 ++ src/math/jnf.c | 1 + src/math/lgamma.c | 5 +++-- src/math/lgamma_r.c | 4 +++- src/math/lgammaf.c | 5 +++-- src/math/lgammaf_r.c | 4 +++- src/math/lgammal.c | 18 ++++++++++-------- 7 files changed, 25 insertions(+), 14 deletions(-) diff --git a/src/internal/libm.h b/src/internal/libm.h index 021c4e2a..2c2191f6 100644 --- a/src/internal/libm.h +++ b/src/internal/libm.h @@ -20,6 +20,8 @@ #include "longdbl.h" +#include "libc.h" + union fshape { float value; uint32_t bits; diff --git a/src/math/jnf.c b/src/math/jnf.c index 648db32b..b0b36e6b 100644 --- a/src/math/jnf.c +++ b/src/math/jnf.c @@ -13,6 +13,7 @@ * ==================================================== */ +#define _GNU_SOURCE #include "libm.h" static const float diff --git a/src/math/lgamma.c b/src/math/lgamma.c index 9af7eee4..17b5aff0 100644 --- a/src/math/lgamma.c +++ b/src/math/lgamma.c @@ -1,9 +1,10 @@ -#define _GNU_SOURCE #include "libm.h" +double __lgamma_r(double, int *); + double lgamma(double x) { - return lgamma_r(x, &signgam); + return __lgamma_r(x, &signgam); } // FIXME diff --git a/src/math/lgamma_r.c b/src/math/lgamma_r.c index 6baa0e52..a8ef1956 100644 --- a/src/math/lgamma_r.c +++ b/src/math/lgamma_r.c @@ -199,7 +199,7 @@ static double sin_pi(double x) } -double lgamma_r(double x, int *signgamp) +double __lgamma_r(double x, int *signgamp) { double t,y,z,nadj,p,p1,p2,p3,q,r,w; int32_t hx; @@ -313,3 +313,5 @@ double lgamma_r(double x, int *signgamp) r = nadj - r; return r; } + +weak_alias(__lgamma_r, lgamma_r); diff --git a/src/math/lgammaf.c b/src/math/lgammaf.c index aed98ba4..93253534 100644 --- a/src/math/lgammaf.c +++ b/src/math/lgammaf.c @@ -1,9 +1,10 @@ -#define _GNU_SOURCE #include "libm.h" +float __lgammaf_r(float, int *); + float lgammaf(float x) { - return lgamma_r(x, &signgam); + return __lgammaf_r(x, &signgam); } // FIXME diff --git a/src/math/lgammaf_r.c b/src/math/lgammaf_r.c index c6280f5b..f1adcf69 100644 --- a/src/math/lgammaf_r.c +++ b/src/math/lgammaf_r.c @@ -134,7 +134,7 @@ static float sin_pif(float x) } -float lgammaf_r(float x, int *signgamp) +float __lgammaf_r(float x, int *signgamp) { float t,y,z,nadj,p,p1,p2,p3,q,r,w; int32_t hx; @@ -248,3 +248,5 @@ float lgammaf_r(float x, int *signgamp) r = nadj - r; return r; } + +weak_alias(__lgammaf_r, lgammaf_r); diff --git a/src/math/lgammal.c b/src/math/lgammal.c index a33707ad..5dd851a6 100644 --- a/src/math/lgammal.c +++ b/src/math/lgammal.c @@ -88,15 +88,10 @@ #define _GNU_SOURCE #include "libm.h" -long double lgammal(long double x) -{ - return lgammal_r(x, &signgam); -} - #if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024 -long double lgammal_r(long double x, int *sg) +long double __lgammal_r(long double x, int *sg) { - return lgamma_r(x, sg); + return __lgamma_r(x, sg); } #elif LDBL_MANT_DIG == 64 && LDBL_MAX_EXP == 16384 static const long double @@ -266,7 +261,7 @@ static long double sin_pi(long double x) return -y; } -long double lgammal_r(long double x, int *sg) { +long double __lgammal_r(long double x, int *sg) { long double t, y, z, nadj, p, p1, p2, q, r, w; int i, ix; uint32_t se, i0, i1; @@ -392,3 +387,10 @@ long double lgammal_r(long double x, int *sg) { return r; } #endif + +long double lgammal(long double x) +{ + return __lgammal_r(x, &signgam); +} + +weak_alias(__lgammal_r, lgammal_r); -- 2.25.1