From 0a320680e84174e9aa01c6297fe08666720ed7bf Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Thu, 17 Apr 2008 11:49:56 +0000 Subject: [PATCH] gdb/ * inf-loop.c (inferior_event_handler): Also run the intermediate continuations in the INF_EXEC_COMPLETE case. gdb/testsuite/ * gdb.base/step-break.exp, gdb.base/step-break.c: New files. --- gdb/ChangeLog | 5 +++ gdb/inf-loop.c | 6 ++++ gdb/testsuite/ChangeLog | 4 +++ gdb/testsuite/gdb.base/step-break.c | 32 ++++++++++++++++++++ gdb/testsuite/gdb.base/step-break.exp | 57 +++++++++++++++++++++++++++++++++++ 5 files changed, 104 insertions(+) create mode 100644 gdb/testsuite/gdb.base/step-break.c create mode 100644 gdb/testsuite/gdb.base/step-break.exp diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 595f418..86a4cbe 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2008-04-17 Pedro Alves + + * inf-loop.c (inferior_event_handler): Also run the intermediate + continuations in the INF_EXEC_COMPLETE case. + 2008-04-16 Tom Tromey * cli/cli-decode.h (CMD_ASYNC_OK): New define. diff --git a/gdb/inf-loop.c b/gdb/inf-loop.c index cfb80d5..9519c79 100644 --- a/gdb/inf-loop.c +++ b/gdb/inf-loop.c @@ -91,6 +91,12 @@ inferior_event_handler (enum inferior_event_type event_type, was_sync = sync_execution; async_enable_stdin (); + /* If we were doing a multi-step (eg: step n, next n), but it + got interrupted by a breakpoint, still do the pending + continuations. The continuation itself is responsible for + distinguishing the cases. */ + do_all_intermediate_continuations (); + do_all_continuations (); if (current_language != expected_language) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 9469a27..ff33944 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2008-04-17 Pedro Alves + + * gdb.base/step-break.exp, gdb.base/step-break.c: New files. + 2008-04-15 Aleksandar Ristovski * gdb.base/attach.exp (do_attach_tests): Matching pattern for diff --git a/gdb/testsuite/gdb.base/step-break.c b/gdb/testsuite/gdb.base/step-break.c new file mode 100644 index 0000000..1779762 --- /dev/null +++ b/gdb/testsuite/gdb.base/step-break.c @@ -0,0 +1,32 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2008 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 . + +*/ + +int +main () +{ + volatile int i = 1; + + while (i > 0) /* place1 */ + { + i++; /* place2 */ + i++; /* place3, set breakpoint here */ + } + + return 0; +} diff --git a/gdb/testsuite/gdb.base/step-break.exp b/gdb/testsuite/gdb.base/step-break.exp new file mode 100644 index 0000000..20a13c1 --- /dev/null +++ b/gdb/testsuite/gdb.base/step-break.exp @@ -0,0 +1,57 @@ +# This testcase is part of GDB, the GNU debugger. + +# Copyright 2008 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 . + +if $tracelevel then { + strace $tracelevel +} + +set testfile step-break +set srcfile ${testfile}.c +set binfile ${objdir}/${subdir}/${testfile} + +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } { + untested step-break.exp + return -1 +} + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${binfile} + +if ![runto_main] then { + fail "Can't run to main" + return 0 +} + +set bp_location [gdb_get_line_number "set breakpoint here"] + +gdb_test "break $bp_location" \ + "Breakpoint.*at.* file .*$srcfile, line $bp_location\\." \ + "breakpoint line number" + +gdb_test continue "Continuing\\..*Breakpoint \[0-9\]+, main \\(\\) at .*$srcfile:$bp_location.*set breakpoint here.*" \ + "run until breakpoint set at a line number" + +gdb_test "next 2" ".*place2.*" "next 2 (1)" +gdb_test "next 2" ".*place3.*" "next 2 (2)" +gdb_test "next 2" ".*place2.*" "next 2 (3)" +gdb_test "next 2" ".*place3.*" "next 2 (4)" +gdb_test "next 2" ".*place2.*" "next 2 (5)" +gdb_test "next 2" ".*place3.*" "next 2 (6)" + +return 0 -- 2.7.4