mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-27 03:41:23 +08:00
Fix libm fegetround namespace (bug 17748).
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.
This commit is contained in:
parent
253a59ccb5
commit
b93c2205ec
33
ChangeLog
33
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].
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -20,8 +20,10 @@
|
||||
#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)
|
||||
|
@ -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)
|
||||
|
@ -20,8 +20,10 @@
|
||||
|
||||
|
||||
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)
|
||||
|
@ -20,8 +20,10 @@
|
||||
#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)
|
||||
|
@ -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)
|
||||
|
@ -20,8 +20,10 @@
|
||||
#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)
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -18,10 +18,13 @@
|
||||
|
||||
#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)
|
||||
|
@ -20,10 +20,11 @@
|
||||
#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)
|
||||
|
@ -18,13 +18,14 @@
|
||||
|
||||
#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)
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user