This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH 2/6] allow to suppress more mi notification
On 07/24/2012 05:10 PM, Yao Qi wrote:
> Hi,
> 'mi_suppress_breakpoint_notifications' is used to suppress mi
> breakpoint notifications. This patch is to change this variable
> to an array so that multiple mi notifications can be suppressed.
> The following patch will use it to suppress other MI notifications.
>
> gdb:
>
> 2012-07-24 Yao Qi <yao@codesourcery.com>
>
> * mi/mi-interp.c: Remove mi_suppress_breakpoint_notifications.
> Define array mi_suppress_notification.
> (mi_breakpoint_created): Update.
> (mi_breakpoint_deleted): Likewise.
> (mi_breakpoint_modified): Likewise.
> * mi/mi-main.c (mi_cmd_execute): Likewise.
> * mi/mi-main.h (enum MI_SUPRESS_NOTIFICATION): New.
> ---
> gdb/mi/mi-interp.c | 12 ++++++------
> gdb/mi/mi-main.c | 6 ++++--
> gdb/mi/mi-main.h | 4 +++-
> 3 files changed, 13 insertions(+), 9 deletions(-)
>
> diff --git a/gdb/mi/mi-interp.c b/gdb/mi/mi-interp.c
> index b487136..885d08b 100644
> --- a/gdb/mi/mi-interp.c
> +++ b/gdb/mi/mi-interp.c
> @@ -501,10 +501,10 @@ mi_about_to_proceed (void)
> mi_proceeded = 1;
> }
>
> -/* When non-zero, no MI notifications will be emitted in
> - response to breakpoint change observers. */
> +/* When the element is non-zero, no MI notifications will be emitted in
> + response to the corresponding observers. */
>
> -int mi_suppress_breakpoint_notifications = 0;
> +int mi_suppress_notification[] = { 0 };
>
> /* Emit notification about a created breakpoint. */
>
> @@ -515,7 +515,7 @@ mi_breakpoint_created (struct breakpoint *b)
> struct ui_out *mi_uiout = interp_ui_out (top_level_interpreter ());
> volatile struct gdb_exception e;
>
> - if (mi_suppress_breakpoint_notifications)
> + if (mi_suppress_notification[MI_SUPPRESS_BREAKPOINT])
> return;
>
> if (b->number <= 0)
> @@ -546,7 +546,7 @@ mi_breakpoint_deleted (struct breakpoint *b)
> {
> struct mi_interp *mi = top_level_interpreter_data ();
>
> - if (mi_suppress_breakpoint_notifications)
> + if (mi_suppress_notification[MI_SUPPRESS_BREAKPOINT])
> return;
>
> if (b->number <= 0)
> @@ -569,7 +569,7 @@ mi_breakpoint_modified (struct breakpoint *b)
> struct ui_out *mi_uiout = interp_ui_out (top_level_interpreter ());
> volatile struct gdb_exception e;
>
> - if (mi_suppress_breakpoint_notifications)
> + if (mi_suppress_notification[MI_SUPPRESS_BREAKPOINT])
> return;
>
> if (b->number <= 0)
> diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c
> index dfb4892..0ae867d 100644
> --- a/gdb/mi/mi-main.c
> +++ b/gdb/mi/mi-main.c
> @@ -2099,8 +2099,10 @@ mi_cmd_execute (struct mi_parse *parse)
>
> if (strncmp (parse->command, "break-", sizeof ("break-") - 1 ) == 0)
> {
> - make_cleanup_restore_integer (&mi_suppress_breakpoint_notifications);
> - mi_suppress_breakpoint_notifications = 1;
> + int *p = &mi_suppress_notification[MI_SUPPRESS_BREAKPOINT];
> +
> + make_cleanup_restore_integer (p);
> + *p = 1;
> }
>
> if (parse->cmd->argv_func != NULL)
> diff --git a/gdb/mi/mi-main.h b/gdb/mi/mi-main.h
> index beac2cd..1c7bf00 100644
> --- a/gdb/mi/mi-main.h
> +++ b/gdb/mi/mi-main.h
> @@ -32,7 +32,9 @@ extern char *current_token;
>
> extern int running_result_record_printed;
> extern int mi_proceeded;
> -extern int mi_suppress_breakpoint_notifications;
> +
> +enum MI_SUPRESS_NOTIFICATION { MI_SUPPRESS_BREAKPOINT };
> +extern int mi_suppress_notification[];
>
Quite frankly, I don't see how putting these in an array is better than
a separate global for each. The memory used is the same, and with separate
globals, it's a little easier to debug from a top gdb (just print mi_suppress_<TAB> to
see the list of possibilities, etc.) Are you planning on doing something over the
whole array, that is abstracted from the semantics of each element of the array?
--
Pedro Alves