diff options
author | Michael Snyder <msnyder@vmware.com> | 1998-09-15 22:25:01 +0000 |
---|---|---|
committer | Michael Snyder <msnyder@vmware.com> | 1998-09-15 22:25:01 +0000 |
commit | 27001c664dddac8910b0a9ed55a94d6307e8a9e9 (patch) | |
tree | 0ed88d9748fa8918ad9c955c220635d04bbb3e50 /gdb/testsuite/gdb.trace/limits.exp | |
parent | ff8c385ab368ea27a54a5f5fb614b4580452cd02 (diff) | |
download | gdb-27001c664dddac8910b0a9ed55a94d6307e8a9e9.zip gdb-27001c664dddac8910b0a9ed55a94d6307e8a9e9.tar.gz gdb-27001c664dddac8910b0a9ed55a94d6307e8a9e9.tar.bz2 |
Mon Sep 14 20:00:04 1998 Michael Snyder <msnyder@cleaver.cygnus.com>
* lib/<emc-support.exp trace-support.exp}: New files.
* configure.in: add new test directory gdb.trace.
* gdb.trace/{configure configure.in Makefile.in}: New files.
* gdb.trace/{actions.c actions.exp gdb_c_test.c}: New files.
* gdb.trace/{circ.c circ.exp limits.c limits.exp}: New files.
* gdb.trace/{collection.c collection.exp tfind.exp }: New files.
* gdb.trace/{backtrace.exp deltrace.exp infotrace.exp}: New files.
* gdb.trace/{packetlen.exp passc-dyn.exp passcount.exp}: New files.
* gdb.trace/{report.exp save-trace.exp tracecmd.exp}: New files.
* gdb.trace/{while-dyn.exp while-stepping.exp}: New files.
Diffstat (limited to 'gdb/testsuite/gdb.trace/limits.exp')
-rw-r--r-- | gdb/testsuite/gdb.trace/limits.exp | 316 |
1 files changed, 316 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.trace/limits.exp b/gdb/testsuite/gdb.trace/limits.exp new file mode 100644 index 0000000..581f82d --- /dev/null +++ b/gdb/testsuite/gdb.trace/limits.exp @@ -0,0 +1,316 @@ +# Copyright (C) 1998 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 2 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, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Please email any bugs, comments, and/or additions to this file to: +# bug-gdb@prep.ai.mit.edu + +if [istarget "m68k-*-elf"] then { + pass "Test not supported on this target" + return; +} + +load_lib "trace-support.exp" + +if $tracelevel then { + strace $tracelevel +} + +set prms_id 0 +set bug_id 0 + +set testfile "limits" +set srcfile ${testfile}.c +set binfile $objdir/$subdir/$testfile + +if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \ + executable {debug additional_flags="-gdwarf"}] != "" } { + gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." +} + +# Tests: +# 1) Meet and exceed artificial limit on number of tracepoints +# 2) Meet and exceed artificial limit on number of memranges +# 3) Meet and exceed artificial limit on bytes of bytecode data +# [NOTE: number four is moved out into its own separate test module.] +# 4) Meet and exceed artificial limit on bytes of trace buffer storage +# (circular and non-circular modes). However note that a more +# thorough test of the circular mode can be made separately. + +set cr "\[\r\n\]+" + +proc gdb_tracepoint_limit_test { } { + global gdb_prompt + global cr + + # Make sure we're in a sane starting state. + gdb_test "tstop" "" "" + gdb_test "tfind none" "" "" + gdb_delete_tracepoints + + # Set three tracepoints + gdb_test "trace foo" \ + "Tracepoint \[0-9\]+ at .*" \ + "tracepoint limit test: set first tracepoint" + + gdb_test "trace bar" \ + "Tracepoint \[0-9\]+ at .*" \ + "tracepoint limit test: set second tracepoint" + + gdb_test "trace baz" \ + "Tracepoint \[0-9\]+ at .*" \ + "tracepoint limit test: set third tracepoint" + + # Set secret artificial tracepoint limit to four + gdb_test "maint packet QTLimit:tp:4" \ + "received: .OK." \ + "tracepoint limit test: set limit to four" + + # Now sending three tracepoints should succeed. + send_gdb "tstart\n" + gdb_expect { + -re "$cr$gdb_prompt" { + pass "tracepoint limit test: send fewer than limit" + } + default { + fail "tracepoint limit test: send fewer than limit" + } + } + + # Set secret artificial tracepoint limit to three + gdb_test "maint packet QTLimit:tp:3" \ + "received: .OK." \ + "tracepoint limit test: set limit to three" + + # Now sending three tracepoints should still succeed. + send_gdb "tstart\n" + gdb_expect { + -re "$cr$gdb_prompt" { + pass "tracepoint limit test: send equal to limit" + } + default { + fail "tracepoint limit test: send equal to limit" + } + } + + # Set secret artificial tracepoint limit to two + gdb_test "maint packet QTLimit:tp:2" \ + "received: .OK." \ + "tracepoint limit test: set limit to two" + + # Now sending three tracepoints should fail. + gdb_test "tstart" \ + ".*\[Ee\]rror.*" \ + "tracepoint limit test: send more than limit" + + # Clean up: + gdb_test "tstop" "" "" + gdb_test "maint packet QTLimit:tp:FFFFFFFF" "" "" +} + +proc gdb_memrange_limit_test { } { + global gdb_prompt + global cr + + # Make sure we're in a sane starting state. + gdb_test "tstop" "" "" + gdb_test "tfind none" "" "" + gdb_delete_tracepoints + + # Set three tracepoints, and make 'em collect memranges + gdb_test "trace foo" \ + "Tracepoint \[0-9\]+ at .*" \ + "memrange limit test: set first tracepoint" + + gdb_trace_setactions "memrange limit test: set first actions" \ + "" \ + "collect \$arg" "^$" + + gdb_test "trace bar" \ + "Tracepoint \[0-9\]+ at .*" \ + "memrange limit test: set second tracepoint" + + gdb_trace_setactions "memrange limit test: set second actions" \ + "" \ + "collect \$arg" "^$" + + gdb_test "trace baz" \ + "Tracepoint \[0-9\]+ at .*" \ + "memrange limit test: set third tracepoint" + + gdb_trace_setactions "memrange limit test: set third actions" \ + "" \ + "collect \$arg" "^$" + + # Set secret artificial memrange limit to four + gdb_test "maint packet QTLimit:memrange:4" \ + "received: .OK." \ + "memrange limit test: set limit to four" + + # Now sending three memranges should still succeed. + send_gdb "tstart\n" + gdb_expect { + -re "$cr$gdb_prompt" { + pass "memrange limit test: send fewer than limit" + } + default { + fail "memrange limit test: send fewer than limit" + } + } + + # Set secret artificial memrange limit to three + gdb_test "maint packet QTLimit:memrange:3" \ + "received: .OK." \ + "memrange limit test: set limit to three" + + # Now sending three memranges should still succeed. + send_gdb "tstart\n" + gdb_expect { + -re "$cr$gdb_prompt" { + pass "memrange limit test: send equal to limit" + } + default { + fail "memrange limit test: send equal to limit" + } + } + + # Set secret artificial memrange limit to two + gdb_test "maint packet QTLimit:memrange:2" \ + "received: .OK." \ + "memrange limit test: set limit to two" + + # Now sending three memranges should fail. + gdb_test "tstart" \ + ".*\[Ee\]rror.*" \ + "memrange limit test: send more than limit" + + # Clean up: + gdb_test "tstop" "" "" + gdb_test "maint packet QTLimit:memrange:FFFFFFFF" "" "" +} + + +proc gdb_bytecode_limit_test { } { + global gdb_prompt + global cr + + # Make sure we're in a sane starting state. + gdb_test "tstop" "" "" + gdb_test "tfind none" "" "" + gdb_delete_tracepoints + + # Set three tracepoints + gdb_test "trace foo" \ + "Tracepoint \[0-9\]+ at .*" \ + "bytecode limit test: set first tracepoint" + + gdb_trace_setactions "bytecode limit test: set first actions" \ + "" \ + "collect x + n" "^$" + + gdb_test "trace bar" \ + "Tracepoint \[0-9\]+ at .*" \ + "bytecode limit test: set second tracepoint" + + gdb_trace_setactions "bytecode limit test: set second actions" \ + "" \ + "collect y + n" "^$" + + gdb_test "trace baz" \ + "Tracepoint \[0-9\]+ at .*" \ + "bytecode limit test: set third tracepoint" + + gdb_trace_setactions "bytecode limit test: set third actions" \ + "" \ + "collect z + n" "^$" + + # Set secret artificial bytecode limit to a large number + gdb_test "maint packet QTLimit:bytecode:400" \ + "received: .OK." \ + "bytecode limit test: set limit to large" + + # Now sending three bytecodes should still succeed. + send_gdb "tstart\n" + gdb_expect { + -re "$cr$gdb_prompt" { + pass "bytecode limit test: send fewer than limit" + } + default { + fail "bytecode limit test: send fewer than limit" + } + } + + # Set secret artificial bytecode limit to a small number + gdb_test "maint packet QTLimit:bytecode:40" \ + "received: .OK." \ + "bytecode limit test: set limit to small" + + # Now sending three bytecodes should fail. + gdb_test "tstart" \ + ".*\[Ee\]rror.*" \ + "bytecode limit test: send more than limit" + + + # Clean up: + gdb_test "tstop" "" "" + gdb_test "maint packet QTLimit:bytecode:FFFFFFFF" "" "" +} + +proc gdb_trace_limits_tests { } { + global gdb_prompt + + # 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 supporst trace" + return 1; + } + + if [gdb_test "maint packet QTLimit:tp:ffffffff" \ + "received: .OK." ""] then { + pass "This test cannot be run on this target" + return 1; + } + + if [gdb_test "maint packet QTLimit:memrange:ffffffff" \ + "received: .OK." ""] then { + pass "This test cannot be run on this target" + return 1; + } + + if [gdb_test "maint packet QTLimit:bytecode:ffffffff" \ + "received: .OK." ""] then { + pass "This test cannot be run on this target" + return; + } + + gdb_tracepoint_limit_test + gdb_memrange_limit_test + gdb_bytecode_limit_test +} + +# Start with a fresh gdb. + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load $binfile + +if [target_info exists gdb_stub] { + gdb_step_for_stub; +} +# Body of test encased in a proc so we can return prematurely. +gdb_trace_limits_tests |