X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fbsd-kvm.c;h=98e242836d9d236037205bde29c32f3ec159983a;hb=b54b03bd874936ab3c91f23e5dff3a87153c4e36;hp=1e43ccc936cfcfec84fbc71e7bc5cde0f378ceed;hpb=460014f572f44fe3e8deb146cb92fd312c4c3339;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/bsd-kvm.c b/gdb/bsd-kvm.c index 1e43ccc936..98e242836d 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-2013 Free Software Foundation, Inc. + Copyright (C) 2004-2017 Free Software Foundation, Inc. This file is part of GDB. @@ -27,7 +27,6 @@ #include "gdbcore.h" /* for get_exec_file */ #include "gdbthread.h" -#include "gdb_assert.h" #include #include #ifdef HAVE_NLIST_H @@ -63,19 +62,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); @@ -101,11 +101,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 (void) +bsd_kvm_close (struct target_ops *self) { if (core_kd) { @@ -131,19 +131,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; } } @@ -287,7 +299,7 @@ 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 @@ -307,7 +319,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 @@ -317,7 +329,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];