diff options
33 files changed, 112 insertions, 10 deletions
@@ -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 87aa659..a887602 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 0000000..148d5d4 --- /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 61e7170..4459ce2 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 0000000..eafbe5c --- /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 17893a2..eecd72a 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 916eb46..6bb1c05 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 0000000..1cc8931 --- /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 0000000..eafbe5c --- /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 144bdb9..f319580 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 6785ac6..c01ff24 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 132ea00..f5ec874 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 45a2337..9b7d87b 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 b0689ff..d193f99 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 3afd304..eae2c55 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 637fd15..9796e8d 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 45a2337..9b7d87b 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 b1689c2..f73ad1a 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 ae59dfb..dcb7dbb 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 38c6651..1146e2d 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 09777c7..d9c830d 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 59fc049..0902ca0 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 7788f76..3e9e5e7 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 cae3604..7a3c6be 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 732825e..d50c82c 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 59f083d..cbf2ad3 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 5a68b27..382455c 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 364f7e6..92b794b 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 489f34d..3320f14 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 288986f..2a10a0f 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 11fb7e4..ebbc58d 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 9fd399d..3e02619 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 bbea575..03cd62f 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 |