2012-01-23 Yao Qi * 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 +IP_AGENT_EXPORT int gdb_agent_capability = AGENT_CAPA_STATIC_TRACE; + static void gdb_ust_init (void) { -- 1.7.0.4