X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fbsd-kvm.c;h=8edc026fd3be6db234de97e9044d9568f6270ce6;hb=632e107b32c0fe8aede62e070b00756e9fdd2c01;hp=a27e27c911857f366bd055595822c9fe916de183;hpb=4a64f543e68bd1a6f2fbf7409c7fb4e9fdf73d78;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/bsd-kvm.c b/gdb/bsd-kvm.c index a27e27c911..8edc026fd3 100644 --- a/gdb/bsd-kvm.c +++ b/gdb/bsd-kvm.c @@ -1,7 +1,6 @@ /* BSD Kernel Data Access Library (libkvm) interface. - Copyright (C) 2004, 2005, 2007, 2008, 2009, 2010 - Free Software Foundation, Inc. + Copyright (C) 2004-2018 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 . */ +#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 #include #ifdef HAVE_NLIST_H @@ -38,7 +37,9 @@ #include "readline/readline.h" #include #include +#ifdef HAVE_SYS_USER_H #include +#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")); } @@ -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); }