From 9a70f35c8d872bb5542e98e34b8b044228dcb844 Mon Sep 17 00:00:00 2001 From: Yao Qi Date: Tue, 16 Jan 2018 09:05:39 +0000 Subject: [PATCH] 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. --- 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 32a515728f..be8c48f0f7 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 cfb2b56a08..d8e122603c 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) -- 2.34.1