]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Fix libm feupdateenv namespace (bug 17748).
authorJoseph Myers <joseph@codesourcery.com>
Wed, 7 Jan 2015 19:01:20 +0000 (19:01 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Wed, 7 Jan 2015 19:01:20 +0000 (19:01 +0000)
Concluding the fixes for C90 libm functions calling C99 fe* functions,
this patch fixes the case of feupdateenv by making it a weak alias for
__feupdateenv and making the affected code call __feupdateenv.

Tested for x86_64 (testsuite, and that installed stripped shared
libraries are unchanged by the patch).  Also tested for ARM
(soft-float) that the math.h linknamespace tests now pass.

[BZ #17748]
* include/fenv.h (__feupdateenv): Use libm_hidden_proto.
* math/feupdateenv.c (__feupdateenv): Use libm_hidden_def.
* sysdeps/aarch64/fpu/feupdateenv.c (feupdateenv): Rename to
__feupdateenv and define as weak alias of __feupdateenv.  Use
libm_hidden_weak.
* sysdeps/alpha/fpu/feupdateenv.c (__feupdateenv): Use
libm_hidden_def.
* sysdeps/arm/feupdateenv.c (feupdateenv): Rename to __feupdateenv
and define as weak alias of __feupdateenv.  Use libm_hidden_weak.
* sysdeps/hppa/fpu/feupdateenv.c (feupdateenv): Likewise.
* sysdeps/i386/fpu/feupdateenv.c (__feupdateenv): Use
libm_hidden_def.
* sysdeps/ia64/fpu/feupdateenv.c (feupdateenv): Rename to
__feupdateenv and define as weak alias of __feupdateenv.  Use
libm_hidden_weak.
* sysdeps/m68k/fpu/feupdateenv.c (__feupdateenv): Use
libm_hidden_def.
* sysdeps/mips/fpu/feupdateenv.c (feupdateenv): Rename to
__feupdateenv and define as weak alias of __feupdateenv.  Use
libm_hidden_weak.
* sysdeps/powerpc/fpu/feupdateenv.c (__feupdateenv): Use
libm_hidden_def.
* sysdeps/powerpc/nofpu/feupdateenv.c (__feupdateenv): Likewise.
* sysdeps/powerpc/powerpc32/e500/nofpu/feupdateenv.c
(__feupdateenv): Likewise.
* sysdeps/s390/fpu/feupdateenv.c (feupdateenv): Rename to
__feupdateenv and define as weak alias of __feupdateenv.  Use
libm_hidden_weak.
* sysdeps/sh/sh4/fpu/feupdateenv.c (feupdateenv): Likewise.
* sysdeps/sparc/fpu/feupdateenv.c (__feupdateenv): Use
libm_hidden_def.
* sysdeps/tile/math_private.h (__feupdateenv): New inline
function.
* sysdeps/x86_64/fpu/feupdateenv.c (__feupdateenv): Use
libm_hidden_def.
* sysdeps/generic/math_private.h (default_libc_feupdateenv): Call
__feupdateenv instead of feupdateenv.
(default_libc_feupdateenv_test): Likewise.
(libc_feresetround_ctx): Likewise.

21 files changed:
ChangeLog
NEWS
include/fenv.h
math/feupdateenv.c
sysdeps/aarch64/fpu/feupdateenv.c
sysdeps/alpha/fpu/feupdateenv.c
sysdeps/arm/feupdateenv.c
sysdeps/generic/math_private.h
sysdeps/hppa/fpu/feupdateenv.c
sysdeps/i386/fpu/feupdateenv.c
sysdeps/ia64/fpu/feupdateenv.c
sysdeps/m68k/fpu/feupdateenv.c
sysdeps/mips/fpu/feupdateenv.c
sysdeps/powerpc/fpu/feupdateenv.c
sysdeps/powerpc/nofpu/feupdateenv.c
sysdeps/powerpc/powerpc32/e500/nofpu/feupdateenv.c
sysdeps/s390/fpu/feupdateenv.c
sysdeps/sh/sh4/fpu/feupdateenv.c
sysdeps/sparc/fpu/feupdateenv.c
sysdeps/tile/math_private.h
sysdeps/x86_64/fpu/feupdateenv.c

index 98d3dc2a8ce3dcf7c4f06f7a466dc0d7680f76dc..9066946203d22df7d63e082285fac477a83d5e2d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,46 @@
+2015-01-07  Joseph Myers  <joseph@codesourcery.com>
+
+       [BZ #17748]
+       * include/fenv.h (__feupdateenv): Use libm_hidden_proto.
+       * math/feupdateenv.c (__feupdateenv): Use libm_hidden_def.
+       * sysdeps/aarch64/fpu/feupdateenv.c (feupdateenv): Rename to
+       __feupdateenv and define as weak alias of __feupdateenv.  Use
+       libm_hidden_weak.
+       * sysdeps/alpha/fpu/feupdateenv.c (__feupdateenv): Use
+       libm_hidden_def.
+       * sysdeps/arm/feupdateenv.c (feupdateenv): Rename to __feupdateenv
+       and define as weak alias of __feupdateenv.  Use libm_hidden_weak.
+       * sysdeps/hppa/fpu/feupdateenv.c (feupdateenv): Likewise.
+       * sysdeps/i386/fpu/feupdateenv.c (__feupdateenv): Use
+       libm_hidden_def.
+       * sysdeps/ia64/fpu/feupdateenv.c (feupdateenv): Rename to
+       __feupdateenv and define as weak alias of __feupdateenv.  Use
+       libm_hidden_weak.
+       * sysdeps/m68k/fpu/feupdateenv.c (__feupdateenv): Use
+       libm_hidden_def.
+       * sysdeps/mips/fpu/feupdateenv.c (feupdateenv): Rename to
+       __feupdateenv and define as weak alias of __feupdateenv.  Use
+       libm_hidden_weak.
+       * sysdeps/powerpc/fpu/feupdateenv.c (__feupdateenv): Use
+       libm_hidden_def.
+       * sysdeps/powerpc/nofpu/feupdateenv.c (__feupdateenv): Likewise.
+       * sysdeps/powerpc/powerpc32/e500/nofpu/feupdateenv.c
+       (__feupdateenv): Likewise.
+       * sysdeps/s390/fpu/feupdateenv.c (feupdateenv): Rename to
+       __feupdateenv and define as weak alias of __feupdateenv.  Use
+       libm_hidden_weak.
+       * sysdeps/sh/sh4/fpu/feupdateenv.c (feupdateenv): Likewise.
+       * sysdeps/sparc/fpu/feupdateenv.c (__feupdateenv): Use
+       libm_hidden_def.
+       * sysdeps/tile/math_private.h (__feupdateenv): New inline
+       function.
+       * sysdeps/x86_64/fpu/feupdateenv.c (__feupdateenv): Use
+       libm_hidden_def.
+       * sysdeps/generic/math_private.h (default_libc_feupdateenv): Call
+       __feupdateenv instead of feupdateenv.
+       (default_libc_feupdateenv_test): Likewise.
+       (libc_feresetround_ctx): Likewise.
+
 2015-01-07  Adhemerval Zanella  <azanella@linux.vnet.ibm.com>
 
        * sysdeps/unix/sysv/linux/mips/pread.c (__libc_pread): Fix function
diff --git a/NEWS b/NEWS
index 975b67550bb786dae7062e746b7e88ce54c0fb29..a2f93a18e33f666b624c6127462af712a1171f41 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -16,8 +16,8 @@ Version 2.21
   17582, 17583, 17584, 17585, 17589, 17594, 17601, 17608, 17616, 17625,
   17630, 17633, 17634, 17635, 17647, 17653, 17657, 17658, 17664, 17665,
   17668, 17682, 17717, 17719, 17722, 17723, 17724, 17725, 17732, 17733,
-  17744, 17745, 17746, 17747, 17775, 17777, 17780, 17781, 17782, 17793,
-  17796, 17797, 17806
+  17744, 17745, 17746, 17747, 17748, 17775, 17777, 17780, 17781, 17782,
+  17793, 17796, 17797, 17806
 
 * Optimized strcpy, stpcpy, strchrnul and strrchr implementations for
   AArch64.  Contributed by ARM Ltd.
index c496d10f48df7cdc92e633550943d7c36f2e7ea7..7070199eced61c542c6ea9f790f60b7e35b02ead 100644 (file)
@@ -30,6 +30,7 @@ libm_hidden_proto (__fesetround)
 libm_hidden_proto (feholdexcept)
 libm_hidden_proto (__feholdexcept)
 libm_hidden_proto (feupdateenv)
+libm_hidden_proto (__feupdateenv)
 libm_hidden_proto (fetestexcept)
 libm_hidden_proto (feclearexcept)
 
index f49029fc97e064dce8c43ba25045be3936efcf8f..dac39c0da4e1af81d5d93d5490b2136573f461c9 100644 (file)
@@ -34,6 +34,7 @@ __feupdateenv (const fenv_t *envp)
 strong_alias (__feupdateenv, __old_feupdateenv)
 compat_symbol (libm, __old_feupdateenv, feupdateenv, GLIBC_2_1);
 #endif
+libm_hidden_def (__feupdateenv)
 libm_hidden_ver (__feupdateenv, feupdateenv)
 versioned_symbol (libm, __feupdateenv, feupdateenv, GLIBC_2_2);
 
index 94958a887f9dd7b615acfe9b1f1a36e4f55fa65a..12e799ec77bb1222d356780060d8ea8df621a7a8 100644 (file)
@@ -20,7 +20,7 @@
 #include <fpu_control.h>
 
 int
-feupdateenv (const fenv_t *envp)
+__feupdateenv (const fenv_t *envp)
 {
   fpu_control_t fpcr;
   fpu_control_t fpcr_new;
@@ -84,4 +84,6 @@ feupdateenv (const fenv_t *envp)
 
   return 0;
 }
-libm_hidden_def (feupdateenv)
+libm_hidden_def (__feupdateenv)
+weak_alias (__feupdateenv, feupdateenv)
+libm_hidden_weak (feupdateenv)
index 8b521454de3800c7104447a686f50e1a585dfd98..ab63c962d2d49895a0190a768ae359707fc01d9e 100644 (file)
@@ -45,5 +45,6 @@ strong_alias (__feupdateenv, __old_feupdateenv)
 compat_symbol (libm, __old_feupdateenv, feupdateenv, GLIBC_2_1);
 #endif
 
+libm_hidden_def (__feupdateenv)
 libm_hidden_ver (__feupdateenv, feupdateenv)
 versioned_symbol (libm, __feupdateenv, feupdateenv, GLIBC_2_2);
index cc2989545ca5da86fb6ada367a895cfcf4b5d877..f7478e1bc748742491184a450eb0ce3cc6541c72 100644 (file)
@@ -23,7 +23,7 @@
 
 
 int
-feupdateenv (const fenv_t *envp)
+__feupdateenv (const fenv_t *envp)
 {
   fpu_control_t fpscr, new_fpscr, updated_fpscr;
   int excepts;
@@ -73,4 +73,6 @@ feupdateenv (const fenv_t *envp)
 
   return 0;
 }
-libm_hidden_def (feupdateenv)
+libm_hidden_def (__feupdateenv)
+weak_alias (__feupdateenv, feupdateenv)
+libm_hidden_weak (feupdateenv)
index 24e2babd61701483f7dea042832c078b630ca2e2..0ab547d82f797d177a787b1f8fa7f64cd031f06f 100644 (file)
@@ -478,7 +478,7 @@ default_libc_fesetenv (fenv_t *e)
 static __always_inline void
 default_libc_feupdateenv (fenv_t *e)
 {
-  (void) feupdateenv (e);
+  (void) __feupdateenv (e);
 }
 
 #ifndef libc_feupdateenv
@@ -499,7 +499,7 @@ static __always_inline int
 default_libc_feupdateenv_test (fenv_t *e, int ex)
 {
   int ret = fetestexcept (ex);
-  feupdateenv (e);
+  __feupdateenv (e);
   return ret;
 }
 
@@ -608,7 +608,7 @@ libc_feresetround_ctx (struct rm_ctx *ctx)
 {
   /* Restore the rounding mode if updated.  */
   if (__glibc_unlikely (ctx->updated_status))
-    feupdateenv (&ctx->env);
+    __feupdateenv (&ctx->env);
 }
 
 static __always_inline void
index e6a07c31f408efc6923b5862bee780a58d5582fd..931f7e629232f72d6b46a03a32e78c3cb9a757bd 100644 (file)
@@ -21,7 +21,7 @@
 #include <string.h>
 
 int
-feupdateenv (const fenv_t *envp)
+__feupdateenv (const fenv_t *envp)
 {
   union { unsigned long long l; unsigned int sw[2]; } s;
   fenv_t temp;
@@ -37,4 +37,6 @@ feupdateenv (const fenv_t *envp)
   /* Success.  */
   return 0;
 }
-libm_hidden_def (feupdateenv)
+libm_hidden_def (__feupdateenv)
+weak_alias (__feupdateenv, feupdateenv)
+libm_hidden_weak (feupdateenv)
index 2f58ab39ffd0cfa391c3954475bec2df230bdf04..de461a4d517abee75e13ddfda78631118dc11e8a 100644 (file)
@@ -55,5 +55,6 @@ strong_alias (__feupdateenv, __old_feupdateenv)
 compat_symbol (libm, __old_feupdateenv, feupdateenv, GLIBC_2_1);
 #endif
 
+libm_hidden_def (__feupdateenv)
 libm_hidden_ver (__feupdateenv, feupdateenv)
 versioned_symbol (libm, __feupdateenv, feupdateenv, GLIBC_2_2);
index c6415ed38b9b883252d7f19c2f9fb64aed5d6016..89597bef6181d787ebfc09cd4999693cb87f602b 100644 (file)
@@ -20,7 +20,7 @@
 #include <fenv.h>
 
 int
-feupdateenv (const fenv_t *envp)
+__feupdateenv (const fenv_t *envp)
 {
   fenv_t fpsr;
 
@@ -37,4 +37,6 @@ feupdateenv (const fenv_t *envp)
   /* Success.  */
   return 0;
 }
-libm_hidden_def (feupdateenv)
+libm_hidden_def (__feupdateenv)
+weak_alias (__feupdateenv, feupdateenv)
+libm_hidden_weak (feupdateenv)
index 80bd59322e748522214f3f5981443026e7f02160..9bd341872538822fec4a78c0716a7c454f529bb3 100644 (file)
@@ -46,5 +46,6 @@ strong_alias (__feupdateenv, __old_feupdateenv)
 compat_symbol (libm, __old_feupdateenv, feupdateenv, GLIBC_2_1);
 #endif
 
+libm_hidden_def (__feupdateenv)
 libm_hidden_ver (__feupdateenv, feupdateenv)
 versioned_symbol (libm, __feupdateenv, feupdateenv, GLIBC_2_2);
index 2fe8ebe60ccabaacc4df8a412b0ed27336954522..899d49441bc97dd8e04b5a243382a0964ac406ac 100644 (file)
@@ -21,7 +21,7 @@
 #include <fpu_control.h>
 
 int
-feupdateenv (const fenv_t *envp)
+__feupdateenv (const fenv_t *envp)
 {
   int temp;
 
@@ -40,4 +40,6 @@ feupdateenv (const fenv_t *envp)
   /* Success.  */
   return 0;
 }
-libm_hidden_def (feupdateenv)
+libm_hidden_def (__feupdateenv)
+weak_alias (__feupdateenv, feupdateenv)
+libm_hidden_weak (feupdateenv)
index 326efe0f8fba7a9e5aa51743b3151e9930021598..1e0db9e3c10135c884d31ed77fb4b5d9296e1d83 100644 (file)
@@ -63,5 +63,6 @@ strong_alias (__feupdateenv, __old_feupdateenv)
 compat_symbol (libm, __old_feupdateenv, feupdateenv, GLIBC_2_1);
 #endif
 
+libm_hidden_def (__feupdateenv)
 libm_hidden_ver (__feupdateenv, feupdateenv)
 versioned_symbol (libm, __feupdateenv, feupdateenv, GLIBC_2_2);
index 892e4637273cc9266ec3d07a0f677414e8dceb25..04413430ce684eebc6bdf63c0f735c6b9ee14a4e 100644 (file)
@@ -48,5 +48,6 @@ strong_alias (__feupdateenv, __old_feupdateenv)
 compat_symbol (libm, __old_feupdateenv, feupdateenv, GLIBC_2_1);
 #endif
 
+libm_hidden_def (__feupdateenv)
 libm_hidden_ver (__feupdateenv, feupdateenv)
 versioned_symbol (libm, __feupdateenv, feupdateenv, GLIBC_2_2);
index cb6a1487ac7fb8a77104a2beeb32ccf57e7538a0..ca88d2afea729f3773b3e715c5984c4b21106c2e 100644 (file)
@@ -43,5 +43,6 @@ strong_alias (__feupdateenv, __old_feupdateenv)
 compat_symbol (libm, __old_feupdateenv, feupdateenv, GLIBC_2_1);
 #endif
 
+libm_hidden_def (__feupdateenv)
 libm_hidden_ver (__feupdateenv, feupdateenv)
 versioned_symbol (libm, __feupdateenv, feupdateenv, GLIBC_2_2);
index 957c8fe9addaaa0dd32345abcddbb7452de1e303..7e2cf150793695a7b4cd175a636bd2c64fcd5767 100644 (file)
@@ -22,7 +22,7 @@
 #include <fpu_control.h>
 
 int
-feupdateenv (const fenv_t *envp)
+__feupdateenv (const fenv_t *envp)
 {
   fexcept_t temp;
 
@@ -37,4 +37,6 @@ feupdateenv (const fenv_t *envp)
   /* Success.  */
   return 0;
 }
-libm_hidden_def (feupdateenv)
+libm_hidden_def (__feupdateenv)
+weak_alias (__feupdateenv, feupdateenv)
+libm_hidden_weak (feupdateenv)
index 25729d9c1ffb288a13546bb80ba17ee180769888..b72822b032367226c59d79c12d9f1889e447d771 100644 (file)
@@ -21,7 +21,7 @@
 #include <fpu_control.h>
 
 int
-feupdateenv (const fenv_t *envp)
+__feupdateenv (const fenv_t *envp)
 {
   fpu_control_t temp;
 
@@ -36,4 +36,6 @@ feupdateenv (const fenv_t *envp)
 
   return 0;
 }
-libm_hidden_def (feupdateenv)
+libm_hidden_def (__feupdateenv)
+weak_alias (__feupdateenv, feupdateenv)
+libm_hidden_weak (feupdateenv)
index cb001e19c88c9d818ce9e697700e2c812284439f..f46e6c65297c0f013ac14e7893fb8aa7c7c1c72c 100644 (file)
@@ -45,5 +45,6 @@ strong_alias (__feupdateenv, __old_feupdateenv)
 compat_symbol (libm, __old_feupdateenv, feupdateenv, GLIBC_2_1);
 #endif
 
+libm_hidden_def (__feupdateenv)
 libm_hidden_ver (__feupdateenv, feupdateenv)
 versioned_symbol (libm, __feupdateenv, feupdateenv, GLIBC_2_2);
index b06e3a321d9cef6ad8a93f7db8b6a7e3002a319c..9b6b68b324123e35c1211fe580f3fb78db1360a7 100644 (file)
@@ -34,6 +34,7 @@ extern inline int __fegetenv (fenv_t *__e)    { return 0; }
 extern inline int fesetenv (const fenv_t *__e) { return 0; }
 extern inline int __fesetenv (const fenv_t *__e)       { return 0; }
 extern inline int feupdateenv (const fenv_t *__e) { return 0; }
+extern inline int __feupdateenv (const fenv_t *__e) { return 0; }
 extern inline int fegetround (void)            { return FE_TONEAREST; }
 extern inline int __fegetround (void)          { return FE_TONEAREST; }
 extern inline int fesetround (int __d)         { return 0; }
index 7aab1ad2ca527dbe5dd80d82e2d834b6ae88142c..99dfdd8f5c56c3e49b88660a73e2aeb926c9ddcb 100644 (file)
@@ -47,5 +47,6 @@ strong_alias (__feupdateenv, __old_feupdateenv)
 compat_symbol (libm, __old_feupdateenv, feupdateenv, GLIBC_2_1);
 #endif
 
+libm_hidden_def (__feupdateenv)
 libm_hidden_ver (__feupdateenv, feupdateenv)
 versioned_symbol (libm, __feupdateenv, feupdateenv, GLIBC_2_2);