aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.trace/tspeed.exp
diff options
context:
space:
mode:
authorStan Shebs <shebs@codesourcery.com>2011-09-19 16:55:26 +0000
committerStan Shebs <shebs@codesourcery.com>2011-09-19 16:55:26 +0000
commit3c9057f3816867fcf94bec3e264c2b7b0873fd29 (patch)
tree37f3bf2543e513365ca507d3d086900154f8f4f7 /gdb/testsuite/gdb.trace/tspeed.exp
parent0672bf414ac3e5fc031397f8cab2f4165625923d (diff)
downloadgdb-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.exp140
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