This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]