This is the mail archive of the
gdb-cvs@sourceware.org
mailing list for the GDB project.
[binutils-gdb] Mark register unavailable when PTRACE_PEEKUSER fails
- From: Yao Qi <qiyao at sourceware dot org>
- To: gdb-cvs at sourceware dot org
- Date: 16 Jan 2018 09:09:02 -0000
- Subject: [binutils-gdb] Mark register unavailable when PTRACE_PEEKUSER fails
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=9a70f35c8d872bb5542e98e34b8b044228dcb844
commit 9a70f35c8d872bb5542e98e34b8b044228dcb844
Author: Yao Qi <yao.qi@linaro.org>
Date: Tue Jan 16 09:05:39 2018 +0000
Mark register unavailable when PTRACE_PEEKUSER fails
As described in PR 18749, GDB/GDBserver may get an error on accessing
memory or register because the thread may disappear. However, some
path doesn't expect the error. This patch fixes this problem by
marking the register unavailable when PTRACE_PEEKUSER fails instead
of throwing error.
gdb/gdbserver:
2018-01-16 Yao Qi <yao.qi@linaro.org>
PR gdb/18749
* linux-low.c (fetch_register): Call supply_register instead of
error.
Diff:
---
gdb/gdbserver/ChangeLog | 6 ++++++
gdb/gdbserver/linux-low.c | 6 +++++-
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index 32a5157..be8c48f 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -1,3 +1,9 @@
+2018-01-16 Yao Qi <yao.qi@linaro.org>
+
+ PR gdb/18749
+ * linux-low.c (fetch_register): Call supply_register instead of
+ error.
+
2018-01-08 Yao Qi <yao.qi@linaro.org>
Simon Marchi <simon.marchi@ericsson.com>
diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c
index cfb2b56..d8e1226 100644
--- a/gdb/gdbserver/linux-low.c
+++ b/gdb/gdbserver/linux-low.c
@@ -5555,7 +5555,11 @@ fetch_register (const struct usrregs_info *usrregs,
(PTRACE_TYPE_ARG3) (uintptr_t) regaddr, (PTRACE_TYPE_ARG4) 0);
regaddr += sizeof (PTRACE_XFER_TYPE);
if (errno != 0)
- error ("reading register %d: %s", regno, strerror (errno));
+ {
+ /* Mark register REGNO unavailable. */
+ supply_register (regcache, regno, NULL);
+ return;
+ }
}
if (the_low_target.supply_ptrace_register)