]> git.proxmox.com Git - mirror_qemu.git/commitdiff
exec: extract TB watchpoint check
authorBlue Swirl <blauwirbel@gmail.com>
Sun, 2 Dec 2012 21:28:09 +0000 (21:28 +0000)
committerBlue Swirl <blauwirbel@gmail.com>
Sun, 16 Dec 2012 08:28:29 +0000 (08:28 +0000)
Will be moved by the next patch.

Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
exec.c

diff --git a/exec.c b/exec.c
index 2e56a8ab07ddb8a09fb00d65d8fd87394dbde550..a1f617d0e1a0802c6270ef72c63e3407477f21af 100644 (file)
--- a/exec.c
+++ b/exec.c
@@ -2987,12 +2987,24 @@ static const MemoryRegionOps notdirty_mem_ops = {
     .endianness = DEVICE_NATIVE_ENDIAN,
 };
 
+static void tb_check_watchpoint(CPUArchState *env)
+{
+    TranslationBlock *tb;
+
+    tb = tb_find_pc(env->mem_io_pc);
+    if (!tb) {
+        cpu_abort(env, "check_watchpoint: could not find TB for pc=%p",
+                  (void *)env->mem_io_pc);
+    }
+    cpu_restore_state(tb, env, env->mem_io_pc);
+    tb_phys_invalidate(tb, -1);
+}
+
 /* Generate a debug exception if a watchpoint has been hit.  */
 static void check_watchpoint(int offset, int len_mask, int flags)
 {
     CPUArchState *env = cpu_single_env;
     target_ulong pc, cs_base;
-    TranslationBlock *tb;
     target_ulong vaddr;
     CPUWatchpoint *wp;
     int cpu_flags;
@@ -3011,13 +3023,7 @@ static void check_watchpoint(int offset, int len_mask, int flags)
             wp->flags |= BP_WATCHPOINT_HIT;
             if (!env->watchpoint_hit) {
                 env->watchpoint_hit = wp;
-                tb = tb_find_pc(env->mem_io_pc);
-                if (!tb) {
-                    cpu_abort(env, "check_watchpoint: could not find TB for "
-                              "pc=%p", (void *)env->mem_io_pc);
-                }
-                cpu_restore_state(tb, env, env->mem_io_pc);
-                tb_phys_invalidate(tb, -1);
+                tb_check_watchpoint(env);
                 if (wp->flags & BP_STOP_BEFORE_ACCESS) {
                     env->exception_index = EXCP_DEBUG;
                     cpu_loop_exit(env);