diff --git a/NEWS b/NEWS
index fe9ff1c..613d29c 100644
--- a/NEWS
+++ b/NEWS
@@ -32,6 +32,8 @@ Version 2.25
   presently cannot avoid being compiled under _GNU_SOURCE, exacerbating the
   problem.
 
+* The fesetexcept function from TS 18661-1:2014 is added to libm.
+
 Security related changes:
 
   [Add security related changes here]
diff --git a/manual/arith.texi b/manual/arith.texi
index ea8ff48..8dcd409 100644
--- a/manual/arith.texi
+++ b/manual/arith.texi
@@ -759,6 +759,18 @@ non-zero value otherwise.
 
 @comment fenv.h
 @comment ISO
+@deftypefun int fesetexcept (int @var{excepts})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+This function sets the supported exception flags indicated by
+@var{excepts}, like @code{feraiseexcept}, but without causing enabled
+traps to be taken.  @code{fesetexcept} is from TS 18661-1:2014.
+
+The function returns zero in case the operation was successful, a
+non-zero value otherwise.
+@end deftypefun
+
+@comment fenv.h
+@comment ISO
 @deftypefun int fetestexcept (int @var{excepts})
 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
 Test whether the exception flags indicated by the parameter @var{except}
diff --git a/math/Makefile b/math/Makefile
index 1da1797..38a4709 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -41,7 +41,7 @@ libm-support = s_lib_version s_matherr s_signgam			\
 	       fclrexcpt fgetexcptflg fraiseexcpt fsetexcptflg		\
 	       ftestexcept fegetround fesetround fegetenv feholdexcpt	\
 	       fesetenv feupdateenv t_exp fedisblxcpt feenablxcpt	\
-	       fegetexcept
+	       fegetexcept fesetexcept
 
 libm-calls =								  \
 	e_acosF e_acoshF e_asinF e_atan2F e_atanhF e_coshF e_expF e_fmodF \
@@ -146,7 +146,8 @@ tests = test-matherr test-fenv atest-exp atest-sincos atest-exp2 basic-test \
 	test-nearbyint-except-2 test-signgam-uchar test-signgam-uchar-init \
 	test-signgam-uint test-signgam-uint-init test-signgam-ullong \
 	test-signgam-ullong-init test-nan-overflow test-nan-payload \
-	test-fexcept test-fexcept-traps $(tests-static)
+	test-fexcept test-fexcept-traps test-fesetexcept \
+	test-fesetexcept-traps $(tests-static)
 tests-static = test-fpucw-static test-fpucw-ieee-static \
 	       test-signgam-uchar-static test-signgam-uchar-init-static \
 	       test-signgam-uint-static test-signgam-uint-init-static \
diff --git a/math/Versions b/math/Versions
index 467d7ed..ff4e4d4 100644
--- a/math/Versions
+++ b/math/Versions
@@ -214,4 +214,7 @@ libm {
     nextup; nextupf; nextupl;
     nextdown; nextdownf; nextdownl;
   }
+  GLIBC_2.25 {
+    fesetexcept;
+  }
 }
diff --git a/math/fenv.h b/math/fenv.h
index 9a1e112..7f4ceb7 100644
--- a/math/fenv.h
+++ b/math/fenv.h
@@ -22,7 +22,8 @@
 #ifndef _FENV_H
 #define _FENV_H	1
 
-#include <features.h>
+#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION
+#include <bits/libc-header-start.h>
 
 /* Get the architecture dependend definitions.  The following definitions
    are expected to be done:
@@ -70,6 +71,12 @@ extern int fegetexceptflag (fexcept_t *__flagp, int __excepts) __THROW;
 /* Raise the supported exceptions represented by EXCEPTS.  */
 extern int feraiseexcept (int __excepts) __THROW;
 
+#if __GLIBC_USE (IEC_60559_BFP_EXT)
+/* Set the supported exception flags represented by EXCEPTS, without
+   causing enabled traps to be taken.  */
+extern int fesetexcept (int __excepts) __THROW;
+#endif
+
 /* Set complete status for exceptions indicated by EXCEPTS according to
    the representation in the object pointed to by FLAGP.  */
 extern int fesetexceptflag (const fexcept_t *__flagp, int __excepts) __THROW;
