# This testcase is part of GDB, the GNU debugger. # # Copyright 2013-2021 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 . # Test relies on checking gdb debug output. Do not run if gdb debug is # enabled as any debug will be redirected to the log. if [gdb_debug_enabled] { untested "debug is enabled" return 0 } standard_testfile # The test program exits after a while, in case GDB crashes. Make it # wait at least as long as we may wait before declaring a time out # failure. set options { "additional_flags=-DTIMEOUT=$timeout" debug } if { [build_executable ${testfile}.exp ${testfile} $srcfile $options] == -1 } { return -1 } # Return 0 on success, non-zero otherwise. proc do_test { pass } { global testfile gdb_prompt binfile pf_prefix if ![runto_main] { return -1 } gdb_breakpoint "${testfile}.c:[gdb_get_line_number "loop-line" ${testfile}.c]" \ temporary # gdb_continue_to_breakpoint would print a pass message. gdb_test "continue" "Temporary breakpoint .* loop-line .*" "" gdb_test_no_output "set range-stepping off" "" gdb_test_no_output "set debug infrun 1" "" set test "run a bit #$pass" set abort 1 gdb_test_multiple "step" $test { -re {\[infrun\] process_event_stop_test: stepping inside range} { # Suppress pass $test verbose -log "$pf_prefix $test: ran" set abort 0 } } if $abort { verbose -log "$pf_prefix $test: did not run" return $abort } set gdb_pid [exp_pid -i [board_info host fileid]] remote_exec host "kill -TERM ${gdb_pid}" set test "expect eof #$pass" set abort 1 set stepping 0 # If GDB mishandles the SIGTERM and doesn't exit, this should FAIL # with timeout. We don't expect a GDB prompt, so we see one, # we'll FAIL too. gdb_test_multiple "" $test { eof { verbose -log "$pf_prefix $test: got eof" set abort 0 } -re {\[infrun\] process_event_stop_test: stepping inside range} { incr stepping exp_continue } } verbose -log "$pf_prefix $test: stepped $stepping times" return $abort } # Testcase was FAILing approx. on 10th pass with unpatched GDB. # 50 runs should be approx. a safe number to be sure it is fixed now. set passes 50 for {set pass 0} {$pass < $passes} {incr pass} { clean_restart ${testfile} if { [do_test $pass] != 0 } { break } } gdb_assert {$pass == $passes} "$passes SIGTERM passes"