diff options
Diffstat (limited to 'gdb/testsuite/gdb.btrace/stepi.exp')
-rw-r--r-- | gdb/testsuite/gdb.btrace/stepi.exp | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.btrace/stepi.exp b/gdb/testsuite/gdb.btrace/stepi.exp new file mode 100644 index 0000000..fb12e28 --- /dev/null +++ b/gdb/testsuite/gdb.btrace/stepi.exp @@ -0,0 +1,93 @@ +# This testcase is part of GDB, the GNU debugger. +# +# Copyright 2013 Free Software Foundation, Inc. +# +# Contributed by Intel Corp. <markus.t.metzger@intel.com> +# +# 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/>. + +# check for btrace support +if { [skip_btrace_tests] } { return -1 } + +# start inferior +standard_testfile x86-record_goto.S +if [prepare_for_testing stepi.exp $testfile $srcfile] { + return -1 +} + +global gdb_prompt + +if ![runto_main] { + return -1 +} + +proc check_replay_at { insn } { + gdb_test "info record" [join [list \ + "Active record target: record-btrace" \ + "Recorded 40 instructions in 16 functions for .*" \ + "Replay in progress\. At instruction $insn\." \ + ] "\r\n"] +} + +# trace the call to the test function +gdb_test_no_output "record btrace" +gdb_test "next" + +# we start with stepping to make sure that the trace is fetched automatically +gdb_test "reverse-stepi" ".*fun4\.5.*" +gdb_test "reverse-stepi" ".*fun4\.5.*" + +# let's check where we are in the trace +with_test_prefix "reverse-stepi to 39" { check_replay_at 39 } + +# let's step forward and check again +gdb_test "stepi" ".*fun4\.5.*" +with_test_prefix "stepi to 40" { check_replay_at 40 } + +# with the next step, we stop replaying +gdb_test "stepi" ".*main\.3.*" +gdb_test "info record" [join [list \ + "Active record target: record-btrace" \ + "Recorded 40 instructions in 16 functions for \[^\\\r\\\n\]*" \ + ] "\r\n"] "stepi to live" + +# let's step from a goto position somewhere in the middle +gdb_test "record goto 22" ".*fun3\.2.*" +with_test_prefix "goto 22" { check_replay_at 22 } + +gdb_test "stepi" ".*fun1\.1.*" +with_test_prefix "stepi to 23" { check_replay_at 23 } + +# and back again +gdb_test "reverse-stepi" ".*fun3\.2.*" +gdb_test "reverse-stepi" ".*fun3\.1.*" +with_test_prefix "reverse-stepi to 21" { check_replay_at 21 } + +# let's try to step off the left end +gdb_test "record goto begin" ".*main\.2.*" +with_test_prefix "goto begin" { check_replay_at 1 } + +gdb_test "reverse-stepi" "No more reverse-execution history\.\r\n.*main\.2.*" +gdb_test "reverse-stepi" "No more reverse-execution history\.\r\n.*main\.2.*" +with_test_prefix "reverse-stepi at begin" { check_replay_at 1 } + +# we can step forward, though +gdb_test "stepi" ".*fun4\.1.*" +with_test_prefix "stepi to 2" { check_replay_at 2 } + +# let's try to step off the left end again +gdb_test "reverse-stepi" ".*main\.2.*" +gdb_test "reverse-stepi" "No more reverse-execution history\.\r\n.*main\.2.*" +gdb_test "reverse-stepi" "No more reverse-execution history\.\r\n.*main\.2.*" +with_test_prefix "reverse-stepi at begin" { check_replay_at 1 } |