This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch/rfc] Add child_to_xfer_partial; Was: ia64 portion of libunwindpatch


Jeff,

This adds a child_xfer_partial method to "inftarg.c". I've included a hook vis:

+#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

so that, in theory, all you need do is define that in the linux specific nm-*.h file.


I think this will make plugging in additional xfer methods easier. How does it look?

Anyone else?
Andrew

PS: You'll notice that it also contains lurking code to add support for an auxv transfer.

PPS: Note that I need to better test it.
2003-11-06  Andrew Cagney  <cagney@redhat.com>

	* inftarg.c (child_xfer_partial): New function
	(init_child_ops): Set "to_xfer_partial".

Index: inftarg.c
===================================================================
RCS file: /cvs/src/src/gdb/inftarg.c,v
retrieving revision 1.18
diff -u -r1.18 inftarg.c
--- inftarg.c	21 Sep 2003 01:26:45 -0000	1.18
+++ inftarg.c	6 Nov 2003 22:20:17 -0000
@@ -551,7 +551,45 @@
    */
   return NULL;
 }
-
+
+/* Perform a partial transfer to/from the specified object.  */
+
+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 +616,7 @@
   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;

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]