diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | hurd/hurdsig.c | 9 |
2 files changed, 13 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog index 38cbb4cb63..128d395d4e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2008-03-08 Roland McGrath <roland@frob.com> + * hurd/hurdsig.c (_hurd_internal_post_signal): When normal rules would + ignore a signal that came from a machine exception, treat it as a + fatal core-dump signal instead. + Reported by Samuel Thibault <samuel.thibault@ens-lyon.org>. + * sysdeps/mach/hurd/i386/trampoline.c (_hurd_setup_sighandler): Clear DF bit in thread state's eflags. Reported by Samuel Thibault <samuel.thibault@ens-lyon.org>. diff --git a/hurd/hurdsig.c b/hurd/hurdsig.c index e12d19da12..27050c99d9 100644 --- a/hurd/hurdsig.c +++ b/hurd/hurdsig.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991,92,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2005 +/* Copyright (C) 1991,92,93,94,95,96,97,98,99,2000,2001,2002,2005,2008 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -743,6 +743,11 @@ _hurd_internal_post_signal (struct hurd_sigstate *ss, break; case ignore: + if (detail->exc) + /* Blocking or ignoring a machine exception is fatal. + Otherwise we could just spin on the faulting instruction. */ + goto fatal; + /* Nobody cares about this signal. If there was a call to resume above in SIGCONT processing and we've left a thread suspended, now's the time to set it going. */ @@ -759,6 +764,8 @@ _hurd_internal_post_signal (struct hurd_sigstate *ss, Nothing to do but die; BSD gets SIGILL in this case. */ detail->code = signo; /* XXX ? */ signo = SIGILL; + + fatal: act = core; /* FALLTHROUGH */ |