PERFORCE change 48677 for review
Marcel Moolenaar
marcel at FreeBSD.org
Wed Mar 10 21:31:29 PST 2004
http://perforce.freebsd.org/chv.cgi?CH=48677
Change 48677 by marcel at marcel_nfs on 2004/03/10 21:31:12
First draft of the KDB backend interface.
Affected files ...
.. //depot/projects/gdb/sys/kern/subr_kdb.c#3 edit
.. //depot/projects/gdb/sys/sys/kdb.h#2 edit
Differences ...
==== //depot/projects/gdb/sys/kern/subr_kdb.c#3 (text+ko) ====
@@ -30,10 +30,14 @@
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/kdb.h>
+#include <sys/kernel.h>
int kdb_active = 0;
struct kdb_dbbe *kdb_cur = NULL;
+KDB_BACKEND(null, NULL, NULL, NULL, NULL);
+SET_DECLARE(kdb_dbbe_set, struct kdb_dbbe);
+
/*
* Solaris implements a new BREAK which is initiated by a character sequence
* CR ~ ^b which is similar to a familiar pattern used on Sun servers by the
@@ -120,9 +124,30 @@
void
kdb_init()
{
+ struct kdb_dbbe *be, **iter;
+ int cur_pri, pri;
kdb_active = 0;
kdb_cur = NULL;
+ cur_pri = -1;
+ SET_FOREACH(iter, kdb_dbbe_set) {
+ be = *iter;
+ pri = (be->dbbe_init != NULL) ? be->dbbe_init() : -1;
+ if (pri >= 0) {
+ if (cur_pri == -1)
+ printf("KDB: debugger backends:");
+ printf(" %s", be->dbbe_name);
+ if (pri > cur_pri) {
+ cur_pri = pri;
+ kdb_cur = be;
+ }
+ }
+ }
+ if (cur_pri != -1) {
+ printf("\n");
+ printf("KDB: current=%s\n", kdb_cur->dbbe_name);
+ } else
+ printf("KDB: no debugger backends present\n");
}
/*
==== //depot/projects/gdb/sys/sys/kdb.h#2 (text+ko) ====
@@ -44,6 +44,16 @@
dbbe_trap_f *dbbe_trap;
};
+#define KDB_BACKEND(name, init, trace, enter, trap) \
+ static struct kdb_dbbe name##_dbbe = { \
+ .dbbe_name = #name, \
+ .dbbe_enter = enter, \
+ .dbbe_init = init, \
+ .dbbe_trace = trace, \
+ .dbbe_trap = trap \
+ }; \
+ DATA_SET(kdb_dbbe_set, name##_dbbe)
+
extern int kdb_active; /* Non-zero while in debugger. */
extern struct kdb_dbbe *kdb_cur; /* Default debugger backend or NULL. */
More information about the p4-projects
mailing list