mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
Update for the KDB framework:
o Use kdb_alt_break() to handle the alternate break sequence instead of handcoding it here. o Remove GDB kluges to make this driver work with the pre-KDB remote GDB code. o Call kdb_enter() instead of Debugger(). Note that with this commit the dcons(4) driver cannot be used for remote debugging anymore. This driver has to use the new GDB debug port interface instead. Such has not been done yet.
This commit is contained in:
parent
a0eb4d1051
commit
ed9c21cd74
1 changed files with 4 additions and 49 deletions
|
|
@ -36,6 +36,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/kdb.h>
|
||||
#include <sys/kernel.h>
|
||||
#include <sys/module.h>
|
||||
#include <sys/systm.h>
|
||||
|
|
@ -73,13 +74,8 @@
|
|||
#define DCONS_FORCE_CONSOLE 0 /* mostly for FreeBSD-4 */
|
||||
#endif
|
||||
|
||||
#ifndef DCONS_FORCE_GDB
|
||||
#define DCONS_FORCE_GDB 1
|
||||
#endif
|
||||
|
||||
#if __FreeBSD_version >= 500101
|
||||
#define CONS_NODEV 1 /* for latest current */
|
||||
static struct consdev gdbconsdev;
|
||||
#endif
|
||||
|
||||
|
||||
|
|
@ -132,7 +128,6 @@ static struct dcons_softc {
|
|||
struct cdev *dev;
|
||||
struct dcons_ch o, i;
|
||||
int brk_state;
|
||||
#define DC_GDB 1
|
||||
int flags;
|
||||
} sc[DCONS_NPORT];
|
||||
static void dcons_tty_start(struct tty *);
|
||||
|
|
@ -373,26 +368,9 @@ dcons_checkc(struct dcons_softc *dc)
|
|||
ch->pos = 0;
|
||||
}
|
||||
|
||||
#if DDB && ALT_BREAK_TO_DEBUGGER
|
||||
switch (dc->brk_state) {
|
||||
case STATE1:
|
||||
if (c == KEY_TILDE)
|
||||
dc->brk_state = STATE2;
|
||||
else
|
||||
dc->brk_state = STATE0;
|
||||
break;
|
||||
case STATE2:
|
||||
dc->brk_state = STATE0;
|
||||
if (c == KEY_CTRLB) {
|
||||
#if DCONS_FORCE_GDB
|
||||
if (dc->flags & DC_GDB)
|
||||
boothowto |= RB_GDB;
|
||||
#endif
|
||||
breakpoint();
|
||||
}
|
||||
}
|
||||
if (c == KEY_CR)
|
||||
dc->brk_state = STATE1;
|
||||
#if KDB && ALT_BREAK_TO_DEBUGGER
|
||||
if (kdb_alt_break(c, &dc->brk_state))
|
||||
breakpoint();
|
||||
#endif
|
||||
return (c);
|
||||
}
|
||||
|
|
@ -486,20 +464,6 @@ dcons_drv_init(int stage)
|
|||
dcons_init_port(1, offset, size - size0);
|
||||
dg.buf->version = htonl(DCONS_VERSION);
|
||||
dg.buf->magic = ntohl(DCONS_MAGIC);
|
||||
|
||||
#if DDB && DCONS_FORCE_GDB
|
||||
#if CONS_NODEV
|
||||
gdbconsdev.cn_arg = (void *)&sc[DCONS_GDB];
|
||||
#if __FreeBSD_version >= 501109
|
||||
sprintf(gdbconsdev.cn_name, "dgdb");
|
||||
#endif
|
||||
gdb_arg = &gdbconsdev;
|
||||
#else
|
||||
gdbdev = makedev(CDEV_MAJOR, DCONS_GDB);
|
||||
#endif
|
||||
gdb_getc = dcons_cngetc;
|
||||
gdb_putc = dcons_cnputc;
|
||||
#endif
|
||||
drv_init = 1;
|
||||
|
||||
return 0;
|
||||
|
|
@ -535,7 +499,6 @@ dcons_attach(void)
|
|||
int polltime;
|
||||
|
||||
dcons_attach_port(DCONS_CON, "dcons", 0);
|
||||
dcons_attach_port(DCONS_GDB, "dgdb", DC_GDB);
|
||||
#if __FreeBSD_version < 500000
|
||||
callout_init(&dcons_callout);
|
||||
#else
|
||||
|
|
@ -594,18 +557,10 @@ dcons_modevent(module_t mode, int type, void *data)
|
|||
case MOD_UNLOAD:
|
||||
printf("dcons: unload\n");
|
||||
callout_stop(&dcons_callout);
|
||||
#if DDB && DCONS_FORCE_GDB
|
||||
#if CONS_NODEV
|
||||
gdb_arg = NULL;
|
||||
#else
|
||||
gdbdev = NULL;
|
||||
#endif
|
||||
#endif
|
||||
#if __FreeBSD_version >= 500000
|
||||
cnremove(&dcons_consdev);
|
||||
#endif
|
||||
dcons_detach(DCONS_CON);
|
||||
dcons_detach(DCONS_GDB);
|
||||
dg.buf->magic = 0;
|
||||
|
||||
contigfree(dg.buf, DCONS_BUF_SIZE, M_DEVBUF);
|
||||
|
|
|
|||
Loading…
Reference in a new issue