diff options
| author | Szabolcs Nagy <szabolcs.nagy@arm.com> | 2017-09-13 17:19:51 +0100 |
|---|---|---|
| committer | Szabolcs Nagy <szabolcs.nagy@arm.com> | 2017-10-02 14:38:03 +0100 |
| commit | 72d3d281080be9f674982067d72874fd6cdb4b64 (patch) | |
| tree | ed4407d5935108ab58b08b979a596486b23aa9df | |
| parent | 59ba2d2b542142e575d185f07e1eb96800d9862c (diff) | |
| download | glibc-72d3d281080be9f674982067d72874fd6cdb4b64.tar.xz glibc-72d3d281080be9f674982067d72874fd6cdb4b64.zip | |
New symbol version for logf, log2f and powf without SVID compat
This patch changes the logf, log2f and powf error handling semantics
to only set errno accoring to POSIX rules. New symbol version is
introduced at GLIBC_2.27.
The old wrappers are kept for compat symbols.
ia64 needed assembly change to have the new and compat versioned
symbol map to the same function.
All linux libm abilists are updated.
* math/Versions (logf): New libm symbol at GLIBC_2.27.
(log2f): Likewise.
(powf): Likewise.
* math/w_log2f.c: New file.
* math/w_logf.c: New file.
* math/w_powf.c: New file.
* math/w_log2f_compat.c (__log2f_compat): For compat symbol only.
* math/w_logf_compat.c (__logf_compat): Likewise.
* math/w_powf_compat.c (__powf_compat): Likewise.
* sysdeps/ia64/fpu/e_log2f.S: Add versioned symbols.
* sysdeps/ia64/fpu/e_logf.S: Likewise.
* sysdeps/ia64/fpu/e_powf.S: Likewise.
* sysdeps/unix/sysv/linux/aarch64/libm.abilist: Update.
* sysdeps/unix/sysv/linux/alpha/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/arm/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/hppa/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/i386/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/ia64/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/microblaze/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/nios2/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist:
Likewise.
* sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/sh/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Likewise.
37 files changed, 178 insertions, 14 deletions
@@ -1,3 +1,50 @@ +2017-10-02 Szabolcs Nagy <szabolcs.nagy@arm.com> + + * math/Versions (logf): New libm symbol at GLIBC_2.27. + (log2f): Likewise. + (powf): Likewise. + * math/w_log2f.c: New file. + * math/w_logf.c: New file. + * math/w_powf.c: New file. + * math/w_log2f_compat.c (__log2f_compat): For compat symbol only. + * math/w_logf_compat.c (__logf_compat): Likewise. + * math/w_powf_compat.c (__powf_compat): Likewise. + * sysdeps/ia64/fpu/e_log2f.S: Add versioned symbols. + * sysdeps/ia64/fpu/e_logf.S: Likewise. + * sysdeps/ia64/fpu/e_powf.S: Likewise. + * sysdeps/unix/sysv/linux/aarch64/libm.abilist: Update. + * sysdeps/unix/sysv/linux/alpha/libm.abilist: Likewise. + * sysdeps/unix/sysv/linux/arm/libm.abilist: Likewise. + * sysdeps/unix/sysv/linux/hppa/libm.abilist: Likewise. + * sysdeps/unix/sysv/linux/i386/libm.abilist: Likewise. + * sysdeps/unix/sysv/linux/ia64/libm.abilist: Likewise. + * sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Likewise. + * sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Likewise. + * sysdeps/unix/sysv/linux/microblaze/libm.abilist: Likewise. + * sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Likewise. + * sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Likewise. + * sysdeps/unix/sysv/linux/nios2/libm.abilist: Likewise. + * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist: + Likewise. + * sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist: + Likewise. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist: + Likewise. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist: + Likewise. + * sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist: Likewise. + * sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Likewise. + * sysdeps/unix/sysv/linux/sh/libm.abilist: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Likewise. + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist: + Likewise. + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist: + Likewise. + * sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist: Likewise. + * sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Likewise. + * sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Likewise. + 2017-10-02 Rajalakshmi Srinivasaraghavan <raji@linux.vnet.ibm.com> * sysdeps/powerpc/powerpc64/multiarch/Makefile diff --git a/math/Versions b/math/Versions index 380f6a2a1a..2fbdb2f266 100644 --- a/math/Versions +++ b/math/Versions @@ -230,6 +230,6 @@ libm { fromfpx; fromfpxf; fromfpxl; ufromfpx; ufromfpxf; ufromfpxl; } GLIBC_2.27 { - expf; exp2f; + expf; exp2f; logf; log2f; powf; } } diff --git a/math/w_log2f.c b/math/w_log2f.c new file mode 100644 index 0000000000..cda0c3a644 --- /dev/null +++ b/math/w_log2f.c @@ -0,0 +1,7 @@ +#include <math-type-macros-float.h> +#undef __USE_WRAPPER_TEMPLATE +#define __USE_WRAPPER_TEMPLATE 1 +#undef declare_mgen_alias +#define declare_mgen_alias(a, b) +#include <w_log2_template.c> +versioned_symbol (libm, __log2f, log2f, GLIBC_2_27); diff --git a/math/w_log2f_compat.c b/math/w_log2f_compat.c index 295c1620f7..3caa310c51 100644 --- a/math/w_log2f_compat.c +++ b/math/w_log2f_compat.c @@ -23,10 +23,10 @@ #include <libm-alias-float.h> -#if LIBM_SVID_COMPAT +#if LIBM_SVID_COMPAT && SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_27) /* wrapper log2f(x) */ float -__log2f (float x) +__log2f_compat (float x) { if (__builtin_expect (islessequal (x, 0.0f), 0) && _LIB_VERSION != _IEEE_) { @@ -44,5 +44,5 @@ __log2f (float x) return __ieee754_log2f (x); } -libm_alias_float (__log2, log2) +compat_symbol (libm, __log2f_compat, log2f, GLIBC_2_1); #endif diff --git a/math/w_logf.c b/math/w_logf.c new file mode 100644 index 0000000000..d960e016d7 --- /dev/null +++ b/math/w_logf.c @@ -0,0 +1,7 @@ +#include <math-type-macros-float.h> +#undef __USE_WRAPPER_TEMPLATE +#define __USE_WRAPPER_TEMPLATE 1 +#undef declare_mgen_alias +#define declare_mgen_alias(a, b) +#include <w_log_template.c> +versioned_symbol (libm, __logf, logf, GLIBC_2_27); diff --git a/math/w_logf_compat.c b/math/w_logf_compat.c index 7cdacdf921..936b3a6e67 100644 --- a/math/w_logf_compat.c +++ b/math/w_logf_compat.c @@ -23,10 +23,10 @@ #include <libm-alias-float.h> -#if LIBM_SVID_COMPAT +#if LIBM_SVID_COMPAT && SHLIB_COMPAT (libm, GLIBC_2_0, GLIBC_2_27) /* wrapper logf(x) */ float -__logf (float x) +__logf_compat (float x) { if (__builtin_expect (islessequal (x, 0.0f), 0) && _LIB_VERSION != _IEEE_) { @@ -44,5 +44,5 @@ __logf (float x) return __ieee754_logf (x); } -libm_alias_float (__log, log) +compat_symbol (libm, __logf_compat, logf, GLIBC_2_0); #endif diff --git a/math/w_powf.c b/math/w_powf.c new file mode 100644 index 0000000000..a18348329e --- /dev/null +++ b/math/w_powf.c @@ -0,0 +1,7 @@ +#include <math-type-macros-float.h> +#undef __USE_WRAPPER_TEMPLATE +#define __USE_WRAPPER_TEMPLATE 1 +#undef declare_mgen_alias +#define declare_mgen_alias(a, b) +#include <w_pow_template.c> +versioned_symbol (libm, __powf, powf, GLIBC_2_27); diff --git a/math/w_powf_compat.c b/math/w_powf_compat.c index 39e818af7e..7745639efe 100644 --- a/math/w_powf_compat.c +++ b/math/w_powf_compat.c @@ -22,10 +22,10 @@ #include <libm-alias-float.h> -#if LIBM_SVID_COMPAT +#if LIBM_SVID_COMPAT && SHLIB_COMPAT (libm, GLIBC_2_0, GLIBC_2_27) /* wrapper powf */ float -__powf (float x, float y) +__powf_compat (float x, float y) { float z = __ieee754_powf (x, y); if (__glibc_unlikely (!isfinite (z))) @@ -60,5 +60,5 @@ __powf (float x, float y) return z; } -libm_alias_float (__pow, pow) +compat_symbol (libm, __powf_compat, powf, GLIBC_2_0); #endif diff --git a/sysdeps/ia64/fpu/e_log2f.S b/sysdeps/ia64/fpu/e_log2f.S index 2c3f18f360..9b754d1043 100644 --- a/sysdeps/ia64/fpu/e_log2f.S +++ b/sysdeps/ia64/fpu/e_log2f.S @@ -252,7 +252,7 @@ LOCAL_OBJECT_END(T_table) .section .text -GLOBAL_LIBM_ENTRY(log2f) +GLOBAL_LIBM_ENTRY(__log2f) { .mfi alloc r32=ar.pfs,1,4,4,0 @@ -491,7 +491,13 @@ SPECIAL_log2f: br.ret.sptk b0;; } -GLOBAL_LIBM_END(log2f) +GLOBAL_LIBM_END(__log2f) +#ifdef SHARED +.symver __log2f,log2f@@GLIBC_2.27 +.weak __log2f_compat +.set __log2f_compat,__log2f +.symver __log2f_compat,log2f@GLIBC_2.2 +#endif LOCAL_LIBM_ENTRY(__libm_error_region) diff --git a/sysdeps/ia64/fpu/e_logf.S b/sysdeps/ia64/fpu/e_logf.S index 2dda2186d0..d5f5437793 100644 --- a/sysdeps/ia64/fpu/e_logf.S +++ b/sysdeps/ia64/fpu/e_logf.S @@ -1088,6 +1088,12 @@ logf_libm_err: nop.i 0 };; GLOBAL_IEEE754_END(logf) +#ifdef SHARED +.symver logf,logf@@GLIBC_2.27 +.weak __logf_compat +.set __logf_compat,__logf +.symver __logf_compat,logf@GLIBC_2.2 +#endif // Stack operations when calling error support. diff --git a/sysdeps/ia64/fpu/e_powf.S b/sysdeps/ia64/fpu/e_powf.S index d61bc79e5e..388391624f 100644 --- a/sysdeps/ia64/fpu/e_powf.S +++ b/sysdeps/ia64/fpu/e_powf.S @@ -868,7 +868,7 @@ data8 0xEAC0C6E7DD24392F , 0x00003FFF LOCAL_OBJECT_END(pow_tbl2) .section .text -GLOBAL_LIBM_ENTRY(powf) +GLOBAL_LIBM_ENTRY(__powf) // Get exponent of x. Will be used to calculate K. { .mfi @@ -2002,7 +2002,13 @@ POW_OVER_UNDER_ERROR: } ;; -GLOBAL_LIBM_END(powf) +GLOBAL_LIBM_END(__powf) +#ifdef SHARED +.symver __powf,powf@@GLIBC_2.27 +.weak __powf_compat +.set __powf_compat,__powf +.symver __powf_compat,powf@GLIBC_2.2 +#endif LOCAL_LIBM_ENTRY(__libm_error_region) diff --git a/sysdeps/unix/sysv/linux/aarch64/libm.abilist b/sysdeps/unix/sysv/linux/aarch64/libm.abilist index 10102eeaff..3f0190ae03 100644 --- a/sysdeps/unix/sysv/linux/aarch64/libm.abilist +++ b/sysdeps/unix/sysv/linux/aarch64/libm.abilist @@ -463,3 +463,6 @@ GLIBC_2.25 ufromfpxl F GLIBC_2.27 GLIBC_2.27 A GLIBC_2.27 exp2f F GLIBC_2.27 expf F +GLIBC_2.27 log2f F +GLIBC_2.27 logf F +GLIBC_2.27 powf F diff --git a/sysdeps/unix/sysv/linux/alpha/libm.abilist b/sysdeps/unix/sysv/linux/alpha/libm.abilist index e09a115aa9..78edc5e3d9 100644 --- a/sysdeps/unix/sysv/linux/alpha/libm.abilist +++ b/sysdeps/unix/sysv/linux/alpha/libm.abilist @@ -473,6 +473,9 @@ GLIBC_2.25 ufromfpxl F GLIBC_2.27 GLIBC_2.27 A GLIBC_2.27 exp2f F GLIBC_2.27 expf F +GLIBC_2.27 log2f F +GLIBC_2.27 logf F +GLIBC_2.27 powf F GLIBC_2.3.4 GLIBC_2.3.4 A GLIBC_2.3.4 __c1_cabsf F GLIBC_2.3.4 __c1_cacosf F diff --git a/sysdeps/unix/sysv/linux/arm/libm.abilist b/sysdeps/unix/sysv/linux/arm/libm.abilist index 8095876449..b3fd4a27b2 100644 --- a/sysdeps/unix/sysv/linux/arm/libm.abilist +++ b/sysdeps/unix/sysv/linux/arm/libm.abilist @@ -120,6 +120,9 @@ GLIBC_2.25 ufromfpxl F GLIBC_2.27 GLIBC_2.27 A GLIBC_2.27 exp2f F GLIBC_2.27 expf F +GLIBC_2.27 log2f F +GLIBC_2.27 logf F +GLIBC_2.27 powf F GLIBC_2.4 GLIBC_2.4 A GLIBC_2.4 _LIB_VERSION D 0x4 GLIBC_2.4 __clog10 F diff --git a/sysdeps/unix/sysv/linux/hppa/libm.abilist b/sysdeps/unix/sysv/linux/hppa/libm.abilist index 19d40ef50d..ffa61bf1b1 100644 --- a/sysdeps/unix/sysv/linux/hppa/libm.abilist +++ b/sysdeps/unix/sysv/linux/hppa/libm.abilist @@ -432,5 +432,8 @@ GLIBC_2.25 ufromfpxl F GLIBC_2.27 GLIBC_2.27 A GLIBC_2.27 exp2f F GLIBC_2.27 expf F +GLIBC_2.27 log2f F +GLIBC_2.27 logf F +GLIBC_2.27 powf F GLIBC_2.4 GLIBC_2.4 A GLIBC_2.4 exp2l F diff --git a/sysdeps/unix/sysv/linux/i386/libm.abilist b/sysdeps/unix/sysv/linux/i386/libm.abilist index 791fba28e5..1a7e6bf449 100644 --- a/sysdeps/unix/sysv/linux/i386/libm.abilist +++ b/sysdeps/unix/sysv/linux/i386/libm.abilist @@ -614,4 +614,7 @@ GLIBC_2.26 ynf128 F GLIBC_2.27 GLIBC_2.27 A GLIBC_2.27 exp2f F GLIBC_2.27 expf F +GLIBC_2.27 log2f F +GLIBC_2.27 logf F +GLIBC_2.27 powf F GLIBC_2.4 GLIBC_2.4 A diff --git a/sysdeps/unix/sysv/linux/ia64/libm.abilist b/sysdeps/unix/sysv/linux/ia64/libm.abilist index 65a0fbe56a..7e15735eae 100644 --- a/sysdeps/unix/sysv/linux/ia64/libm.abilist +++ b/sysdeps/unix/sysv/linux/ia64/libm.abilist @@ -543,4 +543,7 @@ GLIBC_2.26 ynf128 F GLIBC_2.27 GLIBC_2.27 A GLIBC_2.27 exp2f F GLIBC_2.27 expf F +GLIBC_2.27 log2f F +GLIBC_2.27 logf F +GLIBC_2.27 powf F GLIBC_2.4 GLIBC_2.4 A diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist index 8095876449..b3fd4a27b2 100644 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist @@ -120,6 +120,9 @@ GLIBC_2.25 ufromfpxl F GLIBC_2.27 GLIBC_2.27 A GLIBC_2.27 exp2f F GLIBC_2.27 expf F +GLIBC_2.27 log2f F +GLIBC_2.27 logf F +GLIBC_2.27 powf F GLIBC_2.4 GLIBC_2.4 A GLIBC_2.4 _LIB_VERSION D 0x4 GLIBC_2.4 __clog10 F diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist index 5e692dda7b..aae61169f9 100644 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist +++ b/sysd |
