gdbserver/libthread_db: Don't ignore memory reading failures
authorPedro Alves <palves@redhat.com>
Fri, 29 Sep 2017 11:33:41 +0000 (12:33 +0100)
committerPedro Alves <palves@redhat.com>
Fri, 29 Sep 2017 12:10:39 +0000 (13:10 +0100)
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
gdb/gdbserver/proc-service.c

index f27451d..0dbcae2 100644 (file)
@@ -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
index 98d6acd..5b058fd 100644 (file)
@@ -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;
 }