# This testcase is part of GDB, the GNU debugger. # Copyright 2014-2020 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 . */ standard_testfile # Run the test proper. THREADED indicates whether to build a threaded # program and spawn several threads before trying to kill the program. proc test {threaded} { global testfile srcfile decimal with_test_prefix [expr ($threaded)?"threaded":"non-threaded"] { set options {debug} if {$threaded} { lappend options "pthreads" lappend options "additional_flags=-DUSE_THREADS" set prog ${testfile}_threads } else { set prog ${testfile}_nothreads } if {[prepare_for_testing "failed to prepare" $prog $srcfile $options] == -1} { return -1 } if { ![runto main] } then { fail "run to main" return } set linenum [gdb_get_line_number "set break here"] gdb_breakpoint "$srcfile:$linenum" gdb_continue_to_breakpoint "break here" ".*break here.*" if {$threaded} { gdb_test "info threads" "1.*2.*3.*4.*5.*6.*" "all threads started" } # This kills and ensures no output other than the prompt comes out, # like: # # (gdb) kill # Kill the program being debugged? (y or n) y # (gdb) # # If we instead saw more output, like e.g., with an extended-remote # connection: # # (gdb) kill # Kill the program being debugged? (y or n) y # Remote connection closed # (gdb) # # the above would mean that the remote end crashed. gdb_test_multiple "kill" "kill" { -re "Kill the program being debugged\\? \\(y or n\\) $" { gdb_test "y" "\\\[Inferior $decimal \\(.*\\) killed\\\]" "kill" } } } } foreach threaded {true false} { test $threaded }