Fix fallback fesetenv and feupdateenv on FE_NOMASK_ENV (bug 17088).
authorJoseph Myers <joseph@codesourcery.com>
Thu, 17 Jul 2014 17:56:43 +0000 (17:56 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Thu, 17 Jul 2014 17:56:43 +0000 (17:56 +0000)
This patch fixes bug 17088, fallback fesetenv and feupdateenv not
giving an error for an FE_NOMASK_ENV argument when it requires traps
to be enabled.  (This is the bug tested for by test-fenv-return.c.)

Tested mips64 soft-float.

[BZ #17088]
* math/fesetenv.c (__fesetenv)
[FE_NOMASK_ENV && FE_ALL_EXCEPT != 0]: Return 1 for FE_NOMASK_ENV.
* math/feupdateenv.c (__feupdateenv)
[FE_NOMASK_ENV && FE_ALL_EXCEPT != 0]: Likewise.

ChangeLog
NEWS
math/fesetenv.c
math/feupdateenv.c

index 041839b..d32f47a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2014-07-17  Joseph Myers  <joseph@codesourcery.com>
 
+       [BZ #17088]
+       * math/fesetenv.c (__fesetenv)
+       [FE_NOMASK_ENV && FE_ALL_EXCEPT != 0]: Return 1 for FE_NOMASK_ENV.
+       * math/feupdateenv.c (__feupdateenv)
+       [FE_NOMASK_ENV && FE_ALL_EXCEPT != 0]: Likewise.
+
        * sysdeps/unix/sysv/linux/s390/kernel-features.h: New file.
        * sysdeps/unix/sysv/linux/kernel-features.h [__s390__]
        (__ASSUME_SOCKETCALL): Do not define.
diff --git a/NEWS b/NEWS
index e734baf..aada32b 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -21,8 +21,8 @@ Version 2.20
   16882, 16885, 16888, 16890, 16912, 16915, 16916, 16917, 16918, 16922,
   16927, 16928, 16932, 16943, 16958, 16965, 16966, 16967, 16977, 16978,
   16984, 16990, 16996, 17009, 17022, 17031, 17042, 17048, 17050, 17058,
-  17061, 17062, 17069, 17075, 17079, 17084, 17086, 17092, 17097, 17125,
-  17135, 17137, 17153.
+  17061, 17062, 17069, 17075, 17079, 17084, 17086, 17088, 17092, 17097,
+  17125, 17135, 17137, 17153.
 
 * Optimized strchr implementation for AArch64.  Contributed by ARM Ltd.
 
index acfe5f4..9bf42c0 100644 (file)
 int
 __fesetenv (const fenv_t *envp)
 {
+#if defined FE_NOMASK_ENV && FE_ALL_EXCEPT != 0
+  if (envp == FE_NOMASK_ENV)
+    return 1;
+#endif
   /* Nothing to do.  */
   return 0;
 }
index 13d819e..08d8ae2 100644 (file)
 int
 __feupdateenv (const fenv_t *envp)
 {
+#if defined FE_NOMASK_ENV && FE_ALL_EXCEPT != 0
+  if (envp == FE_NOMASK_ENV)
+    return 1;
+#endif
   /* Nothing to do.  */
   return 0;
 }