* 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 5017bc600f53933d54d077947d52f0d5141b55d0..1976a42efdd039e5639478c92c82d0de3a0c0000 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 19f7be64170f988d100a300c91f4ba5ddeab250d..5fe19fdf72ce2fb1a698870014fa7f6d44126537 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;
 }