Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* [PATCH] Print trace state variables
@ 2010-12-09 22:38 Stan Shebs
  2010-12-10 11:27 ` Joel Brobecker
                   ` (2 more replies)
  0 siblings, 3 replies; 11+ messages in thread
From: Stan Shebs @ 2010-12-09 22:38 UTC (permalink / raw)
  To: gdb-patches

[-- Attachment #1: Type: text/plain, Size: 1152 bytes --]

This patch remedies an oversight in recent tracepoint work, by adding 
printing of trace state variables.  While you can see tsv values using 
"info tvariables", it's much more useful to be able to include them in 
print commands and expressions in general; you can then display them in 
different formats, or compute the difference between a tsv and some 
other value.  The manual already documents this as working, only the 
code to do it has been missing. :-)

This has been in CodeSourcery's version for some time, but I set it 
aside for awhile because it seemed a little kludgy to add a 
tracepoint-specific case into general evaluation.  On the plus side, its 
effect is localized, and should be safe for a 7.2 update release, where 
it will be useful for work on trace support in Eclipse.  There are no 
regressions testing with either i386-linux native or GDBserver.

If this seems reasonable, I'll put in both trunk and 7.2 branch.

Stan

2010-12-08  Stan Shebs <stan@codesourcery.com>

     * value.c (value_of_internalvar): Add case for trace state
     variables.

     * gdb.trace/tsv.exp: Test print command on trace state variables.




[-- Attachment #2: ptsv-patch-1 --]
[-- Type: text/plain, Size: 4504 bytes --]

Index: value.c
===================================================================
RCS file: /cvs/src/src/gdb/value.c,v
retrieving revision 1.118
diff -p -r1.118 value.c
*** value.c	29 Nov 2010 21:18:16 -0000	1.118
--- value.c	9 Dec 2010 01:03:40 -0000
***************
*** 42,47 ****
--- 42,49 ----
  
  #include "python/python.h"
  
+ #include "tracepoint.h"
+ 
  /* Prototypes for exported functions. */
  
  void _initialize_values (void);
*************** struct value *
*** 1197,1202 ****
--- 1199,1220 ----
  value_of_internalvar (struct gdbarch *gdbarch, struct internalvar *var)
  {
    struct value *val;
+   struct trace_state_variable *tsv;
+ 
+   /* If there is a trace state variable of the same name, assume that
+      is what we really want to see.  */
+   tsv = find_trace_state_variable (var->name);
+   if (tsv)
+     {
+       tsv->value_known = target_get_trace_state_variable_value (tsv->number,
+ 								&(tsv->value));
+       if (tsv->value_known)
+ 	val = value_from_longest (builtin_type (gdbarch)->builtin_int64,
+ 				  tsv->value);
+       else
+ 	val = allocate_value (builtin_type (gdbarch)->builtin_void);
+       return val;
+     }
  
    switch (var->kind)
      {
Index: testsuite/gdb.trace/tsv.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.trace/tsv.exp,v
retrieving revision 1.5
diff -p -r1.5 tsv.exp
*** testsuite/gdb.trace/tsv.exp	2 Jun 2010 21:55:28 -0000	1.5
--- testsuite/gdb.trace/tsv.exp	9 Dec 2010 01:03:40 -0000
*************** set srcfile ${testfile}.c
*** 27,41 ****
  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." \
--- 27,36 ----
  set binfile $objdir/$subdir/tsv
  if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
  	  executable {debug nowarnings}] != "" } {
!     untested tsv.exp
      return -1
  }
! gdb_load $binfile
  
  gdb_test "tvariable \$tvar1" \
    "Trace state variable \\\$tvar1 created, with initial value 0." \
*************** gdb_test "info tvariables" \
*** 72,77 ****
--- 67,75 ----
  \\\$tvar3\[\t \]+1234567000000\[\t \]+.*<undefined>.*" \
    "List tvariables"
  
+ gdb_test "print \$tvar2" " = void" \
+     "Print a trace state variable before run"
+ 
  gdb_test_no_output "delete tvariable \$tvar2" \
    "delete trace state variable"
  
*************** gdb_test "info tvariables" \
*** 91,94 ****
--- 89,150 ----
    "No trace state variables.*" \
    "List tvariables after deleting all"
  
+ # Now try running a trace.
+ 
+ runto_main
+ gdb_reinitialize_dir $srcdir/$subdir
+ 
+ # The rest of the testing needs actual tracing to work.
+ if { ![gdb_target_supports_trace] } then {
+     pass "Current target does not support trace"
+     return 1;
+ }
+ 
+ # define relative source line numbers:
+ # all subsequent line numbers are relative to this first one (baseline)
+ 
+ set baseline  [gdb_find_recursion_test_baseline $srcfile];
+ if { $baseline == -1 } then {
+     fail "Could not find gdb_recursion_test function"
+     return;
+ }
+ 
+ set testline1 [expr $baseline + 7]
+ 
+ gdb_delete_tracepoints
+ set trcpt1 [gdb_gettpnum gdb_c_test];
+ set trcpt2 [gdb_gettpnum gdb_asm_test];
+ set trcpt3 [gdb_gettpnum $testline1];
+ if { $trcpt1 <= 0 || $trcpt2 <= 0 || $trcpt3 <= 0 } then {
+     fail "setting tracepoints"
+     return;
+ }
+ 
+ gdb_test "tvariable \$tvar5 = 15" \
+   "Trace state variable \\\$tvar5 created, with initial value 15." \
+   "Create a trace state variable tvar5"
+ 
+ gdb_trace_setactions "collect tsv for first tracepoint" \
+ 	"$trcpt1" \
+ 	"collect \$tvar5 += 1" "^$"
+ 
+ gdb_test "tstart" ".*" ""
+ 
+ gdb_test "print \$tvar5" " = 15" \
+     "Print a trace state variable at start of run"
+ 
+ # Be sure not to fall off the end of the program.
+ gdb_test "break end" ".*" ""
+ gdb_test "continue" \
+     "Continuing.*Breakpoint $decimal, end.*" \
+     "run trace experiment"
+ 
+ gdb_test "print \$tvar5" " = 16" \
+     "Print a trace state variable during run"
+ 
+ gdb_test "tstop" ".*" ""
+ 
+ gdb_test "print \$tvar5" " = 16" \
+     "Print a trace state variable after run"
+ 
  

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2010-12-14 16:13 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-12-09 22:38 [PATCH] Print trace state variables Stan Shebs
2010-12-10 11:27 ` Joel Brobecker
2010-12-10 14:04   ` Stan Shebs
2010-12-10 16:35   ` Marc Khouzam
2010-12-10 20:00     ` Tom Tromey
2010-12-11  5:28       ` Joel Brobecker
2010-12-11  5:55 ` Joel Brobecker
2010-12-13  5:56   ` Stan Shebs
2010-12-13 13:00   ` Pedro Alves
2010-12-14 16:13   ` Tom Tromey
2010-12-13 12:31 ` Hui Zhu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox