From a0743c90c7c48938c0bd80fc3aa316e90ee26495 Mon Sep 17 00:00:00 2001 From: Yao Qi Date: Tue, 25 Jun 2013 13:01:28 +0000 Subject: [PATCH] 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 * remote.c (remote_start_remote): Move code to upload tsv earlier. gdb/testsuite/ 2013-06-25 Yao Qi * 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 * gdbint.texinfo (Testsuite): Document 'gdb,predefined_tsv'. --- gdb/ChangeLog | 5 +++++ gdb/doc/ChangeLog | 4 ++++ gdb/doc/gdbint.texinfo | 3 +++ gdb/remote.c | 19 +++++++++------- gdb/testsuite/ChangeLog | 11 ++++++++++ .../boards/native-extended-gdbserver.exp | 3 +++ gdb/testsuite/boards/native-gdbserver.exp | 3 +++ .../boards/native-stdio-gdbserver.exp | 3 +++ gdb/testsuite/gdb.server/ext-attach.exp | 10 +++++++++ gdb/testsuite/gdb.trace/tsv.exp | 22 +++++++++++++++++++ 10 files changed, 75 insertions(+), 8 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e5905c5888..7687f67823 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2013-06-25 Yao Qi + + * remote.c (remote_start_remote): Move code to upload tsv + earlier. + 2013-06-25 Yao Qi Hui Zhu Pedro Alves diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index 96d1a26455..41ccea2ee8 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,7 @@ +2013-06-25 Yao Qi + + * gdbint.texinfo (Testsuite): Document 'gdb,predefined_tsv'. + 2013-06-24 Tom Tromey * Makefile.in (POD2MAN1, POD2MAN5): Use version.subst. diff --git a/gdb/doc/gdbint.texinfo b/gdb/doc/gdbint.texinfo index 7f1f49ffc5..e7caabe1ad 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 080d04859c..7928f5723c 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 04fadb2fe2..6eb3ac6d7a 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,14 @@ +2013-06-25 Yao Qi + + * 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 Hui Zhu Pedro Alves diff --git a/gdb/testsuite/boards/native-extended-gdbserver.exp b/gdb/testsuite/boards/native-extended-gdbserver.exp index bf363c7419..e9b29984c6 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 8034a48f54..f32a37ecd9 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 7e74970806..d4983a6327 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 1a2b539ef8..61f93c132f 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 4177d137de..cd0b36b832 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" +}