Ejemplo n.º 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);
}
Ejemplo n.º 2
0
static int
ofw_cngetc(struct consdev *cp)
{
	unsigned char ch;

	if (OF_read(stdin, &ch, 1) > 0) {
#if defined(KDB) && defined(ALT_BREAK_TO_DEBUGGER)
		int kdb_brk;

		if ((kdb_brk = kdb_alt_break(ch, &alt_break_state)) != 0) {
			switch (kdb_brk) {
			case KDB_REQ_DEBUGGER:
				kdb_enter(KDB_WHY_BREAK,
				    "Break sequence on console");
				break;
			case KDB_REQ_PANIC:
				kdb_panic("Panic sequence on console");
				break;
			case KDB_REQ_REBOOT:
				kdb_reboot();
				break;

			}
		}
#endif
		return (ch);
	}

	return (-1);
}
Ejemplo n.º 3
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);
}
Ejemplo n.º 4
0
static int
hvcn_cngetc(struct consdev *cp)
{
	unsigned char ch;
	int l;

	ch = '\0';

	while ((l = hv_cons_getchar(&ch)) != H_EOK) {
#if defined(KDB)
		int kdb_brk;

		if (l == H_BREAK || l ==  H_HUP)
			kdb_enter(KDB_WHY_BREAK, "Break sequence on console");

		if ((kdb_brk = kdb_alt_break(ch, &alt_break_state)) != 0) {
			switch (kdb_brk) {
			case KDB_REQ_DEBUGGER:
				kdb_enter(KDB_WHY_BREAK,
				    "Break sequence on console");
				break;
			case KDB_REQ_PANIC:
				kdb_panic("Panic sequence on console");
				break;
			case KDB_REQ_REBOOT:
				kdb_reboot();
				break;
			}
		}
#endif
		if (l != -2 && l != 0) {
			return (-1);
		}
	}



	return (ch);
}