This is the mail archive of the libc-hacker@sourceware.org mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
This change exposes a few bugs in the soft-fp implementations for PPC. The current feholdexcept implementation has where it uses fesetenv to resort the current env: /* Get the current state. */ fegetenv (envp); u.fenv = *envp; /* Clear everything except the rounding mode. */ u.l[0] &= 0x3; /* ?? Should we clear the disabled exceptions as well ?? */ /* Put the new state in effect. */ fesetenv (envp); Which is incorrect. It should disable exceptions and pass the updated env to fesetenv: /* Disable exceptions */ u.l[1] = FE_ALL_EXCEPT; /* Put the new state in effect. */ fesetenv (&u.fenv); Finally the powerpc/nofpu version is missing the libm_hidden_def which results in a link error in make check. The attached patch fixes all of these problems.
2007-04-02 Steven Munroe <sjmunroe@us.ibm.com>
* sysdeps/powerpc/nofpu/feholdexcpt.c (feholdexcept): Disable
exceptions. Use the updated env in fesetenv().
Add libm_hidden_def.
diff -urN libc25-cvstip-20070320/ports/sysdeps/powerpc/nofpu/feholdexcpt.c libc25/ports/sysdeps/powerpc/nofpu/feholdexcpt.c
--- libc25-cvstip-20070320/ports/sysdeps/powerpc/nofpu/feholdexcpt.c 2002-10-19 15:06:29.000000000 -0500
+++ libc25/ports/sysdeps/powerpc/nofpu/feholdexcpt.c 2007-04-02 10:57:50.350540888 -0500
@@ -1,6 +1,6 @@
/* Store current floating-point environment and clear exceptions
(soft-float edition).
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2007 Free Software Foundation, Inc.
Contributed by Aldy Hernandez <aldyh@redhat.com>, 2002.
This file is part of the GNU C Library.
@@ -33,11 +33,12 @@
u.fenv = *envp;
/* Clear everything except the rounding mode. */
u.l[0] &= 0x3;
-
- /* ?? Should we clear the disabled exceptions as well ?? */
+ /* Disable exceptions */
+ u.l[1] = FE_ALL_EXCEPT;
/* Put the new state in effect. */
- fesetenv (envp);
+ fesetenv (&u.fenv);
return 0;
}
+libm_hidden_def (feholdexcept)
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |