[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 03/12] target-arm: Check undefined opcodes for SWP in
From: |
Peter Maydell |
Subject: |
[Qemu-devel] [PULL 03/12] target-arm: Check undefined opcodes for SWP in A32 decoder |
Date: |
Tue, 10 Apr 2018 13:17:15 +0100 |
From: Onur Sahin <address@hidden>
Make sure we are not treating architecturally Undefined instructions
as a SWP, by verifying the opcodes as per section A8.8.229 of ARMv7-A
specification. Bits [21:20] must be zero for this to be a SWP or SWPB.
We also choose to UNDEF for the architecturally UNPREDICTABLE case of
bits [11:8] not being zero.
Signed-off-by: Onur Sahin <address@hidden>
[PMM: tweaked commit message]
Reviewed-by: Peter Maydell <address@hidden>
Signed-off-by: Peter Maydell <address@hidden>
---
target/arm/translate.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/target/arm/translate.c b/target/arm/translate.c
index fc03b5b8c8..db1ce6510a 100644
--- a/target/arm/translate.c
+++ b/target/arm/translate.c
@@ -9237,11 +9237,14 @@ static void disas_arm_insn(DisasContext *s, unsigned
int insn)
}
}
tcg_temp_free_i32(addr);
- } else {
+ } else if ((insn & 0x00300f00) == 0) {
+ /* 0bcccc_0001_0x00_xxxx_xxxx_0000_1001_xxxx
+ * - SWP, SWPB
+ */
+
TCGv taddr;
TCGMemOp opc = s->be_data;
- /* SWP instruction */
rm = (insn) & 0xf;
if (insn & (1 << 22)) {
@@ -9259,6 +9262,8 @@ static void disas_arm_insn(DisasContext *s, unsigned int
insn)
get_mem_index(s), opc);
tcg_temp_free(taddr);
store_reg(s, rd, tmp);
+ } else {
+ goto illegal_op;
}
}
} else {
--
2.16.2
- [Qemu-devel] [PULL 00/12] target-arm queue, Peter Maydell, 2018/04/10
- [Qemu-devel] [PULL 10/12] linux-user/signal.c: Ensure AArch64 signal frame isn't too small, Peter Maydell, 2018/04/10
- [Qemu-devel] [PULL 12/12] fpu: Fix rounding mode for floatN_to_uintM_round_to_zero, Peter Maydell, 2018/04/10
- [Qemu-devel] [PULL 09/12] cpus.c: ensure running CPU recalculates icount deadlines on timer expiry, Peter Maydell, 2018/04/10
- [Qemu-devel] [PULL 11/12] tcg: Introduce tcg_set_insn_start_param, Peter Maydell, 2018/04/10
- [Qemu-devel] [PULL 01/12] hw/arm: Allow manually specified /psci node, Peter Maydell, 2018/04/10
- [Qemu-devel] [PULL 08/12] target/arm: Report unsupported MPU region sizes more clearly, Peter Maydell, 2018/04/10
- [Qemu-devel] [PULL 03/12] target-arm: Check undefined opcodes for SWP in A32 decoder,
Peter Maydell <=
- [Qemu-devel] [PULL 05/12] hw/sd/bcm2835_sdhost: Don't raise spurious interrupts, Peter Maydell, 2018/04/10
- [Qemu-devel] [PULL 04/12] hw/sd/bcm2835_sdhost: Add tracepoints, Peter Maydell, 2018/04/10
- [Qemu-devel] [PULL 07/12] hw/arm/fsl-imx: Fix introspection problem with fsl-imx6 and fsl-imx7, Peter Maydell, 2018/04/10
- [Qemu-devel] [PULL 02/12] hw/arm/integratorcp: Don't do things that could be fatal in the instance_init, Peter Maydell, 2018/04/10
- [Qemu-devel] [PULL 06/12] hw/arm/allwinner-a10: Do not use nd_table in instance_init function, Peter Maydell, 2018/04/10
- Re: [Qemu-devel] [PULL 00/12] target-arm queue, Peter Maydell, 2018/04/10