From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27455 invoked by alias); 12 Aug 2008 20:07:46 -0000 Received: (qmail 27443 invoked by uid 22791); 12 Aug 2008 20:07:45 -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, 12 Aug 2008 20:07:11 +0000 Received: (qmail 8821 invoked from network); 12 Aug 2008 20:07:08 -0000 Received: from unknown (HELO orlando.local) (pedro@127.0.0.2) by mail.codesourcery.com with ESMTPA; 12 Aug 2008 20:07:08 -0000 From: Pedro Alves To: gdb-patches@sourceware.org, Eli Zaretskii Subject: Re: Add a third mode to "breakpoints always-inserted", and make it the default Date: Tue, 12 Aug 2008 20:07:00 -0000 User-Agent: KMail/1.9.9 References: <200808120034.25338.pedro@codesourcery.com> In-Reply-To: MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_41eoIV4udj8yTF4" Message-Id: <200808122107.20295.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-08/txt/msg00326.txt.bz2 --Boundary-00=_41eoIV4udj8yTF4 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-Disposition: inline Content-length: 2243 Thanks Eli, On Tuesday 12 August 2008 19:17:36, Eli Zaretskii wrote: > > From: Pedro Alves > > Date: Tue, 12 Aug 2008 00:34:24 +0100 > > > > So, this patch changes the "set breakpoints always-inserted" setting to > > be a three-state. on and off, the same as before, and a new mode, > > "follow-non-stop". > > How about calling this state "auto"? I like it. > > In the latter mode, GDB will behave as "on", if > > we're in non-stop mode, and as "off" if we're in all-stop mode. > > I think _behave_ as "on" is not a good idea. I suggest that it > actually _set_ the option "on". That way, code elsewhere will need > only to look at a single option, and won't need to know that if the > value is follow-non-stop, it needs to check another flag. All the common code already goes through this predicate: +int +breakpoints_always_inserted_mode (void) +{ + return (always_inserted_mode == always_inserted_on + || (always_inserted_mode == always_inserted_follow_non_stop + && non_stop)); +} -int breakpoints_always_inserted_mode (void) -{ - return always_inserted_mode; -} - Note that I didn't have to touch any of infrun.c, or breakpoint management functions in breakpoint.c, where the predicate is checked. If I kept it as an boolean, I'd have to instead change the "set non-stop" command implementation, which means I'd have to export a setter for the internal breakpoint.c variable. Either way, one setting has to know about the other. This way seemed more centralised. In any case, I can't seem to come up with a sentence that describes the auto behaviour without using "behaves as". If you can suggest any, I'd appreciate it. > > +This is the default mode. If gdb is controlling the inferior in > > +non-stop mode (@pxref{Non-Stop Mode}), gdb behaves as if > > +always-inserted mode is on. If gdb is controlling the inferior in > > +all-stop mode, gdb behaves as if always-inserted mode is off. > > We don't use a literal "gdb" in the manual, we use "@value{GDBN}". Ooops. Fixed. > > Also, it would be helpful to have an index entry here, something like > > @cindex non-stop mode, and @code{breakpoint always-inserted} Done, and done, I think. -- Pedro Alves --Boundary-00=_41eoIV4udj8yTF4 Content-Type: text/x-diff; charset="utf-8"; name="always_in_non_stop.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="always_in_non_stop.diff" Content-length: 6562 gdb/ 2008-08-12 Pedro Alves * breakpoint.c (always_inserted_auto, always_inserted_on) (always_inserted_off, always_inserted_enums): New. (always_inserted_mode): Change type to char* and point to always_inserted_auto. (show_always_inserted_mode): In auto mode, also show the current effect of the option. (breakpoints_always_inserted_mode): Adjust for the new auto mode. (_initialize_breakpoint): Make the "set breakpoints always-inserted" command an enum command. Extend help to describe the auto mode. gdb/doc/ 2008-08-12 Pedro Alves * gdb.texinfo (breakpoint always-inserted) Describe the auto mode setting, and make it the default. (Non-Stop Mode): Remove "set breakpoints always-inserted 1" from non-stop script example. --- gdb/breakpoint.c | 59 +++++++++++++++++++++++++++++++++++----------------- gdb/doc/gdb.texinfo | 17 +++++++++----- 2 files changed, 51 insertions(+), 25 deletions(-) Index: src/gdb/breakpoint.c =================================================================== --- src.orig/gdb/breakpoint.c 2008-08-12 02:44:25.000000000 +0100 +++ src/gdb/breakpoint.c 2008-08-12 20:35:20.000000000 +0100 @@ -249,18 +249,40 @@ Automatic usage of hardware breakpoints value); } -/* If 1, gdb will keep breakpoints inserted even as inferior is stopped, - and immediately insert any new breakpoints. If 0, gdb will insert - breakpoints into inferior only when resuming it, and will remove - breakpoints upon stop. */ -static int always_inserted_mode = 0; -static void +/* If on, gdb will keep breakpoints inserted even as inferior is + stopped, and immediately insert any new breakpoints. If off, gdb + will insert breakpoints into inferior only when resuming it, and + will remove breakpoints upon stop. If auto, GDB will behave as ON + if in non-stop mode, and as OFF if all-stop mode.*/ + +static const char always_inserted_auto[] = "auto"; +static const char always_inserted_on[] = "on"; +static const char always_inserted_off[] = "off"; +static const char *always_inserted_enums[] = { + always_inserted_auto, + always_inserted_off, + always_inserted_on, + NULL +}; +static const char *always_inserted_mode = always_inserted_auto; +static void show_always_inserted_mode (struct ui_file *file, int from_tty, - struct cmd_list_element *c, const char *value) + struct cmd_list_element *c, const char *value) { - fprintf_filtered (file, _("Always inserted breakpoint mode is %s.\n"), value); + if (always_inserted_mode == always_inserted_auto) + fprintf_filtered (file, + _("Always inserted breakpoint mode is %s (currently %s).\n"), + value, non_stop ? "on" : "off"); + else + fprintf_filtered (file, _("Always inserted breakpoint mode is %s.\n"), value); } +int +breakpoints_always_inserted_mode (void) +{ + return (always_inserted_mode == always_inserted_on + || (always_inserted_mode == always_inserted_auto && non_stop)); +} void _initialize_breakpoint (void); @@ -8197,11 +8219,6 @@ single_step_breakpoint_inserted_here_p ( return 0; } -int breakpoints_always_inserted_mode (void) -{ - return always_inserted_mode; -} - /* This help string is used for the break, hbreak, tbreak and thbreak commands. It is defined as a macro to prevent duplication. @@ -8604,14 +8621,18 @@ a warning will be emitted for such break &breakpoint_set_cmdlist, &breakpoint_show_cmdlist); - add_setshow_boolean_cmd ("always-inserted", class_support, - &always_inserted_mode, _("\ + add_setshow_enum_cmd ("always-inserted", class_support, + always_inserted_enums, &always_inserted_mode, _("\ Set mode for inserting breakpoints."), _("\ Show mode for inserting breakpoints."), _("\ -When this mode is off (which is the default), breakpoints are inserted in\n\ -inferior when it is resumed, and removed when execution stops. When this\n\ -mode is on, breakpoints are inserted immediately and removed only when\n\ -the user deletes the breakpoint."), +When this mode is off, breakpoints are inserted in inferior when it is\n\ +resumed, and removed when execution stops. When this mode is on,\n\ +breakpoints are inserted immediately and removed only when the user\n\ +deletes the breakpoint. When this mode is auto (which is the default),\n\ +the behaviour depends on the non-stop setting (see help set non-stop).\n\ +In this case, if gdb is controlling the inferior in non-stop mode, gdb\n\ +behaves as if always-inserted mode is on; if gdb is controlling the\n\ +inferior in all-stop mode, gdb behaves as if always-inserted mode is off."), NULL, &show_always_inserted_mode, &breakpoint_set_cmdlist, Index: src/gdb/doc/gdb.texinfo =================================================================== --- src.orig/gdb/doc/gdb.texinfo 2008-08-12 02:44:56.000000000 +0100 +++ src/gdb/doc/gdb.texinfo 2008-08-12 21:04:43.000000000 +0100 @@ -3313,15 +3313,23 @@ This behavior can be controlled with the @kindex show breakpoint always-inserted @table @code @item set breakpoint always-inserted off -This is the default behaviour. All breakpoints, including newly added -by the user, are inserted in the target only when the target is -resumed. All breakpoints are removed from the target when it stops. +All breakpoints, including newly added by the user, are inserted in +the target only when the target is resumed. All breakpoints are +removed from the target when it stops. @item set breakpoint always-inserted on Causes all breakpoints to be inserted in the target at all times. If the user adds a new breakpoint, or changes an existing breakpoint, the breakpoints in the target are updated immediately. A breakpoint is removed from the target only when breakpoint itself is removed. + +@cindex non-stop mode +@item set breakpoint always-inserted auto +This is the default mode. If @value{GDBN} is controlling the inferior +in non-stop mode (@pxref{Non-Stop Mode}), gdb behaves as if +@code{breakpoint always-inserted} mode is on. If @value{GDBN} is +controlling the inferior in all-stop mode, @value{GDBN} behaves as if +@code{breakpoint always-inserted} mode is off. @end table @cindex negative breakpoint numbers @@ -4571,9 +4579,6 @@ or attach to your program: # For target remote, use remote-async instead of linux-async. maint set linux-async 1 -# With non-stop, breakpoints have to be always inserted. -set breakpoint always-inserted 1 - # If using the CLI, pagination breaks non-stop. set pagination off --Boundary-00=_41eoIV4udj8yTF4--