diff options
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/remote.c | 8 |
2 files changed, 13 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 829a48c..a2b0d39 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2016-02-04 Yao Qi <yao.qi@linaro.org> + + * remote.c (remote_wait_as): Set rs->waiting_for_stop_reply to + 0 before handling 'F' and set it back afterwards. + 2016-02-02 Simon Marchi <simon.marchi@ericsson.com> * ui-out.c (MAX_UI_OUT_LEVELS): Remove. diff --git a/gdb/remote.c b/gdb/remote.c index 8831b50..b1af8aa 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -6984,8 +6984,16 @@ remote_wait_as (ptid_t ptid, struct target_waitstatus *status, int options) status->value.sig = GDB_SIGNAL_0; break; case 'F': /* File-I/O request. */ + /* GDB may access the inferior memory while handling the File-I/O + request, but we don't want GDB accessing memory while waiting + for a stop reply. See the comments in putpkt_binary. Set + waiting_for_stop_reply to 0 temporarily. */ + rs->waiting_for_stop_reply = 0; remote_fileio_request (buf, rs->ctrlc_pending_p); rs->ctrlc_pending_p = 0; + /* GDB handled the File-I/O request, and the target is running + again. Keep waiting for events. */ + rs->waiting_for_stop_reply = 1; break; case 'N': case 'T': case 'S': case 'X': case 'W': { |