mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-06-01 20:20:15 +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, cpu->exception_index,
|
||||||
uc->hook_callbacks[uc->hook_intr_idx].user_data);
|
uc->hook_callbacks[uc->hook_intr_idx].user_data);
|
||||||
cpu->exception_index = -1;
|
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
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2796,7 +2796,7 @@ static void gen_interrupt(DisasContext *s, int intno,
|
||||||
|
|
||||||
gen_update_cc_op(s);
|
gen_update_cc_op(s);
|
||||||
// Unicorn: skip to the next instruction after our interrupt callback
|
// 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),
|
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));
|
tcg_const_i32(tcg_ctx, next_eip - cur_eip));
|
||||||
s->is_jmp = DISAS_TB_JUMP;
|
s->is_jmp = DISAS_TB_JUMP;
|
||||||
|
|
Loading…
Reference in a new issue