From: Joseph Myers Date: Thu, 17 Jul 2014 17:56:43 +0000 (+0000) Subject: Fix fallback fesetenv and feupdateenv on FE_NOMASK_ENV (bug 17088). X-Git-Tag: glibc-2.20~82 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=831b9896d8e957580591a3cbe11dcd5ac6743ba2;p=thirdparty%2Fglibc.git Fix fallback fesetenv and feupdateenv on FE_NOMASK_ENV (bug 17088). 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. --- diff --git a/ChangeLog b/ChangeLog index 041839be81b..d32f47a3af8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2014-07-17 Joseph Myers + [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 e734bafa374..aada32b2431 100644 --- 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. diff --git a/math/fesetenv.c b/math/fesetenv.c index acfe5f48896..9bf42c0f6c0 100644 --- a/math/fesetenv.c +++ b/math/fesetenv.c @@ -23,6 +23,10 @@ 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; } diff --git a/math/feupdateenv.c b/math/feupdateenv.c index 13d819e4797..08d8ae28a4a 100644 --- a/math/feupdateenv.c +++ b/math/feupdateenv.c @@ -23,6 +23,10 @@ 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; }