From ad35f2dd750ed3e3f483409ef50b38ea19745002 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Wed, 21 Nov 2012 20:26:56 +0000 Subject: Make ARM fesetenv (FE_NOMASK_ENV) detect failure (bug 14866). --- ports/ChangeLog.arm | 6 ++++++ ports/sysdeps/arm/fesetenv.c | 10 ++++++++++ 2 files changed, 16 insertions(+) (limited to 'ports') diff --git a/ports/ChangeLog.arm b/ports/ChangeLog.arm index d060121311..2a56a9f643 100644 --- a/ports/ChangeLog.arm +++ b/ports/ChangeLog.arm @@ -1,3 +1,9 @@ +2012-11-21 Joseph Myers + + [BZ #14866] + * sysdeps/arm/fesetenv.c (__fesetenv): Test whether bits for + trapping exceptions were successfully set for FE_NOMASK_ENV. + 2012-11-14 Marcus Shawcroft * sysdeps/unix/sysv/linux/arm/Makefile (libcrypt-sysdep_routines): Add diff --git a/ports/sysdeps/arm/fesetenv.c b/ports/sysdeps/arm/fesetenv.c index 2fad61da1a..e92f9f5ac8 100644 --- a/ports/sysdeps/arm/fesetenv.c +++ b/ports/sysdeps/arm/fesetenv.c @@ -40,6 +40,16 @@ __fesetenv (const fenv_t *envp) _FPU_SETCW (temp); + if (envp == FE_NOMASK_ENV) + { + /* VFPv3 and VFPv4 do not support trapping exceptions, so + test whether the relevant bits were set and fail if + not. */ + _FPU_GETCW (temp); + if ((temp & _FPU_IEEE) != _FPU_IEEE) + return 1; + } + /* Success. */ return 0; } -- cgit v1.2.3