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:
Yao Qi 2013-06-25 13:01:28 +00:00
parent 9d6e6e84f7
commit a0743c90c7
10 changed files with 75 additions and 8 deletions

View File

@ -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>
Hui Zhu <hui@codesourcery.com>
Pedro Alves <palves@redhat.com>

View File

@ -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>
* Makefile.in (POD2MAN1, POD2MAN5): Use version.subst.

View File

@ -7983,6 +7983,9 @@ The board does not support type @code{long long}.
@c NEED DOCUMENT.
@item use_gdb_stub
The tests are running with gdb stub.
@item gdb,predefined_tsv
The predefined trace state variables the board has.
@end table
@node Hints

View File

@ -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);
}
/* 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. */
putpkt ("?");
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)
{
struct uploaded_tp *uploaded_tps = NULL;
struct uploaded_tsv *uploaded_tsvs = NULL;
if (current_trace_status ()->running)
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);
merge_uploaded_tracepoints (&uploaded_tps);

View File

@ -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>
Hui Zhu <hui@codesourcery.com>
Pedro Alves <palves@redhat.com>

View File

@ -148,3 +148,6 @@ proc ${board}_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"

View File

@ -90,3 +90,6 @@ proc ${board}_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"

View File

@ -152,3 +152,6 @@ proc ${board}_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"

View File

@ -18,6 +18,7 @@
# Test attaching to already-running programs using extended-remote.
load_lib gdbserver-support.exp
load_lib trace-support.exp
standard_testfile
@ -56,6 +57,15 @@ if { [istarget "*-*-cygwin*"] } {
gdb_test "attach $testpid" \
"Attaching to program: .*, process $testpid.*(in|at).*" \
"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 "detach" "Detaching from program.*process.*"

View File

@ -188,3 +188,25 @@ gdb_test_multiple "target ctf ${tracefile}.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"
}