aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorYao Qi <yao@codesourcery.com>2013-06-25 13:01:28 +0000
committerYao Qi <yao@codesourcery.com>2013-06-25 13:01:28 +0000
commita0743c90c7c48938c0bd80fc3aa316e90ee26495 (patch)
treeb7b4c64341eb6f9ffedeb7b249d6b7a1a5f180bc /gdb
parent9d6e6e84f73ef7c5410c097a23d5952a99684f5b (diff)
downloadgdb-a0743c90c7c48938c0bd80fc3aa316e90ee26495.zip
gdb-a0743c90c7c48938c0bd80fc3aa316e90ee26495.tar.gz
gdb-a0743c90c7c48938c0bd80fc3aa316e90ee26495.tar.bz2
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'.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/doc/ChangeLog4
-rw-r--r--gdb/doc/gdbint.texinfo3
-rw-r--r--gdb/remote.c19
-rw-r--r--gdb/testsuite/ChangeLog11
-rw-r--r--gdb/testsuite/boards/native-extended-gdbserver.exp3
-rw-r--r--gdb/testsuite/boards/native-gdbserver.exp3
-rw-r--r--gdb/testsuite/boards/native-stdio-gdbserver.exp3
-rw-r--r--gdb/testsuite/gdb.server/ext-attach.exp10
-rw-r--r--gdb/testsuite/gdb.trace/tsv.exp22
10 files changed, 75 insertions, 8 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index e5905c5..7687f67 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,4 +1,9 @@
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>
diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog
index 96d1a26..41ccea2 100644
--- a/gdb/doc/ChangeLog
+++ b/gdb/doc/ChangeLog
@@ -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.
diff --git a/gdb/doc/gdbint.texinfo b/gdb/doc/gdbint.texinfo
index 7f1f49f..e7caabe 100644
--- a/gdb/doc/gdbint.texinfo
+++ b/gdb/doc/gdbint.texinfo
@@ -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
diff --git a/gdb/remote.c b/gdb/remote.c
index 080d048..7928f57 100644
--- a/gdb/remote.c
+++ b/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);
}
+ /* 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);
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 04fadb2..6eb3ac6 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,4 +1,15 @@
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>
diff --git a/gdb/testsuite/boards/native-extended-gdbserver.exp b/gdb/testsuite/boards/native-extended-gdbserver.exp
index bf363c7..e9b2998 100644
--- a/gdb/testsuite/boards/native-extended-gdbserver.exp
+++ b/gdb/testsuite/boards/native-extended-gdbserver.exp
@@ -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"
diff --git a/gdb/testsuite/boards/native-gdbserver.exp b/gdb/testsuite/boards/native-gdbserver.exp
index 8034a48..f32a37e 100644
--- a/gdb/testsuite/boards/native-gdbserver.exp
+++ b/gdb/testsuite/boards/native-gdbserver.exp
@@ -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"
diff --git a/gdb/testsuite/boards/native-stdio-gdbserver.exp b/gdb/testsuite/boards/native-stdio-gdbserver.exp
index 7e74970..d4983a6 100644
--- a/gdb/testsuite/boards/native-stdio-gdbserver.exp
+++ b/gdb/testsuite/boards/native-stdio-gdbserver.exp
@@ -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"
diff --git a/gdb/testsuite/gdb.server/ext-attach.exp b/gdb/testsuite/gdb.server/ext-attach.exp
index 1a2b539..61f93c1 100644
--- a/gdb/testsuite/gdb.server/ext-attach.exp
+++ b/gdb/testsuite/gdb.server/ext-attach.exp
@@ -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.*"
diff --git a/gdb/testsuite/gdb.trace/tsv.exp b/gdb/testsuite/gdb.trace/tsv.exp
index 4177d13..cd0b36b 100644
--- a/gdb/testsuite/gdb.trace/tsv.exp
+++ b/gdb/testsuite/gdb.trace/tsv.exp
@@ -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"
+}