diff options
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" } |