about summary refs log tree commit diff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@gmail.com>2011-12-22 16:28:08 -0500
committerUlrich Drepper <drepper@gmail.com>2011-12-22 16:28:08 -0500
commitdb910efdbdbdde9e7c0a33cb6f6fc9e91672d6f2 (patch)
treedce51295e4eb262a3d9b02d8d5210499816de6fc
parentf311e884ece21af3a7b7ce117c7bd2f0144b5e90 (diff)
downloadglibc-db910efdbdbdde9e7c0a33cb6f6fc9e91672d6f2.tar.gz
glibc-db910efdbdbdde9e7c0a33cb6f6fc9e91672d6f2.tar.xz
glibc-db910efdbdbdde9e7c0a33cb6f6fc9e91672d6f2.zip
Also retrieve SSE exceptions in x86-32 fegetexceptflag
-rw-r--r--ChangeLog6
-rw-r--r--NEWS8
-rw-r--r--sysdeps/i386/fpu/fgetexcptflg.c22
3 files changed, 28 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index 205020dd9f..7c79547d63 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2011-12-22  Ulrich Drepper  <drepper@gmail.com>
+
+	[BZ #13185]
+	* sysdeps/i386/fpu/fgetexcptflg.c (__fegetexceptflag): Also return
+	SSE flags if possible.
+
 2011-12-22  Liubov Dmitrieva  <liubov.dmitrieva@gmail.com>
 
 	* sysdeps/i386/i686/multiarch/strcpy-ssse3.S: Fix wrong copying
diff --git a/NEWS b/NEWS
index 3fe9e9861e..eeee9ac071 100644
--- a/NEWS
+++ b/NEWS
@@ -11,10 +11,10 @@ Version 2.15
 
   6779, 6783, 9696, 10103, 10709, 11589, 12403, 12847, 12868, 12852, 12874,
   12885, 12892, 12907, 12922, 12935, 13007, 13021, 13067, 13068, 13090,
-  13092, 13114, 13118, 13123, 13134, 13138, 13147, 13150, 13179, 13189,
-  13192, 13268, 13276, 13282, 13291, 13305, 13328, 13335, 13337, 13344,
-  13358, 13367, 13413, 13416, 13423, 13439, 13446, 13472, 13484, 13506,
-  13515, 13523, 13524, 13538
+  13092, 13114, 13118, 13123, 13134, 13138, 13147, 13150, 13179, 13185,
+  13189, 13192, 13268, 13276, 13282, 13291, 13305, 13328, 13335, 13337,
+  13344, 13358, 13367, 13413, 13416, 13423, 13439, 13446, 13472, 13484,
+  13506, 13515, 13523, 13524, 13538
 
 * New program pldd to list loaded object of a process
   Implemented by Ulrich Drepper.
diff --git a/sysdeps/i386/fpu/fgetexcptflg.c b/sysdeps/i386/fpu/fgetexcptflg.c
index 5f60511b61..1a0e6df63e 100644
--- a/sysdeps/i386/fpu/fgetexcptflg.c
+++ b/sysdeps/i386/fpu/fgetexcptflg.c
@@ -1,5 +1,5 @@
 /* Store current representation for exceptions.
-   Copyright (C) 1997,99,2000,01 Free Software Foundation, Inc.
+   Copyright (C) 1997,99,2000,01,11 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
@@ -19,7 +19,10 @@
    02111-1307 USA.  */
 
 #include <fenv.h>
-#include <bp-sym.h>
+#include <unistd.h>
+#include <ldsodefs.h>
+#include <dl-procinfo.h>
+
 
 int
 __fegetexceptflag (fexcept_t *flagp, int excepts)
@@ -31,6 +34,17 @@ __fegetexceptflag (fexcept_t *flagp, int excepts)
 
   *flagp = temp & excepts & FE_ALL_EXCEPT;
 
+  /* If the CPU supports SSE, we clear the MXCSR as well.  */
+  if ((GLRO(dl_hwcap) & HWCAP_I386_XMM) != 0)
+    {
+      unsigned int sse_exc;
+
+      /* Get the current MXCSR.  */
+      __asm__ ("stmxcsr %0" : "=m" (*&sse_exc));
+
+      *flagp |= sse_exc & excepts & FE_ALL_EXCEPT;
+    }
+
   /* Success.  */
   return 0;
 }
@@ -38,7 +52,7 @@ __fegetexceptflag (fexcept_t *flagp, int excepts)
 #include <shlib-compat.h>
 #if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2)
 strong_alias (__fegetexceptflag, __old_fegetexceptflag)
-compat_symbol (libm, BP_SYM (__old_fegetexceptflag), BP_SYM (fegetexceptflag), GLIBC_2_1);
+compat_symbol (libm, __old_fegetexceptflag, fegetexceptflag, GLIBC_2_1);
 #endif
 
-versioned_symbol (libm, BP_SYM (__fegetexceptflag), BP_SYM (fegetexceptflag), GLIBC_2_2);
+versioned_symbol (libm, __fegetexceptflag, fegetexceptflag, GLIBC_2_2);