[pushed,2/2] gdbserver/libthread_db: Don't ignore memory reading failures
Commit Message
If we had this in place before, then the regression fixed by the
previous commit would have been been visible is all test runs. E.g.:
Running src/gdb/testsuite/gdb.threads/multi-create-ns-info-thr.exp ...
FAIL: gdb.threads/multi-create-ns-info-thr.exp: continue to breakpoint 6
Debugging manually we'd see this:
gdbserver: Cannot get thread handle for LWP 1467: generic error
Instead of:
gdbserver: PID mismatch! Expected 27472, got 27471
which is misleading - gdbserver didn't 27471, that was stale stack
data from previous function invocations.
gdb/gdbserver/ChangeLog:
2017-09-29 Pedro Alves <palves@redhat.com>
* proc-service.c (ps_pdread): Return PS_ERR if reading memory
fails.
---
gdb/gdbserver/ChangeLog | 5 +++++
gdb/gdbserver/proc-service.c | 3 ++-
2 files changed, 7 insertions(+), 1 deletion(-)
@@ -1,5 +1,10 @@
2017-09-29 Pedro Alves <palves@redhat.com>
+ * proc-service.c (ps_pdread): Return PS_ERR if reading memory
+ fails.
+
+2017-09-29 Pedro Alves <palves@redhat.com>
+
* linux-low.c (handle_extended_wait): Pass parent thread instead
of process to thread_db_notice_clone.
* linux-low.h (thread_db_notice_clone): Replace parent process
@@ -80,7 +80,8 @@ ps_err_e
ps_pdread (gdb_ps_prochandle_t ph, psaddr_t addr,
gdb_ps_read_buf_t buf, gdb_ps_size_t size)
{
- read_inferior_memory ((uintptr_t) addr, (gdb_byte *) buf, size);
+ if (read_inferior_memory ((uintptr_t) addr, (gdb_byte *) buf, size) != 0)
+ return PS_ERR;
return PS_OK;
}