From: Yao Qi Date: Tue, 16 Jan 2018 09:05:39 +0000 (+0000) Subject: Mark register unavailable when PTRACE_PEEKUSER fails X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=9a70f35c8d872bb5542e98e34b8b044228dcb844;p=binutils-gdb.git 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 PR gdb/18749 * linux-low.c (fetch_register): Call supply_register instead of error. --- diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 32a515728f3..be8c48f0f79 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,9 @@ +2018-01-16 Yao Qi + + PR gdb/18749 + * linux-low.c (fetch_register): Call supply_register instead of + error. + 2018-01-08 Yao Qi Simon Marchi diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c index cfb2b56a089..d8e122603cb 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)