From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22896 invoked by alias); 6 May 2008 18:50:01 -0000 Received: (qmail 22884 invoked by uid 22791); 6 May 2008 18:50:00 -0000 X-Spam-Check-By: sourceware.org Received: from mail.codesourcery.com (HELO mail.codesourcery.com) (65.74.133.4) by sourceware.org (qpsmtpd/0.31) with ESMTP; Tue, 06 May 2008 18:49:43 +0000 Received: (qmail 5410 invoked from network); 6 May 2008 18:49:40 -0000 Received: from unknown (HELO orlando.local) (pedro@127.0.0.2) by mail.codesourcery.com with ESMTPA; 6 May 2008 18:49:40 -0000 From: Pedro Alves To: Daniel Jacobowitz Subject: Re: continuations and breakpoint commands Date: Wed, 07 May 2008 04:33:00 -0000 User-Agent: KMail/1.9.9 Cc: gdb-patches@sourceware.org References: <200804292221.52239.pedro@codesourcery.com> <20080502153826.GP29202@caradoc.them.org> In-Reply-To: <20080502153826.GP29202@caradoc.them.org> MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_ChKIIrLPsKyUsvV" Message-Id: <200805061949.38195.pedro@codesourcery.com> X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2008-05/txt/msg00250.txt.bz2 --Boundary-00=_ChKIIrLPsKyUsvV Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Content-length: 607 A Friday 02 May 2008 16:38:26, Daniel Jacobowitz wrote: > On Tue, Apr 29, 2008 at 10:21:52PM +0100, Pedro Alves wrote: > > 2008-04-29 Pedro Alves > > > > * inf-loop.c (inferior_event_handler): Run all continuations and > > print any language change before running the breakpoint commands. > > Looks OK, unless it needs to be reworked after the discussion we're > currently having about what happens to other continuations. Since we are not going to add per-thread continuations in all-stop mode after all, I've checked this in, after another round of testing. -- Pedro Alves --Boundary-00=_ChKIIrLPsKyUsvV Content-Type: text/x-diff; charset="iso-8859-1"; name="fix_commands.exp.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="fix_commands.exp.diff" Content-length: 2416 2008-05-06 Pedro Alves * inf-loop.c (inferior_event_handler): Run all continuations and print any language change before running the breakpoint commands. --- gdb/inf-loop.c | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) Index: src/gdb/inf-loop.c =================================================================== --- src.orig/gdb/inf-loop.c 2008-05-06 19:23:15.000000000 +0100 +++ src/gdb/inf-loop.c 2008-05-06 19:23:52.000000000 +0100 @@ -92,30 +92,35 @@ inferior_event_handler (enum inferior_ev was_sync = sync_execution; async_enable_stdin (); - /* If there's an error doing breakpoint commands, we don't - want to throw -- continuation might still do something. */ - TRY_CATCH (e, RETURN_MASK_ALL) - { - bpstat_do_actions (&stop_bpstat); - } /* 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. */ + distinguishing the cases. The continuations are allowed to + touch the inferior memory, e.g. to remove breakpoints, so run + them before running breakpoint commands, which may resume the + target. */ do_all_intermediate_continuations (0); + /* Always finish the previous command before running any + breakpoint commands. Any stop cancels the previous command. + E.g. a "finish" or "step-n" command interrupted by an + unrelated breakpoint is canceled. */ do_all_continuations (0); - if (current_language != expected_language) + if (current_language != expected_language + && language_mode == language_mode_auto) + language_info (1); /* Print what changed. */ + + /* Don't propagate breakpoint commands errors. Either we're + stopping or some command resumes the inferior. The user will + be informed. */ + TRY_CATCH (e, RETURN_MASK_ALL) { - if (language_mode == language_mode_auto) - { - language_info (1); /* Print what changed. */ - } + bpstat_do_actions (&stop_bpstat); } - /* If the continuation did not start the target again, - prepare for interation with the user. */ + /* If no breakpoint command resumed the inferior, prepare for + interaction with the user. */ if (!target_executing) { if (was_sync) --Boundary-00=_ChKIIrLPsKyUsvV--