target-xtensa: raise an exception for invalid and reserved opcodes
This includes opcodes from disabled features and those marked reserved in the ISA. Also end TB on opcodes that definitely generate an exception: illegal instructions, syscall and privileged instructions. Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
This commit is contained in:
parent
0c852e171b
commit
6b814719b4
@ -266,6 +266,10 @@ static void gen_exception_cause(DisasContext *dc, uint32_t cause)
|
||||
gen_helper_exception_cause(tpc, tcause);
|
||||
tcg_temp_free(tpc);
|
||||
tcg_temp_free(tcause);
|
||||
if (cause == ILLEGAL_INSTRUCTION_CAUSE ||
|
||||
cause == SYSCALL_CAUSE) {
|
||||
dc->is_jmp = DISAS_UPDATE;
|
||||
}
|
||||
}
|
||||
|
||||
static void gen_exception_cause_vaddr(DisasContext *dc, uint32_t cause,
|
||||
@ -283,6 +287,7 @@ static void gen_check_privilege(DisasContext *dc)
|
||||
{
|
||||
if (dc->cring) {
|
||||
gen_exception_cause(dc, PRIVILEGED_CAUSE);
|
||||
dc->is_jmp = DISAS_UPDATE;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2378,7 +2383,7 @@ static void disas_xtensa_insn(DisasContext *dc)
|
||||
|
||||
invalid_opcode:
|
||||
qemu_log("INVALID(pc = %08x)\n", dc->pc);
|
||||
dc->pc = dc->next_pc;
|
||||
gen_exception_cause(dc, ILLEGAL_INSTRUCTION_CAUSE);
|
||||
#undef HAS_OPTION
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user