This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: [Jim Blandy <jimb@redhat.com>] Re: RFA: test GDB's ability to kill threaded programs that die messily
- From: Daniel Jacobowitz <drow at mvista dot com>
- To: Michael Snyder <msnyder at redhat dot com>
- Cc: Jim Blandy <jimb at redhat dot com>, gdb-patches at sources dot redhat dot com
- Date: Thu, 29 Aug 2002 20:42:34 -0400
- Subject: Re: [Jim Blandy <jimb@redhat.com>] Re: RFA: test GDB's ability to kill threaded programs that die messily
- References: <vt28z2pti8l.fsf@zenia.red-bean.com> <3D6EBCB4.B97D8DA3@redhat.com>
On Thu, Aug 29, 2002 at 05:30:44PM -0700, Michael Snyder wrote:
> Jim Blandy wrote:
> >
> > Okay --- I've committed the portable thread compilation support that
> > this patch depends on. May I commit this test?
>
> The test is fine. But I missed the fix. Has a fix been committed?
> If you wouldn't mind, could you give me a pointer?
I don't think there is a fix; this test is related to the same PR as my
ugly warning workaround.
>
> >
> > ------------------------------------------------------------------------
> >
> > Subject: Re: RFA: test GDB's ability to kill threaded programs that die messily
> > Date: 13 Jun 2002 12:48:28 -0500
> > From: Jim Blandy <jimb@redhat.com>
> > To: Michael Snyder <msnyder@redhat.com>
> > CC: gdb-patches@sources.redhat.com
> > References: <20020612201556.978BE5EA11@zwingli.cygnus.com>
> > <3D07CB54.8E7BA834@redhat.com> <npelfc9fzq.fsf@zwingli.cygnus.com>
> > <3D07EE1A.FF4B4B83@redhat.com>
> >
> > Michael Snyder <msnyder@redhat.com> writes:
> > > Jim Blandy wrote:
> > > > Michael Snyder <msnyder@redhat.com> writes:
> > > > > Jim Blandy wrote:
> > > > > >
> > > > > > This tests the bug reported in gdb/568.
> > > > > >
> > > > > > 2002-06-12 Jim Blandy <jimb@redhat.com>
> > > > > >
> > > > > > * gdb.threads/killed.exp, gdb.threads/killed.c: New test.
> > > > >
> > > > > Why run it only on linux? It might pass perfectly well on other
> > > > > systems -- and if not, it's a bug there too, which we might want
> > > > > to know.
> > > >
> > > > Definitely. I thought the link process (-lpthread) was linux-only.
> > > > Can we write portable code in the test suite that builds
> > > > multi-threaded programs?
> > >
> > > We already have -- see pthread.exp
> >
> > Here's a revision of the patch, which uses the gdb_compile_pthreads
> > function introduced by the last patch I posted ("RFA: abstract out
> > thread compilation code"). It no longer refuses to run on anything
> > but Linux.
> >
> > 2002-06-12 Jim Blandy <jimb@redhat.com>
> >
> > * gdb.threads/killed.exp, gdb.threads/killed.c: New test.
> >
> > Index: gdb/testsuite/gdb.threads/killed.exp
> > ===================================================================
> > RCS file: gdb/testsuite/gdb.threads/killed.exp
> > diff -N gdb/testsuite/gdb.threads/killed.exp
> > *** gdb/testsuite/gdb.threads/killed.exp 1 Jan 1970 00:00:00 -0000
> > --- gdb/testsuite/gdb.threads/killed.exp 13 Jun 2002 17:46:54 -0000
> > ***************
> > *** 0 ****
> > --- 1,97 ----
> > + # Copyright 2002 Free Software Foundation, Inc.
> > +
> > + # This program is free software; you can redistribute it and/or modify
> > + # it under the terms of the GNU General Public License as published by
> > + # the Free Software Foundation; either version 2 of the License, or
> > + # (at your option) any later version.
> > + #
> > + # This program is distributed in the hope that it will be useful,
> > + # but WITHOUT ANY WARRANTY; without even the implied warranty of
> > + # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> > + # GNU General Public License for more details.
> > + #
> > + # You should have received a copy of the GNU General Public License
> > + # along with this program; if not, write to the Free Software
> > + # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
> > +
> > + # Please email any bugs, comments, and/or additions to this file to:
> > + # bug-gdb@gnu.org
> > +
> > + # This is a regression test for gdb/568 in the sources.redhat.com
> > + # GNATS database. As of early June 2002, GDB could get sort of wedged
> > + # debugging the program `killed.c':
> > + #
> > + # $ $D6/gdb/gdb -nw killed
> > + # GNU gdb 2002-06-11-cvs
> > + # Copyright 2002 Free Software Foundation, Inc.
> > + # GDB is free software, covered by the GNU General Public License, and you are
> > + # welcome to change it and/or distribute copies of it under certain conditions.
> > + # Type "show copying" to see the conditions.
> > + # There is absolutely no warranty for GDB. Type "show warranty" for details.
> > + # This GDB was configured as "i686-pc-linux-gnu"...
> > + # (gdb) run
> > + # Starting program: /home/jimb/morganstanley/play/killed
> > + # [New Thread 1024 (LWP 6487)]
> > + # [New Thread 2049 (LWP 6488)]
> > + # [New Thread 1026 (LWP 6489)]
> > + # Cannot find user-level thread for LWP 6487: generic error
> > + # (gdb) quit
> > + # The program is running. Exit anyway? (y or n) y
> > + # Cannot find thread 2049: generic error
> > + # (gdb) kill
> > + # Kill the program being debugged? (y or n) y
> > + # Cannot find thread 2049: generic error
> > + # (gdb) The program is running. Exit anyway? (y or n) y
> > + # Cannot find thread 2049: generic error
> > + # (gdb)
> > + # [7]+ Stopped $D6/gdb/gdb -nw killed
> > + # $ kill %7
> > + #
> > + # [7]+ Stopped $D6/gdb/gdb -nw killed
> > + # $ kill -9 %7
> > + #
> > + # [7]+ Stopped $D6/gdb/gdb -nw killed
> > + # $
> > + # [7]+ Killed $D6/gdb/gdb -nw killed
> > + # $
> > +
> > + if $tracelevel then {
> > + strace $tracelevel
> > + }
> > +
> > + set prms_id 0
> > + set bug_id 0
> > +
> > + set testfile "killed"
> > + set srcfile ${testfile}.c
> > + set binfile ${objdir}/${subdir}/${testfile}
> > +
> > + if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "incdir=${objdir}/${subdir}"]] != "" } {
> > + gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
> > + }
> > +
> > +
> > + gdb_start
> > + gdb_reinitialize_dir $srcdir/$subdir
> > + gdb_load ${binfile}
> > +
> > + gdb_test "run" "" "run program to completion"
> > +
> > + # Try to quit.
> > + send_gdb "quit\n"
> > + gdb_expect {
> > + -re "The program is running. Exit anyway\\? \\(y or n\\) $" {
> > + send_gdb "y\n"
> > + exp_continue
> > + }
> > + eof {
> > + pass "GDB exits after multi-threaded program exits messily"
> > + }
> > + -re "Cannot find thread ${decimal}: generic error\[\r\n\]*$gdb_prompt $" {
> > + # setup_kfail "gdb/568"
> > + fail "GDB exits after multi-threaded program exits messily (gdb/568)"
> > + }
> > + timeout {
> > + fail "GDB exits after multi-threaded program exits messily (timeout)"
> > + }
> > + }
> > Index: gdb/testsuite/gdb.threads/killed.c
> > ===================================================================
> > RCS file: gdb/testsuite/gdb.threads/killed.c
> > diff -N gdb/testsuite/gdb.threads/killed.c
> > *** gdb/testsuite/gdb.threads/killed.c 1 Jan 1970 00:00:00 -0000
> > --- gdb/testsuite/gdb.threads/killed.c 13 Jun 2002 17:46:54 -0000
> > ***************
> > *** 0 ****
> > --- 1,24 ----
> > + #include <sys/types.h>
> > + #include <signal.h>
> > + #include <pthread.h>
> > + #include <stdio.h>
> > +
> > + int pid;
> > +
> > + void *
> > + child_func (void *dummy)
> > + {
> > + kill (pid, SIGKILL);
> > + exit (1);
> > + }
> > +
> > + int
> > + main ()
> > + {
> > + pthread_t child;
> > +
> > + pid = getpid ();
> > + pthread_create (&child, 0, child_func, 0);
> > + for (;;)
> > + sleep (10000);
> > + }
>
--
Daniel Jacobowitz
MontaVista Software Debian GNU/Linux Developer