Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Yao Qi <yao@codesourcery.com>
To: <gdb-patches@sourceware.org>
Subject: [PATCH 5/5] MI notification on trace stop: triggered by remote
Date: Sat, 16 Feb 2013 04:02:00 -0000	[thread overview]
Message-ID: <1360987214-16592-6-git-send-email-yao@codesourcery.com> (raw)
In-Reply-To: <1360987214-16592-1-git-send-email-yao@codesourcery.com>

As a result of previous patch, GDB has a Trace rsp notification.
In this patch, GDB starts to use Trace notification, and emits MI
notification '=trace-stopped' to front-end.  A test case is
added to see if MI trace-stopped notification is emitted when trace
buffer is full.

gdb:

	* remote-notif-trace.c: Include "observer.h".
	(remote_notif_trace_status_parse): Call
	observer_notify_trace_changed.

gdb/testsuite:

	* gdb.trace/mi-trace-changed.exp (test_trace_buffer_full): New.
---
 gdb/remote-notif-trace.c                     |   11 ++++
 gdb/testsuite/gdb.trace/mi-trace-changed.exp |   75 ++++++++++++++++++++++++++
 2 files changed, 86 insertions(+), 0 deletions(-)

diff --git a/gdb/remote-notif-trace.c b/gdb/remote-notif-trace.c
index a0cfa26..8c1e8a8 100644
--- a/gdb/remote-notif-trace.c
+++ b/gdb/remote-notif-trace.c
@@ -22,6 +22,7 @@
 #include "remote.h"
 #include "tracepoint.h"
 #include "remote-notif.h"
