aboutsummaryrefslogtreecommitdiff
path: root/gdb/breakpoint.c
diff options
context:
space:
mode:
authorStan Shebs <shebs@codesourcery.com>2010-01-06 20:31:28 +0000
committerStan Shebs <shebs@codesourcery.com>2010-01-06 20:31:28 +0000
commitd5551862dfa8c22746642b9a7f66b076557a0325 (patch)
tree7af2dbf86156804de50363834b2290d3a999b7ec /gdb/breakpoint.c
parent30fd33bb933183e837b6709e189f1122333b95e2 (diff)
downloadgdb-d5551862dfa8c22746642b9a7f66b076557a0325.zip
gdb-d5551862dfa8c22746642b9a7f66b076557a0325.tar.gz
gdb-d5551862dfa8c22746642b9a7f66b076557a0325.tar.bz2
Support disconnected tracing.
* infcmd.c (detach_command): Ask whether to stop tracing. * cli/cli-cmds.c (quit_command): Ditto. * breakpoint.h (struct breakpoint): New field number_on_target. * breakpoint.c (create_tracepoint_from_upload): New function. (get_tracepoint_by_number_on_target): New function. * remote.c (struct remote): New field disconnected_tracing. (remote_disconnected_tracing_feature): New function. (remote_protocol_features): Add DisconnectedTracing. (struct uploaded_tp): New struct. (uploaded_tps): New global. (get_uploaded_tp): New function. (find_matching_tracepoint): New function. (remote_get_tracing_state): New function. (remote_start_remote): Call it. * tracepoint.c (disconnected_tracing): New global. (trace_start_command): Initialize number_on_target. (stop_tracing): New function, split out from... (trace_stop_command): Call stop_tracing. (get_trace_status): New function, split out from... (trace_status_command): Call get_trace_status, add info on disconnection behavior. (disconnect_or_stop_tracing): New function. (finish_tfind_command): Translate from number on target. (trace_find_tracepoint_command): Translate to number on target. (send_disconnected_tracing_value): New function. (set_disconnected_tracing): New function. (_initialize_tracepoint): Add disconnected-tracing variable. * NEWS: Mention disconnected tracing. * gdb.texinfo (Starting and Stopping Trace Experiments): Document disconnected tracing. (Tracepoint Packets): Document new protocol.
Diffstat (limited to 'gdb/breakpoint.c')
-rw-r--r--gdb/breakpoint.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 813080a..0dc8474 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -9847,6 +9847,27 @@ ftrace_command (char *arg, int from_tty)
set_tracepoint_count (breakpoint_count);
}
+extern void create_tracepoint_from_upload (int num, enum bptype type,
+ ULONGEST addr);
+
+void
+create_tracepoint_from_upload (int num, enum bptype type, ULONGEST addr)
+{
+ char buf[100];
+ struct breakpoint *tp;
+
+ sprintf (buf, "*0x%s", paddress (get_current_arch (), addr));
+ if (type == bp_fast_tracepoint)
+ ftrace_command (buf, 0);
+ else
+ trace_command (buf, 0);
+
+ /* Record that this tracepoint is numbered differently on host and
+ target. */
+ tp = get_tracepoint (tracepoint_count);
+ tp->number_on_target = num;
+}
+
/* Print information on tracepoint number TPNUM_EXP, or all if
omitted. */
@@ -9997,6 +10018,22 @@ get_tracepoint (int num)
return NULL;
}
+/* Find the tracepoint with the given target-side number (which may be
+ different from the tracepoint number after disconnecting and
+ reconnecting). */
+
+struct breakpoint *
+get_tracepoint_by_number_on_target (int num)
+{
+ struct breakpoint *t;
+
+ ALL_TRACEPOINTS (t)
+ if (t->number_on_target == num)
+ return t;
+
+ return NULL;
+}
+
/* Utility: parse a tracepoint number and look it up in the list.
If MULTI_P is true, there might be a range of tracepoints in ARG.
if OPTIONAL_P is true, then if the argument is missing, the most