From: Michael Walle <michael@walle.cc>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: QEMU Developers <qemu-devel@nongnu.org>,
Anthony Liguori <aliguori@amazon.com>
Subject: Re: [Qemu-devel] [PULL v4 11/12] target-lm32: stop VM on illegal or unknown instruction
Date: Sat, 1 Feb 2014 21:53:50 +0100 [thread overview]
Message-ID: <201402012153.50410.michael@walle.cc> (raw)
In-Reply-To: <CAFEAcA_NY2dvTY8Ru2hm69fOKdE-g+yx_MXr77ZqwvT0WLMZgQ@mail.gmail.com>
Am Samstag, 1. Februar 2014, 19:06:40 schrieb Peter Maydell:
> On 20 January 2014 19:34, Michael Walle <michael@walle.cc> wrote:
> > Instead of translating the instruction to a no-op, pause the VM and
> > display a message to the user.
> >
> > As a side effect, this also works for instructions where the operands are
> > only known at runtime.
> >
> > Signed-off-by: Michael Walle <michael@walle.cc>
> > ---
> >
> > target-lm32/helper.h | 1 +
> > target-lm32/op_helper.c | 17 +++++++++
> > target-lm32/translate.c | 91
> > +++++++++++++++++++++++++++++++---------------- 3 files changed, 79
> > insertions(+), 30 deletions(-)
> >
> > diff --git a/target-lm32/helper.h b/target-lm32/helper.h
> > index ad44fdf..f4442e0 100644
> > --- a/target-lm32/helper.h
> > +++ b/target-lm32/helper.h
> > @@ -13,5 +13,6 @@ DEF_HELPER_1(rcsr_im, i32, env)
> >
> > DEF_HELPER_1(rcsr_ip, i32, env)
> > DEF_HELPER_1(rcsr_jtx, i32, env)
> > DEF_HELPER_1(rcsr_jrx, i32, env)
> >
> > +DEF_HELPER_1(ill, void, env)
> >
> > #include "exec/def-helper.h"
> >
> > diff --git a/target-lm32/op_helper.c b/target-lm32/op_helper.c
> > index 71f21d1..7189cb5 100644
> > --- a/target-lm32/op_helper.c
> > +++ b/target-lm32/op_helper.c
> > @@ -8,6 +8,10 @@
> >
> > #include "exec/softmmu_exec.h"
> >
> > +#ifndef CONFIG_USER_ONLY
> > +#include "sysemu/sysemu.h"
> > +#endif
> > +
> >
> > #if !defined(CONFIG_USER_ONLY)
> > #define MMUSUFFIX _mmu
> > #define SHIFT 0
> >
> > @@ -39,6 +43,19 @@ void HELPER(hlt)(CPULM32State *env)
> >
> > cpu_loop_exit(env);
> >
> > }
> >
> > +void HELPER(ill)(CPULM32State *env)
> > +{
> > +#ifndef CONFIG_USER_ONLY
> > + CPUState *cs = CPU(lm32_env_get_cpu(env));
> > + fprintf(stderr, "VM paused due to illegal instruction. "
> > + "Connect a debugger or switch to the monitor console "
> > + "to find out more.\n");
> > + qemu_system_vmstop_request(RUN_STATE_PAUSED);
> > + cs->halted = 1;
> > + raise_exception(env, EXCP_HALTED);
> > +#endif
>
> Not really convinced this is a great idea. "This one target CPU
> type does something that none of the others do" seems less
> than ideal for QEMU as a whole.
this was discussed some time ago. unfortunately, i don't find the thread atm.
the particular problem with the lm32 target is that there is no defined
behaviour if some unsupported opcode is executed on the real hardware, esp.
there are no exceptions if that happens.
therefore the suggested behaviour was to just stop the emulation and give the
developer the chance to look at it by connecting a debugger.
keep in mind that the lm32 target is more a development aid, rather than a
real virtualization target.
-michael
next prev parent reply other threads:[~2014-02-01 20:54 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-20 19:34 [Qemu-devel] [PULL v4 00/12] target-lm32 updates Michael Walle
2014-01-20 19:34 ` [Qemu-devel] [PULL v4 01/12] lm32_sys: increase test case name length limit Michael Walle
2014-02-01 17:39 ` Peter Maydell
2014-01-20 19:34 ` [Qemu-devel] [PULL v4 02/12] tests: lm32: new rule for single test cases Michael Walle
2014-02-01 17:45 ` Peter Maydell
2014-01-20 19:34 ` [Qemu-devel] [PULL v4 03/12] milkymist-uart: use qemu_chr_fe_write_all() instead of qemu_chr_fe_write() Michael Walle
2014-02-01 17:46 ` Peter Maydell
2014-01-20 19:34 ` [Qemu-devel] [PULL v4 04/12] lm32_uart/lm32_juart: use qemu_chr_fe_write_all() Michael Walle
2014-02-01 17:47 ` Peter Maydell
2014-01-20 19:34 ` [Qemu-devel] [PULL v4 05/12] milkymist-vgafb: swap pixel data in source buffer Michael Walle
2014-02-01 17:57 ` Peter Maydell
2014-02-03 8:12 ` Paolo Bonzini
2014-01-20 19:34 ` [Qemu-devel] [PULL v4 06/12] target-lm32: kill cpu_abort() calls Michael Walle
2014-01-20 19:34 ` [Qemu-devel] [PULL v4 07/12] target-lm32: move model features to LM32CPU Michael Walle
2014-01-20 19:34 ` [Qemu-devel] [PULL v4 08/12] target-lm32: add breakpoint/watchpoint support Michael Walle
2014-02-01 18:16 ` Peter Maydell
2014-02-03 21:27 ` Richard Henderson
2014-02-03 21:35 ` Peter Maydell
2014-01-20 19:34 ` [Qemu-devel] [PULL v4 09/12] lm32_sys: print test result on stderr Michael Walle
2014-02-01 18:00 ` Peter Maydell
2014-02-01 20:31 ` Michael Walle
2014-02-03 22:39 ` Michael Walle
2014-02-03 22:59 ` Peter Maydell
2014-02-04 18:12 ` Michael Walle
2014-01-20 19:34 ` [Qemu-devel] [PULL v4 10/12] lm32_sys: dump cpu state if test case fails Michael Walle
2014-01-20 19:34 ` [Qemu-devel] [PULL v4 11/12] target-lm32: stop VM on illegal or unknown instruction Michael Walle
2014-02-01 18:06 ` Peter Maydell
2014-02-01 20:53 ` Michael Walle [this message]
2014-01-20 19:34 ` [Qemu-devel] [PULL v4 12/12] hw/lm32: print error if cpu model is not found Michael Walle
2014-02-01 18:11 ` Peter Maydell
2014-02-01 18:21 ` [Qemu-devel] [PULL v4 00/12] target-lm32 updates Peter Maydell
2014-02-01 20:56 ` Michael Walle
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=201402012153.50410.michael@walle.cc \
--to=michael@walle.cc \
--cc=aliguori@amazon.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).