From 2cec12e55bda9d647ec2de43e45638d1bd4e102e Mon Sep 17 00:00:00 2001 From: Aleksandar Ristovski Date: Tue, 15 Apr 2008 14:32:12 +0000 Subject: PR gdb/2424 * infrun.c (normal_stop) Move breakpoint_auto_delete further down to allow printing to 'see' real reason of stop. This fixes PR 2424. * breakpoint.c (bpdisp_texst): New function. The function takes over the role of bpstats static array in print_one_breakpoint_location. (print_it_typical): Print "Temporary breakpoint" instead of just "Breakpoint" when breakpoint is, well, temporary. For mi-like protocols, print disp field. (print_one_breakpoint_location): Removed bpdisps static definition. Call new bpstat_text function to get value for 'disp' field. (mention): Print "Temporary breakpoint" instead of just "Breakpoint". --- gdb/ChangeLog | 14 ++++++++++++++ gdb/breakpoint.c | 34 ++++++++++++++++++++++++++-------- gdb/infrun.c | 8 +++----- 3 files changed, 43 insertions(+), 13 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 983efe8..a2946b1 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,17 @@ +2008-04-15 Aleksandar Ristovski + + PR gdb/2424 + * infrun.c (normal_stop) Move breakpoint_auto_delete further down + to allow printing to 'see' real reason of stop. This fixes PR 2424. + * breakpoint.c (bpdisp_texst): New function. The function takes over + the role of bpstats static array in print_one_breakpoint_location. + (print_it_typical): Print "Temporary breakpoint" instead + of just "Breakpoint" when breakpoint is, well, temporary. For mi-like + protocols, print disp field. + (print_one_breakpoint_location): Removed bpdisps static definition. + Call new bpstat_text function to get value for 'disp' field. + (mention): Print "Temporary breakpoint" instead of just "Breakpoint". + 2008-04-15 Daniel Jacobowitz * gnulib/Makefile.am, gnulib/m4/gnulib-cache.m4, diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 6830efe..ebd21d4 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -211,8 +211,16 @@ unlink_locations_from_global_list (struct breakpoint *bpt); static int is_hardware_watchpoint (struct breakpoint *bpt); -/* Prototypes for exported functions. */ +static const char * +bpdisp_text (enum bpdisp disp) +{ + /* NOTE: the following values are a part of MI protocol and represent + values of 'disp' field returned when inferior stops at a breakpoint. */ + static char *bpdisps[] = {"del", "dstp", "dis", "keep"}; + return bpdisps[(int) disp]; +} +/* Prototypes for exported functions. */ /* If FALSE, gdb will not use hardware support for watchpoints, even if such is available. */ static int can_use_hw_watchpoints; @@ -2181,6 +2189,7 @@ print_it_typical (bpstat bs) struct breakpoint *b; const struct bp_location *bl; struct ui_stream *stb; + int bp_temp = 0; stb = ui_out_stream_new (uiout); old_chain = make_cleanup_ui_out_stream_delete (stb); /* bs->breakpoint_at can be NULL if it was a momentary breakpoint @@ -2194,15 +2203,22 @@ print_it_typical (bpstat bs) { case bp_breakpoint: case bp_hardware_breakpoint: + bp_temp = bs->breakpoint_at->owner->disposition == disp_del; if (bl->address != bl->requested_address) breakpoint_adjustment_warning (bl->requested_address, bl->address, b->number, 1); annotate_breakpoint (b->number); - ui_out_text (uiout, "\nBreakpoint "); + if (bp_temp) + ui_out_text (uiout, "\nTemporary breakpoint "); + else + ui_out_text (uiout, "\nBreakpoint "); if (ui_out_is_mi_like_p (uiout)) - ui_out_field_string (uiout, "reason", - async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT)); + { + ui_out_field_string (uiout, "reason", + async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT)); + ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition)); + } ui_out_field_int (uiout, "bkptno", b->number); ui_out_text (uiout, ", "); return PRINT_SRC_AND_LOC; @@ -3412,8 +3428,6 @@ print_one_breakpoint_location (struct breakpoint *b, {bp_catch_exec, "catch exec"} }; - static char *bpdisps[] = - {"del", "dstp", "dis", "keep"}; static char bpenables[] = "nynny"; char wrap_indent[80]; struct ui_stream *stb = ui_out_stream_new (uiout); @@ -3470,7 +3484,7 @@ print_one_breakpoint_location (struct breakpoint *b, if (part_of_multiple) ui_out_field_skip (uiout, "disp"); else - ui_out_field_string (uiout, "disp", bpdisps[(int) b->disposition]); + ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition)); /* 4 */ @@ -4842,7 +4856,11 @@ mention (struct breakpoint *b) say_where = 0; break; } - printf_filtered (_("Breakpoint %d"), b->number); + if (b->disposition == disp_del) + printf_filtered (_("Temporary breakpoint")); + else + printf_filtered (_("Breakpoint")); + printf_filtered (_(" %d"), b->number); say_where = 1; break; case bp_hardware_breakpoint: diff --git a/gdb/infrun.c b/gdb/infrun.c index 6388d93..df042a1 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -3132,11 +3132,6 @@ Further execution is probably impossible.\n")); } } - /* Delete the breakpoint we stopped at, if it wants to be deleted. - Delete any breakpoint that is to be deleted at the next stop. */ - - breakpoint_auto_delete (stop_bpstat); - /* If an auto-display called a function and that got a signal, delete that auto-display to avoid an infinite recursion. */ @@ -3275,6 +3270,9 @@ Further execution is probably impossible.\n")); done: annotate_stopped (); observer_notify_normal_stop (stop_bpstat); + /* Delete the breakpoint we stopped at, if it wants to be deleted. + Delete any breakpoint that is to be deleted at the next stop. */ + breakpoint_auto_delete (stop_bpstat); } static int -- cgit v1.1