From b050cb53b032a2a025f4b1229d8de10b82cf9a25 Mon Sep 17 00:00:00 2001 From: Adhemerval Zanella Date: Wed, 8 Oct 2025 10:55:19 -0300 Subject: [PATCH] math: Remove the SVID error handling wrapper from y0/j0 Tested on x86_64-linux-gnu and i686-linux-gnu. Reviewed-by: Wilco Dijkstra --- math/Versions | 2 ++ math/w_j0f_compat.c | 11 +++--- sysdeps/ieee754/flt-32/e_j0f.c | 34 ++++++++++++++++--- sysdeps/ieee754/flt-32/w_j0f.c | 1 + sysdeps/mach/hurd/i386/libm.abilist | 2 ++ sysdeps/unix/sysv/linux/aarch64/libm.abilist | 2 ++ sysdeps/unix/sysv/linux/alpha/libm.abilist | 2 ++ sysdeps/unix/sysv/linux/arm/be/libm.abilist | 2 ++ sysdeps/unix/sysv/linux/arm/le/libm.abilist | 2 ++ sysdeps/unix/sysv/linux/hppa/libm.abilist | 2 ++ sysdeps/unix/sysv/linux/i386/libm.abilist | 2 ++ .../sysv/linux/m68k/coldfire/libm.abilist | 2 ++ .../unix/sysv/linux/m68k/m680x0/libm.abilist | 2 ++ .../sysv/linux/microblaze/be/libm.abilist | 2 ++ .../sysv/linux/microblaze/le/libm.abilist | 2 ++ .../unix/sysv/linux/mips/mips32/libm.abilist | 2 ++ .../unix/sysv/linux/mips/mips64/libm.abilist | 2 ++ .../linux/powerpc/powerpc32/fpu/libm.abilist | 2 ++ .../powerpc/powerpc32/nofpu/libm.abilist | 2 ++ .../linux/powerpc/powerpc64/be/libm.abilist | 2 ++ .../linux/powerpc/powerpc64/le/libm.abilist | 2 ++ .../unix/sysv/linux/s390/s390-32/libm.abilist | 2 ++ .../unix/sysv/linux/s390/s390-64/libm.abilist | 2 ++ sysdeps/unix/sysv/linux/sh/be/libm.abilist | 2 ++ sysdeps/unix/sysv/linux/sh/le/libm.abilist | 2 ++ .../sysv/linux/sparc/sparc32/libm.abilist | 2 ++ .../sysv/linux/sparc/sparc64/libm.abilist | 2 ++ .../unix/sysv/linux/x86_64/64/libm.abilist | 2 ++ .../unix/sysv/linux/x86_64/x32/libm.abilist | 2 ++ 29 files changed, 88 insertions(+), 10 deletions(-) create mode 100644 sysdeps/ieee754/flt-32/w_j0f.c diff --git a/math/Versions b/math/Versions index 642bb9242e..c2139bcedd 100644 --- a/math/Versions +++ b/math/Versions @@ -693,6 +693,8 @@ libm { asinf; atanhf; coshf; + j0f; log10f; + y0f; } } diff --git a/math/w_j0f_compat.c b/math/w_j0f_compat.c index d1e173f7c7..287ccb6c54 100644 --- a/math/w_j0f_compat.c +++ b/math/w_j0f_compat.c @@ -20,12 +20,13 @@ #include #include #include +#include -#if LIBM_SVID_COMPAT +#if LIBM_SVID_COMPAT && SHLIB_COMPAT (libm, GLIBC_2_0, GLIBC_2_43) /* wrapper j0f */ float -__j0f (float x) +__j0f_svid (float x) { if (__builtin_expect (isgreater (fabsf (x), AS_FLOAT_CONSTANT (X_TLOSS)), 0) @@ -35,12 +36,12 @@ __j0f (float x) return __ieee754_j0f (x); } -libm_alias_float (__j0, j0) +compat_symbol (libm, __j0f_svid, j0f, GLIBC_2_0); /* wrapper y0f */ float -__y0f (float x) +__y0f_svid (float x) { if (__builtin_expect (islessequal (x, 0.0f) || isgreater (x, AS_FLOAT_CONSTANT (X_TLOSS)), 0) @@ -65,5 +66,5 @@ __y0f (float x) return __ieee754_y0f (x); } -libm_alias_float (__y0, y0) +compat_symbol (libm, __y0f_svid, y0f, GLIBC_2_0); #endif diff --git a/sysdeps/ieee754/flt-32/e_j0f.c b/sysdeps/ieee754/flt-32/e_j0f.c index c800acd3cb..9fbc8d3cd2 100644 --- a/sysdeps/ieee754/flt-32/e_j0f.c +++ b/sysdeps/ieee754/flt-32/e_j0f.c @@ -17,7 +17,10 @@ #include #include #include +#include +#include #include +#include "math_config.h" static float pzerof(float), qzerof(float); @@ -251,7 +254,7 @@ j0f_near_root (float x, float z) } float -__ieee754_j0f(float x) +__j0f(float x) { float z, s,c,ss,cc,r,u,v; int32_t hx,ix; @@ -306,8 +309,16 @@ __ieee754_j0f(float x) return((one+u)*(one-u)+z*(r/s)); } } +strong_alias (__j0f, __ieee754_j0f) +#if LIBM_SVID_COMPAT +versioned_symbol (libm, __j0f, j0f, GLIBC_2_43); +libm_alias_float_other (__j0, j0) +#else +libm_alias_float (__j0, j0) +#endif libm_alias_finite (__ieee754_j0f, __j0f) + static const float u00 = -7.3804296553e-02, /* 0xbd9726b5 */ u01 = 1.7666645348e-01, /* 0x3e34e80d */ @@ -535,7 +546,7 @@ y0f_near_root (float x, float z) } float -__ieee754_y0f(float x) +__y0f(float x) { float z, s,c,ss,cc,u,v; int32_t hx,ix; @@ -543,9 +554,15 @@ __ieee754_y0f(float x) GET_FLOAT_WORD(hx,x); ix = 0x7fffffff&hx; /* Y0(NaN) is NaN, y0(-inf) is Nan, y0(inf) is 0, y0(0) is -inf. */ - if(ix>=0x7f800000) return one/(x+x*x); - if(ix==0) return -1/zero; /* -inf and divide by zero exception. */ - if(hx<0) return zero/(zero*x); + if(ix>=0x7f800000) + { + if (hx==0xFF800000) + return __math_invalidf (1); + else + return one/(x+x*x); + } + if(ix==0) return __math_divzerof (1); /* -inf and divide by zero exception. */ + if(hx<0) return __math_invalidf (x); if(ix >= 0x40000000 || (0x3f5340ed <= ix && ix <= 0x3f77b5e5)) { /* |x| >= 2.0 or 0x1.a681dap-1 <= |x| <= 0x1.ef6bcap-1 (around 1st zero) */ @@ -597,6 +614,13 @@ __ieee754_y0f(float x) v = one+z*(v01+z*(v02+z*(v03+z*v04))); return(u/v + tpi*(__ieee754_j0f(x)*__ieee754_logf(x))); } +strong_alias (__y0f, __ieee754_y0f) +#if LIBM_SVID_COMPAT +versioned_symbol (libm, __y0f, y0f, GLIBC_2_43); +libm_alias_float_other (__y0, y0) +#else +libm_alias_float (__y0, y0) +#endif libm_alias_finite (__ieee754_y0f, __y0f) /* The asymptotic expansion of pzero is diff --git a/sysdeps/ieee754/flt-32/w_j0f.c b/sysdeps/ieee754/flt-32/w_j0f.c new file mode 100644 index 0000000000..db3355f598 --- /dev/null +++ b/sysdeps/ieee754/flt-32/w_j0f.c @@ -0,0 +1 @@ +/* Not needed */ diff --git a/sysdeps/mach/hurd/i386/libm.abilist b/sysdeps/mach/hurd/i386/libm.abilist index 83f26be868..0cfc73ddbb 100644 --- a/sysdeps/mach/hurd/i386/libm.abilist +++ b/sysdeps/mach/hurd/i386/libm.abilist @@ -1324,4 +1324,6 @@ GLIBC_2.43 atanhf F GLIBC_2.43 coshf F GLIBC_2.43 fmod F GLIBC_2.43 fmodf F +GLIBC_2.43 j0f F GLIBC_2.43 log10f F +GLIBC_2.43 y0f F diff --git a/sysdeps/unix/sysv/linux/aarch64/libm.abilist b/sysdeps/unix/sysv/linux/aarch64/libm.abilist index 70849920ae..20f36bdba5 100644 --- a/sysdeps/unix/sysv/linux/aarch64/libm.abilist +++ b/sysdeps/unix/sysv/linux/aarch64/libm.abilist @@ -1290,4 +1290,6 @@ GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F GLIBC_2.43 coshf F +GLIBC_2.43 j0f F GLIBC_2.43 log10f F +GLIBC_2.43 y0f F diff --git a/sysdeps/unix/sysv/linux/alpha/libm.abilist b/sysdeps/unix/sysv/linux/alpha/libm.abilist index b247478dfc..f06fcbcd31 100644 --- a/sysdeps/unix/sysv/linux/alpha/libm.abilist +++ b/sysdeps/unix/sysv/linux/alpha/libm.abilist @@ -1449,4 +1449,6 @@ GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F GLIBC_2.43 coshf F +GLIBC_2.43 j0f F GLIBC_2.43 log10f F +GLIBC_2.43 y0f F diff --git a/sysdeps/unix/sysv/linux/arm/be/libm.abilist b/sysdeps/unix/sysv/linux/arm/be/libm.abilist index b643a93fa6..4a73703e1f 100644 --- a/sysdeps/unix/sysv/linux/arm/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/arm/be/libm.abilist @@ -955,4 +955,6 @@ GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F GLIBC_2.43 coshf F +GLIBC_2.43 j0f F GLIBC_2.43 log10f F +GLIBC_2.43 y0f F diff --git a/sysdeps/unix/sysv/linux/arm/le/libm.abilist b/sysdeps/unix/sysv/linux/arm/le/libm.abilist index b643a93fa6..4a73703e1f 100644 --- a/sysdeps/unix/sysv/linux/arm/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/arm/le/libm.abilist @@ -955,4 +955,6 @@ GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F GLIBC_2.43 coshf F +GLIBC_2.43 j0f F GLIBC_2.43 log10f F +GLIBC_2.43 y0f F diff --git a/sysdeps/unix/sysv/linux/hppa/libm.abilist b/sysdeps/unix/sysv/linux/hppa/libm.abilist index 8a76be6b57..f5012e94d7 100644 --- a/sysdeps/unix/sysv/linux/hppa/libm.abilist +++ b/sysdeps/unix/sysv/linux/hppa/libm.abilist @@ -955,4 +955,6 @@ GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F GLIBC_2.43 coshf F +GLIBC_2.43 j0f F GLIBC_2.43 log10f F +GLIBC_2.43 y0f F diff --git a/sysdeps/unix/sysv/linux/i386/libm.abilist b/sysdeps/unix/sysv/linux/i386/libm.abilist index b4f7e7055e..addf021352 100644 --- a/sysdeps/unix/sysv/linux/i386/libm.abilist +++ b/sysdeps/unix/sysv/linux/i386/libm.abilist @@ -1331,4 +1331,6 @@ GLIBC_2.43 atanhf F GLIBC_2.43 coshf F GLIBC_2.43 fmod F GLIBC_2.43 fmodf F +GLIBC_2.43 j0f F GLIBC_2.43 log10f F +GLIBC_2.43 y0f F diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist index b643a93fa6..4a73703e1f 100644 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist @@ -955,4 +955,6 @@ GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F GLIBC_2.43 coshf F +GLIBC_2.43 j0f F GLIBC_2.43 log10f F +GLIBC_2.43 y0f F diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist index e6ad98649c..dd11014dc7 100644 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist @@ -989,3 +989,5 @@ GLIBC_2.42 rsqrtl F GLIBC_2.43 acoshf F GLIBC_2.43 fmod F GLIBC_2.43 fmodf F +GLIBC_2.43 j0f F +GLIBC_2.43 y0f F diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist index 12e5a9c34f..e58c9b0e31 100644 --- a/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist @@ -955,4 +955,6 @@ GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F GLIBC_2.43 coshf F +GLIBC_2.43 j0f F GLIBC_2.43 log10f F +GLIBC_2.43 y0f F diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist index 12e5a9c34f..e58c9b0e31 100644 --- a/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist @@ -955,4 +955,6 @@ GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F GLIBC_2.43 coshf F +GLIBC_2.43 j0f F GLIBC_2.43 log10f F +GLIBC_2.43 y0f F diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist index cfa5b5eed0..5a66542e76 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist @@ -955,4 +955,6 @@ GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F GLIBC_2.43 coshf F +GLIBC_2.43 j0f F GLIBC_2.43 log10f F +GLIBC_2.43 y0f F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist index ec96f01fea..476b7b54ad 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist @@ -1290,4 +1290,6 @@ GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F GLIBC_2.43 coshf F +GLIBC_2.43 j0f F GLIBC_2.43 log10f F +GLIBC_2.43 y0f F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist index 73d406afcb..0a2d29f2ea 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist @@ -1102,4 +1102,6 @@ GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F GLIBC_2.43 coshf F +GLIBC_2.43 j0f F GLIBC_2.43 log10f F +GLIBC_2.43 y0f F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist index 89797c7388..743040fdb6 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist @@ -1101,4 +1101,6 @@ GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F GLIBC_2.43 coshf F +GLIBC_2.43 j0f F GLIBC_2.43 log10f F +GLIBC_2.43 y0f F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist index 8e807f2603..9f05b8ba75 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist @@ -1095,4 +1095,6 @@ GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F GLIBC_2.43 coshf F +GLIBC_2.43 j0f F GLIBC_2.43 log10f F +GLIBC_2.43 y0f F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist index ecc90e4f71..2b293d118c 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist @@ -1479,4 +1479,6 @@ GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F GLIBC_2.43 coshf F +GLIBC_2.43 j0f F GLIBC_2.43 log10f F +GLIBC_2.43 y0f F diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist index 7b12a6acb2..ca1ebaa99b 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist @@ -1393,4 +1393,6 @@ GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F GLIBC_2.43 coshf F +GLIBC_2.43 j0f F GLIBC_2.43 log10f F +GLIBC_2.43 y0f F diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist index ecaaf1068a..b8dced7581 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist @@ -1393,4 +1393,6 @@ GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F GLIBC_2.43 coshf F +GLIBC_2.43 j0f F GLIBC_2.43 log10f F +GLIBC_2.43 y0f F diff --git a/sysdeps/unix/sysv/linux/sh/be/libm.abilist b/sysdeps/unix/sysv/linux/sh/be/libm.abilist index 7500060e07..61f4e53e04 100644 --- a/sysdeps/unix/sysv/linux/sh/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/sh/be/libm.abilist @@ -955,4 +955,6 @@ GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F GLIBC_2.43 coshf F +GLIBC_2.43 j0f F GLIBC_2.43 log10f F +GLIBC_2.43 y0f F diff --git a/sysdeps/unix/sysv/linux/sh/le/libm.abilist b/sysdeps/unix/sysv/linux/sh/le/libm.abilist index 7500060e07..61f4e53e04 100644 --- a/sysdeps/unix/sysv/linux/sh/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/sh/le/libm.abilist @@ -955,4 +955,6 @@ GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F GLIBC_2.43 coshf F +GLIBC_2.43 j0f F GLIBC_2.43 log10f F +GLIBC_2.43 y0f F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist index 441120c8b6..9b2b5f7499 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist @@ -1400,4 +1400,6 @@ GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F GLIBC_2.43 coshf F +GLIBC_2.43 j0f F GLIBC_2.43 log10f F +GLIBC_2.43 y0f F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist index d27f2727cc..02e2679394 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist @@ -1290,4 +1290,6 @@ GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F GLIBC_2.43 coshf F +GLIBC_2.43 j0f F GLIBC_2.43 log10f F +GLIBC_2.43 y0f F diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist index 29224112da..cfb52777aa 100644 --- a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist @@ -1323,4 +1323,6 @@ GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F GLIBC_2.43 coshf F +GLIBC_2.43 j0f F GLIBC_2.43 log10f F +GLIBC_2.43 y0f F diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist index 1691279340..a0872e4bcd 100644 --- a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist @@ -1323,4 +1323,6 @@ GLIBC_2.43 acoshf F GLIBC_2.43 asinf F GLIBC_2.43 atanhf F GLIBC_2.43 coshf F +GLIBC_2.43 j0f F GLIBC_2.43 log10f F +GLIBC_2.43 y0f F -- 2.47.3