Example #1
0
static int
kdb_alt_break_internal(int key, int *state, int force_gdb)
{
	int brk;

	if (!kdb_alt_break_to_debugger)
		return (0);
	brk = kdb_alt_break_state(key, state);
	switch (brk) {
	case KDB_REQ_DEBUGGER:
		if (force_gdb)
			kdb_dbbe_select("gdb");
		kdb_enter(KDB_WHY_BREAK, "Break to debugger");
		break;

	case KDB_REQ_PANIC:
		if (force_gdb)
			kdb_dbbe_select("gdb");
		kdb_panic("Panic sequence on console");
		break;

	case KDB_REQ_REBOOT:
		kdb_reboot();
		break;
	}
	return (0);
}
Example #2
0
static int
dcons_check_break(struct dcons_softc *dc, int c)
{
	int kdb_brk;

	if (c < 0)
		return (c);

	if ((kdb_brk = kdb_alt_break(c, &dc->brk_state)) != 0) {
		switch (kdb_brk) {
		case KDB_REQ_DEBUGGER:
			if ((dc->flags & DC_GDB) != 0) {
#ifdef GDB
				if (gdb_cur == &dcons_gdb_dbgport) {
					kdb_dbbe_select("gdb");
					kdb_enter(KDB_WHY_BREAK,
					    "Break sequence on dcons gdb port");
				}
#endif
			} else
				kdb_enter(KDB_WHY_BREAK,
				    "Break sequence on dcons console port");
			break;
		case KDB_REQ_PANIC:
			kdb_panic("Panic sequence on dcons console port");
			break;
		case KDB_REQ_REBOOT:
			kdb_reboot();
			break;
		}
	}
	return (c);
}
Example #3
0
static int
kdb_sysctl_current(SYSCTL_HANDLER_ARGS)
{
	char buf[16];
	int error;

	if (kdb_dbbe != NULL)
		strlcpy(buf, kdb_dbbe->dbbe_name, sizeof(buf));
	else
		*buf = '\0';
	error = sysctl_handle_string(oidp, buf, sizeof(buf), req);
	if (error != 0 || req->newptr == NULL)
		return (error);
	if (kdb_active)
		return (EBUSY);
	return (kdb_dbbe_select(buf));
}
Example #4
0
static int
gdb_getc(void)
{
	int c;

	do
		c = gdb_cur->gdb_getc();
	while (c == -1);

	if (c == CTRL('C')) {
		printf("Received ^C; trying to switch back to ddb.\n");

		if (kdb_dbbe_select("ddb") != 0)
			printf("The ddb backend could not be selected.\n");
		else {
			printf("using longjmp, hope it works!\n");
			kdb_reenter();
		}
	}
	return (c);
}