2003-11-07 Andrew Cagney <cagney@redhat.com>
authorAndrew Cagney <cagney@redhat.com>
Fri, 7 Nov 2003 21:33:37 +0000 (21:33 +0000)
committerAndrew Cagney <cagney@redhat.com>
Fri, 7 Nov 2003 21:33:37 +0000 (21:33 +0000)
* inftarg.c (child_xfer_partial): New function
(init_child_ops): Set "to_xfer_partial".

gdb/ChangeLog
gdb/inftarg.c

index adce433..a0628f3 100644 (file)
@@ -1,5 +1,10 @@
 2003-11-07  Andrew Cagney  <cagney@redhat.com>
 
+       * inftarg.c (child_xfer_partial): New function
+       (init_child_ops): Set "to_xfer_partial".
+
+2003-11-07  Andrew Cagney  <cagney@redhat.com>
+
        * ppc-linux-tdep.c (ppc_linux_init_abi): When 32-bit GNU/Linux,
        set "return_value" instead of "use_struct_convention".
        (ppc_linux_use_struct_convention): Delete function.
index 05036b6..fd02ad0 100644 (file)
@@ -551,7 +551,46 @@ child_core_file_to_sym_file (char *core)
    */
   return NULL;
 }
-\f
+
+/* Perform a partial transfer to/from the specified object.  For
+   memory transfers, fall back to the old memory xfer functions.  */
+
+static LONGEST
+child_xfer_partial (struct target_ops *ops,
+                   enum target_object object,
+                   const char *annex, const void *writebuf,
+                   void *readbuf, ULONGEST offset, LONGEST len)
+{
+  switch (object)
+    {
+    case TARGET_OBJECT_MEMORY:
+      if (readbuf)
+       return child_xfer_memory (offset, readbuf, len, 0/*write*/,
+                                 NULL, ops);
+      if (writebuf)
+       return child_xfer_memory (offset, readbuf, len, 1/*write*/,
+                                 NULL, ops);
+      return -1;
+
+#if 0
+    case TARGET_OBJECT_UNWIND_TABLE:
+#ifndef NATIVE_XFER_UNWIND_TABLE
+#define NATIVE_XFER_UNWIND_TABLE(OPS,OBJECT,ANNEX,WRITEBUF,READBUF,OFFSET,LEN) (-1)
+#endif
+      return NATIVE_XFER_UNWIND_TABLE (ops, object, annex, writebuf,
+                                      readbuf, offset, len);
+#endif
+
+#if 0
+    case TARGET_OBJECT_AUXV:
+      return native_xfer_auxv (PIDGET (inferior_ptid), writebuf, readbuf,
+                              offset, len);
+#endif
+
+    default:
+      return -1;
+    }
+}
 
 #if !defined(CHILD_PID_TO_STR)
 char *
@@ -578,6 +617,7 @@ init_child_ops (void)
   child_ops.to_store_registers = store_inferior_registers;
   child_ops.to_prepare_to_store = child_prepare_to_store;
   child_ops.to_xfer_memory = child_xfer_memory;
+  child_ops.to_xfer_partial = child_xfer_partial;
   child_ops.to_files_info = child_files_info;
   child_ops.to_insert_breakpoint = memory_insert_breakpoint;
   child_ops.to_remove_breakpoint = memory_remove_breakpoint;