diff options
author | Yao Qi <yao@codesourcery.com> | 2013-06-25 13:01:28 +0000 |
---|---|---|
committer | Yao Qi <yao@codesourcery.com> | 2013-06-25 13:01:28 +0000 |
commit | a0743c90c7c48938c0bd80fc3aa316e90ee26495 (patch) | |
tree | b7b4c64341eb6f9ffedeb7b249d6b7a1a5f180bc | |
parent | 9d6e6e84f73ef7c5410c097a23d5952a99684f5b (diff) | |
download | gdb-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'.
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/doc/ChangeLog | 4 | ||||
-rw-r--r-- | gdb/doc/gdbint.texinfo | 3 | ||||
-rw-r--r-- | gdb/remote.c | 19 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 11 | ||||
-rw-r--r-- | gdb/testsuite/boards/native-extended-gdbserver.exp | 3 | ||||
-rw-r--r-- | gdb/testsuite/boards/native-gdbserver.exp | 3 | ||||
-rw-r--r-- | gdb/testsuite/boards/native-stdio-gdbserver.exp | 3 | ||||
-rw-r--r-- | gdb/testsuite/gdb.server/ext-attach.exp | 10 | ||||
-rw-r--r-- | gdb/testsuite/gdb.trace/tsv.exp | 22 |
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" +} |