diff options
Diffstat (limited to 'gdb/testsuite')
-rw-r--r-- | gdb/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/gdb-sigterm.c | 26 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/gdb-sigterm.exp | 96 |
3 files changed, 128 insertions, 0 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 458e795..91f1cf3 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2014-03-18 Jan Kratochvil <jan.kratochvil@redhat.com> + + PR gdb/15358 + * gdb.base/gdb-sigterm.c: New file. + * gdb.base/gdb-sigterm.exp: New file. + 2014-03-18 Pedro Alves <palves@redhat.com> PR gdb/13860 diff --git a/gdb/testsuite/gdb.base/gdb-sigterm.c b/gdb/testsuite/gdb.base/gdb-sigterm.c new file mode 100644 index 0000000..ffa09e4 --- /dev/null +++ b/gdb/testsuite/gdb.base/gdb-sigterm.c @@ -0,0 +1,26 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2013 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/>. */ + +#include <unistd.h> + +int +main (void) +{ + alarm (60); + + for (;;); /* loop-line */ +} diff --git a/gdb/testsuite/gdb.base/gdb-sigterm.exp b/gdb/testsuite/gdb.base/gdb-sigterm.exp new file mode 100644 index 0000000..b57680d --- /dev/null +++ b/gdb/testsuite/gdb.base/gdb-sigterm.exp @@ -0,0 +1,96 @@ +# This testcase is part of GDB, the GNU debugger. +# +# Copyright 2013 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/>. + +standard_testfile + +if { [build_executable ${testfile}.exp ${testfile}] == -1 } { + return -1 +} + +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" "" + gdb_test_no_output "set debug lin-lwp 1" "" + + set test "run a bit #$pass" + set abort 1 + gdb_test_multiple "step" $test { + -re "infrun: stepping inside range" { + # Suppress pass $test + verbose -log "$pf_prefix $test" + set abort 0 + } + } + if $abort { + return + } + + 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 + gdb_test_multiple "" $test { + eof { + verbose -log "$pf_prefix $test" + set abort 0 + } + -re "infrun: stepping inside range" { + incr stepping + if { $stepping > 200 } { + fail "$test (stepping inside range $stepping times)" + } else { + exp_continue + } + } + } + if $abort { + return + } +} + +# 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. + +for {set pass 0} {$pass < 50} {incr pass} { + + clean_restart ${testfile} + gdb_test_no_output "set target-async off" "" + with_test_prefix "sync" { + do_test $pass + } + + clean_restart ${testfile} + gdb_test_no_output "set target-async on" "" + with_test_prefix "async" { + do_test $pass + } +} +pass "$pass SIGTERM passes" |