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

Tested for x86_64 (testsuite, and that disassembly of installed shared
libraries is unchanged by the patch).  Also tested for ARM
(soft-float) that fegetround failures disappear from the linknamespace
test failures (feholdexcept, fesetenv, fesetround and feupdateenv
remain to be addressed before bug 17748 is fully fixed, although this
patch may suffice to fix the failures in some cases, when the libc_fe*
functions are implemented but there is no architecture-specific sqrt
implementation in use so there were failures from fegetround used by
sqrt but no other such failures).

[BZ #17748]
* include/fenv.h (__fegetround): Declare.  Use libm_hidden_proto.
* math/fegetround.c (fegetround): Rename to __fegetround and
define as weak alias of __fegetround.  Use libm_hidden_weak.
* sysdeps/aarch64/fpu/fegetround.c (fegetround): Likewise.
* sysdeps/alpha/fpu/fegetround.c (fegetround): Likewise.
* sysdeps/arm/fegetround.c (fegetround): Likewise.
* sysdeps/hppa/fpu/fegetround.c (fegetround): Likewise.
* sysdeps/i386/fpu/fegetround.c (fegetround): Likewise.
* sysdeps/ia64/fpu/fegetround.c (fegetround): Likewise.
* sysdeps/m68k/fpu/fegetround.c (fegetround): Likewise.
* sysdeps/mips/fpu/fegetround.c (fegetround): Likewise.
* sysdeps/powerpc/fpu/fegetround.c (fegetround): Likewise.
Undefine after rather than before function definition; use
parentheses around function name in definition.
(__fegetround): Also undefine macro after function definition.
* sysdeps/powerpc/nofpu/fegetround.c (fegetround): Rename to
__fegetround and define as weak alias of __fegetround.  Use
libm_hidden_weak.  Do not undefine as macro.
* sysdeps/powerpc/powerpc32/e500/nofpu/fegetround.c (fegetround):
Likewise.
* sysdeps/s390/fpu/fegetround.c (fegetround): Rename to
__fegetround and define as weak alias of __fegetround.  Use
libm_hidden_weak.
* sysdeps/sh/sh4/fpu/fegetround.c (fegetround): Likewise.
* sysdeps/sparc/fpu/fegetround.c (fegetround): Likewise.
* sysdeps/tile/math_private.h (__fegetround): New inline function.
* sysdeps/x86_64/fpu/fegetround.c (fegetround): Rename to
__fegetround and define as weak alias of __fegetround.  Use
libm_hidden_weak.
* sysdeps/ieee754/dbl-64/e_sqrt.c (__ieee754_sqrt): Use
__fegetround instead of fegetround.

20 files changed:
ChangeLog
include/fenv.h
math/fegetround.c
sysdeps/aarch64/fpu/fegetround.c
sysdeps/alpha/fpu/fegetround.c
sysdeps/arm/fegetround.c
sysdeps/hppa/fpu/fegetround.c
sysdeps/i386/fpu/fegetround.c
sysdeps/ia64/fpu/fegetround.c
sysdeps/ieee754/dbl-64/e_sqrt.c
sysdeps/m68k/fpu/fegetround.c
sysdeps/mips/fpu/fegetround.c
sysdeps/powerpc/fpu/fegetround.c
sysdeps/powerpc/nofpu/fegetround.c
sysdeps/powerpc/powerpc32/e500/nofpu/fegetround.c
sysdeps/s390/fpu/fegetround.c
sysdeps/sh/sh4/fpu/fegetround.c
sysdeps/sparc/fpu/fegetround.c
sysdeps/tile/math_private.h
sysdeps/x86_64/fpu/fegetround.c

index eb1909d4374059d0f87e9f0593fd02b9a9efa47c..1b08fb4a10c1cb963af38f284560856e73483178 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,38 @@
 2015-01-02  Joseph Myers  <joseph@codesourcery.com>
 
+       [BZ #17748]
+       * include/fenv.h (__fegetround): Declare.  Use libm_hidden_proto.
+       * math/fegetround.c (fegetround): Rename to __fegetround and
+       define as weak alias of __fegetround.  Use libm_hidden_weak.
+       * sysdeps/aarch64/fpu/fegetround.c (fegetround): Likewise.
+       * sysdeps/alpha/fpu/fegetround.c (fegetround): Likewise.
+       * sysdeps/arm/fegetround.c (fegetround): Likewise.
+       * sysdeps/hppa/fpu/fegetround.c (fegetround): Likewise.
+       * sysdeps/i386/fpu/fegetround.c (fegetround): Likewise.
+       * sysdeps/ia64/fpu/fegetround.c (fegetround): Likewise.
+       * sysdeps/m68k/fpu/fegetround.c (fegetround): Likewise.
+       * sysdeps/mips/fpu/fegetround.c (fegetround): Likewise.
+       * sysdeps/powerpc/fpu/fegetround.c (fegetround): Likewise.
+       Undefine after rather than before function definition; use
+       parentheses around function name in definition.
+       (__fegetround): Also undefine macro after function definition.
+       * sysdeps/powerpc/nofpu/fegetround.c (fegetround): Rename to
+       __fegetround and define as weak alias of __fegetround.  Use
+       libm_hidden_weak.  Do not undefine as macro.
+       * sysdeps/powerpc/powerpc32/e500/nofpu/fegetround.c (fegetround):
+       Likewise.
+       * sysdeps/s390/fpu/fegetround.c (fegetround): Rename to
+       __fegetround and define as weak alias of __fegetround.  Use
+       libm_hidden_weak.
+       * sysdeps/sh/sh4/fpu/fegetround.c (fegetround): Likewise.
+       * sysdeps/sparc/fpu/fegetround.c (fegetround): Likewise.
+       * sysdeps/tile/math_private.h (__fegetround): New inline function.
+       * sysdeps/x86_64/fpu/fegetround.c (fegetround): Rename to
+       __fegetround and define as weak alias of __fegetround.  Use
+       libm_hidden_weak.
+       * sysdeps/ieee754/dbl-64/e_sqrt.c (__ieee754_sqrt): Use
+       __fegetround instead of fegetround.
+
        [BZ #17782]
        * sysdeps/unix/sysv/linux/mips/bits/termios.h (TIOCSER_TEMT):
        Condition macro definition on [__USE_MISC].
index bc8f759e17711be719d78bc073b0f55e98aca577..b29b246089e2766ffe504f8a1e31c032ec82ccb8 100644 (file)
@@ -13,12 +13,14 @@ extern int __fesetexceptflag (const fexcept_t *__flagp, int __excepts);
 extern int __fegetenv (fenv_t *__envp);
 extern int __fesetenv (const fenv_t *__envp);
 extern int __feupdateenv (const fenv_t *__envp);
+extern __typeof (fegetround) __fegetround;
 
 libm_hidden_proto (feraiseexcept)
 libm_hidden_proto (__feraiseexcept)
 libm_hidden_proto (fegetenv)
 libm_hidden_proto (__fegetenv)
 libm_hidden_proto (fegetround)
+libm_hidden_proto (__fegetround)
 libm_hidden_proto (fesetenv)
 libm_hidden_proto (fesetround)
 libm_hidden_proto (feholdexcept)
index 665268e359433afd5cdd4e27dfcfadb462d1498c..7c150ec7bc27019c0860d8b3761fee1ab0d4c104 100644 (file)
@@ -20,7 +20,7 @@
 #include <fenv.h>
 
 int
-fegetround (void)
+__fegetround (void)
 {
 #ifdef FE_TONEAREST
   return FE_TONEAREST;
@@ -28,5 +28,7 @@ fegetround (void)
   return 0;
 #endif
 }
-libm_hidden_def (fegetround)
+libm_hidden_def (__fegetround)
+weak_alias (__fegetround, fegetround)
+libm_hidden_weak (fegetround)
 stub_warning (fegetround)
index 4c81845ba208c96cdf5bfad254895c64addc8386..5af36f771576344c3dcda8c4132a1f52a5b5104f 100644 (file)
 #include <get-rounding-mode.h>
 
 int
-fegetround (void)
+__fegetround (void)
 {
   return get_rounding_mode ();
 }
-libm_hidden_def (fegetround)
+libm_hidden_def (__fegetround)
+weak_alias (__fegetround, fegetround)
+libm_hidden_weak (fegetround)
index 613110bbe426716acd1b339d859294002ae5dbd5..d346decd9549900ea98342c41664d9ff98d8b3ad 100644 (file)
@@ -20,7 +20,7 @@
 #include <fenv_libc.h>
 
 int
-fegetround (void)
+__fegetround (void)
 {
   unsigned long fpcr;
 
@@ -28,4 +28,6 @@ fegetround (void)
 
   return (fpcr >> FPCR_ROUND_SHIFT) & 3;
 }
-libm_hidden_def (fegetround)
+libm_hidden_def (__fegetround)
+weak_alias (__fegetround, fegetround)
+libm_hidden_weak (fegetround)
index bd03667665d9eeedd3fa46c424f9323b3c699562..348c23ee499477fd1df4b5a9bef2e2a67164b6d0 100644 (file)
 
 
 int
-fegetround (void)
+__fegetround (void)
 {
   return get_rounding_mode ();
 }
-libm_hidden_def (fegetround)
+libm_hidden_def (__fegetround)
+weak_alias (__fegetround, fegetround)
+libm_hidden_weak (fegetround)
index fc4cbed39acb42c081aac7a8d64c6bf7e3d1a496..aae88b7b1a984ea8d6658e4539f0388fe3699ba2 100644 (file)
 #include <get-rounding-mode.h>
 
 int
-fegetround (void)
+__fegetround (void)
 {
   return get_rounding_mode ();
 }
-libm_hidden_def (fegetround)
+libm_hidden_def (__fegetround)
+weak_alias (__fegetround, fegetround)
+libm_hidden_weak (fegetround)
index 1b25c325892c4454047c28990ccb81020060ae2a..1662e2e66e52a24759cc67009c1385070e7d9fb2 100644 (file)
@@ -20,7 +20,7 @@
 #include <fenv.h>
 
 int
-fegetround (void)
+__fegetround (void)
 {
   int cw;
 
@@ -28,4 +28,6 @@ fegetround (void)
 
   return cw & 0xc00;
 }
-libm_hidden_def (fegetround)
+libm_hidden_def (__fegetround)
+weak_alias (__fegetround, fegetround)
+libm_hidden_weak (fegetround)
index 38f769f735a58a26e3e6810ef5efc5a1c8bf600e..cf2991194aebec0366350946021ed3b1b1d2fb53 100644 (file)
 #include <get-rounding-mode.h>
 
 int
-fegetround (void)
+__fegetround (void)
 {
   return get_rounding_mode ();
 }
-libm_hidden_def (fegetround)
+libm_hidden_def (__fegetround)
+weak_alias (__fegetround, fegetround)
+libm_hidden_weak (fegetround)
index 3b34e54634f1dbd3503278e205c0aca92b3ee1ef..fff6d148fef3a405dcdaf106e143d481bb3213de 100644 (file)
@@ -66,7 +66,7 @@ __ieee754_sqrt (double x)
   /*----------------- 2^-1022  <= | x |< 2^1024  -----------------*/
   if (k > 0x000fffff && k < 0x7ff00000)
     {
-      int rm = fegetround ();
+      int rm = __fegetround ();
       fenv_t env;
       libc_feholdexcept_setround (&env, FE_TONEAREST);
       double ret;
index b0302e1c7b0c1de12fb2e7bb10853165e3481f06..0777657833eab38e2a02c7367c5e7699ef5ecfda 100644 (file)
@@ -20,7 +20,7 @@
 #include <fenv.h>
 
 int
-fegetround (void)
+__fegetround (void)
 {
   int fpcr;
 
@@ -28,4 +28,6 @@ fegetround (void)
 
   return fpcr & FE_UPWARD;
 }
-libm_hidden_def (fegetround)
+libm_hidden_def (__fegetround)
+weak_alias (__fegetround, fegetround)
+libm_hidden_weak (fegetround)
index 99403cd54b2c4baa1ed3e2224dfeb1a910c72283..bfe9130f60308d25a31476ce8b8a1b484cd64eb8 100644 (file)
@@ -21,7 +21,7 @@
 #include <fpu_control.h>
 
 int
-fegetround (void)
+__fegetround (void)
 {
   int cw;
 
@@ -30,4 +30,6 @@ fegetround (void)
 
   return cw & _FPU_RC_MASK;
 }
-libm_hidden_def (fegetround)
+libm_hidden_def (__fegetround)
+weak_alias (__fegetround, fegetround)
+libm_hidden_weak (fegetround)
index a18be8306fb954bb6014ad269ec9d757af78c372..af97f72c6c762996b8026c06d9ee5adb7e0bf131 100644 (file)
 
 #include <fenv_libc.h>
 
-#undef fegetround
 int
-fegetround (void)
+(__fegetround) (void)
 {
   return __fegetround();
 }
-libm_hidden_def (fegetround)
+#undef fegetround
+#undef __fegetround
+libm_hidden_def (__fegetround)
+weak_alias (__fegetround, fegetround)
+libm_hidden_weak (fegetround)
index 9de326cc0f6f2d1fe87de3207ad48cf22d983f35..311b2d5749bfc6f6e1b410cc9b1e49733db06eb9 100644 (file)
 #include "soft-fp.h"
 #include "soft-supp.h"
 
-#undef fegetround
 int
-fegetround (void)
+__fegetround (void)
 {
   return __sim_round_mode_thread;
 }
-libm_hidden_def (fegetround)
+libm_hidden_def (__fegetround)
+weak_alias (__fegetround, fegetround)
+libm_hidden_weak (fegetround)
index c71a8fc627ce7826b45fcd8e92238c460353f9f2..bbdeba70b1e1f883b11dd3b7f75b84d32383e32c 100644 (file)
 
 #include <fenv_libc.h>
 
-#undef fegetround
 int
-fegetround (void)
+__fegetround (void)
 {
   unsigned long fpescr;
 
   fpescr = fegetenv_register ();
   return fpescr & 3;
 }
-libm_hidden_def (fegetround)
+libm_hidden_def (__fegetround)
+weak_alias (__fegetround, fegetround)
+libm_hidden_weak (fegetround)
index dd4e81ff737f7ba41f5221a6822d984727c1c19f..f60821457c262420ff212d80fd4bfa19b51ba93b 100644 (file)
@@ -21,7 +21,7 @@
 #include <fpu_control.h>
 
 int
-fegetround (void)
+__fegetround (void)
 {
   fexcept_t cw;
 
@@ -29,4 +29,6 @@ fegetround (void)
 
   return cw & FPC_RM_MASK;
 }
-libm_hidden_def (fegetround)
+libm_hidden_def (__fegetround)
+weak_alias (__fegetround, fegetround)
+libm_hidden_weak (fegetround)
index 639b7c2f7e368b9886c6446485ec9b55f19ee5a1..f227564846ed349e558b3ef008657249015aa26f 100644 (file)
@@ -21,7 +21,7 @@
 #include <fpu_control.h>
 
 int
-fegetround (void)
+__fegetround (void)
 {
   fpu_control_t cw;
 
@@ -30,4 +30,6 @@ fegetround (void)
 
   return cw & 0x1;
 }
-libm_hidden_def (fegetround)
+libm_hidden_def (__fegetround)
+weak_alias (__fegetround, fegetround)
+libm_hidden_weak (fegetround)
index 9eba970b6764169618fd7eae5e900bfeb4e7c3e6..ebcf21ca35186f046c44016e7c80fcd12e0d42a0 100644 (file)
@@ -19,7 +19,7 @@
 #include <fenv.h>
 
 int
-fegetround (void)
+__fegetround (void)
 {
   fenv_t tmp;
 
@@ -27,4 +27,6 @@ fegetround (void)
 
   return tmp & __FE_ROUND_MASK;
 }
-libm_hidden_def (fegetround)
+libm_hidden_def (__fegetround)
+weak_alias (__fegetround, fegetround)
+libm_hidden_weak (fegetround)
index 70e4fb206007eb7cbe257d8cec5412ec3be3c370..6b9e7618dd1d001c3e8b2610742de6b4d7cd41b0 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 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; }
 
 #endif
index 4796e80db2346b6a965705405312c0177753e769..b515d8afe7516bf9f04222f75c1e6783eec991a3 100644 (file)
@@ -20,7 +20,7 @@
 #include <fenv.h>
 
 int
-fegetround (void)
+__fegetround (void)
 {
   int cw;
   /* We only check the x87 FPU unit.  The SSE unit should be the same
@@ -30,4 +30,6 @@ fegetround (void)
 
   return cw & 0xc00;
 }
-libm_hidden_def (fegetround)
+libm_hidden_def (__fegetround)
+weak_alias (__fegetround, fegetround)
+libm_hidden_weak (fegetround)