Subject: Re: ddb_trap_hook
To: None <bouyer@antioche.eu.org>
From: YAMAMOTO Takashi <yamt@mwd.biglobe.ne.jp>
List: port-xen
Date: 11/23/2005 22:07:40
--NextPart-20051123220306-0491100
Content-Type: Text/Plain; charset=us-ascii
> > > > i'll remove ddb_trap_hook unless anyone objects.
> > >
> > > Why ? I've found this usefull on occasion, when the kernel doesn't accept
> > > keyboard input any more (both in dom0 and domU).
> >
> > because:
> > - it annoys me when the console doesn't have enough lines. eg. vga
>
> You can still use dmesg to get what was before the trace
not all messages are from kernel.
> > - it isn't xen-specific at all.
> > if it's really desirable, it should be done in MI ddb.
>
> Sure it would be nice to have this in MI ddb as a compile time option.
> For now, please keep it as a compile time option so that it can be enabled
> when desireable.
the attached patch is enough for you?
usage: options DDB_COMMANDONENTER="tr;sh re"
YAMAMOTO Takashi
--NextPart-20051123220306-0491100
Content-Type: Text/Plain; charset=us-ascii
Content-Disposition: attachment; filename="a.diff"
Index: conf/files
===================================================================
RCS file: /cvsroot/src/sys/conf/files,v
retrieving revision 1.739.2.3
diff -u -p -r1.739.2.3 files
--- conf/files 22 Nov 2005 16:08:06 -0000 1.739.2.3
+++ conf/files 23 Nov 2005 13:00:31 -0000
@@ -202,6 +202,7 @@ defflag opt_mbr.h COMPAT_386BSD_MBRPART
defflag opt_ddb.h DDB
defparam opt_ddbparam.h DDB_FROMCONSOLE DDB_ONPANIC DDB_HISTORY_SIZE
DDB_BREAK_CHAR DDB_KEYCODE SYMTAB_SPACE
+ DDB_COMMANDONENTER
defflag opt_kgdb.h KGDB
defparam opt_kgdb.h KGDB_DEV KGDB_DEVNAME KGDB_DEVPORT
KGDB_DEVADDR KGDB_DEVRATE KGDB_DEVMODE
Index: ddb/db_command.c
===================================================================
RCS file: /cvsroot/src/sys/ddb/db_command.c,v
retrieving revision 1.79
diff -u -p -r1.79 db_command.c
--- ddb/db_command.c 1 Jun 2005 12:25:27 -0000 1.79
+++ ddb/db_command.c 23 Nov 2005 13:00:31 -0000
@@ -36,6 +36,7 @@ __KERNEL_RCSID(0, "$NetBSD$");
#include "opt_ddb.h"
#include "opt_kgdb.h"
#include "opt_inet.h"
+#include "opt_ddbparam.h"
#include <sys/param.h>
#include <sys/systm.h>
@@ -201,6 +202,10 @@ static const struct db_command db_comman
};
static const struct db_command *db_last_command = NULL;
+#if defined(DDB_COMMANDONENTER)
+const char *db_cmd_on_enter = ___STRING(DDB_COMMANDONENTER);
+#endif /* defined(DDB_COMMANDONENTER) */
+#define DB_LINE_SEP ';'
/*
* Utility routine - discard tokens through end-of-line.
@@ -244,6 +249,27 @@ db_command_loop(void)
db_recover = &db_jmpbuf;
(void) setjmp(&db_jmpbuf);
+#if defined(DDB_COMMANDONENTER)
+ if (db_cmd_on_enter != NULL) {
+ const struct db_command *dummy = NULL;
+ const char *cmd = db_cmd_on_enter;
+
+ while (*cmd != '\0') {
+ const char *ep = cmd;
+
+ while (*ep != '\0' && *ep != DB_LINE_SEP) {
+ ep++;
+ }
+ db_set_line(cmd, ep);
+ db_command(&dummy, db_command_table);
+ cmd = ep;
+ if (*cmd == DB_LINE_SEP) {
+ cmd++;
+ }
+ }
+ }
+#endif /* defined(DDB_COMMANDONENTER) */
+
while (!db_cmd_loop_done) {
if (db_print_position() != 0)
db_printf("\n");
Index: ddb/db_lex.c
===================================================================
RCS file: /cvsroot/src/sys/ddb/db_lex.c,v
retrieving revision 1.18
diff -u -p -r1.18 db_lex.c
--- ddb/db_lex.c 17 May 2003 09:58:03 -0000 1.18
+++ ddb/db_lex.c 23 Nov 2005 13:00:31 -0000
@@ -52,7 +52,8 @@ db_expr_t db_tok_number;
char db_tok_string[TOK_STRING_SIZE];
static char db_line[120];
-static char *db_lp, *db_endlp;
+static const char *db_lp;
+static const char *db_endlp;
static int db_look_char = 0;
static int db_look_token = 0;
@@ -70,11 +71,18 @@ db_read_line(void)
i = db_readline(db_line, sizeof(db_line));
if (i == 0)
return (0); /* EOI */
- db_lp = db_line;
- db_endlp = db_lp + i;
+ db_set_line(db_line, db_line + i);
return (i);
}
+void
+db_set_line(const char *sp, const char *ep)
+{
+
+ db_lp = sp;
+ db_endlp = ep;
+}
+
static void
db_flush_line(void)
{
Index: ddb/db_lex.h
===================================================================
RCS file: /cvsroot/src/sys/ddb/db_lex.h,v
retrieving revision 1.13
diff -u -p -r1.13 db_lex.h
--- ddb/db_lex.h 15 Feb 2002 07:33:51 -0000 1.13
+++ ddb/db_lex.h 23 Nov 2005 13:00:31 -0000
@@ -35,6 +35,7 @@
void db_flush_lex(void);
char *db_num_to_str(db_expr_t);
int db_read_line(void);
+void db_set_line(const char *, const char *);
int db_read_token(void);
void db_unread_token(int);
--NextPart-20051123220306-0491100--