* linux-low.c (linux_read_memory): Change return type to
authorDaniel Jacobowitz <drow@false.org>
Fri, 5 Mar 2004 03:43:19 +0000 (03:43 +0000)
committerDaniel Jacobowitz <drow@false.org>
Fri, 5 Mar 2004 03:43:19 +0000 (03:43 +0000)
int.  Check for and return error from ptrace().
* target.c (read_inferior_memory): Change return type to int.  Pass
back return status from the_target->read_memory().
* target.h (struct target_ops): Adapt *read_memory() prototype.
Update comment.
(read_inferior_memory): Adapt prototype.
* server.c (main): Return an error packet if
read_inferior_memory() returns an error.

gdb/gdbserver/ChangeLog
gdb/gdbserver/linux-low.c
gdb/gdbserver/server.c
gdb/gdbserver/target.c
gdb/gdbserver/target.h

index 31734c2533d723fe344bf939b43dbf822bd4ca3f..19227d142619e61e8748f01813bdbf18a68985b5 100644 (file)
@@ -1,3 +1,15 @@
+2004-03-04  Nathan J. Williams  <nathanw@wasabisystems.com>
+
+       * linux-low.c (linux_read_memory): Change return type to
+       int.  Check for and return error from ptrace().
+       * target.c (read_inferior_memory): Change return type to int.  Pass
+       back return status from the_target->read_memory().
+       * target.h (struct target_ops): Adapt *read_memory() prototype.
+       Update comment.
+       (read_inferior_memory): Adapt prototype.
+       * server.c (main): Return an error packet if
+       read_inferior_memory() returns an error.
+
 2004-03-04  Daniel Jacobowitz  <drow@mvista.com>
 
        * Makefile.in (distclean): Remove config.h, stamp-h, and config.log.
index ea155160e366ab7a5e4e33730f35a4988c227016..69b35c1032ba83575aaf2e01e73094f28902f644 100644 (file)
@@ -1281,7 +1281,7 @@ linux_store_registers (int regno)
 /* Copy LEN bytes from inferior's memory starting at MEMADDR
    to debugger memory starting at MYADDR.  */
 
-static void
+static int
 linux_read_memory (CORE_ADDR memaddr, char *myaddr, int len)
 {
   register int i;
@@ -1298,11 +1298,16 @@ linux_read_memory (CORE_ADDR memaddr, char *myaddr, int len)
   /* Read all the longwords */
   for (i = 0; i < count; i++, addr += sizeof (PTRACE_XFER_TYPE))
     {
+      errno = 0;
       buffer[i] = ptrace (PTRACE_PEEKTEXT, inferior_pid, (PTRACE_ARG3_TYPE) addr, 0);
+      if (errno)
+       return errno;
     }
 
   /* Copy appropriate bytes out of the buffer.  */
   memcpy (myaddr, (char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)), len);
+
+  return 0;
 }
 
 /* Copy LEN bytes of data from debugger memory at MYADDR
index fb667ef5e871db443cb7c72d825b8d9b1e08203d..cc8923e6c5f540bb06a2c8b2d1a7f80537bf2b7c 100644 (file)
@@ -462,8 +462,10 @@ main (int argc, char *argv[])
              break;
            case 'm':
              decode_m_packet (&own_buf[1], &mem_addr, &len);
-             read_inferior_memory (mem_addr, mem_buf, len);
-             convert_int_to_ascii (mem_buf, own_buf, len);
+             if (read_inferior_memory (mem_addr, mem_buf, len) == 0)
+               convert_int_to_ascii (mem_buf, own_buf, len);
+             else
+               write_enn (own_buf);
              break;
            case 'M':
              decode_M_packet (&own_buf[1], &mem_addr, &len, mem_buf);
index 1c2860a11e97213cccb48a1f6eb3ac919a5048cb..2c60e1777da80d8a8190b7530abe357357c0e51e 100644 (file)
@@ -1,5 +1,5 @@
 /* Target operations for the remote server for GDB.
-   Copyright 2002
+   Copyright 2002, 2004
    Free Software Foundation, Inc.
 
    Contributed by MontaVista Software.
@@ -57,11 +57,13 @@ set_desired_inferior (int use_general)
     current_inferior = found;
 }
 
-void
+int
 read_inferior_memory (CORE_ADDR memaddr, char *myaddr, int len)
 {
-  (*the_target->read_memory) (memaddr, myaddr, len);
+  int res;
+  res = (*the_target->read_memory) (memaddr, myaddr, len);
   check_mem_read (memaddr, myaddr, len);
+  return res;
 }
 
 int
index 88ff2d482d3b985feb7bd29700a201ed200ba793..770ffcbbb055846ed20b90808a28aab2c1a87911 100644 (file)
@@ -102,9 +102,11 @@ struct target_ops
   /* Read memory from the inferior process.  This should generally be
      called through read_inferior_memory, which handles breakpoint shadowing.
 
-     Read LEN bytes at MEMADDR into a buffer at MYADDR.  */
+     Read LEN bytes at MEMADDR into a buffer at MYADDR.
+  
+     Returns 0 on success and errno on failure.  */
 
-  void (*read_memory) (CORE_ADDR memaddr, char *myaddr, int len);
+  int (*read_memory) (CORE_ADDR memaddr, char *myaddr, int len);
 
   /* Write memory to the inferior process.  This should generally be
      called through write_inferior_memory, which handles breakpoint shadowing.
@@ -160,7 +162,7 @@ void set_target_ops (struct target_ops *);
 
 unsigned char mywait (char *statusp, int connected_wait);
 
-void read_inferior_memory (CORE_ADDR memaddr, char *myaddr, int len);
+int read_inferior_memory (CORE_ADDR memaddr, char *myaddr, int len);
 
 int write_inferior_memory (CORE_ADDR memaddr, const char *myaddr, int len);