summary refs log tree commit diff stats
path: root/cpu-exec.c
diff options
context:
space:
mode:
authorAndreas Färber <afaerber@suse.de>2013-06-28 19:31:32 +0200
committerAndreas Färber <afaerber@suse.de>2013-07-23 02:41:32 +0200
commitbdf7ae5bbdb3f050d97862b2ba0261fa902ebc53 (patch)
treedec1f74f86690f2f5e7e9682e82ae08e40c0ac49 /cpu-exec.c
parentb42eab27beaefd5c9bf9353383d6403e0628c014 (diff)
downloadfocaccia-qemu-bdf7ae5bbdb3f050d97862b2ba0261fa902ebc53.tar.gz
focaccia-qemu-bdf7ae5bbdb3f050d97862b2ba0261fa902ebc53.zip
cpu: Introduce CPUClass::synchronize_from_tb() for cpu_pc_from_tb()
Where no extra implementation is needed, fall back to CPUClass::set_pc().

Acked-by: Michael Walle <michael@walle.cc> (for lm32)
Signed-off-by: Andreas Färber <afaerber@suse.de>
Diffstat (limited to 'cpu-exec.c')
-rw-r--r--cpu-exec.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/cpu-exec.c b/cpu-exec.c
index 6c784a7e09..3fccb8617e 100644
--- a/cpu-exec.c
+++ b/cpu-exec.c
@@ -59,8 +59,14 @@ static inline tcg_target_ulong cpu_tb_exec(CPUState *cpu, uint8_t *tb_ptr)
          * counter hit zero); we must restore the guest PC to the address
          * of the start of the TB.
          */
+        CPUClass *cc = CPU_GET_CLASS(cpu);
         TranslationBlock *tb = (TranslationBlock *)(next_tb & ~TB_EXIT_MASK);
-        cpu_pc_from_tb(env, tb);
+        if (cc->synchronize_from_tb) {
+            cc->synchronize_from_tb(cpu, tb);
+        } else {
+            assert(cc->set_pc);
+            cc->set_pc(cpu, tb->pc);
+        }
     }
     if ((next_tb & TB_EXIT_MASK) == TB_EXIT_REQUESTED) {
         /* We were asked to stop executing TBs (probably a pending