static int kdb_ss(int argc, const char **argv) { int ssb = 0; struct pt_regs *regs = get_irq_regs(); ssb = (strcmp(argv[0], "ssb") == 0); if (argc != 0) return KDB_ARGCOUNT; if (!regs) { kdb_printf("%s: pt_regs not available\n", __FUNCTION__); return KDB_BADREG; } /* * Set trace flag and go. */ KDB_STATE_SET(DOING_SS); if (ssb) KDB_STATE_SET(DOING_SSB); kdba_setsinglestep(regs); /* Enable single step */ if (ssb) return KDB_CMD_SSB; return KDB_CMD_SS; }
static void kdba_handle_bp(struct pt_regs *regs, kdb_bp_t *bp) { if (KDB_NULL_REGS(regs)) return; if (KDB_DEBUG(BP)) kdb_printf("regs->rip = 0x%lx\n", regs->rip); /* * Setup single step */ kdba_setsinglestep(regs); /* * Reset delay attribute */ bp->bp_delay = 0; bp->bp_delayed = 1; }