diff options
| author | Szabolcs Nagy <szabolcs.nagy@arm.com> | 2017-09-12 12:20:50 +0100 |
|---|---|---|
| committer | Szabolcs Nagy <szabolcs.nagy@arm.com> | 2017-09-25 10:45:08 +0100 |
| commit | f5f0f5265162fe6f4f238abcd3086985f7c38d6d (patch) | |
| tree | 16e04b84841c31887ba6a70d37d0eae241567361 | |
| parent | 72aa623345ada1276ed89dbc00fdff9639cb8eaf (diff) | |
| download | glibc-f5f0f5265162fe6f4f238abcd3086985f7c38d6d.tar.xz glibc-f5f0f5265162fe6f4f238abcd3086985f7c38d6d.zip | |
New expf and exp2f version without SVID compat wrapper
This patch changes the expf and exp2f 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.
Internal calls to __expf now get the new error semantics, this seems to
only affect sysdeps/i386/fpu/s_expm1f.S where the errno-only behaviour
should be correct.
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 (expf): New libm symbol at GLIBC_2.27.
(exp2f): Likewise.
* math/w_exp2f.c: New file.
* math/w_expf.c: New file.
* math/w_exp2f_compat.c (__exp2f_compat): For compat symbol only.
* math/w_expf_compat.c (__expf_compat): Likewise.
* sysdeps/ia64/fpu/e_exp2f.S: Add versioned symbols.
* sysdeps/ia64/fpu/e_expf.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.
34 files changed, 158 insertions, 9 deletions
@@ -1,5 +1,48 @@ 2017-09-25 Szabolcs Nagy <szabolcs.nagy@arm.com> + * math/Versions (expf): New libm symbol at GLIBC_2.27. + (exp2f): Likewise. + * math/w_exp2f.c: New file. + * math/w_expf.c: New file. + * math/w_exp2f_compat.c (__exp2f_compat): For compat symbol only. + * math/w_expf_compat.c (__expf_compat): Likewise. + * sysdeps/ia64/fpu/e_exp2f.S: Add versioned symbols. + * sysdeps/ia64/fpu/e_expf.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-09-25 Szabolcs Nagy <szabolcs.nagy@arm.com> + * math/Makefile (type-float-routines): Add math_errf and e_exp2f_data. * sysdeps/aarch64/fpu/math_private.h (TOINT_INTRINSICS): Define. (roundtoint, converttoint): Likewise. diff --git a/math/Versions b/math/Versions index e409de0681..380f6a2a1a 100644 --- a/math/Versions +++ b/math/Versions @@ -229,4 +229,7 @@ libm { fromfp; fromfpf; fromfpl; ufromfp; ufromfpf; ufromfpl; fromfpx; fromfpxf; fromfpxl; ufromfpx; ufromfpxf; ufromfpxl; } + GLIBC_2.27 { + expf; exp2f; + } } diff --git a/math/w_exp2f.c b/math/w_exp2f.c new file mode 100644 index 0000000000..948d745dab --- /dev/null +++ b/math/w_exp2f.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_exp2_template.c> +versioned_symbol (libm, __exp2f, exp2f, GLIBC_2_27); diff --git a/math/w_exp2f_compat.c b/math/w_exp2f_compat.c index b058daed30..6ab6f6c6de 100644 --- a/math/w_exp2f_compat.c +++ b/math/w_exp2f_compat.c @@ -6,9 +6,9 @@ #include <math_private.h> #include <math-svid-compat.h> -#if LIBM_SVID_COMPAT +#if LIBM_SVID_COMPAT && SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_27) float -__exp2f (float x) +__exp2f_compat (float x) { float z = __ieee754_exp2f (x); if (__builtin_expect (!isfinite (z) || z == 0, 0) @@ -18,5 +18,5 @@ __exp2f (float x) return z; } -weak_alias (__exp2f, exp2f) +compat_symbol (libm, __exp2f_compat, exp2f, GLIBC_2_1); #endif diff --git a/math/w_expf.c b/math/w_expf.c new file mode 100644 index 0000000000..6d5f03c5f9 --- /dev/null +++ b/math/w_expf.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_exp_template.c> +versioned_symbol (libm, __expf, expf, GLIBC_2_27); diff --git a/math/w_expf_compat.c b/math/w_expf_compat.c index a38ff4082d..2512498bb3 100644 --- a/math/w_expf_compat.c +++ b/math/w_expf_compat.c @@ -20,10 +20,10 @@ #include <math_private.h> #include <math-svid-compat.h> -#if LIBM_SVID_COMPAT +#if LIBM_SVID_COMPAT && SHLIB_COMPAT (libm, GLIBC_2_0, GLIBC_2_27) /* wrapper expf */ float -__expf (float x) +__expf_compat (float x) { float z = __ieee754_expf (x); if (__builtin_expect (!isfinite (z) || z == 0, 0) @@ -32,6 +32,5 @@ __expf (float x) return z; } -hidden_def (__expf) -weak_alias (__expf, expf) +compat_symbol (libm, __expf_compat, expf, GLIBC_2_0); #endif diff --git a/sysdeps/ia64/fpu/e_exp2f.S b/sysdeps/ia64/fpu/e_exp2f.S index 36354ae3bd..d308bb23a9 100644 --- a/sysdeps/ia64/fpu/e_exp2f.S +++ b/sysdeps/ia64/fpu/e_exp2f.S @@ -221,7 +221,7 @@ LOCAL_OBJECT_END(T_table) .section .text -GLOBAL_LIBM_ENTRY(exp2f) +GLOBAL_LIBM_ENTRY(__exp2f) {.mfi @@ -468,7 +468,13 @@ OUT_RANGE_exp2: } ;; -GLOBAL_LIBM_END(exp2f) +GLOBAL_LIBM_END(__exp2f) +#ifdef SHARED +.symver __exp2f,exp2f@@GLIBC_2.27 +.weak __exp2f_compat +.set __exp2f_compat,__exp2f +.symver __exp2f_compat,exp2f@GLIBC_2.2 +#endif LOCAL_LIBM_ENTRY(__libm_error_region) diff --git a/sysdeps/ia64/fpu/e_expf.S b/sysdeps/ia64/fpu/e_expf.S index 75f918f78e..8c5f089f68 100644 --- a/sysdeps/ia64/fpu/e_expf.S +++ b/sysdeps/ia64/fpu/e_expf.S @@ -657,6 +657,12 @@ EXP_UNDERFLOW_ZERO: ;; GLOBAL_IEEE754_END(expf) +#ifdef SHARED +.symver expf,expf@@GLIBC_2.27 +.weak __expf_compat +.set __expf_compat,__expf +.symver __expf_compat,expf@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 6266864ea7..10102eeaff 100644 --- a/sysdeps/unix/sysv/linux/aarch64/libm.abilist +++ b/sysdeps/unix/sysv/linux/aarch64/libm.abilist @@ -460,3 +460,6 @@ GLIBC_2.25 ufromfpl F GLIBC_2.25 ufromfpx F GLIBC_2.25 ufromfpxf F GLIBC_2.25 ufromfpxl F +GLIBC_2.27 GLIBC_2.27 A +GLIBC_2.27 exp2f F +GLIBC_2.27 expf F diff --git a/sysdeps/unix/sysv/linux/alpha/libm.abilist b/sysdeps/unix/sysv/linux/alpha/libm.abilist index 0dc44afd77..e09a115aa9 100644 --- a/sysdeps/unix/sysv/linux/alpha/libm.abilist +++ b/sysdeps/unix/sysv/linux/alpha/libm.abilist @@ -470,6 +470,9 @@ GLIBC_2.25 ufromfpl F GLIBC_2.25 ufromfpx F GLIBC_2.25 ufromfpxf F GLIBC_2.25 ufromfpxl F +GLIBC_2.27 GLIBC_2.27 A +GLIBC_2.27 exp2f F +GLIBC_2.27 expf 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 d0c33d2a11..8095876449 100644 --- a/sysdeps/unix/sysv/linux/arm/libm.abilist +++ b/sysdeps/unix/sysv/linux/arm/libm.abilist @@ -117,6 +117,9 @@ GLIBC_2.25 ufromfpl F GLIBC_2.25 ufromfpx F GLIBC_2.25 ufromfpxf F GLIBC_2.25 ufromfpxl F +GLIBC_2.27 GLIBC_2.27 A +GLIBC_2.27 exp2f F +GLIBC_2.27 expf 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 80fd4ada99..19d40ef50d 100644 --- a/sysdeps/unix/sysv/linux/hppa/libm.abilist +++ b/sysdeps/unix/sysv/linux/hppa/libm.abilist @@ -429,5 +429,8 @@ GLIBC_2.25 ufromfpl F GLIBC_2.25 ufromfpx F GLIBC_2.25 ufromfpxf F GLIBC_2.25 ufromfpxl F +GLIBC_2.27 GLIBC_2.27 A +GLIBC_2.27 exp2f F +GLIBC_2.27 expf 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 2aef7e5aed..791fba28e5 100644 --- a/sysdeps/unix/sysv/linux/i386/libm.abilist +++ b/sysdeps/unix/sysv/linux/i386/libm.abilist @@ -611,4 +611,7 @@ GLIBC_2.26 ufromfpxf128 F GLIBC_2.26 y0f128 F GLIBC_2.26 y1f128 F GLIBC_2.26 ynf128 F +GLIBC_2.27 GLIBC_2.27 A +GLIBC_2.27 exp2f F +GLIBC_2.27 expf 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 f165eb3957..65a0fbe56a 100644 --- a/sysdeps/unix/sysv/linux/ia64/libm.abilist +++ b/sysdeps/unix/sysv/linux/ia64/libm.abilist @@ -540,4 +540,7 @@ GLIBC_2.26 ufromfpxf128 F GLIBC_2.26 y0f128 F GLIBC_2.26 y1f128 F GLIBC_2.26 ynf128 F +GLIBC_2.27 GLIBC_2.27 A +GLIBC_2.27 exp2f F +GLIBC_2.27 expf 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 d0c33d2a11..8095876449 100644 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist @@ -117,6 +117,9 @@ GLIBC_2.25 ufromfpl F GLIBC_2.25 ufromfpx F GLIBC_2.25 ufromfpxf F GLIBC_2.25 ufromfpxl F +GLIBC_2.27 GLIBC_2.27 A +GLIBC_2.27 exp2f F +GLIBC_2.27 expf 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 f3de018cd9..5e692dda7b 100644 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist @@ -471,4 +471,7 @@ GLIBC_2.25 ufromfpl F GLIBC_2.25 ufromfpx F GLIBC_2.25 ufromfpxf F GLIBC_2.25 ufromfpxl F +GLIBC_2.27 GLIBC_2.27 A +GLIBC_2.27 exp2f F +GLIBC_2.27 expf F GLIBC_2.4 GLIBC_2.4 A diff --git a/sysdeps/unix/sysv/linux/microblaze/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/libm.abilist index bb872f292a..65f1d5b451 100644 --- a/sysdeps/unix/sysv/linux/microblaze/libm.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/libm.abilist @@ -428,3 +428,6 @@ GLIBC_2.25 ufromfpl F GLIBC_2.25 ufromfpx F GLIBC_2.25 ufromfpxf F GLIBC_2.25 ufromfpxl F +GLIBC_2.27 GLIBC_2.27 A +GLIBC_2.27 exp2f F +GLIBC_2.27 expf F diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist index 000c011495..c32ea5b96a 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist @@ -430,6 +430,9 @@ GLIBC_2.25 ufromfpl F GLIBC_2.25 ufromfpx F GLIBC_2.25 ufromfpxf F GLIBC_2.25 ufromfpxl F +GLIBC_2.27 GLIBC_2.27 A +GLIBC_2.27 exp2f F +GLIBC_2.27 expf F GLIBC_2.4 GLIBC_2.4 A GLIBC_2.4 exp2l F _gp_disp _gp_disp A diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist index b9599fee34..18b2aa2404 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist @@ -462,4 +462,7 @@ GLIBC_2.25 ufromfpl F GLIBC_2.25 ufromfpx F GLIBC_2.25 ufromfpxf F GLIBC_2.25 ufromfpxl F +GLIBC_2.27 GLIBC_2.27 A +GLIBC_2.27 exp2f F +GLIBC_2.27 expf F GLIBC_2.4 GLIBC_2.4 A diff --git a/sysdeps/unix/sysv/linux/nios2/libm.abilist b/sysdeps/unix/sysv/linux/nios2/libm.abilist index c858ed5907..e492a68e9d 100644 --- a/sysdeps/unix/sysv/linux/nios2/libm.abilist +++ b/sysdeps/unix/sysv/linux/nios2/libm.abilist @@ -428,3 +428,6 @@ GLIBC_2.25 ufromfpl F GLIBC_2.25 ufromfpx F GLIBC_2.25 ufromfpxf F GLIBC_2.25 ufromfpxl F +GLIBC_2.27 GLIBC_2.27 A +GLIBC_2.27 exp2f F +GLIBC_2.27 expf F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist index 13ea493ac8..ad8f0372f4 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist @@ -473 |
