This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: [rfa] restructure breakpoint.c:breakpoint_1()
- To: Andrew Cagney <ac131313 at cygnus dot com>
- Subject: Re: [rfa] restructure breakpoint.c:breakpoint_1()
- From: Michael Snyder <msnyder at cygnus dot com>
- Date: Mon, 18 Jun 2001 09:09:50 -0700
- CC: gdb-patches at sources dot redhat dot com
- Organization: Red Hat
- References: <3B2B9351.2090607@cygnus.com>
Andrew Cagney wrote:
>
> Hello,
>
> The attatched patch splits breakpoint_1() into two separate phases:
>
> o phase one determines the number of
> breakpoints and hence what headers
> are needed.
>
> o phase two prints the actual breakpoints
>
> Once this change is in, I can modify things so that ui-out is passed the
> number of items to be printed and hence, make it ui-out's responsibility
> to determine if the header should or should not be displayed. This in
> turn lets me fix a bug where the MI didn't always include the header in
> a table.
>
> Ok? I'm still testing...
OK, but could you:
1) Supply a header comment for your new function, and
2) While you're at it, update the comment header for breakpoint_1?
I notice that it refers to a parameter that no longer exists, while
failing to describe the "allflag" parameter.
>
> Andrew
>
> ----------------------------------------------------------------------------------------------------
> 2001-06-16 Andrew Cagney <ac131313@redhat.com>
>
> * breakpoint.c (breakpoint_1): Restructure. Compute the
> nr_printable_breakpoints. Move the header output to before the
> main print breakpoints loop.
> (user_settable_breakpoint): New function.
>
> Index: breakpoint.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/breakpoint.c,v
> retrieving revision 1.41
> diff -p -r1.41 breakpoint.c
> *** breakpoint.c 2001/06/11 16:05:24 1.41
> --- breakpoint.c 2001/06/16 17:03:00
> *************** gdb_breakpoint_query (/* output object,
> *** 3551,3563 ****
> If WATCHPOINTS is zero, process only breakpoints; if WATCHPOINTS
> is nonzero, process only watchpoints. */
>
> static void
> breakpoint_1 (int bnum, int allflag)
> {
> register struct breakpoint *b;
> CORE_ADDR last_addr = (CORE_ADDR) -1;
> ! int found_a_breakpoint = 0;
>
> #ifdef UI_OUT
> if (addressprint)
> ui_out_table_begin (uiout, 6, "BreakpointTable");
> --- 3551,3591 ----
> If WATCHPOINTS is zero, process only breakpoints; if WATCHPOINTS
> is nonzero, process only watchpoints. */
>
> + static int
> + user_settable_breakpoint (const struct breakpoint *b)
> + {
> + return (b->type == bp_breakpoint
> + || b->type == bp_catch_load
> + || b->type == bp_catch_unload
> + || b->type == bp_catch_fork
> + || b->type == bp_catch_vfork
> + || b->type == bp_catch_exec
> + || b->type == bp_catch_catch
> + || b->type == bp_catch_throw
> + || b->type == bp_hardware_breakpoint
> + || b->type == bp_watchpoint
> + || b->type == bp_read_watchpoint
> + || b->type == bp_access_watchpoint
> + || b->type == bp_hardware_watchpoint);
> + }
> +
> static void
> breakpoint_1 (int bnum, int allflag)
> {
> register struct breakpoint *b;
> CORE_ADDR last_addr = (CORE_ADDR) -1;
> ! int nr_printable_breakpoints;
>
> + /* Compute the number of rows in the table. */
> + nr_printable_breakpoints = 0;
> + ALL_BREAKPOINTS (b)
> + if (bnum == -1
> + || bnum == b->number)
> + {
> + if (allflag || user_settable_breakpoint (b))
> + nr_printable_breakpoints++;
> + }
> +
> #ifdef UI_OUT
> if (addressprint)
> ui_out_table_begin (uiout, 6, "BreakpointTable");
> *************** breakpoint_1 (int bnum, int allflag)
> *** 3565,3642 ****
> ui_out_table_begin (uiout, 5, "BreakpointTable");
> #endif /* UI_OUT */
>
> ALL_BREAKPOINTS (b)
> if (bnum == -1
> || bnum == b->number)
> {
> /* We only print out user settable breakpoints unless the
> allflag is set. */
> ! if (!allflag
> ! && b->type != bp_breakpoint
> ! && b->type != bp_catch_load
> ! && b->type != bp_catch_unload
> ! && b->type != bp_catch_fork
> ! && b->type != bp_catch_vfork
> ! && b->type != bp_catch_exec
> ! && b->type != bp_catch_catch
> ! && b->type != bp_catch_throw
> ! && b->type != bp_hardware_breakpoint
> ! && b->type != bp_watchpoint
> ! && b->type != bp_read_watchpoint
> ! && b->type != bp_access_watchpoint
> ! && b->type != bp_hardware_watchpoint)
> ! continue;
> !
> ! if (!found_a_breakpoint++)
> ! {
> ! annotate_breakpoints_headers ();
> ! #ifdef UI_OUT
> ! annotate_field (0);
> ! ui_out_table_header (uiout, 3, ui_left, "Num"); /* 1 */
> ! annotate_field (1);
> ! ui_out_table_header (uiout, 14, ui_left, "Type"); /* 2 */
> ! annotate_field (2);
> ! ui_out_table_header (uiout, 4, ui_left, "Disp"); /* 3 */
> ! annotate_field (3);
> ! ui_out_table_header (uiout, 3, ui_left, "Enb"); /* 4 */
> ! if (addressprint)
> ! {
> ! annotate_field (4);
> ! if (TARGET_ADDR_BIT <= 32)
> ! ui_out_table_header (uiout, 10, ui_left, "Address"); /* 5 */
> ! else
> ! ui_out_table_header (uiout, 18, ui_left, "Address"); /* 5 */
> ! }
> ! annotate_field (5);
> ! ui_out_table_header (uiout, 40, ui_noalign, "What"); /* 6 */
> ! ui_out_table_body (uiout);
> ! #else
> ! annotate_field (0);
> ! printf_filtered ("Num ");
> ! annotate_field (1);
> ! printf_filtered ("Type ");
> ! annotate_field (2);
> ! printf_filtered ("Disp ");
> ! annotate_field (3);
> ! printf_filtered ("Enb ");
> ! if (addressprint)
> ! {
> ! annotate_field (4);
> ! if (TARGET_ADDR_BIT <= 32)
> ! printf_filtered ("Address ");
> ! else
> ! printf_filtered ("Address ");
> ! }
> ! annotate_field (5);
> ! printf_filtered ("What\n");
> ! #endif /* UI_OUT */
> ! annotate_breakpoints_table ();
> ! }
> !
> ! print_one_breakpoint (b, &last_addr);
> }
>
> ! if (!found_a_breakpoint)
> {
> #ifdef UI_OUT
> if (bnum == -1)
> --- 3593,3660 ----
> ui_out_table_begin (uiout, 5, "BreakpointTable");
> #endif /* UI_OUT */
>
> + #ifdef UI_OUT
> + if (nr_printable_breakpoints > 0)
> + {
> + annotate_breakpoints_headers ();
> + annotate_field (0);
> + ui_out_table_header (uiout, 3, ui_left, "Num"); /* 1 */
> + annotate_field (1);
> + ui_out_table_header (uiout, 14, ui_left, "Type"); /* 2 */
> + annotate_field (2);
> + ui_out_table_header (uiout, 4, ui_left, "Disp"); /* 3 */
> + annotate_field (3);
> + ui_out_table_header (uiout, 3, ui_left, "Enb"); /* 4 */
> + if (addressprint)
> + {
> + annotate_field (4);
> + if (TARGET_ADDR_BIT <= 32)
> + ui_out_table_header (uiout, 10, ui_left, "Address"); /* 5 */
> + else
> + ui_out_table_header (uiout, 18, ui_left, "Address"); /* 5 */
> + }
> + annotate_field (5);
> + ui_out_table_header (uiout, 40, ui_noalign, "What"); /* 6 */
> + ui_out_table_body (uiout);
> + annotate_breakpoints_table ();
> + }
> + #else
> + if (nr_printable_breakpoints > 0)
> + {
> + annotate_breakpoints_headers ();
> + annotate_field (0);
> + printf_filtered ("Num ");
> + annotate_field (1);
> + printf_filtered ("Type ");
> + annotate_field (2);
> + printf_filtered ("Disp ");
> + annotate_field (3);
> + printf_filtered ("Enb ");
> + if (addressprint)
> + {
> + annotate_field (4);
> + if (TARGET_ADDR_BIT <= 32)
> + printf_filtered ("Address ");
> + else
> + printf_filtered ("Address ");
> + }
> + annotate_field (5);
> + printf_filtered ("What\n");
> + annotate_breakpoints_table ();
> + }
> + #endif /* UI_OUT */
> +
> ALL_BREAKPOINTS (b)
> if (bnum == -1
> || bnum == b->number)
> {
> /* We only print out user settable breakpoints unless the
> allflag is set. */
> ! if (allflag || user_settable_breakpoint (b))
> ! print_one_breakpoint (b, &last_addr);
> }
>
> ! if (nr_printable_breakpoints == 0)
> {
> #ifdef UI_OUT
> if (bnum == -1)