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); }
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); }
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); }
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); }