* linux-low.c (linux_store_registers): Avoid the copying sequence
authorMaciej W. Rozycki <macro@linux-mips.org>
Tue, 22 May 2012 23:17:51 +0000 (23:17 +0000)
committerMaciej W. Rozycki <macro@linux-mips.org>
Tue, 22 May 2012 23:17:51 +0000 (23:17 +0000)
when no data has been retrieved by ptrace.

gdb/gdbserver/ChangeLog
gdb/gdbserver/linux-low.c

index 5017bc6..1976a42 100644 (file)
@@ -1,3 +1,8 @@
+2012-05-22  Maciej W. Rozycki  <macro@codesourcery.com>
+
+       * linux-low.c (linux_store_registers): Avoid the copying sequence
+       when no data has been retrieved by ptrace.
+
 2012-05-22  Will Deacon  <will.deacon@arm.com>
 
        * linux-low (__UCLIBC__ && !(__UCLIBC_HAS_MMU__ || __ARCH_HAS_MMU__)):
index 19f7be6..5fe19fd 100644 (file)
@@ -4449,11 +4449,14 @@ linux_read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len)
   ret = errno;
 
   /* Copy appropriate bytes out of the buffer.  */
-  i *= sizeof (PTRACE_XFER_TYPE);
-  i -= memaddr & (sizeof (PTRACE_XFER_TYPE) - 1);
-  memcpy (myaddr,
-         (char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)),
-         i < len ? i : len);
+  if (i > 0)
+    {
+      i *= sizeof (PTRACE_XFER_TYPE);
+      i -= memaddr & (sizeof (PTRACE_XFER_TYPE) - 1);
+      memcpy (myaddr,
+             (char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)),
+             i < len ? i : len);
+    }
 
   return ret;
 }