+#include "observer.h"
 
 static void
 remote_notif_trace_status_parse (struct notif_client *self, char *buf,
@@ -31,6 +32,16 @@ remote_notif_trace_status_parse (struct notif_client *self, char *buf,
 
   gdb_assert (buf[0] == 'T');
   parse_trace_status (buf + 1, ts);
+
+  /* When the tracing is stopped, there is no changes anymore in
+     the trace, so the remote stub can't send another notification.
+     We don't have to worry about notifying 'trace_changed' observer
+     with argument 1 twice.
+     The remote stub can't request tracing start and the remote stub
+     may send multiple trace notifications on various status changes,
+     we don't notify 'trace_changed' observer with argument 0.  */
+  if (!ts->running)
+    observer_notify_trace_changed (0);
 }
 
 static void
diff --git a/gdb/testsuite/gdb.trace/mi-trace-changed.exp b/gdb/testsuite/gdb.trace/mi-trace-changed.exp
index fbd6fe7..9d6cfff 100644
--- a/gdb/testsuite/gdb.trace/mi-trace-changed.exp
+++ b/gdb/testsuite/gdb.trace/mi-trace-changed.exp
@@ -71,4 +71,79 @@ proc test_normal_tstart_stop { } {
 
 test_normal_tstart_stop
 
+# Verify that MI notification '=trace-stopped' is emitted when trace
+# buffer is full.
+
+proc test_trace_buffer_full { } {
+    with_test_prefix "tracebuffer full" {
+	global mi_gdb_prompt
+
+	if [mi_gdb_start] {
+	    return
+	}
+	mi_run_to_main
+
+	mi_gdb_test "-break-insert -a func2" {.*\^done,bkpt=.*} \
+	    "insert tracepoint on func2"
+
+	send_gdb "actions\n"
+	gdb_expect {
+	    -re "End with" {
+	    }
+	}
+
+	send_gdb "collect buf\nend\n"
+	set test "define actions"
+	gdb_expect {
+	    -re ".*${mi_gdb_prompt}$" {
+		pass $test
+	    }
+	    timeout {
+		fail "$test (timeout)"
+	    }
+	}
+
+	# No =trace-started notification.
+	mi_gdb_test "-trace-start" "-trace-start\r\n=breakpoint-modified\[^\n\]+\r\n\\^done" \
+	    "start trace without notification"
+	mi_gdb_test "-break-insert end" {.*\^done,bkpt=.*} \
+	    "insert breakpoint on end"
+
+	mi_send_resuming_command "exec-continue" \
+	    "continuing execution to end"
+
+	set test "trace-stopped triggered by bufferfull"
+	gdb_expect {
+	    # We don't set stop-notes.
+	    -re "=trace-stopped\\\\n" {
+		pass "$test"
+	    }
+	    timeout {
+		fail "$test (timeout)"
+	    }
+	}
+
+	global async
+	# In sync mode, eat all the output.  Don't have to do so in
+	# async mode.
+	if {!$async} {
+	    gdb_expect {
+		-re ".*${mi_gdb_prompt}$" {
+		}
+	    }
+	}
+	# GDB has got the rsp notifcation from remote stub that trace
+	# is stopped.
+	mi_gdb_test "tstop" ".*Trace is not running.*" \
+	    "tstop on stopped"
+
+	mi_gdb_test "-trace-status" ".*\\^done.*stop-reason=\"overflow\".*" \
+	    "trace-status"
+
+	mi_gdb_exit
+    }
+}
+
+test_trace_buffer_full
+
 return 0
-- 
1.7.7.6


  parent reply	other threads:[~2013-02-16  4:02 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-22  7:05 [PATCH 0/5] MI notification on trace started/stopped (V3) Yao Qi
2013-01-22  7:05 ` [PATCH 2/5] Query supported notifications by qSupported Yao Qi
2013-01-22  8:09   ` Eli Zaretskii
2013-01-22  8:41     ` Yao Qi
2013-01-22 10:26       ` Eli Zaretskii
2013-01-22  7:05 ` [PATCH 1/5] Add annex in a async remote notification Yao Qi
2013-01-22  8:06   ` Eli Zaretskii
2013-02-16  3:40     ` Yao Qi
2013-02-16  9:27       ` Eli Zaretskii
2013-03-29 17:17         ` Yao Qi
2013-03-31  0:39           ` Eli Zaretskii
2013-01-22  7:05 ` [PATCH 3/5] async remote notification 'Trace' Yao Qi
2013-01-22  8:06   ` Eli Zaretskii
2013-01-22  7:06 ` [PATCH 5/5] MI notification on trace stop: triggered by remote Yao Qi
2013-01-22  7:06 ` [PATCH 4/5] MI notification on trace started/stopped:basic Yao Qi
2013-01-22  8:11   ` Eli Zaretskii
2013-01-30  4:00 ` [ping]: [PATCH 0/5] MI notification on trace started/stopped (V3) Yao Qi
2013-02-07 12:41   ` [ping 2]: " Yao Qi
2013-02-16  4:01 ` [PATCH 0/5] MI notification on trace started/stopped (V3.1) Yao Qi
2013-02-16  4:01   ` [PATCH 1/5] Add annex in a async remote notification Yao Qi
2013-02-16  9:27     ` Eli Zaretskii
2013-02-16  4:02   ` Yao Qi [this message]
2013-02-16  4:02   ` [PATCH 4/5] MI notification on trace started/stopped:basic Yao Qi
2013-02-16  9:36     ` Eli Zaretskii
2013-02-16  4:02   ` [PATCH 3/5] async remote notification 'Trace' Yao Qi
2013-02-16  9:34     ` Eli Zaretskii
2013-02-16  4:02   ` [PATCH 2/5] Query supported notifications by qSupported Yao Qi
2013-02-16  9:33     ` Eli Zaretskii
2013-03-11  9:26       ` Yao Qi
2013-03-11 16:59         ` Eli Zaretskii
2013-02-25  3:14   ` ping: [PATCH 0/5] MI notification on trace started/stopped (V3.1) Yao Qi
2013-03-04  2:34   ` ping^2 : " Yao Qi
2013-04-02  2:33 ` [PATCH v4 0/5] MI notification on trace started/stopped Yao Qi
2013-04-02  3:15   ` [PATCH 2/5] Query supported notifications by qSupported Yao Qi
2013-04-02  3:58   ` [PATCH 3/5] async remote notification 'Trace' Yao Qi
2013-04-02 12:46   ` [PATCH 5/5] MI notification on trace stop: triggered by remote Yao Qi
2013-04-02 13:07   ` [PATCH 4/5] MI notification on trace started/stopped:basic Yao Qi
2013-04-02 13:30   ` [PATCH 1/5] Add annex in a async remote notification Yao Qi
2013-04-10 15:46   ` [PATCH v4 0/5] MI notification on trace started/stopped Yao Qi
2013-04-17 14:37     ` [ping 2]: " Yao Qi
2013-04-18 15:16       ` Pedro Alves
2013-04-18 16:14         ` Yao Qi
2013-06-04  9:20         ` Yao Qi

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=1360987214-16592-6-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