aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.reverse/solib-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/solib-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/solib-reverse.exp')
-rw-r--r--gdb/testsuite/gdb.reverse/solib-reverse.exp124
1 files changed, 124 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.reverse/solib-reverse.exp b/gdb/testsuite/gdb.reverse/solib-reverse.exp
new file mode 100644
index 0000000..8ad2be8
--- /dev/null
+++ b/gdb/testsuite/gdb.reverse/solib-reverse.exp
@@ -0,0 +1,124 @@
+# Copyright 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 reverse debugging
+# with shared libraries.
+
+if ![target_info exists gdb,can_reverse] {
+ return
+}
+
+set testfile "solib-reverse"
+set srcfile ${testfile}.c
+set libfile "shr2"
+set libsrc ${libfile}.c
+set library ${objdir}/${subdir}/${libfile}.sl
+set binfile ${objdir}/${subdir}/${testfile}
+
+if [get_compiler_info ${binfile}] {
+ return -1
+}
+
+if { [gdb_compile_shlib ${srcdir}/${subdir}/${libsrc} ${library} "debug"] != "" } {
+ untested "Could not compile shared library."
+ return -1
+}
+
+set exec_opts [list debug shlib=${library}]
+
+if { [gdb_compile ${srcdir}/${subdir}/${srcfile} ${binfile} executable $exec_opts] != "" } {
+ untested "Could not compile $binfile."
+ return -1
+}
+
+# Start with a fresh gdb.
+
+gdb_exit
+gdb_start
+gdb_reinitialize_dir $srcdir/$subdir
+gdb_load ${binfile}
+
+
+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.
+}
+
+#
+# Test reverse-step over undebuggable solib functions.
+#
+
+# Run forward past some solib function calls.
+
+set end_part_one [gdb_get_line_number " end part one" "$srcfile"]
+set end_part_two [gdb_get_line_number " end part two" "$srcfile"]
+gdb_test "until $end_part_one" " end part one.*" "run until end part one"
+
+gdb_test "reverse-step" " sleep three .*" "reverse-step third sleep"
+gdb_test "reverse-step" " sleep two .*" "reverse-step second sleep"
+gdb_test "reverse-step" " sleep one .*" \
+ "reverse-step first sleep, dynsym resolve"
+
+gdb_test "reverse-step" " printf three .*" "reverse-step third printf"
+gdb_test "reverse-step" " printf two .*" "reverse-step second printf"
+gdb_test "reverse-step" " printf one .*" \
+ "reverse-step first printf, dynsym resolve"
+gdb_test "reverse-step" " generic statement.*" "reverse-step generic"
+
+
+#
+# Test reverse-next over undebuggable solib functions.
+#
+
+# Run forward again...
+
+gdb_test "until $end_part_one" " end part one.*" "forward to end part one"
+
+gdb_test "reverse-next" " sleep three .*" "reverse-next third sleep"
+gdb_test "reverse-next" " sleep two .*" "reverse-next second sleep"
+gdb_test "reverse-next" " sleep one .*" \
+ "reverse-next first sleep, dynsym resolve"
+
+gdb_test "reverse-next" " printf three .*" "reverse-next third printf"
+gdb_test "reverse-next" " printf two .*" "reverse-next second printf"
+gdb_test "reverse-next" " printf one .*" \
+ "reverse-next first printf, dynsym resolve"
+gdb_test "reverse-next" " generic statement.*" "reverse-next generic"
+
+
+#
+# Test reverse-step into debuggable solib function
+#
+
+gdb_test "reverse-step" "${libsrc}.*" "reverse-step into solib function one"
+gdb_test "reverse-step" "return 2.x.*" "reverse-step within solib function one"
+gdb_test "reverse-step" " middle part two.*" "reverse-step back to main one"
+
+gdb_test "reverse-step" "${libsrc}.*" "reverse-step into solib function two"
+gdb_test "reverse-step" "return 2.x.*" "reverse-step within solib function two"
+gdb_test "reverse-step" " begin part two.*" "reverse-step back to main two"
+
+#
+# Test reverse-next over debuggable solib function
+#
+
+gdb_test "until $end_part_two" " end part two.*" "run until end part two"
+
+gdb_test "reverse-next" " middle part two.*" "reverse-next over solib function one"
+gdb_test "reverse-next" " begin part two.*" "reverse-next over solib function two"