7890fb4566
This patch adds support for AArch64 to the gdb.trace testsuite. Note that it does not add support for testing fast tracepoint as it isn't supported. Therefore the test cases with inline assembly are not ported in this patch, as we do not know what the conditions for inserting a fast tracepoint on AArch64 would be. gdb/testsuite/ChangeLog: * gdb.trace/backtrace.exp: Set registers for aarch64 target. * gdb.trace/collection.exp: Likewise. * gdb.trace/mi-trace-frame-collected.exp: Likewise. * gdb.trace/mi-trace-unavailable.exp: Likewise. * gdb.trace/report.exp: Likewise. * gdb.trace/trace-break.exp: Likewise. * gdb.trace/unavailable.exp: Likewise. * gdb.trace/while-dyn.exp: Likewise.
158 lines
5.7 KiB
Text
158 lines
5.7 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
|
|
|
|
standard_testfile actions.c
|
|
|
|
if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug}] } {
|
|
return -1
|
|
}
|
|
|
|
if ![runto_main] {
|
|
fail "Can't run to main to check for trace support"
|
|
return -1
|
|
}
|
|
|
|
if ![gdb_target_supports_trace] {
|
|
unsupported "Current target does not support trace"
|
|
return -1
|
|
}
|
|
|
|
gdb_exit
|
|
|
|
load_lib mi-support.exp
|
|
set MIFLAGS "-i=mi"
|
|
|
|
if [mi_gdb_start] {
|
|
return
|
|
}
|
|
mi_run_to_main
|
|
|
|
mi_gdb_test "-break-insert end" \
|
|
"\\^done,bkpt=\{number=\"${decimal}\",type=\"breakpoint\".*\"\}" \
|
|
"insert tracepoint on end"
|
|
mi_gdb_test "-break-insert -a gdb_recursion_test" \
|
|
"\\^done,bkpt=\{number=\"${decimal}\",type=\"tracepoint\".*\"\}" \
|
|
"insert tracepoint on gdb_recursion_test"
|
|
|
|
mi_gdb_test "-trace-define-variable \$tsv 1" {.*\^done} \
|
|
"-trace-define-variable"
|
|
|
|
set pcreg ""
|
|
if [is_amd64_regs_target] {
|
|
set pcreg "rip"
|
|
} elseif [is_x86_like_target] {
|
|
set pcreg "eip"
|
|
} elseif [is_aarch64_target] {
|
|
set pcreg "pc"
|
|
} else {
|
|
# Other ports that support tracepoints should set the name of pc
|
|
# register here.
|
|
fail "set the name of pc register"
|
|
return -1
|
|
}
|
|
|
|
mi_gdb_test "-break-commands 3 \"collect gdb_char_test\" \"collect gdb_union1_test\" \"collect gdb_struct1_test.l\" \"collect gdb_arr_test\[0\]\" \"collect $${pcreg}\" \"teval \$tsv += 1\" \"collect \$tsv\" \"end\" " \
|
|
{\^done} "set action"
|
|
|
|
mi_gdb_test "-break-insert -a gdb_c_test" \
|
|
"\\^done,bkpt=\{number=\"${decimal}\",type=\"tracepoint\".*\"\}" \
|
|
"insert tracepoint on gdb_c_test"
|
|
|
|
# Define an action.
|
|
# Collect a global variable to be sure no registers are collected
|
|
# except PC.
|
|
mi_gdb_test "-break-commands 4 \"collect gdb_char_test\" \"end\" " \
|
|
{\^done} "set action on tracepoint 4"
|
|
|
|
mi_gdb_test "-trace-start" {.*\^done} "trace start"
|
|
mi_send_resuming_command "exec-continue" "continuing to end"
|
|
mi_expect_stop \
|
|
"breakpoint-hit" "end" ".*" ".*" ".*" {"" "disp=\"keep\""} \
|
|
"stop at end"
|
|
mi_gdb_test "-trace-stop" {.*\^done,stop-reason=.*} "trace stop"
|
|
|
|
# Save trace frames to tfile.
|
|
set tracefile [standard_output_file ${testfile}]
|
|
mi_gdb_test "-trace-save ${tracefile}.tf" ".*\\^done" \
|
|
"save tfile trace file"
|
|
# Save trace frames to ctf.
|
|
mi_gdb_test "-trace-save -ctf ${tracefile}.ctf" ".*\\^done" \
|
|
"save ctf trace file"
|
|
|
|
# Test the MI command '-trace-frame-collected' with DATA_SOURCE as
|
|
# trace data source.
|
|
|
|
proc test_trace_frame_collected { data_source } {
|
|
global decimal hex
|
|
global mi_gdb_prompt
|
|
|
|
with_test_prefix "$data_source" {
|
|
mi_gdb_test "-trace-find frame-number 0" \
|
|
".*\\^done,found=\"1\",tracepoint=\"${decimal}\",traceframe=\"0\",frame=\{.*" \
|
|
"-trace-find frame-number 0"
|
|
|
|
# Test MI command '-trace-frame-collected' dumps only
|
|
# collected registers.
|
|
mi_gdb_test "-trace-frame-collected" \
|
|
"\\^done,explicit-variables=\\\[\{name=\"gdb_char_test\",value=\".*\"\}\\\],computed-expressions=\\\[\\\],registers=\\\[\{number=\"$decimal\",value=\"$hex\"\}\\\],tvars=\\\[\\\],memory=\\\[\{address=\"$hex\",length=\"1\"\}\\\]"\
|
|
"-trace-frame-collected (register)"
|
|
|
|
mi_gdb_test "-trace-find frame-number 1" \
|
|
".*\\^done,found=\"1\",tracepoint=\"${decimal}\",traceframe=\"1\",frame=\{.*" \
|
|
"-trace-find frame-number 1"
|
|
|
|
# Test MI command '-trace-frame-collected'
|
|
mi_gdb_test "-trace-frame-collected" \
|
|
"\\^done,explicit-variables=\\\[\{name=\"gdb_char_test\",value=\".*\"\},\{name=\"gdb_union1_test\",value=\".*\"\}\\\],computed-expressions=\\\[\{name=\"gdb_struct1_test\.l\",.*\},\{name=\"gdb_arr_test\\\[0\\\]\",.*\}\\\],registers=\\\[.*\\\],tvars=\\\[\{name=\"\\\$tsv\",current=\"2\"\}\\\],memory=\\\[\{address=\"$hex\",length=\"1\"\},.*\\\]"\
|
|
"-trace-frame-collected"
|
|
mi_gdb_test "-trace-frame-collected --var-print-values 2 --comp-print-values --simple-values --registers-format x --memory-contents" \
|
|
"\\^done,explicit-variables=\\\[\{name=\"gdb_char_test\",type=\"char\",value=\".*\"\},\{name=\"gdb_union1_test\",type=\"union GDB_UNION_TEST\"\}\\\],computed-expressions=\\\[.*\\\],registers=\\\[.*\\\],tvars=\\\[\{name=\"\\\$tsv\",current=\"2\"\}\\\],memory=\\\[\{address=\"$hex\",length=\"1\",contents=\".*\"\},.*\\\]" \
|
|
"-trace-frame-collected --var-print-values 2 --comp-print-values --simple-values --registers-format x --memory-contents"
|
|
|
|
mi_gdb_test "-trace-find none" ".*\\^done,found=\"0\".*" \
|
|
"-trace-find none"
|
|
}
|
|
}
|
|
|
|
test_trace_frame_collected "live"
|
|
|
|
# Change target to ctf if GDB supports it.
|
|
set msg "-target-select ctf"
|
|
send_gdb "-target-select ctf ${tracefile}.ctf\n"
|
|
gdb_expect {
|
|
-re ".*\\^connected.*${mi_gdb_prompt}$" {
|
|
# GDB supports ctf, do the test.
|
|
test_trace_frame_collected "ctf"
|
|
}
|
|
-re ".*\\^error,msg=\"Undefined target command.*${mi_gdb_prompt}$" {
|
|
# GDB doesn't support ctf, skip the test.
|
|
unsupported "gdb does not support ctf target"
|
|
}
|
|
-re ".*$mi_gdb_prompt$" {
|
|
fail "$msg"
|
|
}
|
|
timeout {
|
|
fail "$msg (timeout)"
|
|
}
|
|
}
|
|
|
|
# Change target to tfile.
|
|
mi_gdb_test "-target-select tfile ${tracefile}.tf" ".*\\^connected.*" \
|
|
"-target-select tfile"
|
|
test_trace_frame_collected "tfile"
|
|
|
|
mi_gdb_exit
|