This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[commit] Fix "target kvm" crash


The crash would happen if you did:

(gdb) target kvm
(gdb) info target

This was caused by a missing to_files_info().  Thanks Marcel, for
catching this!  I checked in the attached patch, which tries to print
something helpful in response of "info target".

Mark

P.S. There seems to be confusion whether we should use filtered or
unfiltered output.  I did go for filtered output since the output from
the underlying exec target can easily be more than a screenfull.


Index: ChangeLog
from  Mark Kettenis  <kettenis@gnu.org>

	* bsd-kvm.c: Include <paths.h>.
	(bsd_kvm_corefile): New variable.
	(core_kd, bsd_kvm_paddr, bsd_kvm_supply_pcb, bsd_kvm_ops): Make
	static.
	(bsd_kvm_open): Set bsd_kvm_corefile.
	(bsd_kvm_files_info): New function.
	(bsd_kvm_add_target): Set to_files_info.

Index: bsd-kvm.c
===================================================================
RCS file: /cvs/src/src/gdb/bsd-kvm.c,v
retrieving revision 1.14
diff -u -p -r1.14 bsd-kvm.c
--- bsd-kvm.c 4 Jul 2005 13:29:10 -0000 1.14
+++ bsd-kvm.c 11 Jul 2005 20:16:43 -0000
@@ -34,6 +34,7 @@
 #ifdef HAVE_NLIST_H
 #include <nlist.h>
 #endif
+#include <paths.h>
 #include "readline/readline.h"
 #include <sys/param.h>
 #include <sys/proc.h>
@@ -41,18 +42,21 @@
 
 #include "bsd-kvm.h"
 
+/* Kernel memory device file.  */
+static const char *bsd_kvm_corefile;
+
 /* Kernel memory interface descriptor.  */
-kvm_t *core_kd;
+static kvm_t *core_kd;
 
 /* Address of process control block.  */
-struct pcb *bsd_kvm_paddr;
+static struct pcb *bsd_kvm_paddr;
 
 /* Pointer to architecture-specific function that reconstructs the
    register state from PCB and supplies it to REGCACHE.  */
-int (*bsd_kvm_supply_pcb)(struct regcache *regcache, struct pcb *pcb);
+static int (*bsd_kvm_supply_pcb)(struct regcache *regcache, struct pcb *pcb);
 
 /* Target ops for libkvm interface.  */
-struct target_ops bsd_kvm_ops;
+static struct target_ops bsd_kvm_ops;
 
 static void
 bsd_kvm_open (char *filename, int from_tty)
@@ -81,6 +85,7 @@ bsd_kvm_open (char *filename, int from_t
   if (temp_kd == NULL)
     error (("%s"), errbuf);
 
+  bsd_kvm_corefile = filename;
   unpush_target (&bsd_kvm_ops);
   core_kd = temp_kd;
   push_target (&bsd_kvm_ops);
@@ -132,6 +137,16 @@ bsd_kvm_xfer_partial (struct target_ops 
     }
 }
 
+static void
+bsd_kvm_files_info (struct target_ops *ops)
+{
+  if (bsd_kvm_corefile && strcmp (bsd_kvm_corefile, _PATH_MEM) != 0)
+    printf_filtered (_("\tUsing the kernel crash dump %s.\n"),
+		     bsd_kvm_corefile);
+  else
+    printf_filtered (_("\tUsing the currently running kernel.\n"));
+}
+
 /* Fetch process control block at address PADDR.  */
 
 static int
@@ -304,6 +319,7 @@ Optionally specify the filename of a cor
   bsd_kvm_ops.to_close = bsd_kvm_close;
   bsd_kvm_ops.to_fetch_registers = bsd_kvm_fetch_registers;
   bsd_kvm_ops.to_xfer_partial = bsd_kvm_xfer_partial;
+  bsd_kvm_ops.to_files_info = bsd_kvm_files_info;
   bsd_kvm_ops.to_stratum = process_stratum;
   bsd_kvm_ops.to_has_memory = 1;
   bsd_kvm_ops.to_has_stack = 1;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]