diff options
author | Yao Qi <yao@codesourcery.com> | 2011-12-10 15:16:35 +0000 |
---|---|---|
committer | Yao Qi <yao@codesourcery.com> | 2011-12-10 15:16:35 +0000 |
commit | 4511b1ba87abd6e84846dcfd38087653a7ddbd89 (patch) | |
tree | c347535e5341cfa22fa32926374d6df85d7e710e /gdb | |
parent | df5a4bd3a546613628d251202271ea2d10ba8608 (diff) | |
download | gdb-4511b1ba87abd6e84846dcfd38087653a7ddbd89.zip gdb-4511b1ba87abd6e84846dcfd38087653a7ddbd89.tar.gz gdb-4511b1ba87abd6e84846dcfd38087653a7ddbd89.tar.bz2 |
2011-12-10 Hui Zhu <teawater@gmail.com>
Yao Qi <yao@codesourcery.com>
* tracepoint.c (start_tracing): Clear `inserted' flag.
2011-12-10 Yao Qi <yao@codesourcery.com>
* gdb.trace/status-stop.exp: New.
* gdb.trace/status-stop.c: New.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/testsuite/gdb.trace/status-stop.c | 48 | ||||
-rw-r--r-- | gdb/testsuite/gdb.trace/status-stop.exp | 124 | ||||
-rw-r--r-- | gdb/tracepoint.c | 4 |
5 files changed, 186 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 704bbea..13998f5 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,4 +1,9 @@ 2011-12-10 Hui Zhu <teawater@gmail.com> + Yao Qi <yao@codesourcery.com> + + * tracepoint.c (start_tracing): Clear `inserted' flag. + +2011-12-10 Hui Zhu <teawater@gmail.com> * tracepoint.c (create_tsv_from_upload): Change sprintf to xstrprintf. diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 13dc282..2035a8a 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-12-10 Yao Qi <yao@codesourcery.com> + + * gdb.trace/status-stop.exp: New. + * gdb.trace/status-stop.c: New. + 2011-12-09 Jan Kratochvil <jan.kratochvil@redhat.com> * gdb.reverse/until-precsave.exp (run to end of main) Extend the diff --git a/gdb/testsuite/gdb.trace/status-stop.c b/gdb/testsuite/gdb.trace/status-stop.c new file mode 100644 index 0000000..9ff69d6 --- /dev/null +++ b/gdb/testsuite/gdb.trace/status-stop.c @@ -0,0 +1,48 @@ +/* This testcase is part of GDB, the GNU debugger. + + 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/>. */ + +static void +func1 (void) +{} + +int buf[1024]; + +static void +func2 (void) +{} + +static void +end (void) +{} + +int +main (void) +{ + int i; + + func1 (); + + /* We call func2 as many times as possible to make sure that trace is + stopped due to trace buffer is full. */ + for (i = 0; i < 10000; i++) + { + func2 (); + } + + end (); + return 0; +} diff --git a/gdb/testsuite/gdb.trace/status-stop.exp b/gdb/testsuite/gdb.trace/status-stop.exp new file mode 100644 index 0000000..6c92b75 --- /dev/null +++ b/gdb/testsuite/gdb.trace/status-stop.exp @@ -0,0 +1,124 @@ +# 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 "status-stop" +set executable $testfile +set srcfile ${testfile}.c +set binfile $objdir/$subdir/$testfile +set expfile $testfile.exp + + +if [prepare_for_testing $expfile $executable $srcfile \ + {debug nowarnings}] { + untested "failed to prepare for trace tests" + return -1 +} + +# Verify that the sequence of commands "tstart tstop tstart" works well. + +proc test_tstart_tstop_tstart { } { + global executable + global pf_prefix + global hex + + set old_pf_prefix $pf_prefix + set pf_prefix "$pf_prefix tstart_tstop_tstart:" + + # Start with a fresh gdb. + clean_restart ${executable} + if ![runto_main] { + fail "Can't run to main" + set pf_prefix $old_pf_prefix + return -1 + } + + gdb_test "trace func1" "Tracepoint \[0-9\] at $hex: file.*" + gdb_test_no_output "tstart" + + gdb_test "break end" "Breakpoint \[0-9\] at $hex: file.*" + gdb_test "continue" "Continuing\\.\[ \r\n\]+Breakpoint.*" "continue to end" + + gdb_test_no_output "tstop" + + gdb_test_no_output "tstart" + + set pf_prefix $old_pf_prefix +} + +# Verify the sequence of commands "tstart tstart" works well. + +proc test_tstart_tstart { } { + global executable + global pf_prefix + global hex + + set old_pf_prefix $pf_prefix + set pf_prefix "$pf_prefix tstart_tstart:" + + # Start with a fresh gdb. + clean_restart ${executable} + if ![runto_main] { + fail "Can't run to main" + set pf_prefix $old_pf_prefix + return -1 + } + + gdb_test "trace func1" "Tracepoint \[0-9\] at $hex: file.*" + gdb_test_no_output "tstart" + + gdb_test "tstart" "" "tstart again" "A trace is running already. Start a new run\\? \\(y or n\\) " "y" + + set pf_prefix $old_pf_prefix +} + +# Verify that trace stops clearly when trace buffer is full. + +proc test_buffer_full_tstart { } { + global executable + global pf_prefix + global hex + + set old_pf_prefix $pf_prefix + set pf_prefix "$pf_prefix buffer_full_tstart:" + + # Start with a fresh gdb. + clean_restart ${executable} + if ![runto_main] { + fail "Can't run to main" + set pf_prefix $old_pf_prefix + return -1 + } + + gdb_test "trace func2" "Tracepoint \[0-9\] at $hex: file.*" + gdb_trace_setactions "collect buf: define actions" \ + "" \ + "collect buf" "^$" + + gdb_test_no_output "tstart" + gdb_test "break end" "Breakpoint \[0-9\] at $hex: file.*" + gdb_test "continue" "Continuing\\.\[ \r\n\]+Breakpoint.*" "continue to end" + + gdb_test "tstatus" ".*buffer was full.*" + gdb_test_no_output "tstart" + + set old_pf_prefix $pf_prefix +} + +test_tstart_tstop_tstart + +test_tstart_tstart + +test_buffer_full_tstart
\ No newline at end of file diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c index fa79d53..79a64a3 100644 --- a/gdb/tracepoint.c +++ b/gdb/tracepoint.c @@ -1756,6 +1756,10 @@ start_tracing (char *notes) struct tracepoint *t = (struct tracepoint *) b; struct bp_location *loc; + /* Clear `inserted' flag. */ + for (loc = b->loc; loc; loc = loc->next) + loc->inserted = 0; + if ((b->type == bp_fast_tracepoint ? !may_insert_fast_tracepoints : !may_insert_tracepoints)) |