This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch, master, updated. glibc-2.13-84-g75ea32a


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  75ea32abcde4e1699328354e1804ea94560d2950 (commit)
      from  94409c736b216c405c214c041a33b5fab58bd408 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=75ea32abcde4e1699328354e1804ea94560d2950

commit 75ea32abcde4e1699328354e1804ea94560d2950
Author: Ulrich Drepper <drepper@gmail.com>
Date:   Sun Apr 17 21:51:26 2011 -0400

    Fix FPU context handling in getcontext on x86-64.
    
    fnstenv on x86-64 seems to clear the state.  Work around.

diff --git a/ChangeLog b/ChangeLog
index b2d2597..d53eff3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2011-04-17  Ulrich Drepper  <drepper@gmail.com>
+
+	[BZ #12420]
+	* sysdeps/unix/sysv/linux/x86_64/getcontext.S: Reload context after
+	storing it.
+	* stdlib/bug-getcontext.c: New file.
+	* stdlib/Makefile: Add rules to build and run bug-getcontext.
+
 2011-04-13  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
 	* sysdeps/s390/s390-64/utf16-utf32-z9.c: Wrap the z9-109
diff --git a/NEWS b/NEWS
index 670dbf3..e5e4b77 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,4 @@
-GNU C Library NEWS -- history of user-visible changes.  2011-4-16
+GNU C Library NEWS -- history of user-visible changes.  2011-4-17
 Copyright (C) 1992-2009, 2010, 2011 Free Software Foundation, Inc.
 See the end for copying conditions.
 
@@ -18,8 +18,8 @@ Version 2.14
 
 * The following bugs are resolved with this release:
 
-  11724, 12445, 12454, 12460, 12469, 12489, 12509, 12510, 12518, 12583, 12587,
-  12597, 12631, 12650, 12655
+  11724, 12420, 12445, 12454, 12460, 12469, 12489, 12509, 12510, 12518, 12583,
+  12587, 12597, 12631, 12650, 12655
 
 Version 2.13
 
diff --git a/stdlib/Makefile b/stdlib/Makefile
index bb0661a..04c6ac5 100644
--- a/stdlib/Makefile
+++ b/stdlib/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1991-2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+# Copyright (C) 1991-2009, 2011 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
@@ -71,7 +71,7 @@ tests		:= tst-strtol tst-strtod testmb testrand testsort testdiv   \
 		   tst-atof1 tst-atof2 tst-strtod2 tst-strtod3 tst-rand48-2 \
 		   tst-makecontext tst-strtod4 tst-strtod5 tst-qsort2	    \
 		   tst-makecontext2 tst-strtod6 tst-unsetenv1		    \
-		   tst-makecontext3
+		   tst-makecontext3 bug-getcontext
 
 include ../Makeconfig
 
@@ -145,3 +145,10 @@ $(objpfx)tst-putenv: $(objpfx)tst-putenvmod.so
 $(objpfx)tst-putenvmod.so: $(objpfx)tst-putenvmod.os
 	$(build-module)
 CFLAGS-tst-putenvmod.c = -DNOT_IN_libc=1
+
+ifeq ($(build-shared),yes)
+link-libm = $(common-objpfx)math/libm.so
+else
+link-libm = $(common-objpfx)math/libm.a
+endif
+$(objpfx)bug-getcontext: $(link-libm)
diff --git a/stdlib/bug-getcontext.c b/stdlib/bug-getcontext.c
new file mode 100644
index 0000000..745aa1f
--- /dev/null
+++ b/stdlib/bug-getcontext.c
@@ -0,0 +1,48 @@
+/* BZ 12420 */
+
+#include <errno.h>
+#include <fenv.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <ucontext.h>
+
+static int
+do_test (void)
+{
+  int except_mask =  FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW;
+  int status = feenableexcept (except_mask);
+
+  except_mask = fegetexcept ();
+  if (except_mask == -1)
+    {
+      printf("\nBefore getcontext(): fegetexcept returned: %d\n",
+	     except_mask);
+      return 1;
+    }
+
+  ucontext_t ctx;
+  status = getcontext(&ctx);
+  if (status)
+    {
+      printf("\ngetcontext failed, errno: %d.\n", errno);
+      return 1;
+    }
+
+  printf ("\nDone with getcontext()!\n");
+  fflush (NULL);
+
+  int mask = fegetexcept ();
+  if (mask != except_mask)
+    {
+      printf("\nAfter getcontext(): fegetexcept returned: %d, expected: %d.\n",
+	     mask, except_mask);
+      return 1;
+    }
+
+  printf("\nAt end fegetexcept() returned %d, expected: %d.\n",
+	 mask, except_mask);
+  return 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/sysdeps/unix/sysv/linux/x86_64/getcontext.S b/sysdeps/unix/sysv/linux/x86_64/getcontext.S
index 4bbc7a4..1a31d72 100644
--- a/sysdeps/unix/sysv/linux/x86_64/getcontext.S
+++ b/sysdeps/unix/sysv/linux/x86_64/getcontext.S
@@ -1,5 +1,5 @@
 /* Save current context.
-   Copyright (C) 2002, 2005 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2005, 2011 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Andreas Jaeger <aj@suse.de>, 2002.
 
@@ -62,6 +62,7 @@ ENTRY(__getcontext)
 	movq	%rcx, oFPREGS(%rdi)
 	/* Save the floating-point environment.  */
 	fnstenv	(%rcx)
+	fldenv	(%rcx)
 	stmxcsr oMXCSR(%rdi)
 
 	/* Save the current signal mask with

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                   |    8 ++++
 NEWS                                        |    6 ++--
 stdlib/Makefile                             |   11 +++++-
 stdlib/bug-getcontext.c                     |   48 +++++++++++++++++++++++++++
 sysdeps/unix/sysv/linux/x86_64/getcontext.S |    3 +-
 5 files changed, 70 insertions(+), 6 deletions(-)
 create mode 100644 stdlib/bug-getcontext.c


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]