aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.reverse/consecutive-reverse.exp
diff options
context:
space:
mode:
authorMichael Snyder <msnyder@vmware.com>2009-06-27 18:49:20 +0000
committerMichael Snyder <msnyder@vmware.com>2009-06-27 18:49:20 +0000
commit28d41a992fe2b335e93e84f724c76df8ed47fe28 (patch)
tree5a0b179ef4873d6255a32ecb30790e2bc3625704 /gdb/testsuite/gdb.reverse/consecutive-reverse.exp
parent388a856237fc981725e33eca6644d837c94918a9 (diff)
downloadgdb-28d41a992fe2b335e93e84f724c76df8ed47fe28.zip
gdb-28d41a992fe2b335e93e84f724c76df8ed47fe28.tar.gz
gdb-28d41a992fe2b335e93e84f724c76df8ed47fe28.tar.bz2
2009-06-27 Michael Snyder <msnyder@vmware.com>
* gdb.reverse: New directory. * gdb.reverse/break-reverse.c: New test. * gdb.reverse/break-reverse.exp: New test. * gdb.reverse/consecutive-reverse.c: New test. * gdb.reverse/consecutive-reverse.exp: New test. * gdb.reverse/finish-reverse.c: New test. * gdb.reverse/finish-reverse.exp: New test. * gdb.reverse/machinestate.c: New test. * gdb.reverse/ms1.c: New test. * gdb.reverse/machinestate.exp: New test. * gdb.reverse/Makefile.in: New file. * gdb.reverse/shr2.c: New test. * gdb.reverse/solib-reverse.c: New test. * gdb.reverse/solib-reverse.exp: New test. * gdb.reverse/step-reverse.c: New test. * gdb.reverse/step-reverse.exp: New test. * gdb.reverse/until-reverse.c: New test. * gdb.reverse/ur1.c: New test. * gdb.reverse/until-reverse.exp: New test. * gdb.reverse/watch-reverse.c: New test. * gdb.reverse/watch-reverse.exp: New test. * configure.ac (AC_OUTPUT): Add gdb.reverse/Makefile. * configure: Regenerate.
Diffstat (limited to 'gdb/testsuite/gdb.reverse/consecutive-reverse.exp')
-rw-r--r--gdb/testsuite/gdb.reverse/consecutive-reverse.exp125
1 files changed, 125 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.reverse/consecutive-reverse.exp b/gdb/testsuite/gdb.reverse/consecutive-reverse.exp
new file mode 100644
index 0000000..e2ba83a
--- /dev/null
+++ b/gdb/testsuite/gdb.reverse/consecutive-reverse.exp
@@ -0,0 +1,125 @@
+# Copyright 2008, 2009 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/>.
+
+# This file is part of the GDB testsuite. It tests stepping over
+# consecutive instructions in reverse.
+
+if ![target_info exists gdb,can_reverse] {
+ return
+}
+
+set testfile "consecutive-reverse"
+set srcfile ${testfile}.c
+
+if { [prepare_for_testing $testfile.exp $testfile $srcfile] } {
+ return -1
+}
+
+runto main
+
+if [target_info exists gdb,use_precord] {
+ # Activate process record/replay
+ gdb_test "record" "" "Turn on process record"
+ # FIXME: command ought to acknowledge, so we can test if it succeeded.
+}
+
+gdb_breakpoint foo
+gdb_test "continue" "Breakpoint $decimal, foo .*" \
+ "continue to breakpoint in foo"
+
+set foo1_addr 0
+set foo2_addr 0
+set stop_addr 0
+
+send_gdb "x /2i \$pc\n"
+gdb_expect {
+ global hex
+ global foo1_addr
+ global foo2_addr
+ global gdb_prompt
+
+ -re "($hex).*\[\r\n\]+($hex).*$gdb_prompt $" {
+ set foo1_addr $expect_out(1,string)
+ set foo2_addr $expect_out(2,string)
+ pass "get breakpoint address for foo"
+ }
+ -re ".*$gdb_prompt $" {
+ fail "get breakpoint address for foo"
+ return 0;
+ }
+ timeout {
+ fail "get breakpoint address for foo (timeout)"
+ return 0;
+ }
+}
+
+gdb_test "break \*$foo2_addr" "Breakpoint $decimal at $foo2_addr: file .*" \
+ "set bp, 2nd instr"
+
+send_gdb "step\n"
+gdb_expect {
+ -re "Breakpoint $decimal, ($hex) in foo.*$gdb_prompt $" {
+ set stop_addr $expect_out(1,string)
+ if [eval expr "$foo2_addr == $stop_addr"] then {
+ pass "stopped at bp, 2nd instr"
+ } else {
+ fail "stopped at bp, 2nd instr (wrong address)"
+ }
+ }
+ -re ".*$gdb_prompt $" {
+ fail "stopped at bp, 2nd instr"
+ }
+ timeout {
+ fail "stopped at bp, 2nd instr (timeout)"
+
+ }
+}
+
+###
+###
+###
+
+# Set reverse execution direction
+# FIXME: command needs to acknowledge, so we can test if it succeeded.
+
+gdb_test "set exec-dir reverse" "" "set reverse execution"
+
+# Now step backward and hope to hit the first breakpoint.
+
+set test_msg "stopped at bp in reverse, 1st instr"
+gdb_test_multiple "step" "$test_msg" {
+ -re "Breakpoint $decimal, ($hex) in foo.*$gdb_prompt $" {
+ set stop_addr $expect_out(1,string)
+ if [eval expr "$foo1_addr == $stop_addr"] then {
+ pass "$test_msg"
+ } else {
+ fail "$test_msg (wrong address)"
+ }
+ }
+ -re "Breakpoint $decimal, foo.*$gdb_prompt $" {
+ send_gdb "print \$pc == $foo1_addr\n"
+ gdb_expect {
+ -re "$decimal = 1\[\r\n\]+$gdb_prompt $" {
+ pass "$test_msg"
+ }
+ -re "$decimal = 0\[\r\n\]+$gdb_prompt $" {
+ fail "$test_msg (wrong address)"
+ }
+ }
+ }
+ -re ".*$gdb_prompt $" {
+ fail "$test_msg"
+ }
+}