Index: config/ia64/nm-linux.h =================================================================== RCS file: /cvs/src/src/gdb/config/ia64/nm-linux.h,v retrieving revision 1.10 diff -u -r1.10 nm-linux.h --- config/ia64/nm-linux.h 20 Jun 2003 13:57:29 -0000 1.10 +++ config/ia64/nm-linux.h 4 Nov 2003 16:53:37 -0000 @@ -69,4 +69,13 @@ extern int ia64_linux_remove_watchpoint (ptid_t ptid, CORE_ADDR addr, int len); +#include "target.h" + +#define CHILD_TO_XFER_PARTIAL ia64_linux_xfer_partial +extern LONGEST ia64_linux_xfer_partial (struct target_ops *ops, + enum target_object object, + const char *annex, const void *writebuf, + void *readbuf, + ULONGEST offset, LONGEST len); + #endif /* #ifndef NM_LINUX_H */ Index: ia64-linux-nat.c =================================================================== RCS file: /cvs/src/src/gdb/ia64-linux-nat.c,v retrieving revision 1.20 diff -u -r1.20 ia64-linux-nat.c --- ia64-linux-nat.c 2 Oct 2003 20:28:29 -0000 1.20 +++ ia64-linux-nat.c 4 Nov 2003 16:53:37 -0000 @@ -34,6 +34,7 @@ #ifdef HAVE_SYS_REG_H #include #endif +#include #include #include @@ -644,4 +645,48 @@ write_register_pid (IA64_PSR_REGNUM, psr, ptid); return (CORE_ADDR) siginfo.si_addr; +} + +LONGEST +ia64_linux_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_UNWIND_TABLE: + return syscall (__NR_getunwind, readbuf, len); + case TARGET_OBJECT_MEMORY: + if (ops->to_xfer_memory != NULL) + /* Fall back to the target's "to_xfer_memory" method. */ + { + int xfered = -1; + errno = 0; + if (writebuf != NULL) + { + void *buffer = xmalloc (len); + struct cleanup *cleanup = make_cleanup (xfree, buffer); + memcpy (buffer, writebuf, len); + xfered = ops->to_xfer_memory (offset, buffer, len, 1/*write*/, NULL, + ops); + do_cleanups (cleanup); + } + if (readbuf != NULL) + xfered = ops->to_xfer_memory (offset, readbuf, len, 0/*read*/, NULL, + ops); + + if (xfered > 0) + return xfered; + else if (xfered == 0 && errno == 0) + /* "to_xfer_memory" uses 0, cross checked against ERRNO as one + indication of an error. */ + return 0; + else + return -1; + } + default: + return -1; + } } 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 4 Nov 2003 16:53:37 -0000 @@ -609,6 +609,9 @@ child_ops.to_get_current_exception_event = child_get_current_exception_event; child_ops.to_pid_to_exec_file = child_pid_to_exec_file; child_ops.to_stratum = process_stratum; +#ifdef CHILD_TO_XFER_PARTIAL + child_ops.to_xfer_partial = CHILD_TO_XFER_PARTIAL; +#endif child_ops.to_has_all_memory = 1; child_ops.to_has_memory = 1; child_ops.to_has_stack = 1; Index: target.c =================================================================== RCS file: /cvs/src/src/gdb/target.c,v retrieving revision 1.64 diff -u -r1.64 target.c --- target.c 31 Oct 2003 15:25:34 -0000 1.64 +++ target.c 4 Nov 2003 16:53:38 -0000 @@ -1644,6 +1644,7 @@ dummy_target.to_stratum = dummy_stratum; dummy_target.to_find_memory_regions = dummy_find_memory_regions; dummy_target.to_make_corefile_notes = dummy_make_corefile_notes; + dummy_target.to_xfer_partial = default_xfer_partial; dummy_target.to_magic = OPS_MAGIC; } Index: target.h =================================================================== RCS file: /cvs/src/src/gdb/target.h,v retrieving revision 1.51 diff -u -r1.51 target.h --- target.h 31 Oct 2003 19:19:51 -0000 1.51 +++ target.h 4 Nov 2003 16:53:38 -0000 @@ -223,8 +223,10 @@ /* AVR target specific transfer. See "avr-tdep.c" and "remote.c". */ TARGET_OBJECT_AVR, /* Transfer up-to LEN bytes of memory starting at OFFSET. */ - TARGET_OBJECT_MEMORY - /* Possible future ojbects: TARGET_OJBECT_FILE, TARGET_OBJECT_PROC, + TARGET_OBJECT_MEMORY, + /* Kernel Unwind Table. See "ia64-tdep.c". */ + TARGET_OBJECT_UNWIND_TABLE, + /* Possible future objects: TARGET_OBJECT_FILE, TARGET_OBJECT_PROC, TARGET_OBJECT_AUXV, ... */ };