static int gdb_breakpoint_remove(target_ulong addr, target_ulong len, int type) { CPUState *cpu; int err = 0; if (kvm_enabled()) { return kvm_remove_breakpoint(gdbserver_state->c_cpu, addr, len, type); } switch (type) { case GDB_BREAKPOINT_SW: case GDB_BREAKPOINT_HW: CPU_FOREACH(cpu) { err = cpu_breakpoint_remove(cpu, addr, BP_GDB); if (err) { break; } } return err; #ifndef CONFIG_USER_ONLY case GDB_WATCHPOINT_WRITE: case GDB_WATCHPOINT_READ: case GDB_WATCHPOINT_ACCESS: CPU_FOREACH(cpu) { err = cpu_watchpoint_remove(cpu, addr, len, xlat_gdb_type(cpu, type)); if (err) break; } return err; #endif default: return -ENOSYS; } }
static int gdb_breakpoint_remove(target_ulong addr, target_ulong len, int type) { CPUState *cpu; CPUArchState *env; int err = 0; if (kvm_enabled()) { return kvm_remove_breakpoint(gdbserver_state->c_cpu, addr, len, type); } switch (type) { case GDB_BREAKPOINT_SW: case GDB_BREAKPOINT_HW: for (cpu = first_cpu; cpu != NULL; cpu = cpu->next_cpu) { env = cpu->env_ptr; err = cpu_breakpoint_remove(env, addr, BP_GDB); if (err) break; } return err; #ifndef CONFIG_USER_ONLY case GDB_WATCHPOINT_WRITE: case GDB_WATCHPOINT_READ: case GDB_WATCHPOINT_ACCESS: for (cpu = first_cpu; cpu != NULL; cpu = cpu->next_cpu) { env = cpu->env_ptr; err = cpu_watchpoint_remove(env, addr, len, xlat_gdb_type[type]); if (err) break; } return err; #endif default: return -ENOSYS; } }