X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fbsd-kvm.c;h=8edc026fd3be6db234de97e9044d9568f6270ce6;hb=632e107b32c0fe8aede62e070b00756e9fdd2c01;hp=36b33e93b6ea5445d208c03c5b73123ddc3930d4;hpb=2ed4b5488f68c63da0713dc008ba8b688a742386;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/bsd-kvm.c b/gdb/bsd-kvm.c index 36b33e93b6..8edc026fd3 100644 --- a/gdb/bsd-kvm.c +++ b/gdb/bsd-kvm.c @@ -1,6 +1,6 @@ /* BSD Kernel Data Access Library (libkvm) interface. - Copyright (C) 2004-2014 Free Software Foundation, Inc. + Copyright (C) 2004-2018 Free Software Foundation, Inc. This file is part of GDB. @@ -17,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" @@ -27,7 +28,6 @@ #include "gdbcore.h" /* for get_exec_file */ #include "gdbthread.h" -#include "gdb_assert.h" #include #include #ifdef HAVE_NLIST_H @@ -37,7 +37,9 @@ #include "readline/readline.h" #include #include +#ifdef HAVE_SYS_USER_H #include +#endif #include "bsd-kvm.h" @@ -63,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); @@ -105,7 +108,7 @@ bsd_kvm_open (char *filename, int from_tty) } static void -bsd_kvm_close (void) +bsd_kvm_close (struct target_ops *self) { if (core_kd) { @@ -131,16 +134,28 @@ 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, ULONGEST 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 TARGET_XFER_E_IO; @@ -256,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"? */ } @@ -264,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; @@ -293,7 +308,7 @@ bsd_kvm_proc_cmd (char *arg, int fromtty) #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". */ @@ -317,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];