diff options
author | Yao Qi <yao.qi@linaro.org> | 2015-10-12 11:28:38 +0100 |
---|---|---|
committer | Yao Qi <yao.qi@linaro.org> | 2015-10-12 11:28:38 +0100 |
commit | 0fd8ac1c450d340d0b11823107d9e990341e7e11 (patch) | |
tree | 146d940cf6225a65087d2944619d3fdad677bffc | |
parent | 34240514b58b7e8d2b444b69345d13db2695fef6 (diff) | |
download | gdb-0fd8ac1c450d340d0b11823107d9e990341e7e11.zip gdb-0fd8ac1c450d340d0b11823107d9e990341e7e11.tar.gz gdb-0fd8ac1c450d340d0b11823107d9e990341e7e11.tar.bz2 |
New test case gdb.arch/disp-step-insn-reloc.exp
This patch adds a new test case which uses gdb.arch/insn-reloc.c too
to test displaced stepping. Nowadays, tests are for x86, x86_64 and
aarch64.
gdb/testsuite:
2015-10-12 Yao Qi <yao.qi@linaro.org>
* gdb.arch/disp-step-insn-reloc.exp: New test case.
-rw-r--r-- | gdb/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gdb/testsuite/gdb.arch/disp-step-insn-reloc.exp | 84 |
2 files changed, 88 insertions, 0 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 5418ca2..9aeefa8 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,5 +1,9 @@ 2015-10-12 Yao Qi <yao.qi@linaro.org> + * gdb.arch/disp-step-insn-reloc.exp: New test case. + +2015-10-12 Yao Qi <yao.qi@linaro.org> + * lib/gdb.exp (support_displaced_stepping): Return 1 if target is aarch64*-*-linux*. diff --git a/gdb/testsuite/gdb.arch/disp-step-insn-reloc.exp b/gdb/testsuite/gdb.arch/disp-step-insn-reloc.exp new file mode 100644 index 0000000..2edb258 --- /dev/null +++ b/gdb/testsuite/gdb.arch/disp-step-insn-reloc.exp @@ -0,0 +1,84 @@ +# Copyright 2015 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/>. + +standard_testfile insn-reloc.c +set executable $testfile +set expfile $testfile.exp + +if { ![support_displaced_stepping] } { + unsupported "displaced stepping" + return -1 +} + +# Some targets have leading underscores on assembly symbols. +set additional_flags [gdb_target_symbol_prefix_flags] + +if [prepare_for_testing $expfile $executable $srcfile \ + [list debug $additional_flags]] { + untested "failed to prepare for tests" + return -1 +} + +if ![runto_main] { + fail "Can't run to main" + return -1 +} + +# Read function name from testcases[N]. + +proc read_testcase { n } { + global gdb_prompt + + set result -1 + gdb_test_multiple "print testcases\[${n}\]" "read name of test case ${n}" { + -re "\[$\].*= .*<(.*)>.*$gdb_prompt $" { + set result $expect_out(1,string) + } + -re "$gdb_prompt $" { } + } + + return $result +} + +set n_testcases [get_integer_valueof "n_testcases" 0] +if { ${n_testcases} == 0 } { + untested "No instruction relocation to test" + return 1 +} + +# Set a fast tracepoint on each set_point${i} symbol. There is one for +# each testcase. +for { set i 0 } { ${i} < ${n_testcases} } { incr i } { + set testcase [read_testcase $i] + + gdb_test "break *set_point$i" "Breakpoint .*" "breakpoint on ${testcase}" +} + +gdb_test "break pass" ".*" "" +gdb_test "break fail" ".*" "" + +gdb_test_no_output "set displaced-stepping on" + +# Make sure we have hit the pass breakpoint for each testcase. +for { set i 0 } { ${i} < ${n_testcases} } { incr i } { + set testcase [read_testcase $i] + + with_test_prefix "${testcase}" { + gdb_test "continue" ".*Breakpoint \[0-9\]+, .*" \ + "go to breakpoint $i" + + gdb_test "continue" ".*Breakpoint \[0-9\]+, pass \(\).*" \ + "relocated instruction" + } +} |