This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch, master, updated. glibc-2.13-84-g75ea32a
- From: drepper at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 18 Apr 2011 01:59:59 -0000
- Subject: 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