remote.c: don't install a deprecated_xfer_memory hook.
authorPedro Alves <palves@redhat.com>
Fri, 23 Aug 2013 13:12:17 +0000 (13:12 +0000)
committerPedro Alves <palves@redhat.com>
Fri, 23 Aug 2013 13:12:17 +0000 (13:12 +0000)
There's no need for deprecated_xfer_memory nowadays.  Memory access
goes through target_xfer_partial/TARGET_OBJECT_MEMORY, etc.  In fact,
the remote target already handles that, and is deferring to the same
helpers the deprecated_xfer_memory hook is.  Basically, only a few
adjustments to make these helper routines's interfaces closer to
target_xfer_partial's were necessary.

Tested on x86_64 Fedora 17 w/ gdbserver.

gdb/
2013-08-23  Pedro Alves  <palves@redhat.com>

* remote.c (remote_write_bytes_aux, remote_write_bytes)
(remote_read_bytes): Change return type to LONGEST, and adjust to
return a target_xfer_error on error.
(remote_xfer_memory): Delete.
(remote_flash_write): Change type of 'ret' local to LONGEST.
(remote_xfer_partial, remote_xfer_partial): Adjust.
(init_remote_ops): Don't install a deprecated_xfer_memory hook.

gdb/ChangeLog
gdb/remote.c

index 8b2bffacb8b2fa5aaf212a4e64b423e84726733b..7a19e60b235858b521aa901fb82272bbe7b8607d 100644 (file)
@@ -1,3 +1,13 @@
+2013-08-23  Pedro Alves  <palves@redhat.com>
+
+       * remote.c (remote_write_bytes_aux, remote_write_bytes)
+       (remote_read_bytes): Change return type to LONGEST, and adjust to
+       return a target_xfer_error on error.
+       (remote_xfer_memory): Delete.
+       (remote_flash_write): Change type of 'ret' local to LONGEST.
+       (remote_xfer_partial, remote_xfer_partial): Adjust.
+       (init_remote_ops): Don't install a deprecated_xfer_memory hook.
+
 2013-08-23  Pierre Muller  <muller@sourceware.org>
 
        ARI fix: Push # directives to start of line.
index 5028451c2d6302f458ee20713e6d8d41ad919bc6..2e116d92efe2341d1cae994eb1d962fde029c0bd 100644 (file)
@@ -6744,10 +6744,11 @@ check_binary_download (CORE_ADDR addr)
    If USE_LENGTH is 0, then the <LENGTH> field and the preceding comma
    are omitted.
 
-   Returns the number of bytes transferred, or 0 (setting errno) for
-   error.  Only transfer a single packet.  */
+   Returns the number of bytes transferred, or a negative value (an
+   'enum target_xfer_error' value) for error.  Only transfer a single
+   packet.  */
 
-static int
+static LONGEST
 remote_write_bytes_aux (const char *header, CORE_ADDR memaddr,
                        const gdb_byte *myaddr, ssize_t len,
                        char packet_format, int use_length)
