From 0fd8ac1c450d340d0b11823107d9e990341e7e11 Mon Sep 17 00:00:00 2001 From: Yao Qi Date: Mon, 12 Oct 2015 11:28:38 +0100 Subject: [PATCH] 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 * gdb.arch/disp-step-insn-reloc.exp: New test case. --- gdb/testsuite/ChangeLog | 4 + .../gdb.arch/disp-step-insn-reloc.exp | 84 +++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 gdb/testsuite/gdb.arch/disp-step-insn-reloc.exp diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 5418ca26cd3..9aeefa864ee 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2015-10-12 Yao Qi + + * gdb.arch/disp-step-insn-reloc.exp: New test case. + 2015-10-12 Yao Qi * lib/gdb.exp (support_displaced_stepping): Return 1 if target 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 00000000000..2edb258e990 --- /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 . + +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" + } +} -- 2.30.2