target/cris: Mark exceptions as DISAS_NORETURN
After we've raised the exception, we have left the TB. Reviewed-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com> Tested-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
a67f11b1d9
commit
1dd09c47f6
@ -2873,6 +2873,7 @@ static int dec_rfe_etc(CPUCRISState *env, DisasContext *dc)
|
||||
-offsetof(CRISCPU, env) + offsetof(CPUState, halted));
|
||||
tcg_gen_movi_tl(env_pc, dc->pc + 2);
|
||||
t_gen_raise_exception(EXCP_HLT);
|
||||
dc->base.is_jmp = DISAS_NORETURN;
|
||||
return 2;
|
||||
}
|
||||
|
||||
@ -2900,7 +2901,7 @@ static int dec_rfe_etc(CPUCRISState *env, DisasContext *dc)
|
||||
/* Breaks start at 16 in the exception vector. */
|
||||
t_gen_movi_env_TN(trap_vector, dc->op1 + 16);
|
||||
t_gen_raise_exception(EXCP_BREAK);
|
||||
dc->base.is_jmp = DISAS_UPDATE;
|
||||
dc->base.is_jmp = DISAS_NORETURN;
|
||||
break;
|
||||
default:
|
||||
printf("op2=%x\n", dc->op2);
|
||||
@ -3188,7 +3189,7 @@ void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_insns)
|
||||
cris_evaluate_flags(dc);
|
||||
tcg_gen_movi_tl(env_pc, dc->pc);
|
||||
t_gen_raise_exception(EXCP_DEBUG);
|
||||
dc->base.is_jmp = DISAS_UPDATE;
|
||||
dc->base.is_jmp = DISAS_NORETURN;
|
||||
/* The address covered by the breakpoint must be included in
|
||||
[tb->pc, tb->pc + tb->size) in order to for it to be
|
||||
properly cleared -- thus we increment the PC here so that
|
||||
|
@ -61,6 +61,7 @@ static inline void cris_illegal_insn(DisasContext *dc)
|
||||
{
|
||||
qemu_log_mask(LOG_GUEST_ERROR, "illegal insn at pc=%x\n", dc->pc);
|
||||
t_gen_raise_exception(EXCP_BREAK);
|
||||
dc->base.is_jmp = DISAS_NORETURN;
|
||||
}
|
||||
|
||||
static void gen_store_v10_conditional(DisasContext *dc, TCGv addr, TCGv val,
|
||||
@ -1169,7 +1170,7 @@ static unsigned int dec10_ind(CPUCRISState *env, DisasContext *dc)
|
||||
t_gen_mov_env_TN(trap_vector, c);
|
||||
tcg_temp_free(c);
|
||||
t_gen_raise_exception(EXCP_BREAK);
|
||||
dc->base.is_jmp = DISAS_UPDATE;
|
||||
dc->base.is_jmp = DISAS_NORETURN;
|
||||
return insn_len;
|
||||
}
|
||||
LOG_DIS("%d: jump.%d %d r%d r%d\n", __LINE__, size,
|
||||
|
Loading…
Reference in New Issue
Block a user