gnu-nat.c: Don't install a deprecated_xfer_memory method.
authorThomas Schwinge <tschwinge@gnu.org>
Thu, 19 Sep 2013 13:40:38 +0000 (13:40 +0000)
committerThomas Schwinge <tschwinge@gnu.org>
Thu, 19 Sep 2013 13:40:38 +0000 (13:40 +0000)
This removes another instance of a deprecated_xfer_memory user.

gdb/
2013-09-19  Pedro Alves  <palves@redhat.com>
    Thomas Schwinge  <thomas@codesourcery.com>
    Yue Lu  <hacklu.newborn@gmail.com>

* gnu-nat.c (gnu_read_inferior, gnu_write_inferior): Make static.
Take a gdb_byte pointer instead of a char pointer.

* gnu-nat.c (gnu_xfer_memory): Adjust interface as
gnu_xfer_partial helper.
(gnu_xfer_partial): New function.
(gnu_target): Don't install a deprecated_xfer_memory hook.
Install a to_xfer_partial hook.

gdb/ChangeLog
gdb/gnu-nat.c

index 0fadddf..738d757 100644 (file)
@@ -1,3 +1,16 @@
+2013-09-19  Pedro Alves  <palves@redhat.com>
+           Thomas Schwinge  <thomas@codesourcery.com>
+           Yue Lu  <hacklu.newborn@gmail.com>
+
+       * gnu-nat.c (gnu_read_inferior, gnu_write_inferior): Make static.
+       Take a gdb_byte pointer instead of a char pointer.
+
+       * gnu-nat.c (gnu_xfer_memory): Adjust interface as
+       gnu_xfer_partial helper.
+       (gnu_xfer_partial): New function.
+       (gnu_target): Don't install a deprecated_xfer_memory hook.
+       Install a to_xfer_partial hook.
+
 2013-09-19  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
        Constification.
index b4f99f8..b99f557 100644 (file)
@@ -2268,8 +2268,8 @@ gnu_thread_alive (struct target_ops *ops, ptid_t ptid)
 /* Read inferior task's LEN bytes from ADDR and copy it to MYADDR in
    gdb's address space.  Return 0 on failure; number of bytes read
    otherwise.  */
-int
-gnu_read_inferior (task_t task, CORE_ADDR addr, char *myaddr, int length)
+static int
+gnu_read_inferior (task_t task, CORE_ADDR addr, gdb_byte *myaddr, int length)
 {
   error_t err;
   vm_address_t low_address = (vm_address_t) trunc_page (addr);
@@ -2314,8 +2314,9 @@ struct obstack region_obstack;
 
 /* Write gdb's LEN bytes from MYADDR and copy it to ADDR in inferior
    task's address space.  */
-int
-gnu_write_inferior (task_t task, CORE_ADDR addr, char *myaddr, int length)
+static int
+gnu_write_inferior (task_t task, CORE_ADDR addr,
+                   const gdb_byte *myaddr, int length)
 {
   error_t err = 0;
   vm_address_t low_address = (vm_address_t) trunc_page (addr);
@@ -2471,30 +2472,55 @@ out:
 }
 
 \f
-/* Return 0 on failure, number of bytes handled otherwise.  TARGET
-   is ignored.  */
-static int
-gnu_xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len, int write,
-                struct mem_attrib *attrib,
-                struct target_ops *target)
+
+/* Helper for gnu_xfer_partial that handles memory transfers.  */
+
+static LONGEST
+gnu_xfer_memory (gdb_byte *readbuf, const gdb_byte *writebuf,
+                CORE_ADDR memaddr, LONGEST len)
 {
   task_t task = (gnu_current_inf
                 ? (gnu_current_inf->task
                    ? gnu_current_inf->task->port : 0)
                 : 0);
+  int res;
 
   if (task == MACH_PORT_NULL)
-    return 0;
+    return TARGET_XFER_E_IO;
+
+  if (writebuf != NULL)
+    {
+      inf_debug (gnu_current_inf, "writing %s[%s] <-- %s",
+                paddress (target_gdbarch (), memaddr), plongest (len),
+                host_address_to_string (writebuf));
+      res = gnu_write_inferior (task, memaddr, writebuf, len);
+    }
   else
     {
-      inf_debug (gnu_current_inf, "%s %s[%d] %s %s",
-                write ? "writing" : "reading",
-                paddress (target_gdbarch (), memaddr), len,
-                write ? "<--" : "-->", host_address_to_string (myaddr));
-      if (write)
-       return gnu_write_inferior (task, memaddr, myaddr, len);
-      else
-       return gnu_read_inferior (task, memaddr, myaddr, len);
+      inf_debug (gnu_current_inf, "reading %s[%s] --> %s",
+                paddress (target_gdbarch (), memaddr), plongest (len),
+                host_address_to_string (readbuf));
+      res = gnu_read_inferior (task, memaddr, readbuf, len);
+    }
+  if (res == 0)
+    return TARGET_XFER_E_IO;
+  return res;
+}
+
+/* Target to_xfer_partial implementation.  */
+
+static LONGEST
+gnu_xfer_partial (struct target_ops *ops, enum target_object object,
+                 const char *annex, gdb_byte *readbuf,
+                 const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
+{
+  switch (object)
+    {
+    case TARGET_OBJECT_MEMORY:
+      return gnu_xfer_memory (readbuf, writebuf, offset, len);
+
+    default:
+      return -1;
     }
 }
 
@@ -2628,7 +2654,7 @@ gnu_target (void)
   t->to_detach = gnu_detach;
   t->to_resume = gnu_resume;
   t->to_wait = gnu_wait;
-  t->deprecated_xfer_memory = gnu_xfer_memory;
+  t->to_xfer_partial = gnu_xfer_partial;
   t->to_find_memory_regions = gnu_find_memory_regions;
   t->to_terminal_init = gnu_terminal_init_inferior;
   t->to_kill = gnu_kill_inferior;