All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] target-arm: Report unimplemented opcodes (LOG_UNIMP)
@ 2013-08-28  4:39 Stefan Weil
  2013-08-28  8:15 ` Peter Maydell
  2013-09-01 15:35 ` [Qemu-devel] [Qemu-trivial] [PATCH] target-arm: Report unimplemented opcodes (LOG_UNIMP) Michael Tokarev
  0 siblings, 2 replies; 16+ messages in thread
From: Stefan Weil @ 2013-08-28  4:39 UTC (permalink / raw)
  To: qemu-devel, qemu-trivial; +Cc: Peter Maydell, Paul Brook, Stefan Weil

These unimplemented opcodes are handled like illegal opcodes, but
they are used in existing code. We should at least report when they
are executed.

Signed-off-by: Stefan Weil <sw@weilnetz.de>
---

When running a QEMU system emulation of an ARM system
(Raspberry PI), Linux booted, but when I tried to run a
user session, it terminated without error message.

It took me some time to see that bash got an illegal
instruction exception. It was caused by ARM opcode 'setend'
which is not implemented in QEMU's ARM emulation.
The patch should help detecting similar scenarios in
the future.

Raspberry PI uses 'setend' in an optimized version of
memcmp, so lots of other executables also fail with QEMU.

As a workaround, the preloading of that optimized code
can be removed. Of course an improved QEMU emulation
would be better.

Regards,
Stefan

 target-arm/translate.c |    4 ++++
 1 file changed, 4 insertions(+)

diff --git a/target-arm/translate.c b/target-arm/translate.c
index d1e8538..92d9f16 100644
--- a/target-arm/translate.c
+++ b/target-arm/translate.c
@@ -6715,6 +6715,7 @@ static void disas_arm_insn(CPUARMState * env, DisasContext *s)
             /* setend */
             if (((insn >> 9) & 1) != s->bswap_code) {
                 /* Dynamic endianness switching not implemented. */
+                qemu_log_mask(LOG_UNIMP, "arm: unimplemented setend\n");
                 goto illegal_op;
             }
             return;
@@ -8740,6 +8741,8 @@ static int disas_thumb2_insn(CPUARMState *env, DisasContext *s, uint16_t insn_hw
 
                 if (insn & (1 << 26)) {
                     /* Secure monitor call (v6Z) */
+                    qemu_log_mask(LOG_UNIMP,
+                                  "arm: unimplemented secure monitor call\n");
                     goto illegal_op; /* not implemented.  */
                 } else {
                     op = (insn >> 20) & 7;
@@ -9779,6 +9782,7 @@ static void disas_thumb_insn(CPUARMState *env, DisasContext *s)
                 ARCH(6);
                 if (((insn >> 3) & 1) != s->bswap_code) {
                     /* Dynamic endianness switching not implemented. */
+                    qemu_log_mask(LOG_UNIMP, "arm: unimplemented setend\n");
                     goto illegal_op;
                 }
                 break;
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2013-09-03 15:11 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-08-28  4:39 [Qemu-devel] [PATCH] target-arm: Report unimplemented opcodes (LOG_UNIMP) Stefan Weil
2013-08-28  8:15 ` Peter Maydell
2013-08-28 14:31   ` Richard Henderson
2013-08-28 14:34     ` Peter Maydell
2013-08-28 15:26       ` [Qemu-devel] [RFC] Streamlining endian handling in TCG Richard Henderson
2013-08-28 16:38         ` Peter Maydell
2013-08-28 17:16           ` Richard Henderson
2013-08-28 17:28             ` Peter Maydell
2013-08-28 17:45               ` Richard Henderson
2013-08-28 17:41           ` Stefan Weil
2013-08-28 20:42         ` Edgar E. Iglesias
2013-08-28 21:06           ` Peter Maydell
2013-08-28 21:23           ` Richard Henderson
2013-09-02 23:42         ` Aurelien Jarno
2013-09-03 15:11           ` Richard Henderson
2013-09-01 15:35 ` [Qemu-devel] [Qemu-trivial] [PATCH] target-arm: Report unimplemented opcodes (LOG_UNIMP) Michael Tokarev

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.