@@ -6886,14 +6887,7 @@ remote_write_bytes_aux (const char *header, CORE_ADDR memaddr,
   getpkt (&rs->buf, &rs->buf_size, 0);
 
   if (rs->buf[0] == 'E')
-    {
-      /* There is no correspondance between what the remote protocol
-        uses for errors and errno codes.  We would like a cleaner way
-        of representing errors (big enough to include errno codes,
-        bfd_error codes, and others).  But for now just return EIO.  */
-      errno = EIO;
-      return 0;
-    }
+    return TARGET_XFER_E_IO;
 
   /* Return NR_BYTES, not TODO, in case escape chars caused us to send
      fewer bytes than we'd planned.  */
@@ -6906,10 +6900,11 @@ remote_write_bytes_aux (const char *header, CORE_ADDR memaddr,
    MYADDR is the address of the buffer in our space.
    LEN is the number of bytes.
 
-   Returns number of bytes transferred, or 0 (setting errno) for
-   error.  Only transfer a single packet.  */
+   Returns number of bytes transferred, or a negative value (an 'enum
+   target_xfer_error' value) for error.  Only transfer a single
+   packet.  */
 
-static int
+static LONGEST
 remote_write_bytes (CORE_ADDR memaddr, const gdb_byte *myaddr, ssize_t len)
 {
   char *packet_format = 0;
@@ -6942,9 +6937,10 @@ remote_write_bytes (CORE_ADDR memaddr, const gdb_byte *myaddr, ssize_t len)
    MYADDR is the address of the buffer in our space.
    LEN is the number of bytes.
 
-   Returns number of bytes transferred, or 0 for error.  */
+   Returns number of bytes transferred, or a negative value (an 'enum
+   target_xfer_error' value) for error.  */
 
-static int
+static LONGEST
 remote_read_bytes (CORE_ADDR memaddr, gdb_byte *myaddr, int len)
 {
   struct remote_state *rs = get_remote_state ();
@@ -6976,15 +6972,7 @@ remote_read_bytes (CORE_ADDR memaddr, gdb_byte *myaddr, int len)
   if (rs->buf[0] == 'E'
       && isxdigit (rs->buf[1]) && isxdigit (rs->buf[2])
       && rs->buf[3] == '\0')
-    {
-      /* There is no correspondance between what the remote protocol
-        uses for errors and errno codes.  We would like a cleaner way
-        of representing errors (big enough to include errno codes,
-        bfd_error codes, and others).  But for now just return
-        EIO.  */
-      errno = EIO;
-      return 0;
-    }
+    return TARGET_XFER_E_IO;
   /* Reply describes memory byte by byte, each byte encoded as two hex
      characters.  */
   p = rs->buf;
@@ -6994,28 +6982,6 @@ remote_read_bytes (CORE_ADDR memaddr, gdb_byte *myaddr, int len)
 }
 
 \f
-/* Read or write LEN bytes from inferior memory at MEMADDR,
-   transferring to or from debugger address BUFFER.  Write to inferior
-   if SHOULD_WRITE is nonzero.  Returns length of data written or
-   read; 0 for error.  TARGET is unused.  */
-
-static int
-remote_xfer_memory (CORE_ADDR mem_addr, gdb_byte *buffer, int mem_len,
-                   int should_write, struct mem_attrib *attrib,
-                   struct target_ops *target)
-{
-  int res;
-
-  set_remote_traceframe ();
-  set_general_thread (inferior_ptid);
-
-  if (should_write)
-    res = remote_write_bytes (mem_addr, buffer, mem_len);
-  else
-    res = remote_read_bytes (mem_addr, buffer, mem_len);
-
-  return res;
-}
 
 /* Sends a packet with content determined by the printf format string
    FORMAT and the remaining arguments, then gets the reply.  Returns
@@ -7090,7 +7056,7 @@ remote_flash_write (struct target_ops *ops,
                     const gdb_byte *data)
 {
   int saved_remote_timeout = remote_timeout;
-  int ret;
+  LONGEST ret;
   struct cleanup *back_to = make_cleanup (restore_remote_timeout,
                                           &saved_remote_timeout);
 
@@ -8796,9 +8762,7 @@ remote_xfer_partial (struct target_ops *ops, enum target_object object,
   /* Handle memory using the standard memory routines.  */
   if (object == TARGET_OBJECT_MEMORY)
     {
-      int xfered;
-
-      errno = 0;
+      LONGEST xfered;
 
       /* If the remote target is connected but not running, we should
         pass this request down to a lower stratum (e.g. the executable
@@ -8811,12 +8775,7 @@ remote_xfer_partial (struct target_ops *ops, enum target_object object,
       else
        xfered = remote_read_bytes (offset, readbuf, len);
 
-      if (xfered > 0)
-       return xfered;
-      else if (xfered == 0 && errno == 0)
-       return 0;
-      else
-       return -1;
+      return xfered;
     }
 
   /* Handle SPU memory using qxfer packets.  */
@@ -8865,14 +8824,7 @@ remote_xfer_partial (struct target_ops *ops, enum target_object object,
       switch (object)
        {
        case TARGET_OBJECT_FLASH:
-         xfered = remote_flash_write (ops, offset, len, writebuf);
-
-         if (xfered > 0)
-           return xfered;
-         else if (xfered == 0 && errno == 0)
-           return 0;
-         else
-           return -1;
+         return remote_flash_write (ops, offset, len, writebuf);
 
        default:
          return -1;
@@ -11482,7 +11434,6 @@ Specify the serial device it is connected to\n\
   remote_ops.to_fetch_registers = remote_fetch_registers;
   remote_ops.to_store_registers = remote_store_registers;
   remote_ops.to_prepare_to_store = remote_prepare_to_store;
-  remote_ops.deprecated_xfer_memory = remote_xfer_memory;
   remote_ops.to_files_info = remote_files_info;
   remote_ops.to_insert_breakpoint = remote_insert_breakpoint;
   remote_ops.to_remove_breakpoint = remote_remove_breakpoint;