summaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.reverse/until-precsave.exp
diff options
context:
space:
mode:
authorMichael Snyder <msnyder@vmware.com>2009-10-22 19:58:26 +0000
committerMichael Snyder <msnyder@vmware.com>2009-10-22 19:58:26 +0000
commit02506ff1ad948dc6cd941c91ea3c3aa28831f03d (patch)
treebcc8b785962a4ae3bdb0a00628d8f6df8c5e50e3 /gdb/testsuite/gdb.reverse/until-precsave.exp
parent4cf866a3ee7728ec7e6e3f8f3bb8a57f8c1818ba (diff)
downloadbinutils-gdb-02506ff1ad948dc6cd941c91ea3c3aa28831f03d.tar.gz
2009-10-19 Michael Snyder <msnyder@vmware.com>
* gdb.reverse/break-precsave.exp: New test. * gdb.reverse/consecutive-precsave.exp: Ditto. * gdb.reverse/finish-precsave.exp: Ditto. * gdb.reverse/i386-precsave.exp: Ditto. * gdb.reverse/machinestate-precsave.exp: Ditto. * gdb.reverse/sigall-precsave.exp: Ditto. * gdb.reverse/solilb-precsave.exp: Ditto. * gdb.reverse/step-precsave.exp: Ditto. * gdb.reverse/until-precsave.exp: Ditto. * gdb.reverse/watch-precsave.exp: Ditto.
Diffstat (limited to 'gdb/testsuite/gdb.reverse/until-precsave.exp')
-rw-r--r--gdb/testsuite/gdb.reverse/until-precsave.exp146
1 files changed, 146 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.reverse/until-precsave.exp b/gdb/testsuite/gdb.reverse/until-precsave.exp
new file mode 100644
index 00000000000..212198a5fa3
--- /dev/null
+++ b/gdb/testsuite/gdb.reverse/until-precsave.exp
@@ -0,0 +1,146 @@
+# 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 'until' and
+# 'advance' in precord logfile.
+
+# This test suitable only for process record-replay
+if ![target_info exists gdb,use_precord] {
+ return
+}
+
+set testfile "until-reverse"
+set srcfile ${testfile}.c
+set srcfile1 ur1.c
+
+if { [prepare_for_testing $testfile.exp $testfile {until-reverse.c ur1.c} ] } {
+ return -1
+}
+
+set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]
+set bp_location7 [gdb_get_line_number "set breakpoint 7 here"]
+set bp_location9 [gdb_get_line_number "set breakpoint 9 here" "$srcfile1"]
+set bp_location19 [gdb_get_line_number "set breakpoint 19 here"]
+set bp_location20 [gdb_get_line_number "set breakpoint 20 here"]
+set bp_location21 [gdb_get_line_number "set breakpoint 21 here"]
+
+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.
+}
+
+set end_of_main [gdb_get_line_number "set breakpoint 10a here" ]
+gdb_test "break $end_of_main" \
+ "Breakpoint $decimal at .*/$srcfile, line $end_of_main\." \
+ "BP at end of main"
+
+gdb_test "continue" "Breakpoint .* set breakpoint 10a here .*" "run to end of main"
+
+gdb_test "record save until.precsave" \
+ "Saved core file until.precsave with execution log\." \
+ "save process recfile"
+
+gdb_test "kill" "" "Kill process, prepare to debug log file" \
+ "Kill the program being debugged\\? \\(y or n\\) " "y"
+
+gdb_test "record restore until.precsave" \
+ "Program terminated with signal .*" \
+ "reload core file"
+
+# Verify that plain vanilla "until <location>" works.
+#
+gdb_test "until $bp_location1" \
+ "main .* at .*:$bp_location1.*" \
+ "until line number"
+
+# Advance up to factorial, outer invocation
+#
+gdb_test "advance factorial" \
+ "factorial .value=6..*$srcfile:$bp_location7.*" \
+ "advance to factorial"
+
+# At this point, 'until' should continue the inferior up to when all the
+# inner invocations of factorial() are completed and we are back at this
+# frame.
+#
+gdb_test "until $bp_location19" \
+ "factorial .value=720.*${srcfile}:$bp_location19.*" \
+ "until factorial, recursive function"
+
+# Finish out to main scope
+#
+gdb_test "finish" \
+ " in main .*$srcfile:$bp_location1.*" \
+ "finish to main"
+
+# Advance to a function called by main (marker2)
+#
+gdb_test "advance marker2" \
+ "marker2 .a=43.*$srcfile1:$bp_location9.*" \
+ "advance to marker2"
+
+# Now issue an until with another function, not called by the current
+# frame, as argument. This should not work, i.e. the program should
+# stop at main, the caller, where we put the 'guard' breakpoint.
+#
+set test_msg "until func, not called by current frame"
+gdb_test_multiple "until marker3" "$test_msg" {
+ -re "main .*at .*${srcfile}:$bp_location20.*$gdb_prompt $" {
+ pass "$test_msg"
+ }
+ -re "main .*at .*${srcfile}:$bp_location21.*$gdb_prompt $" {
+ pass "$test_msg"
+ }
+}
+
+###
+###
+###
+
+# 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"
+
+#
+# We should now be at main, after the return from marker2.
+# "Advance" backward into marker2.
+#
+
+gdb_test "advance marker2" \
+ "marker2 .a=43.*$srcfile1:$bp_location9.*" \
+ "reverse-advance to marker2"
+
+# Finish out to main scope (backward)
+
+gdb_test "finish" \
+ " in main .*$srcfile:$bp_location20.*" \
+ "reverse-finish from marker2"
+
+# Advance backward to last line of factorial (outer invocation)
+
+gdb_test "advance $bp_location19" \
+ "factorial .value=720.*${srcfile}:$bp_location19.*" \
+ "reverse-advance to final return of factorial"
+
+# Now do "until" across the recursive calls,
+# ending up in the same frame where we are now.
+
+gdb_test "until $bp_location7" \
+ "factorial .value=6..*$srcfile:$bp_location7.*" \
+ "reverse-until to entry of factorial"