diff options
author | Stan Shebs <shebs@codesourcery.com> | 2010-01-06 20:31:28 +0000 |
---|---|---|
committer | Stan Shebs <shebs@codesourcery.com> | 2010-01-06 20:31:28 +0000 |
commit | d5551862dfa8c22746642b9a7f66b076557a0325 (patch) | |
tree | 7af2dbf86156804de50363834b2290d3a999b7ec /gdb/breakpoint.c | |
parent | 30fd33bb933183e837b6709e189f1122333b95e2 (diff) | |
download | gdb-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.c | 37 |
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 |