diff options
author | Stan Shebs <shebs@codesourcery.com> | 2011-11-20 23:59:49 +0000 |
---|---|---|
committer | Stan Shebs <shebs@codesourcery.com> | 2011-11-20 23:59:49 +0000 |
commit | f196051f5ee7f3aa3f417611a488ba773878a429 (patch) | |
tree | 25de238e78d9db1ad631611a10bcfd298b472a49 /gdb/testsuite | |
parent | 9866a1803a670e48d8fedf0e33d0eb5141192318 (diff) | |
download | gdb-f196051f5ee7f3aa3f417611a488ba773878a429.zip gdb-f196051f5ee7f3aa3f417611a488ba773878a429.tar.gz gdb-f196051f5ee7f3aa3f417611a488ba773878a429.tar.bz2 |
* NEWS: Mention tracepoint additions.
* breakpoint.h (struct tracepoint): New field traceframe_usage.
* breakpoint.c (print_one_breakpoint_location): Identify
tracepoints as such when reporting hit counts, report
trace buffer usage.
(create_tracepoint_from_upload): Copy status info.
* tracepoint.h (struct trace_status): Rename error_desc to stop_desc,
add fields user_name, notes, start_time, stop_time.
(struct uploaded_tp): Add fields hit_count, traceframe_usage.
* tracepoint.c (trace_user): New global.
(trace_notes): New global.
(trace_stop_notes): New global.
(start_tracing): Add argument and trace note handling.
(stop_tracing): Ditto.
(trace_start_command): Add notes argument.
(trace_stop_command): Ditto.
(trace_status_command): Report additional status info.
(trace_status_mi): Similarly.
(trace_save): Update, record tracepoint status.
(set_disconnected_tracing): Call target method directly.
(send_disconnected_tracing_value): Remove.
(set_trace_user): New function.
(set_trace_notes): New function.
(set_trace_stop_notes): New function.
(parse_trace_status): Handle additional status.
(parse_tracepoint_status): New function.
(parse_tracepoint_definition): Call it.
(tfile_get_tracepoint_status): New function.
(init_tfile_ops): Use it.
(_initialize_tracepoint): Add new setshows.
* target.h (struct target_ops): New methods to_get_tracepoint_status
and to_set_trace_notes.
(target_get_tracepoint_status): New macro.
(target_set_trace_notes): New macro.
* target.c (update_current_target): Add new methods.
* remote.c (remote_get_tracepoint_status): New function.
(remote_set_trace_notes): New function.
(init_remote_ops): Add them.
* mi/mi-main.c (mi_cmd_trace_start): Add argument to call.
(mi_cmd_trace_stop): Ditto.
* tracepoint.c (struct tracepoint): New field traceframe_usage.
(tracing_start_time): New global.
(tracing_stop_time): New global.
(tracing_user_name): New global.
(tracing_notes): New global.
(tracing_stop_note): New global.
(cmd_qtstart): Set traceframe_usage, start_time.
(stop_tracing): Set stop_time.
(cmd_qtstatus): Report additional status.
(cmd_qtp): New function.
(handle_tracepoint_query): Call it.
(cmd_qtnotes): New function.
(handle_tracepoint_general_set): Call it.
(get_timestamp): Rename from tsv_get_timestamp.
* gdb.texinfo (Starting and Stopping Trace Experiments): Document
note-related options and variables.
(Tracepoint Packets): Document packet changes.
* gdb.trace/tstatus.exp: New.
* gdb.trace/actions.c: Include string.h.
Diffstat (limited to 'gdb/testsuite')
-rw-r--r-- | gdb/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/testsuite/gdb.trace/actions.c | 2 | ||||
-rw-r--r-- | gdb/testsuite/gdb.trace/tstatus.exp | 172 | ||||
-rw-r--r-- | gdb/testsuite/lib/gdbserver-support.exp | 1 |
4 files changed, 180 insertions, 0 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 86aecc2..d407158 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-11-20 Stan Shebs <stan@codesourcery.com> + + * gdb.trace/tstatus.exp: New. + * gdb.trace/actions.c: Include string.h. + 2011-11-18 Yao Qi <yao@codesourcery.com> * gdb.trace/pending.exp: New. diff --git a/gdb/testsuite/gdb.trace/actions.c b/gdb/testsuite/gdb.trace/actions.c index ae3c1c3..270e1e1 100644 --- a/gdb/testsuite/gdb.trace/actions.c +++ b/gdb/testsuite/gdb.trace/actions.c @@ -2,6 +2,8 @@ * Test program for trace action commands */ +#include <string.h> + static char gdb_char_test; static short gdb_short_test; static long gdb_long_test; diff --git a/gdb/testsuite/gdb.trace/tstatus.exp b/gdb/testsuite/gdb.trace/tstatus.exp new file mode 100644 index 0000000..36f925d --- /dev/null +++ b/gdb/testsuite/gdb.trace/tstatus.exp @@ -0,0 +1,172 @@ +# Copyright 2011 Free Software Foundation, Inc. +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +load_lib "trace-support.exp" + +set testfile "actions" +set executable $testfile +set srcfile $testfile.c +set binfile $objdir/$subdir/$testfile +set expfile tstatus.exp + +if [prepare_for_testing $expfile $executable $srcfile \ + [list debug]] { + untested "failed to prepare for trace tests" + return -1 +} + +if ![runto_main] { + fail "Can't run to main to check for trace support" + return -1 +} + +if ![gdb_target_supports_trace] { + unsupported "target does not support trace" + return -1 +} + +set libipa $objdir/../gdbserver/libinproctrace.so +gdb_load_shlibs $libipa + +# Can't use prepare_for_testing, because that splits compiling into +# building objects and then linking, and we'd fail with "linker input +# file unused because linking not done" when building the object. + +if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \ + executable [list debug shlib=$libipa] ] != "" } { + untested "failed to compile ftrace tests" + return -1 +} +clean_restart ${executable} + +if ![runto_main] { + fail "Can't run to main for ftrace tests" + return 0 +} + +proc run_trace_experiment {} { + +# gdb_test_no_output "set debug remote 1" "" + + gdb_test "continue" \ + ".*Breakpoint \[0-9\]+, begin .*" \ + "advance to trace begin" + + gdb_test_no_output "tstart my tracing note" "start trace experiment" + + gdb_test "continue" \ + ".*Breakpoint \[0-9\]+, end .*" \ + "advance through tracing" + + # Now play with tstatus a bit. + # Since note support is optional, we need to match both with and without + # cases. + + gdb_test_multiple "tstatus" "check on trace status" { + -re "Trace is running.*Trace will stop if GDB disconnects\.\[\r\n\]+Trace notes: my tracing note\.\[\r\n\]+Not looking at any trace frame\..*" { + pass "tstatus reports trace note" + } + -re "Trace is running.*Trace will stop if GDB disconnects\.\[\r\n\]+Not looking at any trace frame.*" { + pass "tstatus does not report any trace note" + } + } + + gdb_test "set trace-notes different note" "" "change tracing note" + + gdb_test_multiple "tstatus" "check on trace status with diff note" { + -re "Trace is running.*Trace will stop if GDB disconnects\.\[\r\n\]+Trace notes: different note\.\[\r\n\]+Not looking at any trace frame\..*" { + pass "tstatus reports different trace note" + } + -re "Trace is running.*Trace will stop if GDB disconnects\.\[\r\n\]+Not looking at any trace frame.*" { + pass "tstatus does not report any different trace note" + } + } + + gdb_test "set trace-user me me me" "" "change tracing user" + + gdb_test_multiple "tstatus" "check on trace status with diff note" { + -re "Trace is running.*Trace will stop if GDB disconnects\.\[\r\n\]+Trace user is me me me\.\[\r\n\]+Trace notes: different note\.\[\r\n\]+Not looking at any trace frame\..*" { + pass "tstatus reports trace user" + } + -re "Trace is running.*Trace will stop if GDB disconnects\.\[\r\n\]+Not looking at any trace frame.*" { + pass "tstatus does not report trace user" + } + } + + gdb_test_no_output "tstop because I can" "trace stopped with note" + + gdb_test_multiple "tstatus" "check on trace status after stop" { + -re "Trace stopped by a tstop command (because I can)\..*Trace will stop if GDB disconnects\.\[\r\n\]+Trace user is me me me\.\[\r\n\]+Trace notes: different note\.\[\r\n\]+Not looking at any trace frame\..*" { + pass "tstatus reports trace stop reason" + } + -re "Trace stopped by a tstop command\..*" { + pass "tstatus does not report trace stop reason" + } + } + + # Tracepoint hit count is optional, so pass it either way. + + gdb_test_multiple "info trace" "show tracepoint state" { + -re "actions\.c:\[0-9\]+\[\r\n\]+\[\t ]+tracepoint already hit 1 time\[\r\n\]+\[\t ]+collect parm" { + pass "info trace reports tracepoint hit count" + } + -re "actions\.c:\[0-9\]+\[\r\n\]+\[\t ]+collect parm" { + pass "info trace does not report tracepoint hit count" + } + } +} + +proc test_tracepoints {} { + + gdb_test "break begin" ".*" "" + + gdb_test "break end" ".*" "" + + gdb_test "trace gdb_c_test" "Tracepoint .*" \ + "tracepoint at gdb_c_test" + + gdb_trace_setactions "collect at set_point: define actions" \ + "" \ + "collect parm" "^$" + set fastgood 0 + + gdb_test_multiple "ftrace gdb_recursion_test" "set fast tracepoint" { + -re "May not have a fast tracepoint at .*" { + pass "4-byte fast tracepoint could not be set" + } + -re "Fast tracepoint .*" { + pass "4-byte fast tracepoint is set" + set fastgood 1 + } + } + + if { $fastgood } { + + gdb_trace_setactions "collect at four_byter: define actions" \ + "" \ + "collect globvar, anarg" "^$" + } + + run_trace_experiment + +} + +gdb_reinitialize_dir $srcdir/$subdir + +if { [gdb_test "info sharedlibrary" ".*libinproctrace\.so.*" "IPA loaded"] != 0 } { + untested "Could not find IPA lib loaded" + return 1 +} + +test_tracepoints diff --git a/gdb/testsuite/lib/gdbserver-support.exp b/gdb/testsuite/lib/gdbserver-support.exp index aeeb585..ec88b66 100644 --- a/gdb/testsuite/lib/gdbserver-support.exp +++ b/gdb/testsuite/lib/gdbserver-support.exp @@ -224,6 +224,7 @@ proc gdbserver_start { options arguments } { global gdbserver_reconnect_p if {![info exists gdbserver_reconnect_p] || !$gdbserver_reconnect_p} { # GDB client could accidentally connect to a stale server. + # append gdbserver_command " --debug --once" append gdbserver_command " --once" } |