diff options
author | Stan Shebs <shebs@codesourcery.com> | 2011-09-19 16:55:26 +0000 |
---|---|---|
committer | Stan Shebs <shebs@codesourcery.com> | 2011-09-19 16:55:26 +0000 |
commit | 3c9057f3816867fcf94bec3e264c2b7b0873fd29 (patch) | |
tree | 37f3bf2543e513365ca507d3d086900154f8f4f7 /gdb/testsuite/gdb.trace/tspeed.exp | |
parent | 0672bf414ac3e5fc031397f8cab2f4165625923d (diff) | |
download | gdb-3c9057f3816867fcf94bec3e264c2b7b0873fd29.zip gdb-3c9057f3816867fcf94bec3e264c2b7b0873fd29.tar.gz gdb-3c9057f3816867fcf94bec3e264c2b7b0873fd29.tar.bz2 |
* gdb.trace/tspeed.exp: New file.
* gdb.trace/tspeed.c: New file.
Diffstat (limited to 'gdb/testsuite/gdb.trace/tspeed.exp')
-rw-r--r-- | gdb/testsuite/gdb.trace/tspeed.exp | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.trace/tspeed.exp b/gdb/testsuite/gdb.trace/tspeed.exp new file mode 100644 index 0000000..9f51a47 --- /dev/null +++ b/gdb/testsuite/gdb.trace/tspeed.exp @@ -0,0 +1,140 @@ +# 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 "tspeed" +set srcfile ${testfile}.c +set executable $testfile +set binfile $objdir/$subdir/$executable + +set ipalib $objdir/../gdbserver/libinproctrace.so + +if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \ + executable [concat {debug nowarnings c} libs=$ipalib]] != "" } { + untested tspeed.exp + return -1 +} + +# Typically we need a little extra time for this test. +set timeout 180 + +set ws "\[\r\n\t \]+" +set cr "\[\r\n\]+" + +# +# Utility procs +# + +proc prepare_for_trace_test {} { + global executable + + clean_restart $executable + + runto_main + + set testline [gdb_get_line_number "set pre-run breakpoint here"] + + gdb_test "break $testline" ".*" "" + + set testline [gdb_get_line_number "set post-run breakpoint here"] + + gdb_test "break $testline" ".*" "" +} + +proc run_trace_experiment {} { + + gdb_test "continue" \ + ".*Breakpoint \[0-9\]+, main .*" \ + "advance to trace begin" + + gdb_test_no_output "tstart" "start trace experiment" + + gdb_test "continue" \ + ".*Breakpoint \[0-9\]+, main .*" \ + "advance through tracing" + + gdb_test "tstatus" ".*Trace .*" "check on trace status" + + gdb_test "tstop" "" "" +} + +proc gdb_slow_trace_speed_test { } { + + gdb_delete_tracepoints + + gdb_test "print iters = init_iters" ".* = .*"; + + set testline [gdb_get_line_number "set tracepoint here"] + + gdb_test "trace $testline if (globfoo != 12 && globfoo2 == 45)" \ + "Tracepoint \[0-9\]+ at .*" \ + "set slow tracepoint" + + # Begin the test. + run_trace_experiment +} + +proc gdb_fast_trace_speed_test { } { + + gdb_delete_tracepoints + + gdb_test "print iters = init_iters" ".* = .*"; + + set run_ftrace 0 + + set testline [gdb_get_line_number "set tracepoint here"] + + gdb_test_multiple "ftrace $testline if (globfoo != 12 && globfoo2 == 45)" \ + "set conditional fast tracepoint" { + -re "Fast tracepoint \[0-9\]+ at .*" { + pass "set conditional fast tracepoint, done" + set run_ftrace 1 + } + -re "May not have a fast tracepoint at .*" { + pass "set conditional fast tracepoint, not allowed at line" + } + } + + # If the fast tracepoint couldn't be set, don't bother with the run. + if { $run_ftrace == 1 } then { + + # Begin the test. + run_trace_experiment + } +} + +proc gdb_trace_collection_test {} { + + prepare_for_trace_test + + gdb_slow_trace_speed_test + + gdb_fast_trace_speed_test +} + +clean_restart $executable +runto_main + +# We generously give ourselves one "pass" if we successfully +# detect that this test cannot be run on this target! +if { ![gdb_target_supports_trace] } then { + pass "Current target does not support trace" + return 1; +} + +# Body of test encased in a proc so we can return prematurely. +gdb_trace_collection_test |