DDB updates:
authorHiten Pandya <hmp@dragonflybsd.org>
Mon, 28 Jul 2003 04:56:35 +0000 (04:56 +0000)
committerHiten Pandya <hmp@dragonflybsd.org>
Mon, 28 Jul 2003 04:56:35 +0000 (04:56 +0000)
- add 'where' as an alias to 'trace'
- add db_print_backtrace() and backtrace() (machine-dependant)
- add 'reset' command

sys/ddb/db_command.c
sys/ddb/ddb.h
sys/i386/i386/db_trace.c
sys/kern/kern_subr.c
sys/platform/pc32/i386/db_trace.c

index 79ab9c1..af1822a 100644 (file)
@@ -24,7 +24,7 @@
  * rights to redistribute these changes.
  *
  * $FreeBSD: src/sys/ddb/db_command.c,v 1.34.2.2 2001/07/29 22:48:36 kris Exp $
- * $DragonFly: src/sys/ddb/db_command.c,v 1.3 2003/07/26 14:18:51 rob Exp $
+ * $DragonFly: src/sys/ddb/db_command.c,v 1.4 2003/07/28 04:56:35 hmp Exp $
  */
 
 /*
@@ -46,6 +46,8 @@
 #include <ddb/db_lex.h>
 #include <ddb/db_output.h>
 
+#include <machine/md_var.h>    /* needed for db_reset() */
+
 #include <setjmp.h>
 
 /*
@@ -62,6 +64,7 @@ extern struct linker_set      db_show_cmd_set;
 
 static db_cmdfcn_t     db_fncall;
 static db_cmdfcn_t     db_gdb;
+static db_cmdfcn_t     db_reset;
 
 /* XXX this is actually forward-static. */
 extern struct command  db_show_cmds[];
@@ -404,10 +407,12 @@ static struct command db_command_table[] = {
        { "next",       db_trace_until_matching_cmd,0,  0 },
        { "match",      db_trace_until_matching_cmd,0,  0 },
        { "trace",      db_stack_trace_cmd,     0,      0 },
+       { "where",      db_stack_trace_cmd, 0,  0 },
        { "call",       db_fncall,              CS_OWN, 0 },
        { "show",       0,                      0,      db_show_cmds },
        { "ps",         db_ps,                  0,      0 },
        { "gdb",        db_gdb,                 0,      0 },
+       { "reset",      db_reset,               0,      0 },
        { (char *)0, }
 };
 
@@ -562,3 +567,14 @@ db_gdb (dummy1, dummy2, dummy3, dummy4)
                   boothowto & RB_GDB ? "GDB remote protocol mode"
                                      : "DDB debugger");
 }
+
+static void
+db_reset (
+       db_expr_t dummy1,
+       boolean_t dummy2,
+       db_expr_t dummy3,
+       char * dummy4
+) {
+               
+               cpu_reset();
+}
index 89fca10..4185028 100644 (file)
@@ -28,7 +28,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/ddb/ddb.h,v 1.24.2.2 2002/08/30 22:27:49 gibbs Exp $
- * $DragonFly: src/sys/ddb/ddb.h,v 1.3 2003/07/08 06:27:23 dillon Exp $
+ * $DragonFly: src/sys/ddb/ddb.h,v 1.4 2003/07/28 04:56:35 hmp Exp $
  */
 
 /*
@@ -136,6 +136,11 @@ db_cmdfcn_t        ipc_port_print;
 db_cmdfcn_t    vm_page_print;
 #endif
 
+/*
+ * Print backtrace. (Machine-Dependant)
+ */
+void           db_print_backtrace(void);
+
 /*
  * Command table.
  */
index ae9233b..4abd6b0 100644 (file)
@@ -24,7 +24,7 @@
  * rights to redistribute these changes.
  *
  * $FreeBSD: src/sys/i386/i386/db_trace.c,v 1.35.2.3 2002/02/21 22:31:25 silby Exp $
- * $DragonFly: src/sys/i386/i386/Attic/db_trace.c,v 1.3 2003/06/18 18:29:55 dillon Exp $
+ * $DragonFly: src/sys/i386/i386/Attic/db_trace.c,v 1.4 2003/07/28 04:56:35 hmp Exp $
  */
 
 #include <sys/param.h>
@@ -422,6 +422,15 @@ db_stack_trace_cmd(addr, have_addr, count, modif)
        }
 }
 
+void
+db_print_backtrace(void)
+{
+               register_t  ebp;
+
+               __asm __volatile("movl %%ebp, %0" : "=r" (ebp));
+               db_stack_trace_cmd(ebp, 1, -1, NULL);
+}
+
 #define DB_DRX_FUNC(reg)               \
 int                                    \
 db_ ## reg (vp, valuep, op)            \
index 6892616..6c9fdd0 100644 (file)
  *
  *     @(#)kern_subr.c 8.3 (Berkeley) 1/21/94
  * $FreeBSD: src/sys/kern/kern_subr.c,v 1.31.2.2 2002/04/21 08:09:37 bde Exp $
- * $DragonFly: src/sys/kern/kern_subr.c,v 1.8 2003/07/26 19:42:11 rob Exp $
+ * $DragonFly: src/sys/kern/kern_subr.c,v 1.9 2003/07/28 04:56:35 hmp Exp $
  */
 
+#include "opt_ddb.h"
+
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
@@ -49,6 +51,8 @@
 #include <sys/resourcevar.h>
 #include <sys/vnode.h>
 
+#include <ddb/ddb.h>
+
 #include <vm/vm.h>
 #include <vm/vm_page.h>
 #include <vm/vm_map.h>
@@ -422,3 +426,18 @@ phashinit(elements, type, nentries)
        return (hashtbl);
 }
 
+/*
+ * Simple DDB stack trace funtionality.
+ */
+void
+backtrace(void)
+{
+
+#ifdef DDB
+               printf("Stack backtrace:\n");
+               db_print_backtrace();
+#else
+               printf("Cannot print stack trace.\n");
+               printf("DDB kernel option is needed.\n");
+#endif
+}
index 432b4f7..4477583 100644 (file)
@@ -24,7 +24,7 @@
  * rights to redistribute these changes.
  *
  * $FreeBSD: src/sys/i386/i386/db_trace.c,v 1.35.2.3 2002/02/21 22:31:25 silby Exp $
- * $DragonFly: src/sys/platform/pc32/i386/db_trace.c,v 1.3 2003/06/18 18:29:55 dillon Exp $
+ * $DragonFly: src/sys/platform/pc32/i386/db_trace.c,v 1.4 2003/07/28 04:56:35 hmp Exp $
  */
 
 #include <sys/param.h>
@@ -422,6 +422,15 @@ db_stack_trace_cmd(addr, have_addr, count, modif)
        }
 }
 
+void
+db_print_backtrace(void)
+{
+               register_t  ebp;
+
+               __asm __volatile("movl %%ebp, %0" : "=r" (ebp));
+               db_stack_trace_cmd(ebp, 1, -1, NULL);
+}
+
 #define DB_DRX_FUNC(reg)               \
 int                                    \
 db_ ## reg (vp, valuep, op)            \