80f0110c98
Nowadays, in the range-stepping tests, we check not only the number of vCont;r packets but also the number of vCont;s packets, because we think the remote target which can do range stepping must support single step. However, if we turn displaced stepping on, the remote target (GDBserver) can do range stepping, and support single step, but GDB may decide to resume instructions in the scratchpad rather than single step them one by one for displaced stepping. For example, when aarch64 GDB debugs arm linux program with aarch64 GDBserver, GDBserver supports both range stepping and single step, but GDB (with the gdbarch for arm-linux) decides resume instructions in the scratchpad, so in the RSP traffic, there is no vCont;s packet at all, and some range-stepping.exp tests fail, FAIL: gdb.base/range-stepping.exp: multi insns: next: vCont;s=1 vCont;r=1 This patch is to get rid of the checking to the number of vCont;s in exec_cmd_expect_vCont_count. gdb/testsuite: 2015-10-21 Yao Qi <yao.qi@linaro.org> * lib/range-stepping-support.exp (exec_cmd_expect_vCont_count): Remove argument exp_vCont_s. * gdb.base/range-stepping.exp: Callers updated. * gdb.trace/range-stepping.exp: Likewise.
90 lines
2.5 KiB
Text
90 lines
2.5 KiB
Text
# Copyright 2013-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/>.
|
|
|
|
load_lib "trace-support.exp"
|
|
load_lib "range-stepping-support.exp"
|
|
|
|
standard_testfile
|
|
set executable $testfile
|
|
|
|
if [prepare_for_testing $testfile.exp $executable $srcfile \
|
|
{debug nowarnings}] {
|
|
return -1
|
|
}
|
|
|
|
if ![runto_main] {
|
|
fail "Can't run to main to check for trace support"
|
|
return -1
|
|
}
|
|
|
|
if ![gdb_target_supports_trace] {
|
|
unsupported "target does not support trace"
|
|
return -1
|
|
}
|
|
|
|
if ![gdb_range_stepping_enabled] {
|
|
unsupported "range stepping not supported by the target"
|
|
return -1
|
|
}
|
|
|
|
# Check that range stepping works well with tracepoints.
|
|
|
|
proc range_stepping_with_tracepoint { type } {
|
|
with_test_prefix "${type}" {
|
|
gdb_breakpoint [gdb_get_line_number "location 1"]
|
|
gdb_continue_to_breakpoint "location 1"
|
|
delete_breakpoints
|
|
|
|
gdb_test "${type} *set_point" ".*"
|
|
gdb_test_no_output "tstart"
|
|
|
|
# Step a line with a tracepoint in the middle. The tracepoint
|
|
# itself shouldn't have any effect on range stepping. We
|
|
# should see one vCont;r.
|
|
exec_cmd_expect_vCont_count "step" 1
|
|
gdb_test_no_output "tstop"
|
|
gdb_test "tfind" "Found trace frame .*" "first tfind"
|
|
gdb_test "tfind" \
|
|
"Target failed to find requested trace frame.*" \
|
|
"second tfind"
|
|
|
|
delete_breakpoints
|
|
}
|
|
}
|
|
|
|
range_stepping_with_tracepoint "trace"
|
|
|
|
set libipa [get_in_proc_agent]
|
|
gdb_load_shlibs $libipa
|
|
|
|
if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
|
|
executable [list debug nowarnings shlib=$libipa] ] != "" } {
|
|
untested "failed to compile ftrace tests"
|
|
return -1
|
|
}
|
|
|
|
clean_restart ${executable}
|
|
|
|
if ![runto_main] {
|
|
fail "Can't run to main for ftrace tests"
|
|
return 0
|
|
}
|
|
|
|
gdb_reinitialize_dir $srcdir/$subdir
|
|
if { [gdb_test "info sharedlibrary" ".*${libipa}.*" "IPA loaded"] != 0 } {
|
|
untested "Could not find IPA lib loaded"
|
|
} else {
|
|
range_stepping_with_tracepoint "ftrace"
|
|
}
|