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.
This commit is contained in:
Yao Qi 2018-01-16 09:05:39 +00:00
parent 46a7082471
commit 9a70f35c8d
2 changed files with 11 additions and 1 deletions

View File

@ -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>

View File

@ -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)