1# Copyright 2002, 2003, 2005, 2007 Free Software Foundation, Inc.
2
3# This program is free software; you can redistribute it and/or modify
4# it under the terms of the GNU General Public License as published by
5# the Free Software Foundation; either version 3 of the License, or
6# (at your option) any later version.
7#
8# This program is distributed in the hope that it will be useful,
9# but WITHOUT ANY WARRANTY; without even the implied warranty of
10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11# GNU General Public License for more details.
12#
13# You should have received a copy of the GNU General Public License
14# along with this program.  If not, see <http://www.gnu.org/licenses/>.
15
16# Please email any bugs, comments, and/or additions to this file to:
17# bug-gdb@gnu.org
18
19# This is a regression test for gdb/568 in the sources.redhat.com
20# GNATS database.  As of early June 2002, GDB could get sort of wedged
21# debugging the program `killed.c':
22#
23# $ $D6/gdb/gdb -nw killed
24# GNU gdb 2002-06-11-cvs
25# Copyright 2002 Free Software Foundation, Inc.
26# GDB is free software, covered by the GNU General Public License, and you are
27# welcome to change it and/or distribute copies of it under certain conditions.
28# Type "show copying" to see the conditions.
29# There is absolutely no warranty for GDB.  Type "show warranty" for details.
30# This GDB was configured as "i686-pc-linux-gnu"...
31# (gdb) run
32# Starting program: /home/jimb/foo/play/killed
33# [New Thread 1024 (LWP 6487)]
34# [New Thread 2049 (LWP 6488)]
35# [New Thread 1026 (LWP 6489)]
36# Cannot find user-level thread for LWP 6487: generic error
37# (gdb) quit
38# The program is running.  Exit anyway? (y or n) y
39# Cannot find thread 2049: generic error
40# (gdb) kill
41# Kill the program being debugged? (y or n) y
42# Cannot find thread 2049: generic error
43# (gdb) The program is running.  Exit anyway? (y or n) y
44# Cannot find thread 2049: generic error
45# (gdb)
46# [7]+  Stopped                 $D6/gdb/gdb -nw killed
47# $ kill %7
48#
49# [7]+  Stopped                 $D6/gdb/gdb -nw killed
50# $ kill -9 %7
51#
52# [7]+  Stopped                 $D6/gdb/gdb -nw killed
53# $
54# [7]+  Killed                  $D6/gdb/gdb -nw killed
55# $
56
57if $tracelevel then {
58	strace $tracelevel
59}
60
61set prms_id 0
62set bug_id 0
63
64set testfile "killed"
65set srcfile ${testfile}.c
66set binfile ${objdir}/${subdir}/${testfile}
67
68if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "incdir=${objdir}"]] != "" } {
69    return -1
70}
71
72
73gdb_start
74gdb_reinitialize_dir $srcdir/$subdir
75gdb_load ${binfile}
76
77gdb_run_cmd
78gdb_expect {
79  -re "$gdb_prompt $" {
80    pass "run program to completion"
81  }
82  timeout {
83    fail "run program to completion (timeout)"
84  }
85}
86
87# Try to quit.
88send_gdb "quit\n"
89gdb_expect {
90    -re "The program is running.  Exit anyway\\? \\(y or n\\) $" {
91        send_gdb "y\n"
92        exp_continue
93    }
94    eof {
95        pass "GDB exits after multi-threaded program exits messily"
96    }
97    -re "Cannot find thread ${decimal}: generic error\[\r\n\]*$gdb_prompt $" {
98        kfail "gdb/568" "GDB exits after multi-threaded program exits messily"
99    }
100    timeout {
101        fail "GDB exits after multi-threaded program exits messily (timeout)"
102    }
103}
104