Define YYOBJ in terms of YYFILES
[deliverable/binutils-gdb.git] / gdb / bsd-kvm.c
index 503987971fabdef7f72d9948b0a2b5af57460dea..7cc73afd6d8653e536228b6446ccd34e35aa2764 100644 (file)
@@ -1,7 +1,6 @@
 /* BSD Kernel Data Access Library (libkvm) interface.
 
-   Copyright (C) 2004, 2005, 2007, 2008, 2009, 2010, 2011
-   Free Software Foundation, Inc.
+   Copyright (C) 2004-2017 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -18,6 +17,7 @@
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
+#define _KMEMUSER
 #include "defs.h"
 #include "cli/cli-cmds.h"
 #include "command.h"
@@ -28,7 +28,6 @@
 #include "gdbcore.h"           /* for get_exec_file */
 #include "gdbthread.h"
 
-#include "gdb_assert.h"
 #include <fcntl.h>
 #include <kvm.h>
 #ifdef HAVE_NLIST_H
@@ -38,7 +37,9 @@
 #include "readline/readline.h"
 #include <sys/param.h>
 #include <sys/proc.h>
+#ifdef HAVE_SYS_USER_H
 #include <sys/user.h>
+#endif
 
 #include "bsd-kvm.h"
 
@@ -64,19 +65,20 @@ static struct target_ops bsd_kvm_ops;
 static ptid_t bsd_kvm_ptid;
 
 static void
-bsd_kvm_open (char *filename, int from_tty)
+bsd_kvm_open (const char *arg, int from_tty)
 {
   char errbuf[_POSIX2_LINE_MAX];
   char *execfile = NULL;
   kvm_t *temp_kd;
+  char *filename = NULL;
 
   target_preopen (from_tty);
 
-  if (filename)
+  if (arg)
     {
       char *temp;
 
-      filename = tilde_expand (filename);
+      filename = tilde_expand (arg);
       if (filename[0] != '/')
        {
          temp = concat (current_directory, "/", filename, (char *)NULL);
@@ -102,11 +104,11 @@ bsd_kvm_open (char *filename, int from_tty)
   target_fetch_registers (get_current_regcache (), -1);
 
   reinit_frame_cache ();
-  print_stack_frame (get_selected_frame (NULL), -1, 1);
+  print_stack_frame (get_selected_frame (NULL), 0, SRC_AND_LOC, 1);
 }
 
 static void
-bsd_kvm_close (int quitting)
+bsd_kvm_close (struct target_ops *self)
 {
   if (core_kd)
     {
@@ -132,19 +134,31 @@ bsd_kvm_xfer_memory (CORE_ADDR addr, ULONGEST len,
   return nbytes;
 }
 
-static LONGEST
+static enum target_xfer_status
 bsd_kvm_xfer_partial (struct target_ops *ops, enum target_object object,
                      const char *annex, gdb_byte *readbuf,
                      const gdb_byte *writebuf,
-                     ULONGEST offset, LONGEST len)
+                     ULONGEST offset, ULONGEST len, ULONGEST *xfered_len)
 {
   switch (object)
     {
     case TARGET_OBJECT_MEMORY:
-      return bsd_kvm_xfer_memory (offset, len, readbuf, writebuf);
+      {
+       LONGEST ret = bsd_kvm_xfer_memory (offset, len, readbuf, writebuf);
+
+       if (ret < 0)
+         return TARGET_XFER_E_IO;
+       else if (ret == 0)
+         return TARGET_XFER_EOF;
+       else
+         {
+           *xfered_len = (ULONGEST) ret;
+           return TARGET_XFER_OK;
+         }
+      }
 
     default:
-      return -1;
+      return TARGET_XFER_E_IO;
     }
 }
 
@@ -248,7 +262,7 @@ bsd_kvm_fetch_registers (struct target_ops *ops,
     }
 #endif
 
-  /* i18n: PCB == "Process Control Block" */
+  /* i18n: PCB == "Process Control Block" */
   error (_("Cannot find a valid PCB"));
 }
 \f
@@ -257,7 +271,7 @@ bsd_kvm_fetch_registers (struct target_ops *ops,
 struct cmd_list_element *bsd_kvm_cmdlist;
 
 static void
-bsd_kvm_cmd (char *arg, int fromtty)
+bsd_kvm_cmd (const char *arg, int fromtty)
 {
   /* ??? Should this become an alias for "target kvm"?  */
 }
@@ -265,7 +279,7 @@ bsd_kvm_cmd (char *arg, int fromtty)
 #ifndef HAVE_STRUCT_THREAD_TD_PCB
 
 static void
-bsd_kvm_proc_cmd (char *arg, int fromtty)
+bsd_kvm_proc_cmd (const char *arg, int fromtty)
 {
   CORE_ADDR addr;
 
@@ -288,16 +302,16 @@ bsd_kvm_proc_cmd (char *arg, int fromtty)
   target_fetch_registers (get_current_regcache (), -1);
 
   reinit_frame_cache ();
-  print_stack_frame (get_selected_frame (NULL), -1, 1);
+  print_stack_frame (get_selected_frame (NULL), 0, SRC_AND_LOC, 1);
 }
 
 #endif
 
 static void
-bsd_kvm_pcb_cmd (char *arg, int fromtty)
+bsd_kvm_pcb_cmd (const char *arg, int fromtty)
 {
   if (arg == NULL)
-    /* i18n: PCB == "Process Control Block" */
+    /* i18n: PCB == "Process Control Block" */
     error_no_arg (_("pcb address"));
 
   if (core_kd == NULL)
@@ -308,7 +322,7 @@ bsd_kvm_pcb_cmd (char *arg, int fromtty)
   target_fetch_registers (get_current_regcache (), -1);
 
   reinit_frame_cache ();
-  print_stack_frame (get_selected_frame (NULL), -1, 1);
+  print_stack_frame (get_selected_frame (NULL), 0, SRC_AND_LOC, 1);
 }
 
 static int
@@ -318,7 +332,7 @@ bsd_kvm_thread_alive (struct target_ops *ops,
   return 1;
 }
 
-static char *
+static const char *
 bsd_kvm_pid_to_str (struct target_ops *ops, ptid_t ptid)
 {
   static char buf[64];
@@ -370,7 +384,7 @@ Generic command for manipulating the kernel memory interface."),
           _("Set current context from proc address"), &bsd_kvm_cmdlist);
 #endif
   add_cmd ("pcb", class_obscure, bsd_kvm_pcb_cmd,
-          /* i18n: PCB == "Process Control Block" */
+          /* i18n: PCB == "Process Control Block" */
           _("Set current context from pcb address"), &bsd_kvm_cmdlist);
 
   /* Some notes on the ptid usage on this target.
@@ -385,7 +399,7 @@ Generic command for manipulating the kernel memory interface."),
      ptid (1, 1, 0) -> kvm inferior 1, in kernel
      ptid (1, 1, 1) -> kvm inferior 1, process 1
      ptid (1, 1, 2) -> kvm inferior 1, process 2
-     ptid (1, 1, n) -> kvm inferior 1, process n
-  */
+     ptid (1, 1, n) -> kvm inferior 1, process n  */
+
   bsd_kvm_ptid = ptid_build (1, 1, 0);
 }
This page took 0.025874 seconds and 4 git commands to generate.