From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6732 invoked by alias); 11 Sep 2002 00:24:08 -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 6725 invoked from network); 11 Sep 2002 00:24:07 -0000 Received: from unknown (HELO cygnus.com) (205.180.83.203) by sources.redhat.com with SMTP; 11 Sep 2002 00:24:07 -0000 Received: from redhat.com (reddwarf.sfbay.redhat.com [172.16.24.50]) by runyon.cygnus.com (8.8.7-cygnus/8.8.7) with ESMTP id RAA09778; Tue, 10 Sep 2002 17:13:26 -0700 (PDT) Message-ID: <3D7E8D25.2BDAB38E@redhat.com> Date: Tue, 10 Sep 2002 17:24:00 -0000 From: Michael Snyder Organization: Red Hat, Inc. X-Accept-Language: en MIME-Version: 1.0 To: Jim Blandy 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> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-SW-Source: 2002-09/txt/msg00174.txt.bz2 Jim Blandy wrote: > > 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. Belatedly approved. Check it in? > > 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); > + }