# Copyright 2002-2003, 2005, 2007-2012 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 3 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, see <http://www.gnu.org/licenses/>.

# 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/foo/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
# $ 


standard_testfile

if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable debug] != "" } {
    return -1
}


clean_restart ${binfile}

gdb_run_cmd
gdb_expect {
  -re "$gdb_prompt $" {
    pass "run program to completion"
  }
  timeout {
    fail "run program to completion (timeout)"
  }
}

# Try to quit.
send_gdb "quit\n"
gdb_expect {
    -re "Quit 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 $" {
        kfail "gdb/568" "GDB exits after multi-threaded program exits messily"
    }
    timeout {
        fail "GDB exits after multi-threaded program exits messily (timeout)"
    }
}