diff --git a/math/fesetexcept.c b/math/fesetexcept.c
new file mode 100644
index 0000000..892d8ad
--- /dev/null
+++ b/math/fesetexcept.c
@@ -0,0 +1,27 @@
+/* Set given exception flags.
+   Copyright (C) 2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <fenv.h>
+
+int
+fesetexcept (int excepts)
+{
+  /* This always fails unless nothing needs to be done.  */
+  return (excepts != 0);
+}
+stub_warning (fesetexcept)
diff --git a/math/test-fesetexcept-traps.c b/math/test-fesetexcept-traps.c
new file mode 100644
index 0000000..383b809
--- /dev/null
+++ b/math/test-fesetexcept-traps.c
@@ -0,0 +1,68 @@
+/* Test fesetexcept: exception traps enabled.
+   Copyright (C) 2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <fenv.h>
+#include <stdio.h>
+#include <math-tests.h>
+
+static int
+do_test (void)
+{
+  int result = 0;
+
+  fedisableexcept (FE_ALL_EXCEPT);
+  int ret = feenableexcept (FE_ALL_EXCEPT);
+  if (!EXCEPTION_ENABLE_SUPPORTED (FE_ALL_EXCEPT) && (ret == -1))
+    {
+      puts ("feenableexcept (FE_ALL_EXCEPT) not supported, cannot test");
+      return 77;
+    }
+  else if (ret != 0)
+    {
+      puts ("feenableexcept (FE_ALL_EXCEPT) failed");
+      result = 1;
+      return result;
+    }
+
+  if (EXCEPTION_SET_FORCES_TRAP)
+    {
+      puts ("setting exceptions traps, cannot test on this architecture");
+      return 77;
+    }
+  /* The test is that this does not cause exception traps.  */
+  ret = fesetexcept (FE_ALL_EXCEPT);
+  if (ret == 0)
+    puts ("fesetexcept (FE_ALL_EXCEPT) succeeded");
+  else
+    {
+      puts ("fesetexcept (FE_ALL_EXCEPT) failed");
+      if (EXCEPTION_TESTS (float))
+	{
+	  puts ("failure of fesetexcept was unexpected");
+	  result = 1;
+	}
+      else
+	puts ("failure of fesetexcept OK");
+    }
+  feclearexcept (FE_ALL_EXCEPT);
+
+  return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/math/test-fesetexcept.c b/math/test-fesetexcept.c
new file mode 100644
index 0000000..912a9a6
--- /dev/null
+++ b/math/test-fesetexcept.c
@@ -0,0 +1,129 @@
+/* Test fesetexcept.
+   Copyright (C) 2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <fenv.h>
+#include <stdio.h>
+#include <math-tests.h>
+
+static int
+test_fesetexcept (int exc, const char *exc_name)
+{
+  int result = 0;
+
+  printf ("Testing %s\n", exc_name);
+  feclearexcept (FE_ALL_EXCEPT);
+  int ret = fesetexcept (exc);
+  if (ret == 0)
+    printf ("fesetexcept (%s) succeeded\n", exc_name);
+  else
+    {
+      printf ("fesetexcept (%s) failed\n", exc_name);
+      if (exc == 0 || EXCEPTION_TESTS (float))
+	{
+	  puts ("failure of fesetexcept was unexpected");
+	  result = 1;
+	}
+      else
+	puts ("failure of fesetexcept OK, skipping further tests");
+      return result;
+    }
+  ret = fetestexcept (FE_ALL_EXCEPT);
+  if (ret != exc)
+    {
+      printf ("raised exceptions %x, expected %x\n",
+	      (unsigned int) ret, (unsigned int) exc);
+      result = 1;
+    }
+
+  ret = feraiseexcept (FE_ALL_EXCEPT);
+  if (ret != 0)
+    {
+      if (exc == 0 && !EXCEPTION_TESTS (float))
+	{
+	  puts ("feraiseexcept (FE_ALL_EXCEPT) failed, skipping further tests");
+	  return result;
+	}
+      puts ("feraiseexcept (FE_ALL_EXCEPT) unexpectedly failed");
+      result = 1;
+    }
+  ret = fesetexcept (exc);
+  if (ret != 0)
+    {
+      puts ("fesetexcept (second test) unexpectedly failed");
+      result = 1;
+    }
+  ret = fetestexcept (FE_ALL_EXCEPT);
+  if (ret != FE_ALL_EXCEPT)
+    {
+      printf ("raised exceptions (second test) %x, expected %x\n",
+	      (unsigned int) ret, (unsigned int) FE_ALL_EXCEPT);
+      result = 1;
+    }
+
+  feclearexcept (FE_ALL_EXCEPT);
+  ret = feraiseexcept (FE_ALL_EXCEPT & ~exc);
+  if (ret != 0)
+    {
+      puts ("feraiseexcept (third test) unexpectedly failed");
+      result = 1;
+    }
+  ret = fesetexcept (exc);
+  if (ret != 0)
+    {
+      puts ("fesetexcept (third test) unexpectedly failed");
+      result = 1;
+    }
+  ret = fetestexcept (FE_ALL_EXCEPT);
+  if (ret != FE_ALL_EXCEPT)
+    {
+      printf ("raised exceptions (third test) %x, expected %x\n",
+	      (unsigned int) ret, (unsigned int) FE_ALL_EXCEPT);
+      result = 1;
+    }
+
+  return result;
+}
+
+static int
+do_test (void)
+{
+  int result = 0;
+
+  result |= test_fesetexcept (0, "0");
+  result |= test_fesetexcept (FE_ALL_EXCEPT, "FE_ALL_EXCEPT");
+#ifdef FE_DIVBYZERO
+  result |= test_fesetexcept (FE_DIVBYZERO, "FE_DIVBYZERO");
+#endif
+#ifdef FE_INEXACT
+  result |= test_fesetexcept (FE_INEXACT, "FE_INEXACT");
+#endif
+#ifdef FE_INVALID
+  result |= test_fesetexcept (FE_INVALID, "FE_INVALID");
+#endif
+#ifdef FE_OVERFLOW
+  result |= test_fesetexcept (FE_OVERFLOW, "FE_OVERFLOW");
+#endif
+#ifdef FE_UNDERFLOW
+  result |= test_fesetexcept (FE_UNDERFLOW, "FE_UNDERFLOW");
+#endif
+
+  return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/sysdeps/i386/fpu/fesetexcept.c b/sysdeps/i386/fpu/fesetexcept.c
new file mode 100644
index 0000000..eeb0c7f
--- /dev/null
+++ b/sysdeps/i386/fpu/fesetexcept.c
@@ -0,0 +1,31 @@
+/* Set given exception flags.  i386 version.
+   Copyright (C) 2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <fenv.h>
+
+int
+fesetexcept (int excepts)
+{
+  fenv_t temp;
+
+  __asm__ ("fnstenv %0" : "=m" (*&temp));
+  temp.__status_word |= excepts & FE_ALL_EXCEPT;
+  __asm__ ("fldenv %0" : : "m" (*&temp));
+
+  return 0;
+}
diff --git a/sysdeps/nacl/libm.abilist b/sysdeps/nacl/libm.abilist
index 838fede..b50f029 100644
--- a/sysdeps/nacl/libm.abilist
+++ b/sysdeps/nacl/libm.abilist
@@ -379,3 +379,5 @@ GLIBC_2.24 nextdownl F
 GLIBC_2.24 nextup F
 GLIBC_2.24 nextupf F
 GLIBC_2.24 nextupl F
+GLIBC_2.25 GLIBC_2.25 A
+GLIBC_2.25 fesetexcept F
diff --git a/sysdeps/unix/sysv/linux/aarch64/libm.abilist b/sysdeps/unix/sysv/linux/aarch64/libm.abilist
index 781d2d3..01b01b7 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libm.abilist
@@ -410,3 +410,5 @@ GLIBC_2.24 nextdownl F
 GLIBC_2.24 nextup F
 GLIBC_2.24 nextupf F
 GLIBC_2.24 nextupl F
+GLIBC_2.25 GLIBC_2.25 A
+GLIBC_2.25 fesetexcept F
diff --git a/sysdeps/unix/sysv/linux/alpha/libm.abilist b/sysdeps/unix/sysv/linux/alpha/libm.abilist
index f342c6b..9ba817d 100644
--- a/sysdeps/unix/sysv/linux/alpha/libm.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libm.abilist
@@ -420,6 +420,8 @@ GLIBC_2.24 nextdownl F
 GLIBC_2.24 nextup F
 GLIBC_2.24 nextupf F
 GLIBC_2.24 nextupl F
+GLIBC_2.25 GLIBC_2.25 A
+GLIBC_2.25 fesetexcept F
 GLIBC_2.3.4 GLIBC_2.3.4 A
 GLIBC_2.3.4 __c1_cabsf F
 GLIBC_2.3.4 __c1_cacosf F
diff --git a/sysdeps/unix/sysv/linux/arm/libm.abilist b/sysdeps/unix/sysv/linux/arm/libm.abilist
index 7a02fb1..d9a6f6f 100644
--- a/sysdeps/unix/sysv/linux/arm/libm.abilist
+++ b/sysdeps/unix/sysv/linux/arm/libm.abilist
@@ -68,6 +68,8 @@ GLIBC_2.24 nextdownl F
 GLIBC_2.24 nextup F
 GLIBC_2.24 nextupf F
 GLIBC_2.24 nextupl F
+GLIBC_2.25 GLIBC_2.25 A
+GLIBC_2.25 fesetexcept F
 GLIBC_2.4 GLIBC_2.4 A
 GLIBC_2.4 _LIB_VERSION D 0x4
 GLIBC_2.4 __clog10 F
diff --git a/sysdeps/unix/sysv/linux/hppa/libm.abilist b/sysdeps/unix/sysv/linux/hppa/libm.abilist
index bf40ddf..75d4797 100644
--- a/sysdeps/unix/sysv/linux/hppa/libm.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libm.abilist
@@ -380,5 +380,7 @@ GLIBC_2.24 nextdownl F
 GLIBC_2.24 nextup F
 GLIBC_2.24 nextupf F
 GLIBC_2.24 nextupl F
+GLIBC_2.25 GLIBC_2.25 A
+GLIBC_2.25 fesetexcept F
 GLIBC_2.4 GLIBC_2.4 A
 GLIBC_2.4 exp2l F
diff --git a/sysdeps/unix/sysv/linux/i386/libm.abilist b/sysdeps/unix/sysv/linux/i386/libm.abilist
index 92e9402..17b6d6d 100644
--- a/sysdeps/unix/sysv/linux/i386/libm.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libm.abilist
@@ -422,4 +422,6 @@ GLIBC_2.24 nextdownl F
 GLIBC_2.24 nextup F
 GLIBC_2.24 nextupf F
 GLIBC_2.24 nextupl F
+GLIBC_2.25 GLIBC_2.25 A
+GLIBC_2.25 fesetexcept F
 GLIBC_2.4 GLIBC_2.4 A
diff --git a/sysdeps/unix/sysv/linux/ia64/libm.abilist b/sysdeps/unix/sysv/linux/ia64/libm.abilist
index e2737a2..d2d8978 100644
--- a/sysdeps/unix/sysv/linux/ia64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libm.abilist
@@ -351,4 +351,6 @@ GLIBC_2.24 nextdownl F
 GLIBC_2.24 nextup F
 GLIBC_2.24 nextupf F
 GLIBC_2.24 nextupl F
+GLIBC_2.25 GLIBC_2.25 A
+GLIBC_2.25 fesetexcept F
 GLIBC_2.4 GLIBC_2.4 A
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
index 7a02fb1..d9a6f6f 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
@@ -68,6 +68,8 @@ GLIBC_2.24 nextdownl F
 GLIBC_2.24 nextup F
 GLIBC_2.24 nextupf F
 GLIBC_2.24 nextupl F
+GLIBC_2.25 GLIBC_2.25 A
+GLIBC_2.25 fesetexcept F
 GLIBC_2.4 GLIBC_2.4 A
 GLIBC_2.4 _LIB_VERSION D 0x4
 GLIBC_2.4 __clog10 F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist
index 9af59d7..3edf8ae 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist
@@ -420,4 +420,6 @@ GLIBC_2.24 nextdownl F
 GLIBC_2.24 nextup F
 GLIBC_2.24 nextupf F
 GLIBC_2.24 nextupl F
+GLIBC_2.25 GLIBC_2.25 A
+GLIBC_2.25 fesetexcept F
 GLIBC_2.4 GLIBC_2.4 A
diff --git a/sysdeps/unix/sysv/linux/microblaze/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/libm.abilist
index 0b1f136..e934101 100644
--- a/sysdeps/unix/sysv/linux/microblaze/libm.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/libm.abilist
@@ -379,3 +379,5 @@ GLIBC_2.24 nextdownl F
 GLIBC_2.24 nextup F
 GLIBC_2.24 nextupf F
 GLIBC_2.24 nextupl F
+GLIBC_2.25 GLIBC_2.25 A
+GLIBC_2.25 fesetexcept F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
index 2e2bb00..88cd724 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
@@ -381,6 +381,8 @@ GLIBC_2.24 nextdownl F
 GLIBC_2.24 nextup F
 GLIBC_2.24 nextupf F
 GLIBC_2.24 nextupl F
+GLIBC_2.25 GLIBC_2.25 A
+GLIBC_2.25 fesetexcept F
 GLIBC_2.4 GLIBC_2.4 A
 GLIBC_2.4 exp2l F
 _gp_disp _gp_disp A
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
index 7daa595..52d5cb3 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
@@ -412,4 +412,6 @@ GLIBC_2.24 nextdownl F
 GLIBC_2.24 nextup F
 GLIBC_2.24 nextupf F
 GLIBC_2.24 nextupl F
+GLIBC_2.25 GLIBC_2.25 A
+GLIBC_2.25 fesetexcept F
 GLIBC_2.4 GLIBC_2.4 A
diff --git a/sysdeps/unix/sysv/linux/nios2/libm.abilist b/sysdeps/unix/sysv/linux/nios2/libm.abilist
index a36e2f3..37f7a88 100644
--- a/sysdeps/unix/sysv/linux/nios2/libm.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libm.abilist
@@ -379,3 +379,5 @@ GLIBC_2.24 nextdownl F
 GLIBC_2.24 nextup F
 GLIBC_2.24 nextupf F
 GLIBC_2.24 nextupl F
+GLIBC_2.25 GLIBC_2.25 A
+GLIBC_2.25 fesetexcept F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
index abe8c5d..ad61a97 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
@@ -421,6 +421,8 @@ GLIBC_2.24 nextdownl F
 GLIBC_2.24 nextup F
 GLIBC_2.24 nextupf F
 GLIBC_2.24 nextupl F
+GLIBC_2.25 GLIBC_2.25 A
+GLIBC_2.25 fesetexcept F
 GLIBC_2.4 GLIBC_2.4 A
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
index 1c25f56..8542238 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
@@ -420,6 +420,8 @@ GLIBC_2.24 nextdownl F
 GLIBC_2.24 nextup F
 GLIBC_2.24 nextupf F
 GLIBC_2.24 nextupl F
+GLIBC_2.25 GLIBC_2.25 A
+GLIBC_2.25 fesetexcept F
 GLIBC_2.4 GLIBC_2.4 A
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist
index 9d19474..b2f0608 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist
@@ -415,3 +415,5 @@ GLIBC_2.24 nextdownl F
 GLIBC_2.24 nextup F
 GLIBC_2.24 nextupf F
 GLIBC_2.24 nextupl F
+GLIBC_2.25 GLIBC_2.25 A
+GLIBC_2.25 fesetexcept F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist
index cedb189..e5d36a1 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist
@@ -96,6 +96,8 @@ GLIBC_2.24 nextdownl F
 GLIBC_2.24 nextup F
 GLIBC_2.24 nextupf F
 GLIBC_2.24 nextupl F
+GLIBC_2.25 GLIBC_2.25 A
+GLIBC_2.25 fesetexcept F
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 _LIB_VERSION D 0x4
 GLIBC_2.3 __clog10 F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
index 9b567c6..457aa71 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
@@ -410,6 +410,8 @@ GLIBC_2.24 nextdownl F
 GLIBC_2.24 nextup F
 GLIBC_2.24 nextupf F
 GLIBC_2.24 nextupl F
+GLIBC_2.25 GLIBC_2.25 A
+GLIBC_2.25 fesetexcept F
 GLIBC_2.4 GLIBC_2.4 A
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
index 78a82fb..217d76b 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
@@ -408,6 +408,8 @@ GLIBC_2.24 nextdownl F
 GLIBC_2.24 nextup F
 GLIBC_2.24 nextupf F
 GLIBC_2.24 nextupl F
+GLIBC_2.25 GLIBC_2.25 A
+GLIBC_2.25 fesetexcept F
 GLIBC_2.4 GLIBC_2.4 A
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
diff --git a/sysdeps/unix/sysv/linux/sh/libm.abilist b/sysdeps/unix/sysv/linux/sh/libm.abilist
index f98ade7..d1da0df 100644
--- a/sysdeps/unix/sysv/linux/sh/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sh/libm.abilist
@@ -380,5 +380,7 @@ GLIBC_2.24 nextdownl F
 GLIBC_2.24 nextup F
 GLIBC_2.24 nextupf F
 GLIBC_2.24 nextupl F
+GLIBC_2.25 GLIBC_2.25 A
+GLIBC_2.25 fesetexcept F
 GLIBC_2.4 GLIBC_2.4 A
 GLIBC_2.4 exp2l F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
index d2e8421..1c58255 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
@@ -413,6 +413,8 @@ GLIBC_2.24 nextdownl F
 GLIBC_2.24 nextup F
 GLIBC_2.24 nextupf F
 GLIBC_2.24 nextupl F
+GLIBC_2.25 GLIBC_2.25 A
+GLIBC_2.25 fesetexcept F
 GLIBC_2.4 GLIBC_2.4 A
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
index e000221..6915c87 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
@@ -411,4 +411,6 @@ GLIBC_2.24 nextdownl F
 GLIBC_2.24 nextup F
 GLIBC_2.24 nextupf F
 GLIBC_2.24 nextupl F
+GLIBC_2.25 GLIBC_2.25 A
+GLIBC_2.25 fesetexcept F
 GLIBC_2.4 GLIBC_2.4 A
diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist
index 00e82c1..6ebaa0f 100644
--- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist
@@ -380,3 +380,5 @@ GLIBC_2.24 nextdownl F
 GLIBC_2.24 nextup F
 GLIBC_2.24 nextupf F
 GLIBC_2.24 nextupl F
+GLIBC_2.25 GLIBC_2.25 A
+GLIBC_2.25 fesetexcept F
diff --git a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist
index 00e82c1..6ebaa0f 100644
--- a/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist
@@ -380,3 +380,5 @@ GLIBC_2.24 nextdownl F
 GLIBC_2.24 nextup F
 GLIBC_2.24 nextupf F
 GLIBC_2.24 nextupl F
+GLIBC_2.25 GLIBC_2.25 A
+GLIBC_2.25 fesetexcept F
diff --git a/sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist b/sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist
index 00e82c1..6ebaa0f 100644
--- a/sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist
+++ b/sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist
@@ -380,3 +380,5 @@ GLIBC_2.24 nextdownl F
 GLIBC_2.24 nextup F
 GLIBC_2.24 nextupf F
 GLIBC_2.24 nextupl F
+GLIBC_2.25 GLIBC_2.25 A
+GLIBC_2.25 fesetexcept F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
index 65b4708..2e77c3d 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
@@ -411,4 +411,6 @@ GLIBC_2.24 nextdownl F
 GLIBC_2.24 nextup F
 GLIBC_2.24 nextupf F
 GLIBC_2.24 nextupl F
+GLIBC_2.25 GLIBC_2.25 A
+GLIBC_2.25 fesetexcept F
 GLIBC_2.4 GLIBC_2.4 A
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
index d35e9f0..b9ccb1a 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
@@ -410,3 +410,5 @@ GLIBC_2.24 nextdownl F
 GLIBC_2.24 nextup F
 GLIBC_2.24 nextupf F
 GLIBC_2.24 nextupl F
+GLIBC_2.25 GLIBC_2.25 A
+GLIBC_2.25 fesetexcept F
diff --git a/sysdeps/x86_64/fpu/fesetexcept.c b/sysdeps/x86_64/fpu/fesetexcept.c
new file mode 100644
index 0000000..805f769
--- /dev/null
+++ b/sysdeps/x86_64/fpu/fesetexcept.c
@@ -0,0 +1,31 @@
+/* Set given exception flags.  x86_64 version.
+   Copyright (C) 2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <fenv.h>
+
+int
+fesetexcept (int excepts)
+{
+  unsigned int mxcsr;
+
+  __asm__ ("stmxcsr %0" : "=m" (*&mxcsr));
+  mxcsr |= excepts & FE_ALL_EXCEPT;
+  __asm__ ("ldmxcsr %0" : : "m" (*&mxcsr));
+
+  return 0;
+}
