From 488d65772ce94aa439f26d7136db384aec460bcb Mon Sep 17 00:00:00 2001 From: Max Filippov Date: Sun, 29 Jan 2012 02:24:39 +0400 Subject: exec: fix check_watchpoint exiting cpu_loop In case of BP_STOP_BEFORE_ACCESS watchpoint check_watchpoint intends to signal EXCP_DEBUG exception on exit from cpu loop, but later overwrites exception code by the cpu_resume_from_signal call. Use cpu_loop_exit with BP_STOP_BEFORE_ACCESS watchpoints. Signed-off-by: Max Filippov --- exec.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'exec.c') diff --git a/exec.c b/exec.c index f105b43fd..ed091f398 100644 --- a/exec.c +++ b/exec.c @@ -3257,11 +3257,12 @@ static void check_watchpoint(int offset, int len_mask, int flags) tb_phys_invalidate(tb, -1); if (wp->flags & BP_STOP_BEFORE_ACCESS) { env->exception_index = EXCP_DEBUG; + cpu_loop_exit(env); } else { cpu_get_tb_cpu_state(env, &pc, &cs_base, &cpu_flags); tb_gen_code(env, pc, cs_base, cpu_flags, 1); + cpu_resume_from_signal(env, NULL); } - cpu_resume_from_signal(env, NULL); } } else { wp->flags &= ~BP_WATCHPOINT_HIT; -- cgit v1.2.3