mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2024-12-23 10:55:34 +00:00
x86: correct EIP of INT instruction by updating it only after calling interrupt handler
This commit is contained in:
parent
cf00345d65
commit
a166c24f8e
|
@ -144,6 +144,10 @@ int cpu_exec(struct uc_struct *uc, CPUArchState *env) // qq
|
|||
uc, cpu->exception_index,
|
||||
uc->hook_callbacks[uc->hook_intr_idx].user_data);
|
||||
cpu->exception_index = -1;
|
||||
#if defined(TARGET_X86_64)
|
||||
// point EIP to the next instruction after INT
|
||||
env->eip = env->exception_next_eip;
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2796,7 +2796,7 @@ static void gen_interrupt(DisasContext *s, int intno,
|
|||
|
||||
gen_update_cc_op(s);
|
||||
// Unicorn: skip to the next instruction after our interrupt callback
|
||||
gen_jmp_im(s, next_eip);
|
||||
gen_jmp_im(s, cur_eip);
|
||||
gen_helper_raise_interrupt(tcg_ctx, tcg_ctx->cpu_env, tcg_const_i32(tcg_ctx, intno),
|
||||
tcg_const_i32(tcg_ctx, next_eip - cur_eip));
|
||||
s->is_jmp = DISAS_TB_JUMP;
|
||||
|
|
Loading…
Reference in a new issue