summary refs log tree commit diff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2013-06-17 17:20:23 +0000
committerJoseph Myers <joseph@codesourcery.com>2013-06-17 17:20:23 +0000
commit3023a72eb83751a23b01b6cb996fb81fe3abbcb6 (patch)
tree9dc05fe06ed6a8dd31c1809666bc0f568ea5fdab
parent12086fb4835639d1762622d80980a7500799b63e (diff)
downloadglibc-3023a72eb83751a23b01b6cb996fb81fe3abbcb6.tar.gz
glibc-3023a72eb83751a23b01b6cb996fb81fe3abbcb6.tar.xz
glibc-3023a72eb83751a23b01b6cb996fb81fe3abbcb6.zip
Make ARM feenableexcept detect failure (bug 14907).
-rw-r--r--NEWS18
-rw-r--r--ports/ChangeLog.arm6
-rw-r--r--ports/sysdeps/arm/feenablxcpt.c12
3 files changed, 27 insertions, 9 deletions
diff --git a/NEWS b/NEWS
index 63f28927be..be21e29e58 100644
--- a/NEWS
+++ b/NEWS
@@ -12,15 +12,15 @@ Version 2.18
   2546, 2560, 5159, 6809, 10060, 10062, 10357, 10686, 11120, 11561, 12387,
   12515, 12723, 13550, 13889, 13951, 13988, 14142, 14176, 14200, 14256,
   14280, 14293, 14317, 14327, 14478, 14496, 14582, 14686, 14812, 14888,
-  14894, 14908, 14909, 14920, 14952, 14964, 14981, 14982, 14985, 14991,
-  14994, 14996, 15000, 15003, 15006, 15007, 15014, 15020, 15023, 15036,
-  15054, 15055, 15062, 15078, 15084, 15085, 15086, 15100, 15160, 15214,
-  15221, 15232, 15234, 15283, 15285, 15287, 15304, 15305, 15307, 15309,
-  15327, 15330, 15335, 15336, 15337, 15339, 15342, 15346, 15359, 15361,
-  15366, 15380, 15381, 15394, 15395, 15405, 15406, 15409, 15416, 15418,
-  15419, 15423, 15424, 15426, 15429, 15431, 15432, 15441, 15442, 15448,
-  15465, 15480, 15485, 15488, 15490, 15492, 15493, 15497, 15506, 15529,
-  15536, 15553, 15577, 15583, 15618, 15627, 15631.
+  14894, 14907, 14908, 14909, 14920, 14952, 14964, 14981, 14982, 14985,
+  14991, 14994, 14996, 15000, 15003, 15006, 15007, 15014, 15020, 15023,
+  15036, 15054, 15055, 15062, 15078, 15084, 15085, 15086, 15100, 15160,
+  15214, 15221, 15232, 15234, 15283, 15285, 15287, 15304, 15305, 15307,
+  15309, 15327, 15330, 15335, 15336, 15337, 15339, 15342, 15346, 15359,
+  15361, 15366, 15380, 15381, 15394, 15395, 15405, 15406, 15409, 15416,
+  15418, 15419, 15423, 15424, 15426, 15429, 15431, 15432, 15441, 15442,
+  15448, 15465, 15480, 15485, 15488, 15490, 15492, 15493, 15497, 15506,
+  15529, 15536, 15553, 15577, 15583, 15618, 15627, 15631.
 
 * CVE-2013-0242 Buffer overrun in regexp matcher has been fixed (Bugzilla
   #15078).
diff --git a/ports/ChangeLog.arm b/ports/ChangeLog.arm
index 81792d2aa4..00f37892cd 100644
--- a/ports/ChangeLog.arm
+++ b/ports/ChangeLog.arm
@@ -1,3 +1,9 @@
+2013-06-17  Joseph Myers  <joseph@codesourcery.com>
+
+	[BZ #14907]
+	* sysdeps/arm/feenablxcpt.c (feenableexcept): Test whether all
+	requested exception traps were enabled and return -1 if not.
+
 2013-06-15  Siddhesh Poyarekar  <siddhesh@redhat.com>
 
 	* sysdeps/unix/sysv/linux/arm/nptl/libpthread.abilist: Update.
diff --git a/ports/sysdeps/arm/feenablxcpt.c b/ports/sysdeps/arm/feenablxcpt.c
index baad4320cc..e2e287b6e5 100644
--- a/ports/sysdeps/arm/feenablxcpt.c
+++ b/ports/sysdeps/arm/feenablxcpt.c
@@ -39,6 +39,18 @@ feenableexcept (int excepts)
 
       _FPU_SETCW(new_exc);
 
+      if (excepts != 0)
+	{
+	  /* VFPv3 and VFPv4 do not support trapping exceptions, so
+	     test whether the relevant bits were set and fail if
+	     not.  */
+	  unsigned int temp;
+	  _FPU_GETCW (temp);
+	  if ((temp & (excepts << FE_EXCEPT_SHIFT))
+	      != (excepts << FE_EXCEPT_SHIFT))
+	    return -1;
+	}
+
       return old_exc;
     }