diff options
author | Michael Snyder <msnyder@specifix.com> | 2008-09-16 23:40:26 +0000 |
---|---|---|
committer | Michael Snyder <msnyder@specifix.com> | 2008-09-16 23:40:26 +0000 |
commit | 68b68b36a4fd9ec87195d72c437d4e28aa9bb028 (patch) | |
tree | 781a9a536110a076009ac0c43a4509a1e65e87cf | |
parent | 749952465571ae89bfc78e0a54ba37d2085fd23c (diff) | |
download | gdb-68b68b36a4fd9ec87195d72c437d4e28aa9bb028.tar.gz |
2008-09-15 Michael Snyder <msnyder@vmware.com>
* gdb.twreverse/consecutive-reverse.exp: New file.
* gdb.twreverse/consecutive-reverse.c: New file.
* gdb.twreverse/Makefile.in: Update for make clean.
-rw-r--r-- | gdb/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/testsuite/gdb.twreverse/consecutive-reverse.c | 20 | ||||
-rw-r--r-- | gdb/testsuite/gdb.twreverse/consecutive-reverse.exp | 126 |
3 files changed, 152 insertions, 0 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index d9edf7f4654..49d51671525 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2008-09-15 Michael Snyder <msnyder@vmware.com> + + * gdb.twreverse/consecutive-reverse.exp: New file. + * gdb.twreverse/consecutive-reverse.c: New file. + * gdb.twreverse/Makefile.in: Update for make clean. + 2008-09-10 Michael Snyder <msnyder@vmware.com> * gdb.twreverse/until-reverse.exp: New file. diff --git a/gdb/testsuite/gdb.twreverse/consecutive-reverse.c b/gdb/testsuite/gdb.twreverse/consecutive-reverse.c new file mode 100644 index 00000000000..bfea4296aec --- /dev/null +++ b/gdb/testsuite/gdb.twreverse/consecutive-reverse.c @@ -0,0 +1,20 @@ +/* + Purpose of this test: to test breakpoints on consecutive instructions. +*/ + +int a[7] = {1, 2, 3, 4, 5, 6, 7}; + +/* assert: first line of foo has more than one instruction. */ +int foo () +{ + return a[0] + a[1] + a[2] + a[3] + a[4] + a[5] + a[6]; +} + +main() +{ +#ifdef usestubs + set_debug_traps (); + breakpoint (); +#endif + foo (); +} diff --git a/gdb/testsuite/gdb.twreverse/consecutive-reverse.exp b/gdb/testsuite/gdb.twreverse/consecutive-reverse.exp new file mode 100644 index 00000000000..96db3fc606a --- /dev/null +++ b/gdb/testsuite/gdb.twreverse/consecutive-reverse.exp @@ -0,0 +1,126 @@ +# Copyright 2008 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/>. + +# Please email any bugs, comments, and/or additions to this file to: +# bug-gdb@prep.ai.mit.edu + +# Based on a file written by Michael Snyder. (msnyder@redhat.com) + +# +# Test breakpoints at consecutive instruction addresses. +# + +set testfile "consecutive-reverse" +set srcfile ${testfile}.c +set binfile ${objdir}/${subdir}/${testfile} + +if { [prepare_for_testing ${testfile}.exp $testfile $srcfile] } { + untested "${testfile}.exp" + return -1 +} + +runto main + +# FIXME 'record' command should say something so we know it's working. +gdb_test "record" "" "start recording" + +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" + } +} |