From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3411 invoked by alias); 12 Jun 2002 20:16:01 -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 3323 invoked from network); 12 Jun 2002 20:15:57 -0000 Received: from unknown (HELO zwingli.cygnus.com) (208.245.165.35) by sources.redhat.com with SMTP; 12 Jun 2002 20:15:57 -0000 Received: by zwingli.cygnus.com (Postfix, from userid 442) id 978BE5EA11; Wed, 12 Jun 2002 15:15:56 -0500 (EST) From: Jim Blandy To: gdb-patches@sources.redhat.com Subject: RFA: test GDB's ability to kill threaded programs that die messily Message-Id: <20020612201556.978BE5EA11@zwingli.cygnus.com> Date: Wed, 12 Jun 2002 13:16:00 -0000 X-SW-Source: 2002-06/txt/msg00194.txt.bz2 This tests the bug reported in gdb/568. 2002-06-12 Jim Blandy * gdb.threads/killed.exp, gdb.threads/killed.c: New test. 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 12 Jun 2002 20:13:32 -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); + } 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 12 Jun 2002 20:13:32 -0000 *************** *** 0 **** --- 1,100 ---- + # 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 + + # This only works with Linux configurations. + if ![istarget *-*-linux-gnu] then { + return + } + + set testfile "killed" + set srcfile ${testfile}.c + set binfile ${objdir}/${subdir}/${testfile} + if {[gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug libs=-lpthread}] != ""} { + 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)" + } + }