aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Jacobowitz <dan@codesourcery.com>2007-08-29 20:34:36 +0000
committerDaniel Jacobowitz <dan@codesourcery.com>2007-08-29 20:34:36 +0000
commitce7a1add4e1be2b9e80a95eaa4f3e62e56c24612 (patch)
tree1463d18e3059670c638cc6f645012215696a2a5b
parentceb34e81f0b53ffc48189c2fd9f0c00335552d69 (diff)
downloadglibc-ce7a1add4e1be2b9e80a95eaa4f3e62e56c24612.tar.xz
glibc-ce7a1add4e1be2b9e80a95eaa4f3e62e56c24612.zip
* sysdeps/powerpc/nofpu/fsetexcptflg.c (__fesetexceptflag): Do not
clobber other exceptions. * sysdeps/powerpc/nofpu/feupdateenv.c (__feupdateenv): Raise new exceptions. * sysdeps/powerpc/nofpu/fraiseexcpt.c (__feraiseexcept): Handle multiple new exceptions if some are disabled. * sysdeps/powerpc/nofpu/sim-full.c (__simulate_exceptions): Likewise.
-rw-r--r--ChangeLog.powerpc10
-rw-r--r--sysdeps/powerpc/nofpu/feupdateenv.c4
-rw-r--r--sysdeps/powerpc/nofpu/fraiseexcpt.c5
-rw-r--r--sysdeps/powerpc/nofpu/fsetexcptflg.c2
-rw-r--r--sysdeps/powerpc/nofpu/sim-full.c5
5 files changed, 16 insertions, 10 deletions
diff --git a/ChangeLog.powerpc b/ChangeLog.powerpc
index c775ee052b..463dd291a5 100644
--- a/ChangeLog.powerpc
+++ b/ChangeLog.powerpc
@@ -1,3 +1,13 @@
+2007-08-29 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * sysdeps/powerpc/nofpu/fsetexcptflg.c (__fesetexceptflag): Do not
+ clobber other exceptions.
+ * sysdeps/powerpc/nofpu/feupdateenv.c (__feupdateenv): Raise new
+ exceptions.
+ * sysdeps/powerpc/nofpu/fraiseexcpt.c (__feraiseexcept): Handle
+ multiple new exceptions if some are disabled.
+ * sysdeps/powerpc/nofpu/sim-full.c (__simulate_exceptions): Likewise.
+
2007-07-13 Steven Munroe <sjmunroe@us.ibm.com>
* sysdeps/powerpc/nofpu/Makefile: Remove fe_nomask from libm-support.
diff --git a/sysdeps/powerpc/nofpu/feupdateenv.c b/sysdeps/powerpc/nofpu/feupdateenv.c
index 5073776e7d..17af8d3ec0 100644
--- a/sysdeps/powerpc/nofpu/feupdateenv.c
+++ b/sysdeps/powerpc/nofpu/feupdateenv.c
@@ -21,12 +21,12 @@
#include "soft-fp.h"
#include "soft-supp.h"
+#include <signal.h>
#include <bp-sym.h>
int
__feupdateenv (const fenv_t *envp)
{
- fenv_union_t u;
int saved_exceptions;
/* Save currently set exceptions. */
@@ -37,6 +37,8 @@ __feupdateenv (const fenv_t *envp)
/* Raise old exceptions. */
__sim_exceptions |= saved_exceptions;
+ if (saved_exceptions & ~__sim_disabled_exceptions)
+ raise (SIGFPE);
return 0;
}
diff --git a/sysdeps/powerpc/nofpu/fraiseexcpt.c b/sysdeps/powerpc/nofpu/fraiseexcpt.c
index cd915027e1..5d3a87fe8e 100644
--- a/sysdeps/powerpc/nofpu/fraiseexcpt.c
+++ b/sysdeps/powerpc/nofpu/fraiseexcpt.c
@@ -28,10 +28,7 @@ int
__feraiseexcept (int x)
{
__sim_exceptions |= x;
- if (x == 0 || __sim_disabled_exceptions & x)
- /* Ignore exception. */
- ;
- else
+ if (x & ~__sim_disabled_exceptions)
raise (SIGFPE);
return 0;
}
diff --git a/sysdeps/powerpc/nofpu/fsetexcptflg.c b/sysdeps/powerpc/nofpu/fsetexcptflg.c
index 85fd88f01f..2faeb1f103 100644
--- a/sysdeps/powerpc/nofpu/fsetexcptflg.c
+++ b/sysdeps/powerpc/nofpu/fsetexcptflg.c
@@ -26,7 +26,7 @@ int
__fesetexceptflag(const fexcept_t *flagp, int excepts)
{
/* Ignore exceptions not listed in 'excepts'. */
- __sim_exceptions = *flagp & excepts;
+ __sim_exceptions = (__sim_exceptions & ~excepts) | (*flagp & excepts);
return 0;
}
diff --git a/sysdeps/powerpc/nofpu/sim-full.c b/sysdeps/powerpc/nofpu/sim-full.c
index d018240e6d..d5ee007ca9 100644
--- a/sysdeps/powerpc/nofpu/sim-full.c
+++ b/sysdeps/powerpc/nofpu/sim-full.c
@@ -37,9 +37,6 @@ void
__simulate_exceptions (int x)
{
__sim_exceptions |= x;
- if (x == 0 || __sim_disabled_exceptions & x)
- /* Ignore exception. */
- ;
- else
+ if (x & ~__sim_disabled_exceptions)
raise (SIGFPE);
}