aboutsummaryrefslogtreecommitdiff
path: root/target/m68k
diff options
context:
space:
mode:
authorLaurent Vivier <laurent@vivier.eu>2018-10-30 17:55:54 +0100
committerLaurent Vivier <laurent@vivier.eu>2018-11-01 12:12:24 +0100
commitb9f8e55bf7e994e192ab7360830731580384b813 (patch)
treef11f0b9556bf80a7fe3132f5202ccab8bdf90855 /target/m68k
parent7d51a855cd568ec3399a1834ada4023cfa12f231 (diff)
downloadqemu-b9f8e55bf7e994e192ab7360830731580384b813.zip
qemu-b9f8e55bf7e994e192ab7360830731580384b813.tar.gz
qemu-b9f8e55bf7e994e192ab7360830731580384b813.tar.bz2
target/m68k: use EXCP_ILLEGAL instead of EXCP_UNSUPPORTED
Coldfire defines an "Unsupported instruction" exception if execution of a valid instruction is attempted but the required hardware is not present in the processor. We use it with instructions that are in fact undefined or illegal, and the exception expected in this case by the kernel is the illegal exception, so this patch fixes that. Signed-off-by: Laurent Vivier <laurent@vivier.eu> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20181030165554.5761-1-laurent@vivier.eu>
Diffstat (limited to 'target/m68k')
-rw-r--r--target/m68k/cpu.h1
-rw-r--r--target/m68k/translate.c6
2 files changed, 3 insertions, 4 deletions
diff --git a/target/m68k/cpu.h b/target/m68k/cpu.h
index c63adf7..b288a38 100644
--- a/target/m68k/cpu.h
+++ b/target/m68k/cpu.h
@@ -70,7 +70,6 @@
#define EXCP_MMU_CONF 56 /* MMU Configuration Error */
#define EXCP_MMU_ILLEGAL 57 /* MMU Illegal Operation Error */
#define EXCP_MMU_ACCESS 58 /* MMU Access Level Violation Error */
-#define EXCP_UNSUPPORTED 61
#define EXCP_RTE 0x100
#define EXCP_HALT_INSN 0x101
diff --git a/target/m68k/translate.c b/target/m68k/translate.c
index ae3651b..752e46e 100644
--- a/target/m68k/translate.c
+++ b/target/m68k/translate.c
@@ -1553,7 +1553,7 @@ DISAS_INSN(undef)
but actually illegal for CPU32 or pre-68020. */
qemu_log_mask(LOG_UNIMP, "Illegal instruction: %04x @ %08x\n",
insn, s->base.pc_next);
- gen_exception(s, s->base.pc_next, EXCP_UNSUPPORTED);
+ gen_exception(s, s->base.pc_next, EXCP_ILLEGAL);
}
DISAS_INSN(mulw)
@@ -2800,7 +2800,7 @@ DISAS_INSN(mull)
if (ext & 0x400) {
if (!m68k_feature(s->env, M68K_FEATURE_QUAD_MULDIV)) {
- gen_exception(s, s->base.pc_next, EXCP_UNSUPPORTED);
+ gen_exception(s, s->base.pc_next, EXCP_ILLEGAL);
return;
}
@@ -4510,7 +4510,7 @@ DISAS_INSN(strldsr)
addr = s->pc - 2;
ext = read_im16(env, s);
if (ext != 0x46FC) {
- gen_exception(s, addr, EXCP_UNSUPPORTED);
+ gen_exception(s, addr, EXCP_ILLEGAL);
return;
}
ext = read_im16(env, s);