b4429ea262
In gdb.trace/tfile.exp, we execute binary to generate tracefile, remote_exec target "$binfile" however, this fails on bare metal target. This patch is to handle binary execution failure by running binary in GDB. The binary will do some io operation to generate tracefile, so we need a check 'target_info exists gdb,nofileio'. This patch is to check whether tracefile is generated. tfile.exp can be skipped if generation is failed, while test_tfind_tfile in mi-traceframe-changed.exp is skipped if generated failed. The rest of the mi-traceframe-changed.exp can still be executed, because on some bare metal targets, the remote stub supports tracepoint but doesn't support fileio. gdb/testsuite: 2014-04-22 Yao Qi <yao@codesourcery.com> * lib/trace-support.exp (generate_tracefile): New procedure. * gdb.trace/tfile.exp: Skip the test if generate_tracefile return 0. * gdb.trace/mi-traceframe-changed.exp: Invoke test_tfind_tfile if generate_tracefile returns 1.
161 lines
4.2 KiB
Text
161 lines
4.2 KiB
Text
# Copyright 2012-2014 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 mi-support.exp
|
|
set MIFLAGS "-i=mi"
|
|
|
|
standard_testfile tfile.c
|
|
set executable $testfile
|
|
|
|
if {![is_remote host] && ![is_remote target]} {
|
|
set tfile_basic [standard_output_file tfile-basic.tf]
|
|
set tfile_dir [file dirname $tfile_basic]/
|
|
set purely_local 1
|
|
} else {
|
|
set tfile_basic tfile-basic.tf
|
|
set tfile_dir ""
|
|
set purely_local 0
|
|
}
|
|
|
|
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" \
|
|
executable \
|
|
[list debug nowarnings \
|
|
"additional_flags=-DTFILE_DIR=\"$tfile_dir\""]] \
|
|
!= "" } {
|
|
untested ${testfile}.exp
|
|
return -1
|
|
}
|
|
|
|
# Make sure we are starting fresh.
|
|
remote_file host delete $tfile_basic
|
|
remote_file target delete $tfile_basic
|
|
|
|
proc test_tfind_tfile { } {
|
|
with_test_prefix "tfile" {
|
|
global binfile
|
|
global decimal
|
|
global tfile_basic
|
|
|
|
if [mi_gdb_start] {
|
|
return
|
|
}
|
|
mi_gdb_load ${binfile}
|
|
|
|
mi_gdb_test "-target-select tfile ${tfile_basic}" \
|
|
".*=breakpoint-created,bkpt=\{number=\"${decimal}\",type=\"tracepoint\",disp=\"keep\",enabled=\"y\",.*,func=\"write_basic_trace_file\".*\\^connected" \
|
|
"select trace file"
|
|
|
|
mi_gdb_test "tfind 0" \
|
|
".*=traceframe-changed,num=\"0\",tracepoint=\"${decimal}\".*\\^done" \
|
|
"tfind 0"
|
|
|
|
# No MI notification is sent because traceframe is not changed.
|
|
mi_gdb_test "tfind 0" \
|
|
"\\&\"tfind 0\\\\n\"\r\n\~\"Found.*\\^done" \
|
|
"tfind 0 again"
|
|
|
|
mi_gdb_test "tfind end" \
|
|
".*=traceframe-changed,end.*\\^done" \
|
|
"tfind end"
|
|
|
|
# No MI notification is send because request is from MI command.
|
|
mi_gdb_test "-trace-find frame-number 0" \
|
|
"-trace-find frame-number 0\r\n\\^done,found=\"1\",tracepoint=\"${decimal}\",traceframe=\"0\",frame=\{.*" \
|
|
"-trace-find frame-number 0"
|
|
|
|
mi_gdb_exit
|
|
}
|
|
}
|
|
|
|
# If tracefile is generated successfully, copy tracefile to host and
|
|
# run tests.
|
|
if [generate_tracefile $binfile] {
|
|
if {!$purely_local} {
|
|
# Copy tracefile from target to host.
|
|
remote_download host [remote_upload target tfile-basic.tf] \
|
|
tfile-basic.tf
|
|
}
|
|
|
|
test_tfind_tfile
|
|
}
|
|
|
|
# Change to a different test case in order to run it on target, and get
|
|
# several traceframes.
|
|
standard_testfile status-stop.c
|
|
append testfile -1
|
|
append binfile -1
|
|
set executable $testfile
|
|
|
|
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" \
|
|
executable {debug nowarnings}] != "" } {
|
|
untested ${testfile}.exp
|
|
return -1
|
|
}
|
|
|
|
# Test target supports tracepoints or not.
|
|
|
|
clean_restart $executable
|
|
|
|
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
|
|
|
|
proc test_tfind_remote { } {
|
|
with_test_prefix "remote" {
|
|
global decimal
|
|
|
|
if [mi_gdb_start] {
|
|
return
|
|
}
|
|
mi_run_to_main
|
|
|
|
mi_gdb_test "-break-insert end" "\\^done.*" "break end"
|
|
mi_gdb_test "-break-insert -a func2" "\\^done.*" "break func2"
|
|
mi_gdb_test "-trace-start" "=breakpoint-modified,bkpt={.*installed=\"y\".*}.*\\^done.*" \
|
|
"trace start"
|
|
|
|
mi_execute_to "exec-continue" "breakpoint-hit" end "" ".*" ".*" \
|
|
{ "" "disp=\"keep\"" } \
|
|
"continue to end"
|
|
mi_gdb_test "-trace-stop" "\\^done.*" "trace stop"
|
|
|
|
mi_gdb_test "tfind 0" \
|
|
".*=traceframe-changed,num=\"0\",tracepoint=\"${decimal}\".*\\^done" \
|
|
"tfind 0"
|
|
|
|
mi_gdb_test "tfind" \
|
|
".*=traceframe-changed,num=\"1\",tracepoint=\"${decimal}\".*\\^done" \
|
|
"tfind"
|
|
|
|
mi_gdb_test "tfind end" \
|
|
".*=traceframe-changed,end.*\\^done" \
|
|
"tfind end"
|
|
|
|
mi_gdb_exit
|
|
}
|
|
}
|
|
|
|
test_tfind_remote
|
|
|
|
return 0
|