From: Aleksandar Ristovski <aristovski@qnx.com>
To: Vladimir Prus <vladimir@codesourcery.com>
Cc: gdb-patches@sources.redhat.com, nickrob@snap.net.nz
Subject: Re: [patch] fix for PR2424
Date: Mon, 10 Mar 2008 18:50:00 -0000 [thread overview]
Message-ID: <47D582CF.4060003@qnx.com> (raw)
In-Reply-To: <200803102036.05829.vladimir@codesourcery.com>
[-- Attachment #1: Type: text/plain, Size: 2219 bytes --]
Vladimir Prus wrote:
> On Monday 10 March 2008 20:18:06 Aleksandar Ristovski wrote:
>> Vladimir Prus wrote:
>> The proposed patch (attached) will produce the following outputs:
>>
>> CLI:
>> (gdb) tbreak main
>> Temporary breakpoint 1 at 0x80483a0: file ./main.c, line 15.
>> (gdb) r
>> Starting program: /space/src/testcases/sigsegv/main
>>
>> Temporary breakpoint 1, main () at ./main.c:15
>> 15 foo (p);
>>
>> MI:
>> (gdb)
>> -break-insert -t main
>> ^done,bkpt={number="1",type="breakpoint",disp="del",enabled="y",addr="0x080483a0",func="main",file="./main.c",fullname="/space/src/testcases/sigsegv/main.c",line="15",times="0"}
>> (gdb)
>> -exec-run
>> ^running
>> (gdb)
>> *stopped,reason="breakpoint-hit",disp="del",bkptno="1",thread-id="0",frame={addr="0x080483a0",func="main",args=[],file="./main.c",fullname="/space/src/testcases/sigsegv/main.c",line="15"}
>>
>
> For consistency, it's better to use same printing of 'disp' as done
> in print_one_breakpoint_location:
>
> ui_out_field_string (uiout, "disp", bpdisps[(int) b->disposition]);
>
> bpdisps is actually a table local to print_one_breakpoint_location,
> but there's no reason why it cannot be made a global table.
>
> - Volodya
>
New diff for code (testsuite remains the same as in previous email). Static
array bpstats moved to new function bpstat_text and function used.
Note: I believe docs need also be changed since in the examples for mi protocol
there are no 'disp' fields. But I am not sure where do I need to make those changes.
2008-03-10 Aleksandar Ristovski <aristovski@qnx.com>
* 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".
[-- Attachment #2: PR2424.diff --]
[-- Type: text/plain, Size: 4247 bytes --]
Index: gdb/infrun.c
===================================================================
RCS file: /cvs/src/src/gdb/infrun.c,v
retrieving revision 1.266
diff -u -p -r1.266 infrun.c
--- gdb/infrun.c 29 Jan 2008 22:47:19 -0000 1.266
+++ gdb/infrun.c 10 Mar 2008 18:40:15 -0000
@@ -3151,11 +3151,6 @@ Further execution is probably impossible
}
}
- /* 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. */
@@ -3294,6 +3289,9 @@ Further execution is probably impossible
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
Index: gdb/breakpoint.c
===================================================================
RCS file: /cvs/src/src/gdb/breakpoint.c,v
retrieving revision 1.304
diff -u -p -r1.304 breakpoint.c
--- gdb/breakpoint.c 27 Feb 2008 20:27:49 -0000 1.304
+++ gdb/breakpoint.c 10 Mar 2008 18:40:17 -0000
@@ -210,8 +210,16 @@ unlink_locations_from_global_list (struc
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;
@@ -2131,6 +2139,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
@@ -2144,15 +2153,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;
@@ -3362,8 +3378,6 @@ print_one_breakpoint_location (struct br
{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);
@@ -3420,7 +3434,7 @@ print_one_breakpoint_location (struct br
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 */
@@ -4792,7 +4806,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:
next prev parent reply other threads:[~2008-03-10 18:50 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-03-05 17:36 Aleksandar Ristovski
2008-03-08 11:31 ` Nick Roberts
2008-03-08 18:36 ` Vladimir Prus
2008-03-09 0:12 ` Aleksandar Ristovski
2008-03-09 3:32 ` Nick Roberts
2008-03-09 4:55 ` Aleksandar Ristovski
2008-03-10 8:11 ` Vladimir Prus
2008-03-10 14:29 ` Aleksandar Ristovski
2008-03-10 14:45 ` Vladimir Prus
2008-03-10 17:18 ` Aleksandar Ristovski
2008-03-10 17:36 ` Vladimir Prus
2008-03-10 18:50 ` Aleksandar Ristovski [this message]
2008-04-01 19:41 Aleksandar Ristovski
2008-04-14 15:16 Aleksandar Ristovski
2008-04-14 18:06 ` Daniel Jacobowitz
2008-04-15 15:07 Aleksandar Ristovski
2008-04-15 15:25 ` Daniel Jacobowitz
2008-04-16 13:17 ` Vladimir Prus
2008-04-23 11:16 ` Vladimir Prus
2008-04-15 15:31 Aleksandar Ristovski
2008-04-16 18:28 Aleksandar Ristovski
2008-04-23 17:48 Aleksandar Ristovski
2008-04-23 17:49 ` Vladimir Prus
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=47D582CF.4060003@qnx.com \
--to=aristovski@qnx.com \
--cc=gdb-patches@sources.redhat.com \
--cc=nickrob@snap.net.nz \
--cc=vladimir@codesourcery.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox