summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndre Simoes Dias Vieira <andsim01@arm.com>2016-02-26 13:44:37 +0000
committerAndre Simoes Dias Vieira <andsim01@arm.com>2016-03-01 17:08:55 +0000
commit24ad6cefb1533cfd3af77eacbcb95b6825bcae46 (patch)
tree4912b2c53a06602d3ba0a791a43eedbdf3f4aa61
parent718b36fead887693158396b948d7f409b987c053 (diff)
downloadbinutils-gdb-24ad6cefb1533cfd3af77eacbcb95b6825bcae46.tar.gz
Fix for GDB crashing with printf on ARM targets.
gdb/ChangeLog.arm: 2016-02-16 Andre Vieira <andre.simoesdiasvieira@arm.com> Backport from mainline 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.
-rw-r--r--gdb/ChangeLog.arm6
-rw-r--r--gdb/remote.c8
2 files changed, 14 insertions, 0 deletions
diff --git a/gdb/ChangeLog.arm b/gdb/ChangeLog.arm
new file mode 100644
index 00000000000..da444fdfd46
--- /dev/null
+++ b/gdb/ChangeLog.arm
@@ -0,0 +1,6 @@
+2016-02-16 Andre Vieira <andre.simoesdiasvieira@arm.com>
+ Backport from mainline
+ 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.
diff --git a/gdb/remote.c b/gdb/remote.c
index 610da1eb320..2ce29323267 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -6359,8 +6359,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 'T': case 'S': case 'X': case 'W':
{