From: Yao Qi Date: Mon, 25 Apr 2016 08:53:51 +0000 (+0100) Subject: New test case gdb.base/branch-to-self.exp X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f3abeff575541dd80e1facd6d0f920e10f77fede;p=binutils-gdb.git New test case gdb.base/branch-to-self.exp gdb/testsuite: 2016-04-25 Yao Qi * gdb.base/branch-to-self.c: New file. * gdb.base/branch-to-self.exp: New file. --- diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index c7c9d58416b..c919c475286 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-04-25 Yao Qi + + * gdb.base/branch-to-self.c: New file. + * gdb.base/branch-to-self.exp: New file. + 2016-04-22 Yao Qi * gdb.trace/unavailable.exp (gdb_collect_globals_test_1): Match diff --git a/gdb/testsuite/gdb.base/branch-to-self.c b/gdb/testsuite/gdb.base/branch-to-self.c new file mode 100644 index 00000000000..594214b719d --- /dev/null +++ b/gdb/testsuite/gdb.base/branch-to-self.c @@ -0,0 +1,40 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2016 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 . */ + +#include +#include +#include + +volatile int counter = 0; + +static void +handler (int sig) +{ + counter = 5; +} + +int +main (void) +{ + signal (SIGALRM, handler); + alarm (5); + + /* Compiler may generate a single instruction which branches to + itself. */ + for (;;); /* loop-line */ + return 0; +} diff --git a/gdb/testsuite/gdb.base/branch-to-self.exp b/gdb/testsuite/gdb.base/branch-to-self.exp new file mode 100644 index 00000000000..2fd3b386df0 --- /dev/null +++ b/gdb/testsuite/gdb.base/branch-to-self.exp @@ -0,0 +1,69 @@ +# This testcase is part of GDB, the GNU debugger. +# +# Copyright 2016 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 + +if { [build_executable ${testfile}.exp ${testfile} $srcfile {debug}] == -1 } { + return -1 +} + +with_test_prefix "single-step" { + global testfile + + clean_restart ${testfile} + if ![runto_main] { + return -1 + } + set line_num [gdb_get_line_number "loop-line" ${testfile}.c] + + gdb_test "break ${testfile}.c:${line_num}" "Breakpoint .*" \ + "set breakpoint" + gdb_continue_to_breakpoint "hit breakpoint" + gdb_test "si" ".*${testfile}.c:${line_num}.*" +} + +with_test_prefix "break-cond" { + global testfile + + foreach_with_prefix side {"host" "target"} { + + clean_restart ${testfile} + + if ![runto_main] { + return -1 + } + + set test "set breakpoint condition-evaluation $side" + gdb_test_multiple $test $test { + -re "warning: Target does not support breakpoint condition evaluation.\r\nUsing host evaluation mode instead.\r\n$gdb_prompt $" { + # Target doesn't support breakpoint condition + # evaluation on its side. Skip the test. + continue + } + -re "^$test\r\n$gdb_prompt $" { + } + } + + set line_num [gdb_get_line_number "loop-line" ${testfile}.c] + gdb_test "break ${testfile}.c:${line_num} if counter > 3" \ + "Breakpoint .*" "set breakpoint with condition" + + gdb_continue_to_breakpoint "continue to break" + + gdb_test "p counter" ".* = 5" + } +}