binutils-gdb/gdb/testsuite/gdb.base/gdb-sigterm.exp
Pedro Alves cce0ae568c gdb: Fix DUPLICATE and PATH regressions throughout
The previous patch to add -prompt/-lbl to gdb_test introduced a
regression: Before, you could specify an explicit empty message to
indicate you didn't want to PASS, like so:

  gdb_test COMMAND PATTERN ""

After said patch, gdb_test no longer distinguishes
no-message-specified vs empty-message, so tests that previously would
be silent on PASS, now started emitting PASS messages based on
COMMAND.  This in turn introduced a number of PATH/DUPLICATE
violations in the testsuite.

This commit fixes all the regressions I could see.

This patch uses the new -nopass feature introduced in the previous
commit, but tries to avoid it if possible.  Most of the patch fixes
DUPLICATE issues the usual way, of using with_test_prefix or explicit
unique messages.

See previous commit's log for more info.

In addition to looking for DUPLICATEs, I also looked for cases where
we would now end up with an empty message in gdb.sum, due to a
gdb_test being passed both no message and empty command.  E.g., this
in gdb.ada/bp_reset.exp:

 gdb_run_cmd
 gdb_test "" "Breakpoint $decimal, foo\\.nested_sub \\(\\).*"

was resulting in this in gdb.sum:

 PASS: gdb.ada/bp_reset.exp:

I fixed such cases by passing an explicit message.  We may want to
make such cases error out.

Tested on x86_64 GNU/Linux, native and native-extended-gdbserver.  I
see zero PATH cases now.  I get zero DUPLICATEs with native testing
now.  I still see some DUPLICATEs with native-extended-gdbserver, but
those were preexisting, unrelated to the gdb_test change.

Change-Id: I5375f23f073493e0672190a0ec2e847938a580b2
2022-05-25 13:44:12 +01:00

101 lines
2.9 KiB
Plaintext

# This testcase is part of GDB, the GNU debugger.
#
# Copyright 2013-2022 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/>.
# 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_test "continue" "Temporary breakpoint .* loop-line .*"
gdb_test_no_output "set range-stepping off"
gdb_test_no_output "set debug infrun 1"
set abort 1
gdb_test_multiple "step" "run a bit" {
-re {\[infrun\] process_event_stop_test: stepping inside range} {
pass $gdb_test_name
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"
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 "" "expect eof" {
eof {
pass "$gdb_test_name (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} {
with_test_prefix "pass=$pass" {
clean_restart ${testfile}
if { [do_test $pass] != 0 } {
break
}
}
}
gdb_assert {$pass == $passes} "$passes SIGTERM passes"