diff options
33 files changed, 112 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog index 206d216bca..94d0b97eba 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,42 @@ 2018-11-21 Szabolcs Nagy <szabolcs.nagy@arm.com> + * math/Versions (GLIBC_2.29): Add log2. + * math/w_log2_compat.c (__log2_compat): Change to versioned compat + symbol. + * math/w_log2.c: New file. + * sysdeps/i386/fpu/w_log2.c: New file. + * sysdeps/ia64/fpu/e_log2.S: Add versioned symbols. + * sysdeps/ieee754/dbl-64/e_log2.c (__ieee754_log2): Rename to __log2 + and add necessary aliases. + * sysdeps/ieee754/dbl-64/w_log2.c: New file. + * sysdeps/m68k/m680x0/fpu/w_log2.c: New file. + * sysdeps/mach/hurd/i386/libm.abilist: Update. + * sysdeps/unix/sysv/linux/aarch64/libm.abilist: Update. + * sysdeps/unix/sysv/linux/alpha/libm.abilist: Update. + * sysdeps/unix/sysv/linux/arm/libm.abilist: Update. + * sysdeps/unix/sysv/linux/hppa/libm.abilist: Update. + * sysdeps/unix/sysv/linux/i386/libm.abilist: Update. + * sysdeps/unix/sysv/linux/ia64/libm.abilist: Update. + * sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Update. + * sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Update. + * sysdeps/unix/sysv/linux/microblaze/libm.abilist: Update. + * sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Update. + * sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Update. + * sysdeps/unix/sysv/linux/nios2/libm.abilist: Update. + * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist: Update. + * sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist: Update. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist: Update. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist: Update. + * sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist: Update. + * sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Update. + * sysdeps/unix/sysv/linux/sh/libm.abilist: Update. + * sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Update. + * sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Update. + * sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Update. + * sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Update. + +2018-11-21 Szabolcs Nagy <szabolcs.nagy@arm.com> + * math/Versions (GLIBC_2.29): Add log. * math/w_log_compat.c (__log_compat): Change to versioned compat symbol. diff --git a/math/Versions b/math/Versions index 87aa6590ed..a887602f2f 100644 --- a/math/Versions +++ b/math/Versions @@ -577,6 +577,6 @@ libm { } GLIBC_2.29 { # No SVID compatible error handling. - exp; exp2; log; + exp; exp2; log; log2; } } diff --git a/math/w_log2.c b/math/w_log2.c new file mode 100644 index 0000000000..148d5d48e1 --- /dev/null +++ b/math/w_log2.c @@ -0,0 +1,8 @@ +#include <math-type-macros-double.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, __log2, log2, GLIBC_2_29); +libm_alias_double_other (__log2, log2) diff --git a/math/w_log2_compat.c b/math/w_log2_compat.c index 61e7170ae1..4459ce275f 100644 --- a/math/w_log2_compat.c +++ b/math/w_log2_compat.c @@ -23,10 +23,12 @@ #include <libm-alias-double.h> -#if LIBM_SVID_COMPAT +#if LIBM_SVID_COMPAT && (SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_29) \ + || defined NO_LONG_DOUBLE \ + || defined LONG_DOUBLE_COMPAT) /* wrapper log2(x) */ double -__log2 (double x) +__log2_compat (double x) { if (__builtin_expect (islessequal (x, 0.0), 0) && _LIB_VERSION != _IEEE_) { @@ -44,5 +46,17 @@ __log2 (double x) return __ieee754_log2 (x); } -libm_alias_double (__log2, log2) +# if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_29) +compat_symbol (libm, __log2_compat, log2, GLIBC_2_1); +# endif +# ifdef NO_LONG_DOUBLE +weak_alias (__log2_compat, log2l) +# endif +# ifdef LONG_DOUBLE_COMPAT +/* Work around gas bug "multiple versions for symbol". */ +weak_alias (__log2_compat, __log2_compat_alias) + +LONG_DOUBLE_COMPAT_CHOOSE_libm_log2l ( + compat_symbol (libm, __log2_compat_alias, log2l, FIRST_VERSION_libm_log2l), ); +# endif #endif diff --git a/sysdeps/i386/fpu/w_log2.c b/sysdeps/i386/fpu/w_log2.c new file mode 100644 index 0000000000..eafbe5cf3e --- /dev/null +++ b/sysdeps/i386/fpu/w_log2.c @@ -0,0 +1 @@ +#include <sysdeps/../math/w_log2.c> diff --git a/sysdeps/ia64/fpu/e_log2.S b/sysdeps/ia64/fpu/e_log2.S index 17893a2ede..eecd72a63a 100644 --- a/sysdeps/ia64/fpu/e_log2.S +++ b/sysdeps/ia64/fpu/e_log2.S @@ -385,7 +385,7 @@ LOCAL_OBJECT_END(T_table) .section .text -GLOBAL_LIBM_ENTRY(log2) +WEAK_LIBM_ENTRY(log2) { .mfi alloc r32=ar.pfs,1,4,4,0 @@ -653,8 +653,14 @@ SPECIAL_LOG2: br.ret.sptk b0;; } -GLOBAL_LIBM_END(log2) -libm_alias_double_other (log2, log2) +WEAK_LIBM_END(log2) +libm_alias_double_other (__log2, log2) +#ifdef SHARED +.symver log2,log2@@GLIBC_2.29 +.weak __log2_compat +.set __log2_compat,__log2 +.symver __log2_compat,log2@GLIBC_2.2 +#endif LOCAL_LIBM_ENTRY(__libm_error_region) diff --git a/sysdeps/ieee754/dbl-64/e_log2.c b/sysdeps/ieee754/dbl-64/e_log2.c index 916eb466f8..6bb1c05d99 100644 --- a/sysdeps/ieee754/dbl-64/e_log2.c +++ b/sysdeps/ieee754/dbl-64/e_log2.c @@ -18,6 +18,9 @@ #include <math.h> #include <stdint.h> +#include <math-svid-compat.h> +#include <shlib-compat.h> +#include <libm-alias-double.h> #include "math_config.h" #define T __log2_data.tab @@ -37,7 +40,7 @@ top16 (double x) } double -__ieee754_log2 (double x) +__log2 (double x) { /* double_t for better performance on targets with FLT_EVAL_METHOD==2. */ double_t z, r, r2, r4, y, invc, logc, kd, hi, lo, t1, t2, t3, p; @@ -136,6 +139,13 @@ __ieee754_log2 (double x) y = lo + r2 * p + hi; return y; } -#ifndef __ieee754_log2 -strong_alias (__ieee754_log2, __log2_finite) +#ifndef __log2 +strong_alias (__log2, __ieee754_log2) +strong_alias (__log2, __log2_finite) +# if LIBM_SVID_COMPAT +versioned_symbol (libm, __log2, log2, GLIBC_2_29); +libm_alias_double_other (__log2, log2) +# else +libm_alias_double (__log2, log2) +# endif #endif diff --git a/sysdeps/ieee754/dbl-64/w_log2.c b/sysdeps/ieee754/dbl-64/w_log2.c new file mode 100644 index 0000000000..1cc8931700 --- /dev/null +++ b/sysdeps/ieee754/dbl-64/w_log2.c @@ -0,0 +1 @@ +/* Not needed. */ diff --git a/sysdeps/m68k/m680x0/fpu/w_log2.c b/sysdeps/m68k/m680x0/fpu/w_log2.c new file mode 100644 index 0000000000..eafbe5cf3e --- /dev/null +++ b/sysdeps/m68k/m680x0/fpu/w_log2.c @@ -0,0 +1 @@ +#include <sysdeps/../math/w_log2.c> diff --git a/sysdeps/mach/hurd/i386/libm.abilist b/sysdeps/mach/hurd/i386/libm.abilist index 144bdb9cac..f319580964 100644 --- a/sysdeps/mach/hurd/i386/libm.abilist +++ b/sysdeps/mach/hurd/i386/libm.abilist @@ -1071,3 +1071,4 @@ GLIBC_2.28 fsubl F GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F +GLIBC_2.29 log2 F diff --git a/sysdeps/unix/sysv/linux/aarch64/libm.abilist b/sysdeps/unix/sysv/linux/aarch64/libm.abilist index 6785ac6aa2..c01ff24dfe 100644 --- a/sysdeps/unix/sysv/linux/aarch64/libm.abilist +++ b/sysdeps/unix/sysv/linux/aarch64/libm.abilist @@ -1035,3 +1035,4 @@ GLIBC_2.28 fsubl F GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F +GLIBC_2.29 log2 F diff --git a/sysdeps/unix/sysv/linux/alpha/libm.abilist b/sysdeps/unix/sysv/linux/alpha/libm.abilist index 132ea00288..f5ec8742dc 100644 --- a/sysdeps/unix/sysv/linux/alpha/libm.abilist +++ b/sysdeps/unix/sysv/linux/alpha/libm.abilist @@ -1046,6 +1046,7 @@ GLIBC_2.28 fsubl F GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F +GLIBC_2.29 log2 F GLIBC_2.3.4 __c1_cabsf F GLIBC_2.3.4 __c1_cacosf F GLIBC_2.3.4 __c1_cacoshf F diff --git a/sysdeps/unix/sysv/linux/arm/libm.abilist b/sysdeps/unix/sysv/linux/arm/libm.abilist index 45a233785d..9b7d87b329 100644 --- a/sysdeps/unix/sysv/linux/arm/libm.abilist +++ b/sysdeps/unix/sysv/linux/arm/libm.abilist @@ -456,6 +456,7 @@ GLIBC_2.28 fsubl F GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F +GLIBC_2.29 log2 F GLIBC_2.4 _LIB_VERSION D 0x4 GLIBC_2.4 __clog10 F GLIBC_2.4 __clog10f F diff --git a/sysdeps/unix/sysv/linux/hppa/libm.abilist b/sysdeps/unix/sysv/linux/hppa/libm.abilist index b0689ff6c5..d193f99561 100644 --- a/sysdeps/unix/sysv/linux/hppa/libm.abilist +++ b/sysdeps/unix/sysv/linux/hppa/libm.abilist @@ -767,4 +767,5 @@ GLIBC_2.28 fsubl F GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F +GLIBC_2.29 log2 F GLIBC_2.4 exp2l F diff --git a/sysdeps/unix/sysv/linux/i386/libm.abilist b/sysdeps/unix/sysv/linux/i386/libm.abilist index 3afd304881..eae2c55d38 100644 --- a/sysdeps/unix/sysv/linux/i386/libm.abilist +++ b/sysdeps/unix/sysv/linux/i386/libm.abilist @@ -1078,3 +1078,4 @@ GLIBC_2.28 fsubl F GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F +GLIBC_2.29 log2 F diff --git a/sysdeps/unix/sysv/linux/ia64/libm.abilist b/sysdeps/unix/sysv/linux/ia64/libm.abilist index 637fd150c2..9796e8d37b 100644 --- a/sysdeps/unix/sysv/linux/ia64/libm.abilist +++ b/sysdeps/unix/sysv/linux/ia64/libm.abilist @@ -1008,3 +1008,4 @@ GLIBC_2.28 fsubl F GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F +GLIBC_2.29 log2 F diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist index 45a233785d..9b7d87b329 100644 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist @@ -456,6 +456,7 @@ GLIBC_2.28 fsubl F GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F +GLIBC_2.29 log2 F GLIBC_2.4 _LIB_VERSION D 0x4 GLIBC_2.4 __clog10 F GLIBC_2.4 __clog10f F diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist index b1689c2e65..f73ad1a35c 100644 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist @@ -807,3 +807,4 @@ GLIBC_2.28 fsubl F GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F +GLIBC_2.29 log2 F diff --git a/sysdeps/unix/sysv/linux/microblaze/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/libm.abilist index ae59dfbd66..dcb7dbba91 100644 --- a/sysdeps/unix/sysv/linux/microblaze/libm.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/libm.abilist @@ -768,3 +768,4 @@ GLIBC_2.28 fsubl F GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F +GLIBC_2.29 log2 F diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist index 38c665147a..1146e2d6fd 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist @@ -767,4 +767,5 @@ GLIBC_2.28 fsubl F GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F +GLIBC_2.29 log2 F GLIBC_2.4 exp2l F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist index 09777c71c7..d9c830da42 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist @@ -1035,3 +1035,4 @@ GLIBC_2.28 fsubl F GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F +GLIBC_2.29 log2 F diff --git a/sysdeps/unix/sysv/linux/nios2/libm.abilist b/sysdeps/unix/sysv/linux/nios2/libm.abilist index 59fc049b86..0902ca01f2 100644 --- a/sysdeps/unix/sysv/linux/nios2/libm.abilist +++ b/sysdeps/unix/sysv/linux/nios2/libm.abilist @@ -768,3 +768,4 @@ GLIBC_2.28 fsubl F GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F +GLIBC_2.29 log2 F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist index 7788f76e81..3e9e5e75fd 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist @@ -813,6 +813,7 @@ GLIBC_2.28 fsubl F GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F +GLIBC_2.29 log2 F GLIBC_2.4 __clog10l F GLIBC_2.4 __finitel F GLIBC_2.4 __fpclassifyl F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist index cae3604a00..7a3c6be1f4 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist @@ -812,6 +812,7 @@ GLIBC_2.28 fsubl F GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F +GLIBC_2.29 log2 F GLIBC_2.4 __clog10l F GLIBC_2.4 __finitel F GLIBC_2.4 __fpclassifyl F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist index 732825e015..d50c82c7c8 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist @@ -1079,3 +1079,4 @@ GLIBC_2.28 fsubl F GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F +GLIBC_2.29 log2 F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist index 59f083dda7..cbf2ad3ca6 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist @@ -491,6 +491,7 @@ GLIBC_2.28 fsubl F GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F +GLIBC_2.29 log2 F GLIBC_2.3 _LIB_VERSION D 0x4 GLIBC_2.3 __clog10 F GLIBC_2.3 __clog10f F diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist index 5a68b2701b..382455c9cf 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist @@ -1036,6 +1036,7 @@ GLIBC_2.28 fsubl F GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F +GLIBC_2.29 log2 F GLIBC_2.4 __clog10l F GLIBC_2.4 __finitel F GLIBC_2.4 __fpclassifyl F diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist index 364f7e63d4..92b794bf12 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist @@ -1036,6 +1036,7 @@ GLIBC_2.28 fsubl F GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F +GLIBC_2.29 log2 F GLIBC_2.4 __clog10l F GLIBC_2.4 __finitel F GLIBC_2.4 __fpclassifyl F diff --git a/sysdeps/unix/sysv/linux/sh/libm.abilist b/sysdeps/unix/sysv/linux/sh/libm.abilist index 489f34db57..3320f1403a 100644 --- a/sysdeps/unix/sysv/linux/sh/libm.abilist +++ b/sysdeps/unix/sysv/linux/sh/libm.abilist @@ -767,4 +767,5 @@ GLIBC_2.28 fsubl F GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F +GLIBC_2.29 log2 F GLIBC_2.4 exp2l F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist index 288986f228..2a10a0ffb9 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist @@ -1043,6 +1043,7 @@ GLIBC_2.28 fsubl F GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F +GLIBC_2.29 log2 F GLIBC_2.4 __clog10l F GLIBC_2.4 __finitel F GLIBC_2.4 __fpclassifyl F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist index 11fb7e4597..ebbc58da91 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist @@ -1035,3 +1035,4 @@ GLIBC_2.28 fsubl F GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F +GLIBC_2.29 log2 F diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist index 9fd399d31a..3e02619df9 100644 --- a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist @@ -1069,3 +1069,4 @@ GLIBC_2.28 fsubl F GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F +GLIBC_2.29 log2 F diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist index bbea57551d..03cd62fd6f 100644 --- a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist @@ -1069,3 +1069,4 @@ GLIBC_2.28 fsubl F GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F +GLIBC_2.29 log2 F |