mirror of
https://git.proxmox.com/git/qemu
synced 2025-08-06 15:09:07 +00:00
Cut the translation block after translating a break insn. This avoids an issue where QEMU finds an illegal CRIS insn while the guest is returning through a signal return trampoline.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3997 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
9004627f9b
commit
4f400ab520
@ -71,6 +71,8 @@
|
|||||||
#define BUG() (gen_BUG(dc, __FILE__, __LINE__))
|
#define BUG() (gen_BUG(dc, __FILE__, __LINE__))
|
||||||
#define BUG_ON(x) ({if (x) BUG();})
|
#define BUG_ON(x) ({if (x) BUG();})
|
||||||
|
|
||||||
|
#define DISAS_SWI 5
|
||||||
|
|
||||||
/* Used by the decoder. */
|
/* Used by the decoder. */
|
||||||
#define EXTRACT_FIELD(src, start, end) \
|
#define EXTRACT_FIELD(src, start, end) \
|
||||||
(((src) >> start) & ((1 << (end - start + 1)) - 1))
|
(((src) >> start) & ((1 << (end - start + 1)) - 1))
|
||||||
@ -2112,6 +2114,7 @@ static unsigned int dec_rfe_etc(DisasContext *dc)
|
|||||||
gen_op_movl_pc_T0();
|
gen_op_movl_pc_T0();
|
||||||
/* Breaks start at 16 in the exception vector. */
|
/* Breaks start at 16 in the exception vector. */
|
||||||
gen_op_break_im(dc->op1 + 16);
|
gen_op_break_im(dc->op1 + 16);
|
||||||
|
dc->is_jmp = DISAS_SWI;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
printf ("op2=%x\n", dc->op2);
|
printf ("op2=%x\n", dc->op2);
|
||||||
@ -2332,7 +2335,8 @@ gen_intermediate_code_internal(CPUState *env, TranslationBlock *tb,
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
check_breakpoint(env, dc);
|
check_breakpoint(env, dc);
|
||||||
if (dc->is_jmp == DISAS_JUMP)
|
if (dc->is_jmp == DISAS_JUMP
|
||||||
|
|| dc->is_jmp == DISAS_SWI)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
if (search_pc) {
|
if (search_pc) {
|
||||||
@ -2404,6 +2408,7 @@ gen_intermediate_code_internal(CPUState *env, TranslationBlock *tb,
|
|||||||
to find the next TB */
|
to find the next TB */
|
||||||
tcg_gen_exit_tb(0);
|
tcg_gen_exit_tb(0);
|
||||||
break;
|
break;
|
||||||
|
case DISAS_SWI:
|
||||||
case DISAS_TB_JUMP:
|
case DISAS_TB_JUMP:
|
||||||
/* nothing more to generate */
|
/* nothing more to generate */
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user