Upload tsv earlier in remote_start_remote
In extended-remote, when GDB connects the target, but target is not running, the TSVs are not uploaded. When GDB attaches to a process, the TSVs are not uploaded either. However, GDBserver has some builtin or predefined TSV to upload, such as $trace_timestamp. This bug causes $trace_timestamp is never uploaded. gdb/ 2013-06-25 Yao Qi <yao@codesourcery.com> * remote.c (remote_start_remote): Move code to upload tsv earlier. gdb/testsuite/ 2013-06-25 Yao Qi <yao@codesourcery.com> * boards/native-extended-gdbserver.exp: Set board_info 'gdb,predefined_tsv'. * boards/native-gdbserver.exp: Likewise. * boards/native-stdio-gdbserver.exp: Likewise. * gdb.server/ext-attach.exp: Load trace-support.exp. Check uploaded TSVs if target supports tracing. * gdb.trace/tsv.exp: Check uploaded TSVs if target supports tracing and target has predefined tsv. gdb/doc/ 2013-06-25 Yao Qi <yao@codesourcery.com> * gdbint.texinfo (Testsuite): Document 'gdb,predefined_tsv'.
This commit is contained in:
parent
9d6e6e84f7
commit
a0743c90c7
|
@ -1,3 +1,8 @@
|
||||||
|
2013-06-25 Yao Qi <yao@codesourcery.com>
|
||||||
|
|
||||||
|
* remote.c (remote_start_remote): Move code to upload tsv
|
||||||
|
earlier.
|
||||||
|
|
||||||
2013-06-25 Yao Qi <yao@codesourcery.com>
|
2013-06-25 Yao Qi <yao@codesourcery.com>
|
||||||
Hui Zhu <hui@codesourcery.com>
|
Hui Zhu <hui@codesourcery.com>
|
||||||
Pedro Alves <palves@redhat.com>
|
Pedro Alves <palves@redhat.com>
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
2013-06-25 Yao Qi <yao@codesourcery.com>
|
||||||
|
|
||||||
|
* gdbint.texinfo (Testsuite): Document 'gdb,predefined_tsv'.
|
||||||
|
|
||||||
2013-06-24 Tom Tromey <tromey@redhat.com>
|
2013-06-24 Tom Tromey <tromey@redhat.com>
|
||||||
|
|
||||||
* Makefile.in (POD2MAN1, POD2MAN5): Use version.subst.
|
* Makefile.in (POD2MAN1, POD2MAN5): Use version.subst.
|
||||||
|
|
|
@ -7983,6 +7983,9 @@ The board does not support type @code{long long}.
|
||||||
@c NEED DOCUMENT.
|
@c NEED DOCUMENT.
|
||||||
@item use_gdb_stub
|
@item use_gdb_stub
|
||||||
The tests are running with gdb stub.
|
The tests are running with gdb stub.
|
||||||
|
@item gdb,predefined_tsv
|
||||||
|
The predefined trace state variables the board has.
|
||||||
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
@node Hints
|
@node Hints
|
||||||
|
|
19
gdb/remote.c
19
gdb/remote.c
|
@ -3452,6 +3452,17 @@ remote_start_remote (int from_tty, struct target_ops *target, int extended_p)
|
||||||
error (_("Remote refused setting all-stop mode with: %s"), rs->buf);
|
error (_("Remote refused setting all-stop mode with: %s"), rs->buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Upload TSVs regardless of whether the target is running or not. The
|
||||||
|
remote stub, such as GDBserver, may have some predefined or builtin
|
||||||
|
TSVs, even if the target is not running. */
|
||||||
|
if (remote_get_trace_status (current_trace_status ()) != -1)
|
||||||
|
{
|
||||||
|
struct uploaded_tsv *uploaded_tsvs = NULL;
|
||||||
|
|
||||||
|
remote_upload_trace_state_variables (&uploaded_tsvs);
|
||||||
|
merge_uploaded_trace_state_variables (&uploaded_tsvs);
|
||||||
|
}
|
||||||
|
|
||||||
/* Check whether the target is running now. */
|
/* Check whether the target is running now. */
|
||||||
putpkt ("?");
|
putpkt ("?");
|
||||||
getpkt (&rs->buf, &rs->buf_size, 0);
|
getpkt (&rs->buf, &rs->buf_size, 0);
|
||||||
|
@ -3591,18 +3602,10 @@ remote_start_remote (int from_tty, struct target_ops *target, int extended_p)
|
||||||
if (remote_get_trace_status (current_trace_status ()) != -1)
|
if (remote_get_trace_status (current_trace_status ()) != -1)
|
||||||
{
|
{
|
||||||
struct uploaded_tp *uploaded_tps = NULL;
|
struct uploaded_tp *uploaded_tps = NULL;
|
||||||
struct uploaded_tsv *uploaded_tsvs = NULL;
|
|
||||||
|
|
||||||
if (current_trace_status ()->running)
|
if (current_trace_status ()->running)
|
||||||
printf_filtered (_("Trace is already running on the target.\n"));
|
printf_filtered (_("Trace is already running on the target.\n"));
|
||||||
|
|
||||||
/* Get trace state variables first, they may be checked when
|
|
||||||
parsing uploaded commands. */
|
|
||||||
|
|
||||||
remote_upload_trace_state_variables (&uploaded_tsvs);
|
|
||||||
|
|
||||||
merge_uploaded_trace_state_variables (&uploaded_tsvs);
|
|
||||||
|
|
||||||
remote_upload_tracepoints (&uploaded_tps);
|
remote_upload_tracepoints (&uploaded_tps);
|
||||||
|
|
||||||
merge_uploaded_tracepoints (&uploaded_tps);
|
merge_uploaded_tracepoints (&uploaded_tps);
|
||||||
|
|
|
@ -1,3 +1,14 @@
|
||||||
|
2013-06-25 Yao Qi <yao@codesourcery.com>
|
||||||
|
|
||||||
|
* boards/native-extended-gdbserver.exp: Set board_info
|
||||||
|
'gdb,predefined_tsv'.
|
||||||
|
* boards/native-gdbserver.exp: Likewise.
|
||||||
|
* boards/native-stdio-gdbserver.exp: Likewise.
|
||||||
|
* gdb.server/ext-attach.exp: Load trace-support.exp. Check
|
||||||
|
uploaded TSVs if target supports tracing.
|
||||||
|
* gdb.trace/tsv.exp: Check uploaded TSVs if target supports
|
||||||
|
tracing and target has predefined tsv.
|
||||||
|
|
||||||
2013-06-25 Yao Qi <yao@codesourcery.com>
|
2013-06-25 Yao Qi <yao@codesourcery.com>
|
||||||
Hui Zhu <hui@codesourcery.com>
|
Hui Zhu <hui@codesourcery.com>
|
||||||
Pedro Alves <palves@redhat.com>
|
Pedro Alves <palves@redhat.com>
|
||||||
|
|
|
@ -148,3 +148,6 @@ proc ${board}_file { dest op args } {
|
||||||
}
|
}
|
||||||
return [eval [list standard_file $dest $op] $args]
|
return [eval [list standard_file $dest $op] $args]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# The predefined TSVs in GDBserver.
|
||||||
|
set_board_info gdb,predefined_tsv "\\\$trace_timestamp"
|
||||||
|
|
|
@ -90,3 +90,6 @@ proc ${board}_file { dest op args } {
|
||||||
}
|
}
|
||||||
return [eval [list standard_file $dest $op] $args]
|
return [eval [list standard_file $dest $op] $args]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# The predefined TSVs in GDBserver.
|
||||||
|
set_board_info gdb,predefined_tsv "\\\$trace_timestamp"
|
||||||
|
|
|
@ -152,3 +152,6 @@ proc ${board}_file { dest op args } {
|
||||||
}
|
}
|
||||||
return [eval [list standard_file $dest $op] $args]
|
return [eval [list standard_file $dest $op] $args]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# The predefined TSVs in GDBserver.
|
||||||
|
set_board_info gdb,predefined_tsv "\\\$trace_timestamp"
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
# Test attaching to already-running programs using extended-remote.
|
# Test attaching to already-running programs using extended-remote.
|
||||||
|
|
||||||
load_lib gdbserver-support.exp
|
load_lib gdbserver-support.exp
|
||||||
|
load_lib trace-support.exp
|
||||||
|
|
||||||
standard_testfile
|
standard_testfile
|
||||||
|
|
||||||
|
@ -56,6 +57,15 @@ if { [istarget "*-*-cygwin*"] } {
|
||||||
gdb_test "attach $testpid" \
|
gdb_test "attach $testpid" \
|
||||||
"Attaching to program: .*, process $testpid.*(in|at).*" \
|
"Attaching to program: .*, process $testpid.*(in|at).*" \
|
||||||
"attach to remote program 1"
|
"attach to remote program 1"
|
||||||
|
|
||||||
|
if { [gdb_target_supports_trace] } then {
|
||||||
|
# Test predefined TSVs are uploaded.
|
||||||
|
gdb_test_sequence "info tvariables" "check uploaded tsv" {
|
||||||
|
"\[\r\n\]+Name\[\t \]+Initial\[\t \]+Current"
|
||||||
|
"\[\r\n\]+\\\$trace_timestamp 0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
gdb_test "backtrace" ".*main.*" "backtrace 1"
|
gdb_test "backtrace" ".*main.*" "backtrace 1"
|
||||||
|
|
||||||
gdb_test "detach" "Detaching from program.*process.*"
|
gdb_test "detach" "Detaching from program.*process.*"
|
||||||
|
|
|
@ -188,3 +188,25 @@ gdb_test_multiple "target ctf ${tracefile}.ctf" "" {
|
||||||
check_tsv "ctf"
|
check_tsv "ctf"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Restart.
|
||||||
|
clean_restart ${binfile}
|
||||||
|
|
||||||
|
if ![runto_main] then {
|
||||||
|
fail "Can't run to main"
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
# If there are predefined TSVs, test these predefined TSVs are correctly
|
||||||
|
# uploaded.
|
||||||
|
if [target_info exists gdb,predefined_tsv] {
|
||||||
|
set tsv [target_info gdb,predefined_tsv]
|
||||||
|
|
||||||
|
# Test predefined TSVs are uploaded.
|
||||||
|
gdb_test "info tvariables" ".*${tsv}.*" "predefined tsvs are uploaded"
|
||||||
|
} else {
|
||||||
|
# Otherwise (the predefined TSVs are not defined in the board file),
|
||||||
|
# test there is no TSVs in GDB.
|
||||||
|
gdb_test "info tvariables" "No trace state variables\." \
|
||||||
|
"no predefined tsvs"
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue