Skip to content

Commit

Permalink
cpu-exec: introduce loop exit with restore function
Browse files Browse the repository at this point in the history
This patch introduces loop exit function, which also
restores guest CPU state according to the value of host
program counter.

Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Pavel Dovgalyuk <pavel.dovgaluk@ispras.ru>
Message-Id: <20150710095702.13280.97477.stgit@PASHA-ISP>
Signed-off-by: Richard Henderson <rth@twiddle.net>
  • Loading branch information
Dovgalyuk authored and rth7680 committed Sep 11, 2015
1 parent b861149 commit 1c3c8af
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 0 deletions.
9 changes: 9 additions & 0 deletions cpu-exec.c
Expand Up @@ -134,6 +134,15 @@ void cpu_loop_exit(CPUState *cpu)
siglongjmp(cpu->jmp_env, 1);
}

void cpu_loop_exit_restore(CPUState *cpu, uintptr_t pc)
{
if (pc) {
cpu_restore_state(cpu, pc);
}
cpu->current_tb = NULL;
siglongjmp(cpu->jmp_env, 1);
}

/* exit the current TB from a signal handler. The host registers are
restored in a state compatible with the CPU emulator
*/
Expand Down
1 change: 1 addition & 0 deletions include/exec/exec-all.h
Expand Up @@ -90,6 +90,7 @@ TranslationBlock *tb_gen_code(CPUState *cpu,
int cflags);
void cpu_exec_init(CPUState *cpu, Error **errp);
void QEMU_NORETURN cpu_loop_exit(CPUState *cpu);
void QEMU_NORETURN cpu_loop_exit_restore(CPUState *cpu, uintptr_t pc);

#if !defined(CONFIG_USER_ONLY)
bool qemu_in_vcpu_thread(void);
Expand Down

0 comments on commit 1c3c8af

Please sign in to comment.