This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[patch 7/8] Agent capability for static tracepoint
- From: Yao Qi <yao at codesourcery dot com>
- To: <gdb-patches at sourceware dot org>
- Date: Mon, 23 Jan 2012 22:07:16 +0800
- Subject: [patch 7/8] Agent capability for static tracepoint
- References: <4F1D55D7.7030506@codesourcery.com>
Current libinproctrace.so agent is able to do operations on static
tracepoint, which can be treated as one capability. This patch is to
teach gdbserver to check agent's capability when performing operations
related to static tracepoint.
--
Yao (éå)
2012-01-23 Yao Qi <yao@codesourcery.com>
* tracepoint.c (gdb_agent_capability): New global.
(clear_installed_tracepoints): Check whether agent has capability
for static tracepoint.
(install_tracepoint): Likewise.
(cmd_qtstart): Likewise.
(handle_tracepoint_query): Likewise.
---
gdb/gdbserver/tracepoint.c | 68 +++++++++++++++++++++++++++++--------------
1 files changed, 46 insertions(+), 22 deletions(-)
diff --git a/gdb/gdbserver/tracepoint.c b/gdb/gdbserver/tracepoint.c
index 7f462bc..9527d74 100644
--- a/gdb/gdbserver/tracepoint.c
+++ b/gdb/gdbserver/tracepoint.c
@@ -2314,7 +2314,11 @@ clear_installed_tracepoints (void)
;
else
{
- unprobe_marker_at (tpoint->address);
+ if (agent_check_capability (AGENT_CAPA_STATIC_TRACE) == 0)
+ warning ("Agent does not have capability"
+ "for static tracepoint.");
+ else
+ unprobe_marker_at (tpoint->address);
prev_stpoint = tpoint;
}
break;
@@ -2989,8 +2993,8 @@ install_tracepoint (struct tracepoint *tpoint, char *own_buf)
}
else
{
- if (tp)
- tpoint->handle = (void *) -1;
+ if (agent_check_capability (AGENT_CAPA_STATIC_TRACE) == 0)
+ warning ("Agent does not have capability for static tracepoint.");
else
{
if (probe_marker_at (tpoint->address, own_buf) == 0)
@@ -3094,13 +3098,19 @@ cmd_qtstart (char *packet)
}
else
{
- if (probe_marker_at (tpoint->address, packet) == 0)
+ if (agent_check_capability (AGENT_CAPA_STATIC_TRACE) == 0)
+ warning ("Agent does not have capability"
+ "for static tracepoint.");
+ else
{
- tpoint->handle = (void *) -1;
-
- /* So that we can handle multiple static tracepoints
- at the same address easily. */
- prev_stpoint = tpoint;
+ if (probe_marker_at (tpoint->address, packet) == 0)
+ {
+ tpoint->handle = (void *) -1;
+
+ /* So that we can handle multiple static tracepoints
+ at the same address easily. */
+ prev_stpoint = tpoint;
+ }
}
}
}
@@ -3968,20 +3978,32 @@ handle_tracepoint_query (char *packet)
cmd_qtbuffer (packet);
return 1;
}
- else if (strcmp ("qTfSTM", packet) == 0)
- {
- cmd_qtfstm (packet);
- return 1;
- }
- else if (strcmp ("qTsSTM", packet) == 0)
+ else if (strcmp ("qTfSTM", packet) == 0 || strcmp ("qTsSTM", packet) == 0
+ || strncmp ("qTSTMat:", packet, strlen ("qTSTMat:")) == 0)
{
- cmd_qtsstm (packet);
- return 1;
- }
- else if (strncmp ("qTSTMat:", packet, strlen ("qTSTMat:")) == 0)
- {
- cmd_qtstmat (packet);
- return 1;
+ if (agent_check_capability (AGENT_CAPA_STATIC_TRACE) == 0)
+ {
+ warning ("Agent does not have capability for static tracepoint.");
+ return 0;
+ }
+ else
+ {
+ if (strcmp ("qTfSTM", packet) == 0)
+ {
+ cmd_qtfstm (packet);
+ return 1;
+ }
+ else if (strcmp ("qTsSTM", packet) == 0)
+ {
+ cmd_qtsstm (packet);
+ return 1;
+ }
+ else if (strncmp ("qTSTMat:", packet, strlen ("qTSTMat:")) == 0)
+ {
+ cmd_qtstmat (packet);
+ return 1;
+ }
+ }
}
else if (strcmp ("qTMinFTPILen", packet) == 0)
{
@@ -7986,6 +8008,8 @@ gdb_ust_thread (void *arg)
#include <signal.h>
+IP_AGENT_EXPORT int gdb_agent_capability = AGENT_CAPA_STATIC_TRACE;
+
static void
gdb_ust_init (void)
{
--
1.7.0.4