diff --git a/gdb/ChangeLog b/gdb/ChangeLog index a0b3d0b6db..951039a630 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2011-07-06 Hui Zhu + + * remote.c (remote_start_remote): Add TRY_CATCH for + remote_get_trace_status. + * tracepoint.c (disconnect_tracing): Ditto. + 2011-07-05 Tom Tromey * symtab.c (operator_chars): Now static. diff --git a/gdb/remote.c b/gdb/remote.c index 19cc0b6748..b03ef596c6 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -3146,6 +3146,8 @@ remote_start_remote (int from_tty, struct target_ops *target, int extended_p) struct remote_state *rs = get_remote_state (); struct packet_config *noack_config; char *wait_status = NULL; + int ret = 0; + volatile struct gdb_exception ex; immediate_quit++; /* Allow user to interrupt it. */ @@ -3389,7 +3391,16 @@ remote_start_remote (int from_tty, struct target_ops *target, int extended_p) /* Possibly the target has been engaged in a trace run started previously; find out where things are at. */ - if (remote_get_trace_status (current_trace_status ()) != -1) + TRY_CATCH (ex, RETURN_MASK_ERROR) + { + ret = remote_get_trace_status (current_trace_status ()); + } + if (ex.reason < 0) + { + warning (_("%s"), ex.message); + ret = -1; + } + if (ret != -1) { struct uploaded_tp *uploaded_tps = NULL; struct uploaded_tsv *uploaded_tsvs = NULL; diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c index 2d62f4d72e..4c54d2d0b2 100644 --- a/gdb/tracepoint.c +++ b/gdb/tracepoint.c @@ -1900,11 +1900,23 @@ trace_status_mi (int on_stop) void disconnect_tracing (int from_tty) { + int ret = 0; + volatile struct gdb_exception ex; + /* It can happen that the target that was tracing went away on its own, and we didn't notice. Get a status update, and if the current target doesn't even do tracing, then assume it's not running anymore. */ - if (target_get_trace_status (current_trace_status ()) < 0) + TRY_CATCH (ex, RETURN_MASK_ERROR) + { + ret = target_get_trace_status (current_trace_status ()); + } + if (ex.reason < 0) + { + warning (_("%s"), ex.message); + ret = -1; + } + if (ret < 0) current_trace_status ()->running = 0; /* If running interactively, give the user the option to cancel and