diff options
author | Stan Shebs <shebs@codesourcery.com> | 2009-12-28 23:39:10 +0000 |
---|---|---|
committer | Stan Shebs <shebs@codesourcery.com> | 2009-12-28 23:39:10 +0000 |
commit | f61e138d9a5c10da22c01ef377034e66e6978fe6 (patch) | |
tree | 399c49505e3d1aa2e3f71937bd6f1034cf5c6acc /gdb/testsuite/gdb.trace | |
parent | ae77ee9a7fe8e4b4e05bd65b4f9f2b8ca63a129d (diff) | |
download | gdb-f61e138d9a5c10da22c01ef377034e66e6978fe6.zip gdb-f61e138d9a5c10da22c01ef377034e66e6978fe6.tar.gz gdb-f61e138d9a5c10da22c01ef377034e66e6978fe6.tar.bz2 |
2009-12-28 Stan Shebs <stan@codesourcery.com>
Add trace state variables.
* ax.h (enum agent_op): Add getv, setv, and tracev.
(ax_tsv): Declare.
* ax-gdb.c: Include tracepoint.h.
(gen_expr): Handle BINOP_ASSIGN, BINOP_ASSIGN_MODIFY, and
OP_INTERNALVAR.
(gen_expr_binop_rest): New function, split from gen_expr.
* ax-general.c (ax_tsv): New function.
(aop_map): Add new bytecodes.
* tracepoint.h (struct trace_state_variable): New struct.
(tsv_s): New typedef.
(find_trace_state_variable): Declare.
* tracepoint.c (tvariables): New global.
(next_tsv_number): New global.
(create_trace_state_variable): New function.
(find_trace_state_variable): New function.
(delete_trace_state_variable): New function.
(trace_variable_command): New function.
(delete_trace_variable_command): New function.
(tvariables_info): New function.
(trace_start_command): Download tsvs with initial values.
(_initialize_tracepoint): Add new commands.
* NEWS: Mention the addition of trace state variables.
==> doc/ChangeLog <==
2009-12-28 Stan Shebs <stan@codesourcery.com>
* gdb.texinfo (Trace State Variables): New section.
(Tracepoint Packets): Describe trace state variable packets.
* agentexpr.texi (Bytecode Descriptions): Describe trace state
variable bytecodes.
==> testsuite/ChangeLog <==
2009-12-28 Stan Shebs <stan@codesourcery.com>
* gdb.trace/tsv.exp: New file.
* gdb.base/completion.exp: Update ambiguous info output.
Diffstat (limited to 'gdb/testsuite/gdb.trace')
-rw-r--r-- | gdb/testsuite/gdb.trace/tsv.exp | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.trace/tsv.exp b/gdb/testsuite/gdb.trace/tsv.exp new file mode 100644 index 0000000..5bab91d --- /dev/null +++ b/gdb/testsuite/gdb.trace/tsv.exp @@ -0,0 +1,107 @@ +# Copyright 2009 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"; + +if $tracelevel then { + strace $tracelevel +} + +set prms_id 0 +set bug_id 0 + +gdb_exit +gdb_start +set testfile "actions" +set srcfile ${testfile}.c +set binfile $objdir/$subdir/tsv +if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \ + executable {debug nowarnings}] != "" } { + untested tracecmd.exp + return -1 +} +gdb_reinitialize_dir $srcdir/$subdir + +# If testing on a remote host, download the source file. +# remote_download host $srcdir/$subdir/$srcfile + +gdb_file_cmd $binfile + +gdb_test "tvariable \$tvar1" \ + "Trace state variable \\\$tvar1 created, with initial value 0." \ + "Create a trace state variable" + +gdb_test "tvariable \$tvar2 = 45" \ + "Trace state variable \\\$tvar2 created, with initial value 45." \ + "Create a trace state variable with initial value" + +gdb_test "tvariable \$tvar2 = -92" \ + "Trace state variable \\\$tvar2 now has initial value -92." \ + "Change initial value of a trace state variable" + +gdb_test "tvariable \$tvar3 = 2 + 3" \ + "Trace state variable \\\$tvar3 created, with initial value 5." \ + "Create a trace state variable with expression" + +gdb_test "tvariable \$tvar3 = 1234567000000" \ + "Trace state variable \\\$tvar3 now has initial value 1234567000000." \ + "Init trace state variable to a 64-bit value" + +gdb_test "tvariable main" \ + "Syntax must be \\\$NAME \\\[ = EXPR \\\]" \ + "tvariable syntax error, bad name" + +gdb_test "tvariable \$tvar1 - 93" \ + "Syntax must be \\\$NAME \\\[ = EXPR \\\]" \ + "tvariable syntax error, not an assignment" + +gdb_test "info tvariables" \ + "Name\[\t \]+Initial\[\t \]+Current.* +\\\$tvar1\[\t \]+0\[\t \]+<undefined>.* +\\\$tvar2\[\t \]+-92\[\t \]+<undefined>.* +\\\$tvar3\[\t \]+1234567000000\[\t \]+.*<undefined>.*" \ + "List tvariables" + +gdb_test "delete tvariable \$tvar2" \ + "" \ + "delete trace state variable" + +gdb_test "info tvariables" \ + "Name\[\t \]+Initial\[\t \]+Current.* +\\\$tvar1\[\t \]+0\[\t \]+<undefined>.* +\\\$tvar3\[\t \]+1234567000000\[\t \]+.*<undefined>.*" \ + "List tvariables after deletion" + +send_gdb "delete tvariable\n" +gdb_expect 30 { + -re "Delete all trace state variables.*y or n.*$" { + send_gdb "y\n" + gdb_expect 30 { + -re "$gdb_prompt $" { + pass "Delete all trace state variables" + } + timeout { fail "Delete all trace state variables (timeout)" } + } + } + -re "$gdb_prompt $" { # This happens if there were no variables + } + timeout { perror "Delete all trace state variables (timeout)" ; return } +} + +gdb_test "info tvariables" \ + "No trace state variables.*" \ + "List tvariables after deleting all" + + |