diff --git a/src/cdefs-compat.h b/src/cdefs-compat.h index 2b0bf87..2b20736 100644 --- a/src/cdefs-compat.h +++ b/src/cdefs-compat.h @@ -12,37 +12,49 @@ #endif /* !defined(__BEGIN_DECLS) */ #ifdef __GNUC__ -#ifndef __strong_reference -#ifdef __APPLE__ -#define __strong_reference(sym,aliassym) __weak_reference(sym,aliassym) +#if defined(__strong_alias) && defined(__NetBSD__) +#define openlibm_strong_reference(sym,alias) __strong_alias(alias,sym) +#elif defined(__strong_reference) +#define openlibm_strong_reference(sym,alias) __strong_reference(sym,alias) #else -#define __strong_reference(sym,aliassym) \ +#ifdef __APPLE__ +#define openlibm_strong_reference(sym,aliassym) openlibm_weak_reference(sym,aliassym) +#else +#define openlibm_strong_reference(sym,aliassym) \ OLM_DLLEXPORT extern __typeof (sym) aliassym __attribute__ ((__alias__ (#sym))); #endif /* __APPLE__ */ #endif /* __strong_reference */ #ifdef __wasm__ -# define __weak_reference(sym,alias) __strong_reference(sym,alias) +# define openlibm_weak_reference(sym,alias) openlibm_strong_reference(sym,alias) #endif -#ifndef __weak_reference +#if defined(__weak_alias) && defined(__NetBSD__) +#define openlibm_weak_reference(sym,alias) __weak_alias(alias,sym) +#elif defined(__weak_reference) +#define openlibm_weak_reference(sym,alias) __weak_reference(sym,alias) +#else #ifdef __ELF__ #ifdef __STDC__ -#define __weak_reference(sym,alias) \ +#define openlibm_weak_reference(sym,alias) \ __asm__(".weak " #alias); \ __asm__(".equ " #alias ", " #sym) -#ifndef __warn_references -#define __warn_references(sym,msg) \ +#ifdef __warn_references +#define openlibm_warn_references(sym,msg) __warn_references(sym,msg) +#else +#define openlibm_warn_references(sym,msg) \ __asm__(".section .gnu.warning." #sym); \ __asm__(".asciz \"" msg "\""); \ __asm__(".previous") #endif /* __warn_references */ #else -#define __weak_reference(sym,alias) \ +#define openlibm_weak_reference(sym,alias) \ __asm__(".weak alias"); \ __asm__(".equ alias, sym") -#ifndef __warn_references -#define __warn_references(sym,msg) \ +#ifdef __warn_references +#define openlibm_warn_references(sym,msg) __warn_references(sym,msg) +#else +#define openlibm_warn_references(sym,msg) \ __asm__(".section .gnu.warning.sym"); \ __asm__(".asciz \"msg\""); \ __asm__(".previous") @@ -50,30 +62,34 @@ #endif /* __STDC__ */ #elif defined(__clang__) /* CLANG */ #ifdef __STDC__ -#define __weak_reference(sym,alias) \ +#define openlibm_weak_reference(sym,alias) \ __asm__(".weak_reference " #alias); \ __asm__(".set " #alias ", " #sym) #else -#define __weak_reference(sym,alias) \ +#define openlibm_weak_reference(sym,alias) \ __asm__(".weak_reference alias");\ __asm__(".set alias, sym") #endif #else /* !__ELF__ */ #ifdef __STDC__ -#define __weak_reference(sym,alias) \ +#define openlibm_weak_reference(sym,alias) \ __asm__(".stabs \"_" #alias "\",11,0,0,0"); \ __asm__(".stabs \"_" #sym "\",1,0,0,0") -#ifndef __warn_references -#define __warn_references(sym,msg) \ +#ifdef __warn_references +#define openlibm_warn_references(sym,msg) __warn_references(sym,msg) +#else +#define openlibm_warn_references(sym,msg) \ __asm__(".stabs \"" msg "\",30,0,0,0"); \ __asm__(".stabs \"_" #sym "\",1,0,0,0") #endif /* __warn_references */ #else -#define __weak_reference(sym,alias) \ +#define openlibm_weak_reference(sym,alias) \ __asm__(".stabs \"_/**/alias\",11,0,0,0"); \ __asm__(".stabs \"_/**/sym\",1,0,0,0") -#ifndef __warn_references -#define __warn_references(sym,msg) \ +#ifdef __warn_references +#define openlibm_warn_references(sym,msg) __warn_references(sym,msg) +#else +#define openlibm_warn_references(sym,msg) \ __asm__(".stabs msg,30,0,0,0"); \ __asm__(".stabs \"_/**/sym\",1,0,0,0") #endif /* __warn_references */ diff --git a/src/e_acos.c b/src/e_acos.c index b7a74b9..7295ad6 100644 --- a/src/e_acos.c +++ b/src/e_acos.c @@ -107,5 +107,5 @@ __ieee754_acos(double x) } #if LDBL_MANT_DIG == 53 -__weak_reference(acos, acosl); +openlibm_weak_reference(acos, acosl); #endif diff --git a/src/e_asin.c b/src/e_asin.c index 2ec1764..e287bf1 100644 --- a/src/e_asin.c +++ b/src/e_asin.c @@ -113,5 +113,5 @@ __ieee754_asin(double x) } #if LDBL_MANT_DIG == 53 -__weak_reference(asin, asinl); +openlibm_weak_reference(asin, asinl); #endif diff --git a/src/e_atan2.c b/src/e_atan2.c index 70384dc..9b021b9 100644 --- a/src/e_atan2.c +++ b/src/e_atan2.c @@ -125,5 +125,5 @@ __ieee754_atan2(double y, double x) } #if LDBL_MANT_DIG == 53 -__weak_reference(atan2, atan2l); +openlibm_weak_reference(atan2, atan2l); #endif diff --git a/src/e_hypot.c b/src/e_hypot.c index 23fdc95..3f4c1d1 100644 --- a/src/e_hypot.c +++ b/src/e_hypot.c @@ -127,5 +127,5 @@ __ieee754_hypot(double x, double y) } #if LDBL_MANT_DIG == 53 -__weak_reference(hypot, hypotl); +openlibm_weak_reference(hypot, hypotl); #endif diff --git a/src/e_remainder.c b/src/e_remainder.c index bc9d9bf..a72631c 100644 --- a/src/e_remainder.c +++ b/src/e_remainder.c @@ -75,5 +75,5 @@ __ieee754_remainder(double x, double p) } #if LDBL_MANT_DIG == 53 -__weak_reference(remainder, remainderl); +openlibm_weak_reference(remainder, remainderl); #endif diff --git a/src/e_sqrt.c b/src/e_sqrt.c index 01c7104..2eb4a1a 100644 --- a/src/e_sqrt.c +++ b/src/e_sqrt.c @@ -189,7 +189,7 @@ __ieee754_sqrt(double x) } #if (LDBL_MANT_DIG == 53) -__weak_reference(sqrt, sqrtl); +openlibm_weak_reference(sqrt, sqrtl); #endif /* diff --git a/src/s_atan.c b/src/s_atan.c index f87e486..23a2949 100644 --- a/src/s_atan.c +++ b/src/s_atan.c @@ -120,5 +120,5 @@ atan(double x) } #if LDBL_MANT_DIG == 53 -__weak_reference(atan, atanl); +openlibm_weak_reference(atan, atanl); #endif diff --git a/src/s_cbrt.c b/src/s_cbrt.c index dd3c141..b6316ad 100644 --- a/src/s_cbrt.c +++ b/src/s_cbrt.c @@ -114,5 +114,5 @@ cbrt(double x) } #if (LDBL_MANT_DIG == 53) -__weak_reference(cbrt, cbrtl); +openlibm_weak_reference(cbrt, cbrtl); #endif diff --git a/src/s_ceil.c b/src/s_ceil.c index bdac17f..9c70a97 100644 --- a/src/s_ceil.c +++ b/src/s_ceil.c @@ -73,5 +73,5 @@ ceil(double x) } #if LDBL_MANT_DIG == 53 -__weak_reference(ceil, ceill); +openlibm_weak_reference(ceil, ceill); #endif diff --git a/src/s_cos.c b/src/s_cos.c index ea84163..9896bd8 100644 --- a/src/s_cos.c +++ b/src/s_cos.c @@ -85,5 +85,5 @@ cos(double x) } #if (LDBL_MANT_DIG == 53) -__weak_reference(cos, cosl); +openlibm_weak_reference(cos, cosl); #endif diff --git a/src/s_cproj.c b/src/s_cproj.c index 89dfc55..b9faa24 100644 --- a/src/s_cproj.c +++ b/src/s_cproj.c @@ -43,5 +43,5 @@ cproj(double complex z) } #if LDBL_MANT_DIG == 53 -__weak_reference(cproj, cprojl); +openlibm_weak_reference(cproj, cprojl); #endif diff --git a/src/s_csqrt.c b/src/s_csqrt.c index 105592f..9cf4255 100644 --- a/src/s_csqrt.c +++ b/src/s_csqrt.c @@ -110,5 +110,5 @@ csqrt(double complex z) } #if LDBL_MANT_DIG == 53 -__weak_reference(csqrt, csqrtl); +openlibm_weak_reference(csqrt, csqrtl); #endif diff --git a/src/s_exp2.c b/src/s_exp2.c index e5faf7f..d643dbb 100644 --- a/src/s_exp2.c +++ b/src/s_exp2.c @@ -392,5 +392,5 @@ exp2(double x) } #if (LDBL_MANT_DIG == 53) -__weak_reference(exp2, exp2l); +openlibm_weak_reference(exp2, exp2l); #endif diff --git a/src/s_floor.c b/src/s_floor.c index 1d67a21..4a44bd5 100644 --- a/src/s_floor.c +++ b/src/s_floor.c @@ -74,5 +74,5 @@ floor(double x) } #if LDBL_MANT_DIG == 53 -__weak_reference(floor, floorl); +openlibm_weak_reference(floor, floorl); #endif diff --git a/src/s_fma.c b/src/s_fma.c index 798e426..63e529e 100644 --- a/src/s_fma.c +++ b/src/s_fma.c @@ -280,5 +280,5 @@ fma(double x, double y, double z) } #if (LDBL_MANT_DIG == 53) -__weak_reference(fma, fmal); +openlibm_weak_reference(fma, fmal); #endif diff --git a/src/s_frexp.c b/src/s_frexp.c index 46367a4..0385acf 100644 --- a/src/s_frexp.c +++ b/src/s_frexp.c @@ -52,5 +52,5 @@ frexp(double x, int *eptr) } #if (LDBL_MANT_DIG == 53) -__weak_reference(frexp, frexpl); +openlibm_weak_reference(frexp, frexpl); #endif diff --git a/src/s_isinf.c b/src/s_isinf.c index a9bd858..02eaff3 100644 --- a/src/s_isinf.c +++ b/src/s_isinf.c @@ -63,4 +63,4 @@ __isinfl(long double e) } #endif -__weak_reference(__isinff, isinff); +openlibm_weak_reference(__isinff, isinff); diff --git a/src/s_isnan.c b/src/s_isnan.c index e66bb9a..b9066aa 100644 --- a/src/s_isnan.c +++ b/src/s_isnan.c @@ -64,4 +64,4 @@ __isnanl(long double e) } #endif -__weak_reference(__isnanf, isnanf); +openlibm_weak_reference(__isnanf, isnanf); diff --git a/src/s_logb.c b/src/s_logb.c index 6395dd6..116b696 100644 --- a/src/s_logb.c +++ b/src/s_logb.c @@ -45,5 +45,5 @@ logb(double x) } #if (LDBL_MANT_DIG == 53) -__weak_reference(logb, logbl); +openlibm_weak_reference(logb, logbl); #endif diff --git a/src/s_nan.c b/src/s_nan.c index 3539a82..dd1c5af 100644 --- a/src/s_nan.c +++ b/src/s_nan.c @@ -120,5 +120,5 @@ nanf(const char *s) } #if (LDBL_MANT_DIG == 53) -__weak_reference(nan, nanl); +openlibm_weak_reference(nan, nanl); #endif diff --git a/src/s_nextafter.c b/src/s_nextafter.c index 2fbf2ed..8b2ea05 100644 --- a/src/s_nextafter.c +++ b/src/s_nextafter.c @@ -77,7 +77,7 @@ nextafter(double x, double y) } #if (LDBL_MANT_DIG == 53) -__weak_reference(nextafter, nexttoward); -__weak_reference(nextafter, nexttowardl); -__weak_reference(nextafter, nextafterl); +openlibm_weak_reference(nextafter, nexttoward); +openlibm_weak_reference(nextafter, nexttowardl); +openlibm_weak_reference(nextafter, nextafterl); #endif diff --git a/src/s_nextafterl.c b/src/s_nextafterl.c index d00cd65..bb73141 100644 --- a/src/s_nextafterl.c +++ b/src/s_nextafterl.c @@ -77,4 +77,4 @@ nextafterl(long double x, long double y) return ux.e; } -__strong_reference(nextafterl, nexttowardl); +openlibm_strong_reference(nextafterl, nexttowardl); diff --git a/src/s_remquo.c b/src/s_remquo.c index 13375c3..5c566c7 100644 --- a/src/s_remquo.c +++ b/src/s_remquo.c @@ -154,5 +154,5 @@ fixup: } #if LDBL_MANT_DIG == 53 -__weak_reference(remquo, remquol); +openlibm_weak_reference(remquo, remquol); #endif diff --git a/src/s_rint.c b/src/s_rint.c index f2d8c0e..f81e692 100644 --- a/src/s_rint.c +++ b/src/s_rint.c @@ -88,5 +88,5 @@ rint(double x) } #if (LDBL_MANT_DIG == 53) -__weak_reference(rint, rintl); +openlibm_weak_reference(rint, rintl); #endif diff --git a/src/s_scalbn.c b/src/s_scalbn.c index 4ab59ca..dc3a0cf 100644 --- a/src/s_scalbn.c +++ b/src/s_scalbn.c @@ -59,8 +59,8 @@ scalbn (double x, int n) } #if (LDBL_MANT_DIG == 53) -__weak_reference(scalbn, ldexpl); -__weak_reference(scalbn, scalbnl); +openlibm_weak_reference(scalbn, ldexpl); +openlibm_weak_reference(scalbn, scalbnl); #endif -__strong_reference(scalbn, ldexp); +openlibm_strong_reference(scalbn, ldexp); diff --git a/src/s_scalbnf.c b/src/s_scalbnf.c index 3e8c471..930ab8f 100644 --- a/src/s_scalbnf.c +++ b/src/s_scalbnf.c @@ -54,4 +54,4 @@ scalbnf (float x, int n) return x*twom25; } -__strong_reference(scalbnf, ldexpf); +openlibm_strong_reference(scalbnf, ldexpf); diff --git a/src/s_scalbnl.c b/src/s_scalbnl.c index d41cd02..7732944 100644 --- a/src/s_scalbnl.c +++ b/src/s_scalbnl.c @@ -67,4 +67,4 @@ scalbnl (long double x, int n) return u.e*0x1p-128; } -__strong_reference(scalbnl, ldexpl); +openlibm_strong_reference(scalbnl, ldexpl); diff --git a/src/s_sin.c b/src/s_sin.c index 3eb0c4a..cc0a5c6 100644 --- a/src/s_sin.c +++ b/src/s_sin.c @@ -85,5 +85,5 @@ sin(double x) } #if (LDBL_MANT_DIG == 53) -__weak_reference(sin, sinl); +openlibm_weak_reference(sin, sinl); #endif diff --git a/src/s_sincos.c b/src/s_sincos.c index 229d967..44a4a24 100644 --- a/src/s_sincos.c +++ b/src/s_sincos.c @@ -146,5 +146,5 @@ sincos(double x, double * s, double * c) } #if (LDBL_MANT_DIG == 53) -__weak_reference(sincos, sincosl); +openlibm_weak_reference(sincos, sincosl); #endif diff --git a/src/s_tan.c b/src/s_tan.c index 07f2244..2b234a2 100644 --- a/src/s_tan.c +++ b/src/s_tan.c @@ -79,5 +79,5 @@ tan(double x) } #if (LDBL_MANT_DIG == 53) -__weak_reference(tan, tanl); +openlibm_weak_reference(tan, tanl); #endif diff --git a/src/s_trunc.c b/src/s_trunc.c index b01bfef..c460cc9 100644 --- a/src/s_trunc.c +++ b/src/s_trunc.c @@ -63,5 +63,5 @@ trunc(double x) } #if LDBL_MANT_DIG == 53 -__weak_reference(trunc, truncl); +openlibm_weak_reference(trunc, truncl); #endif diff --git a/src/w_cabs.c b/src/w_cabs.c index 6b53a60..6dc9bde 100644 --- a/src/w_cabs.c +++ b/src/w_cabs.c @@ -21,5 +21,5 @@ cabs(double complex z) } #if LDBL_MANT_DIG == 53 -__weak_reference(cabs, cabsl); +openlibm_weak_reference(cabs, cabsl); #endif