Lines Matching refs:bp

40 static char *kdb_bptype(kdb_bp_t *bp)
42 if (bp->bp_type < 0 || bp->bp_type > 4)
45 return kdb_rwtypes[bp->bp_type];
48 static int kdb_parsebp(int argc, const char **argv, int *nextargp, kdb_bp_t *bp)
53 bp->bph_length = 1;
56 bp->bp_type = BP_ACCESS_WATCHPOINT;
58 bp->bp_type = BP_WRITE_WATCHPOINT;
60 bp->bp_type = BP_HARDWARE_BREAKPOINT;
64 bp->bph_length = 1;
80 bp->bph_length = len;
92 static int _kdb_bp_remove(kdb_bp_t *bp)
95 if (!bp->bp_installed)
97 if (!bp->bp_type)
98 ret = dbg_remove_sw_break(bp->bp_addr);
100 ret = arch_kgdb_ops.remove_hw_breakpoint(bp->bp_addr,
101 bp->bph_length,
102 bp->bp_type);
104 bp->bp_installed = 0;
108 static void kdb_handle_bp(struct pt_regs *regs, kdb_bp_t *bp)
121 bp->bp_delay = 0;
122 bp->bp_delayed = 1;
125 static int _kdb_bp_install(struct pt_regs *regs, kdb_bp_t *bp)
134 __func__, bp->bp_installed);
136 bp->bp_delay = 0;
137 if (bp->bp_installed)
139 if (bp->bp_delay || (bp->bp_delayed && KDB_STATE(DOING_SS))) {
141 kdb_printf("%s: delayed bp\n", __func__);
142 kdb_handle_bp(regs, bp);
145 if (!bp->bp_type)
146 ret = dbg_set_sw_break(bp->bp_addr);
148 ret = arch_kgdb_ops.set_hw_breakpoint(bp->bp_addr,
149 bp->bph_length,
150 bp->bp_type);
152 bp->bp_installed = 1;
155 __func__, bp->bp_addr);
156 if (!bp->bp_type) {
179 kdb_bp_t *bp = &kdb_breakpoints[i];
182 kdb_printf("%s: bp %d bp_enabled %d\n",
183 __func__, i, bp->bp_enabled);
185 if (bp->bp_enabled)
186 _kdb_bp_install(regs, bp);
210 kdb_bp_t *bp = &kdb_breakpoints[i];
213 kdb_printf("%s: bp %d bp_enabled %d\n",
214 __func__, i, bp->bp_enabled);
216 if (bp->bp_enabled)
217 _kdb_bp_remove(bp);
238 static void kdb_printbp(kdb_bp_t *bp, int i)
240 kdb_printf("%s ", kdb_bptype(bp));
242 kdb_symbol_print(bp->bp_addr, NULL, KDB_SP_DEFAULT);
244 if (bp->bp_enabled)
250 bp->bp_addr, bp->bp_type, bp->bp_installed);
258 * Handle the bp commands.
260 * [bp|bph] <addr-expression> [DATAR|DATAW]
273 * bp Set breakpoint on all cpus. Only use hardware assist if need.
280 kdb_bp_t *bp, *bp_check;
291 for (bpno = 0, bp = kdb_breakpoints; bpno < KDB_MAXBPT;
292 bpno++, bp++) {
293 if (bp->bp_free)
295 kdb_printbp(bp, bpno);
319 * Find an empty bp structure to allocate
321 for (bpno = 0, bp = kdb_breakpoints; bpno < KDB_MAXBPT; bpno++, bp++) {
322 if (bp->bp_free)
359 *bp = template;
360 bp->bp_free = 0;
362 kdb_printbp(bp, bpno);
389 kdb_bp_t *bp = NULL;
427 for (i = 0, bp = kdb_breakpoints; i < KDB_MAXBPT;
428 i++, bp++) {
429 if (bp->bp_addr == addr) {
442 for (bp = &kdb_breakpoints[lowbp], i = lowbp;
444 i++, bp++) {
445 if (bp->bp_free)
452 bp->bp_enabled = 0;
456 i, bp->bp_addr);
458 bp->bp_addr = 0;
459 bp->bp_free = 1;
463 bp->bp_enabled = 1;
467 i, bp->bp_addr);
472 if (!bp->bp_enabled)
475 bp->bp_enabled = 0;
479 i, bp->bp_addr);
483 if (bp->bp_delay && (cmd == KDBCMD_BC || cmd == KDBCMD_BD)) {
484 bp->bp_delay = 0;
526 { .name = "bp",
578 kdb_bp_t *bp;
585 for (i = 0, bp = kdb_breakpoints; i < KDB_MAXBPT; i++, bp++)
586 bp->bp_free = 1;