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 \]+.*.*" \ "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" +