/* * SW breakpoint management: */ int dbg_activate_sw_breakpoints(void) { unsigned long addr; int error; int ret = 0; int i; for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) { if (kgdb_break[i].state != BP_SET) continue; addr = kgdb_break[i].bpt_addr; error = kgdb_arch_set_breakpoint(addr, kgdb_break[i].saved_instr); if (error) { ret = error; printk(KERN_INFO "KGDB: BP install failed: %lx", addr); continue; } kgdb_flush_swbreak_addr(addr); kgdb_break[i].state = BP_ACTIVE; } return ret; }
static int kgdb_deactivate_sw_breakpoints(void) { unsigned long addr; int error = 0; int i; for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) { if (kgdb_break[i].state != BP_ACTIVE) continue; addr = kgdb_break[i].bpt_addr; error = kgdb_arch_remove_breakpoint(addr, kgdb_break[i].saved_instr); if (error) return error; kgdb_flush_swbreak_addr(addr); kgdb_break[i].state = BP_SET; } return 0; }
int dbg_deactivate_sw_breakpoints(void) { int error; int ret = 0; int i; for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) { if (kgdb_break[i].state != BP_ACTIVE) continue; error = kgdb_arch_remove_breakpoint(&kgdb_break[i]); if (error) { printk(KERN_INFO "KGDB: BP remove failed: %lx\n", kgdb_break[i].bpt_addr); ret = error; } kgdb_flush_swbreak_addr(kgdb_break[i].bpt_addr); kgdb_break[i].state = BP_SET; } return ret; }
/* * SW breakpoint management: */ int dbg_activate_sw_breakpoints(void) { int error; int ret = 0; int i; for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) { if (kgdb_break[i].state != BP_SET) continue; error = kgdb_arch_set_breakpoint(&kgdb_break[i]); if (error) { ret = error; pr_info("BP install failed: %lx\n", kgdb_break[i].bpt_addr); continue; } kgdb_flush_swbreak_addr(kgdb_break[i].bpt_addr); kgdb_break[i].state = BP_ACTIVE; } return ret; }