From: Yao Qi <yao@codesourcery.com>
To: <gdb-patches@sourceware.org>
Subject: [PATCH] Fix PR14617: New MI notification on tracepoint modified.
Date: Thu, 18 Oct 2012 10:36:00 -0000 [thread overview]
Message-ID: <1350556586-12800-1-git-send-email-yao@codesourcery.com> (raw)
Hi,
As PR gdb/14617 described, when the passcount of a tracepoint is
modified, GDB doesn't emit any notification. This patch adds a
new notification '=tracepoint-modified' for the changes to
tracepoint-specific attributes. The reason I don't use
'=breakpoint-modified' notification is that IMO, it is about
changes to general breakpoints (breakpoint, tracepoint, catchpoint,
etc), so I don't want to put tracepoint-specific stuff into
it.
Regression tested on x86_64-linux with both native and gdbserver,
OK to apply?
gdb/doc:
* gdb.texinfo (GDB/MI Async Records): Document new MI notificaiton
"=tracepoint-modified".
* observer.texi (GDB Observers): Change the parameter of observer
"tracepoint-modified".
gdb:
Fix PR gdb/14617.
* NEWS: Mention new MI notification "=tracepoint-modified".
* breakpoint.c (trace_pass_set_count): Update caller of
observer_notify_tracepoint_modified.
* mi/mi-cmd-break.c (mi_cmd_break_passcount): Likewise.
* mi/mi-interp.c: Declare 'mi_tracepoint_modified'.
(mi_interpreter_init): Attach 'mi_tracepoint_modified'
to 'tracepoint-modified' observer.
(mi_breakpoint_modified): New.
* observer.sh (struct objfile;): Declare 'struct tracepoint'.
gdb/testsuite:
Fix PR gdb/14617.
* gdb.mi/mi-breakpoint-changed.exp (test_insert_delete_modify):
Remove setup_kfail, and update test.
---
gdb/NEWS | 2 ++
gdb/breakpoint.c | 2 +-
gdb/doc/gdb.texinfo | 5 +++++
gdb/doc/observer.texi | 6 +++---
gdb/mi/mi-cmd-break.c | 2 +-
gdb/mi/mi-interp.c | 19 +++++++++++++++++++
gdb/observer.sh | 1 +
gdb/testsuite/gdb.mi/mi-breakpoint-changed.exp | 3 +--
8 files changed, 33 insertions(+), 7 deletions(-)
diff --git a/gdb/NEWS b/gdb/NEWS
index 0d13c19..485c21b 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -66,6 +66,8 @@ py [command]
"=memory-changed".
** Download of tracepoints are now notified using new async record
"=tracepoint-downloaded".
+ ** Passcount of tracepoint changes are now notified using new async record
+ "=tracepoint-modified".
*** Changes in GDB 7.5
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 3d69d41..e233cd0 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -15246,7 +15246,7 @@ static void
trace_pass_set_count (struct tracepoint *tp, int count, int from_tty)
{
tp->pass_count = count;
- observer_notify_tracepoint_modified (tp->base.number);
+ observer_notify_tracepoint_modified (tp);
if (from_tty)
printf_filtered (_("Setting tracepoint %d's passcount to %d\n"),
tp->base.number, count);
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index dbdf39b..64cda47 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -27685,6 +27685,11 @@ breakpoint commands; @xref{GDB/MI Breakpoint Commands}. The
Note that if a breakpoint is emitted in the result record of a
command, then it will not also be emitted in an async record.
+@item =tracepoint-modified,bkpt=@{number=@var{id},passcount=@var{count}@}
+Reports that a tracepoint-specific attribute was modified. The @var{id}
+is the ordinal number of tracepoint and @var{count} is the passcount
+of the tracepoint.
+
@item =tracepoint-downloaded,id="@var{number}",address="@var{addr}"
Reports that a tracepoint was downloaded to target. The @var{number}
is the ordinal number of the tracepoint. The @var{addr} is the
diff --git a/gdb/doc/observer.texi b/gdb/doc/observer.texi
index 9fd92fb..e2033a6 100644
--- a/gdb/doc/observer.texi
+++ b/gdb/doc/observer.texi
@@ -189,9 +189,9 @@ A tracepoint has been destroyed. The argument @var{tpnum} is the
number of the newly-destroyed tracepoint.
@end deftypefun
-@deftypefun void tracepoint_modified (int @var{tpnum})
-A tracepoint has been modified in some way. The argument @var{tpnum}
-is the number of the modified tracepoint.
+@deftypefun void tracepoint_modified (struct tracepoint *@var{t})
+A tracepoint has been modified in some way. The argument @var{t}
+is the pointer to the modified tracepoint.
@end deftypefun
@deftypefun void tracepoint_downloaded (struct bp_location *@var{loc})
diff --git a/gdb/mi/mi-cmd-break.c b/gdb/mi/mi-cmd-break.c
index 2fe84dc..e3f709e 100644
--- a/gdb/mi/mi-cmd-break.c
+++ b/gdb/mi/mi-cmd-break.c
@@ -200,7 +200,7 @@ mi_cmd_break_passcount (char *command, char **argv, int argc)
if (t)
{
t->pass_count = p;
- observer_notify_tracepoint_modified (n);
+ observer_notify_tracepoint_modified (t);
}
else
{
diff --git a/gdb/mi/mi-interp.c b/gdb/mi/mi-interp.c
index d83d493..ec14f03 100644
--- a/gdb/mi/mi-interp.c
+++ b/gdb/mi/mi-interp.c
@@ -76,6 +76,7 @@ static void mi_tsv_deleted (const char *name);
static void mi_breakpoint_created (struct breakpoint *b);
static void mi_breakpoint_deleted (struct breakpoint *b);
static void mi_breakpoint_modified (struct breakpoint *b);
+static void mi_tracepoint_modified (struct tracepoint *t);
static void mi_tracepoint_downloaded (struct bp_location *loc);
static void mi_command_param_changed (const char *param, const char *value);
static void mi_memory_changed (struct inferior *inf, CORE_ADDR memaddr,
@@ -141,6 +142,7 @@ mi_interpreter_init (struct interp *interp, int top_level)
observer_attach_breakpoint_created (mi_breakpoint_created);
observer_attach_breakpoint_deleted (mi_breakpoint_deleted);
observer_attach_breakpoint_modified (mi_breakpoint_modified);
+ observer_attach_tracepoint_modified (mi_tracepoint_modified);
observer_attach_tracepoint_downloaded (mi_tracepoint_downloaded);
observer_attach_command_param_changed (mi_command_param_changed);
observer_attach_memory_changed (mi_memory_changed);
@@ -683,6 +685,23 @@ mi_breakpoint_modified (struct breakpoint *b)
gdb_flush (mi->event_channel);
}
+/* Emit notification about modified tracepoint. */
+
+static void
+mi_tracepoint_modified (struct tracepoint *t)
+{
+ struct mi_interp *mi = top_level_interpreter_data ();
+
+ target_terminal_ours ();
+
+ fprintf_unfiltered (mi->event_channel,
+ "tracepoint-modified,bkpt={number=\"%d\""
+ ",passcount=\"%d\"}\n",
+ t->base.number, t->pass_count);
+
+ gdb_flush (mi->event_channel);
+}
+
/* Emit notification about downloaded tracepoint. MI frontends may
check whether tracepoints are downloaded or not and display
downloaded ones and un-downloaded ones differently. */
diff --git a/gdb/observer.sh b/gdb/observer.sh
index 3df6578..00e3e90 100755
--- a/gdb/observer.sh
+++ b/gdb/observer.sh
@@ -65,6 +65,7 @@ struct objfile;
struct thread_info;
struct inferior;
struct bp_location;
+struct tracepoint;
EOF
;;
esac
diff --git a/gdb/testsuite/gdb.mi/mi-breakpoint-changed.exp b/gdb/testsuite/gdb.mi/mi-breakpoint-changed.exp
index 773f588..2a5ab1a 100644
--- a/gdb/testsuite/gdb.mi/mi-breakpoint-changed.exp
+++ b/gdb/testsuite/gdb.mi/mi-breakpoint-changed.exp
@@ -120,10 +120,9 @@ proc test_insert_delete_modify { } {
{.*=breakpoint-modified,bkpt=\{number="5",.*,ignore=\"1\".*\}.*\n\^done} \
$test
# 5. when modifying pass count.
- setup_kfail gdb/14617 *-*-*
set test "passcount 1 4"
mi_gdb_test $test \
- {.*=breakpoint-modified,bkpt=\{number="4",.*\}.*\n\^done} \
+ {.*=tracepoint-modified,bkpt=\{number="4",passcount="1".*\}.*\n\^done} \
$test
# Delete some breakpoints and verify that '=breakpoint-deleted
--
1.7.7.6
next reply other threads:[~2012-10-18 10:36 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-18 10:36 Yao Qi [this message]
2012-10-18 17:33 ` Eli Zaretskii
2012-10-30 7:03 ` Yao Qi
2012-10-30 17:23 ` Eli Zaretskii
2012-11-01 20:27 ` Tom Tromey
2012-11-02 6:38 ` Yao Qi
2012-11-02 14:42 ` Tom Tromey
2012-11-02 15:17 ` Pedro Alves
2012-11-02 15:22 ` Yao Qi
2012-11-02 15:25 ` Pedro Alves
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=1350556586-12800-1-git-send-email-yao@codesourcery.com \
--to=yao@codesourcery.com \
--cc=gdb-patches@sourceware.org \
/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