From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32671 invoked by alias); 13 Jun 2002 17:48:33 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 32628 invoked from network); 13 Jun 2002 17:48:30 -0000 Received: from unknown (HELO zwingli.cygnus.com) (208.245.165.35) by sources.redhat.com with SMTP; 13 Jun 2002 17:48:30 -0000 Received: by zwingli.cygnus.com (Postfix, from userid 442) id 16C245EA11; Thu, 13 Jun 2002 12:48:28 -0500 (EST) To: Michael Snyder Cc: gdb-patches@sources.redhat.com Subject: Re: RFA: test GDB's ability to kill threaded programs that die messily References: <20020612201556.978BE5EA11@zwingli.cygnus.com> <3D07CB54.8E7BA834@redhat.com> <3D07EE1A.FF4B4B83@redhat.com> From: Jim Blandy Date: Thu, 13 Jun 2002 10:48:00 -0000 In-Reply-To: <3D07EE1A.FF4B4B83@redhat.com> Message-ID: User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.1 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-SW-Source: 2002-06/txt/msg00224.txt.bz2 Michael Snyder writes: > Jim Blandy wrote: > > Michael Snyder writes: > > > Jim Blandy wrote: > > > > > > > > This tests the bug reported in gdb/568. > > > > > > > > 2002-06-12 Jim Blandy > > > > > > > > * 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 * 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 + #include + #include + #include + + 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); + }