We no longer need to test for BP_CPU, or clear watchpoint_hit.
Signed-off-by: Richard Henderson <[email protected]>
---
target/i386/tcg/system/bpt_helper.c | 32 ++++++++++++-----------------
1 file changed, 13 insertions(+), 19 deletions(-)
diff --git a/target/i386/tcg/system/bpt_helper.c
b/target/i386/tcg/system/bpt_helper.c
index 5dab77b2c4..86562fc946 100644
--- a/target/i386/tcg/system/bpt_helper.c
+++ b/target/i386/tcg/system/bpt_helper.c
@@ -200,28 +200,22 @@ void breakpoint_handler(CPUState *cs, CPUBreakpoint *hit)
X86CPU *cpu = X86_CPU(cs);
CPUX86State *env = &cpu->env;
- hit = cs->watchpoint_hit;
- if (hit) {
- if (hit->flags & BP_CPU) {
- cs->watchpoint_hit = NULL;
- if (check_hw_breakpoints(env, hit)) {
- /*
- * FIXME: #DB should be delayed by one instruction if
- * INHIBIT_IRQ is set (STI cannot trigger a watchpoint).
- * The delayed #DB should also fuse with one generated
- * by ICEBP (aka INT1).
- */
- raise_exception(env, EXCP01_DB);
- } else {
- cpu_loop_exit_noexc(cs);
- }
+ if (hit->flags & BP_MEM_ACCESS) {
+ /* watchpoint */
+ if (!check_hw_breakpoints(env, hit)) {
+ cpu_loop_exit_noexc(cs);
}
+ /*
+ * FIXME: #DB should be delayed by one instruction if
+ * INHIBIT_IRQ is set (STI cannot trigger a watchpoint).
+ * The delayed #DB should also fuse with one generated
+ * by ICEBP (aka INT1).
+ */
} else {
- if (cpu_breakpoint_test(cs, env->eip, BP_CPU)) {
- check_hw_breakpoints(env, NULL);
- raise_exception(env, EXCP01_DB);
- }
+ /* breakpoint */
+ check_hw_breakpoints(env, NULL);
}
+ raise_exception(env, EXCP01_DB);
}
target_ulong helper_get_dr(CPUX86State *env, int reg)
--
2.43.0