From: Pedro Alves Date: Tue, 13 Mar 2012 22:14:34 +0000 (+0000) Subject: 2012-03-13 Pedro Alves X-Git-Tag: gdb_7_4_1-2012-04-26-release~50 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6fcf9d0cdaf9c9ea256c5950aabf8adbe6254f1f;p=thirdparty%2Fbinutils-gdb.git 2012-03-13 Pedro Alves Hui Zhu Yao Qi * remote.c (struct remote_state): New field `starting_up'. (remote_start_remote): Set and clear it. (remote_can_download_tracepoint): If starting up, return false. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 954e47c3a9c..917a77fbf56 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2012-03-13 Pedro Alves + Hui Zhu + Yao Qi + + * remote.c (struct remote_state): New field `starting_up'. + (remote_start_remote): Set and clear it. + (remote_can_download_tracepoint): If starting up, return false. + 2012-03-06 Pedro Alves PR gdb/13766 diff --git a/gdb/remote.c b/gdb/remote.c index 60d7ecdef90..73deef21573 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -271,6 +271,10 @@ struct remote_state char *buf; long buf_size; + /* True if we're going through initial connection setup (finding out + about the remote side's threads, relocating symbols, etc.). */ + int starting_up; + /* If we negotiated packet size explicitly (and thus can bypass heuristics for the largest packet size that will not overflow a buffer in the stub), this will be set to that packet size. @@ -3164,6 +3168,10 @@ remote_start_remote (int from_tty, struct target_ops *target, int extended_p) /* Ack any packet which the remote side has already sent. */ serial_write (remote_desc, "+", 1); + /* Signal other parts that we're going through the initial setup, + and so things may not be stable yet. */ + rs->starting_up = 1; + /* The first packet we send to the target is the optional "supported packets" request. If the target can answer this, it will tell us which later probes to skip. */ @@ -3418,6 +3426,12 @@ remote_start_remote (int from_tty, struct target_ops *target, int extended_p) merge_uploaded_tracepoints (&uploaded_tps); } + /* The thread and inferior lists are now synchronized with the + target, our symbols have been relocated, and we're merged the + target's tracepoints with ours. We're done with basic start + up. */ + rs->starting_up = 0; + /* If breakpoints are global, insert them now. */ if (gdbarch_has_global_breakpoints (target_gdbarch) && breakpoints_always_inserted_mode ()) @@ -10050,8 +10064,18 @@ remote_download_tracepoint (struct bp_location *loc) static int remote_can_download_tracepoint (void) { - struct trace_status *ts = current_trace_status (); - int status = remote_get_trace_status (ts); + struct remote_state *rs = get_remote_state (); + struct trace_status *ts; + int status; + + /* Don't try to install tracepoints until we've relocated our + symbols, and fetched and merged the target's tracepoint list with + ours. */ + if (rs->starting_up) + return 0; + + ts = current_trace_status (); + status = remote_get_trace_status (ts); if (status == -1 || !ts->running_known || !ts->running) return 0;