+
+/* Implement the "supports_multi_process" target_ops method. */
+
+bool
+nbsd_nat_target::supports_multi_process ()
+{
+ return true;
+}
+
+/* Implement the "xfer_partial" target_ops method. */
+
+enum target_xfer_status
+nbsd_nat_target::xfer_partial (enum target_object object,
+ const char *annex, gdb_byte *readbuf,
+ const gdb_byte *writebuf,
+ ULONGEST offset, ULONGEST len,
+ ULONGEST *xfered_len)
+{
+ pid_t pid = inferior_ptid.pid ();
+
+ switch (object)
+ {
+ case TARGET_OBJECT_SIGNAL_INFO:
+ {
+ len = netbsd_nat::qxfer_siginfo(pid, annex, readbuf, writebuf, offset,
+ len);
+
+ if (len == -1)
+ return TARGET_XFER_E_IO;
+
+ *xfered_len = len;
+ return TARGET_XFER_OK;
+ }
+ default:
+ return inf_ptrace_target::xfer_partial (object, annex,
+ readbuf, writebuf, offset,
+ len, xfered_len);
+ }
+}
+
+/* Implement the "supports_dumpcore" target_ops method. */
+
+bool
+nbsd_nat_target::supports_dumpcore ()
+{
+ return true;
+}
+
+/* Implement the "dumpcore" target_ops method. */
+
+void
+nbsd_nat_target::dumpcore (const char *filename)
+{
+ pid_t pid = inferior_ptid.pid ();
+
+ if (ptrace (PT_DUMPCORE, pid, const_cast<char *>(filename),
+ strlen (filename)) == -1)
+ perror_with_name (("ptrace"));
+}