From: "Hervé Poussineau" <hpoussin@reactos.org>
To: Richard Henderson <rth@twiddle.net>, qemu-devel@nongnu.org
Cc: pbonzini@redhat.com
Subject: Re: [Qemu-devel] [PATCH 4/7] target-i386: Dump illegal opcodes with -d unimp
Date: Thu, 3 Mar 2016 07:57:24 +0100 [thread overview]
Message-ID: <56D7E054.2040703@reactos.org> (raw)
In-Reply-To: <1456983051-14707-5-git-send-email-rth@twiddle.net>
Le 03/03/2016 06:30, Richard Henderson a écrit :
> Signed-off-by: Richard Henderson <rth@twiddle.net>
> ---
> target-i386/translate.c | 22 +++++++++++++++++++---
> 1 file changed, 19 insertions(+), 3 deletions(-)
>
> diff --git a/target-i386/translate.c b/target-i386/translate.c
> index b73c237..aa423cb 100644
> --- a/target-i386/translate.c
> +++ b/target-i386/translate.c
> @@ -99,6 +99,7 @@ typedef struct DisasContext {
> int prefix;
> TCGMemOp aflag;
> TCGMemOp dflag;
> + target_ulong pc_start;
> target_ulong pc; /* pc = eip + cs_base */
> int is_jmp; /* 1 = means jump (stop translation), 2 means CPU
> static state change (stop translation) */
> @@ -2368,6 +2369,21 @@ static void gen_exception(DisasContext *s, int trapno, target_ulong cur_eip)
> s->is_jmp = DISAS_TB_JUMP;
> }
>
> +static void gen_illop(CPUX86State *env, DisasContext *s)
> +{
> + target_ulong pc = s->pc_start;
> + gen_exception(s, EXCP06_ILLOP, pc - s->cs_base);
> +
> + if (qemu_loglevel_mask(LOG_UNIMP)) {
Do you want LOG_UNIMP or LOG_GUEST_ERROR?
Both are possible. Either you decide that guest works well, and an unknown instruction is a valid instruction unimplemented in QEMU side,
you decide that guest can do invalid things, and LOG_GUEST_ERROR is probably better.
> + target_ulong end = s->pc;
> + qemu_log("ILLOPC: " TARGET_FMT_lx ":", pc);
> + for (; pc < end; ++pc) {
> + qemu_log(" %02x", cpu_ldub_code(env, pc));
> + }
> + qemu_log("\n");
> + }
> +}
> +
> /* an interrupt is different from an exception because of the
> privilege checks */
> static void gen_interrupt(DisasContext *s, int intno,
> @@ -2893,7 +2909,7 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
> }
> if (s->flags & HF_EM_MASK) {
> illegal_op:
> - gen_exception(s, EXCP06_ILLOP, pc_start - s->cs_base);
> + gen_illop(env, s);
> return;
> }
> if (is_xmm && !(s->flags & HF_OSFXSR_MASK))
> @@ -4293,7 +4309,7 @@ static target_ulong disas_insn(CPUX86State *env, DisasContext *s,
> target_ulong next_eip, tval;
> int rex_w, rex_r;
>
> - s->pc = pc_start;
> + s->pc_start = s->pc = pc_start;
> prefixes = 0;
> s->override = -1;
> rex_w = -1;
> @@ -8031,7 +8047,7 @@ static target_ulong disas_insn(CPUX86State *env, DisasContext *s,
> if (s->prefix & PREFIX_LOCK)
> gen_helper_unlock();
> /* XXX: ensure that no lock was generated */
> - gen_exception(s, EXCP06_ILLOP, pc_start - s->cs_base);
> + gen_illop(env, s);
> return s->pc;
> }
>
>
This patch is not quiet on some operating systems:
OS/2:
ILLOPC: 000172e1: 0f a6
Windows XP:
ILLOPC: 00020d1a: c4 c4
And very verbose in Windows 3.11, Windows 9x:
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000027fe: 63
ILLOPC: 000118ca: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000118ca: 63
ILLOPC: 00011b36: 63
ILLOPC: 000ffb17: 63
ILLOPC: 00011b3d: 63
ILLOPC: 00011b36: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000118ca: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000118ca: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000118ca: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 0001e3b9: 0f ff
ILLOPC: 000ffb17: 63
ILLOPC: 000118ca: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000118ca: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 00011b36: 63
ILLOPC: 00011b3d: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000118ca: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000118ca: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000118ca: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 00014d8a: 0f ff
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000118ca: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000ffb17: 63
ILLOPC: 000118ca: 63
ILLOPC: 000ffb17: 63
Is it normal?
Regards,
Hervé
next prev parent reply other threads:[~2016-03-03 6:57 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-03 5:30 [Qemu-devel] [PATCH 0/7] target-i386 fixes Richard Henderson
2016-03-03 5:30 ` [Qemu-devel] [PATCH 1/7] target-i386: avoid repeated calls to the bnd_jmp helper Richard Henderson
2016-03-03 5:30 ` [Qemu-devel] [PATCH 2/7] target-i386: fix smsw and lmsw from/to register Richard Henderson
2016-03-03 5:30 ` [Qemu-devel] [PATCH 3/7] target-i386: Fix SMSW for 64-bit mode Richard Henderson
2016-03-03 5:30 ` [Qemu-devel] [PATCH 4/7] target-i386: Dump illegal opcodes with -d unimp Richard Henderson
2016-03-03 6:57 ` Hervé Poussineau [this message]
2016-03-03 10:08 ` Paolo Bonzini
2016-03-03 19:06 ` Richard Henderson
2016-03-04 10:41 ` Paolo Bonzini
2016-03-04 18:12 ` Richard Henderson
2016-03-04 12:15 ` Paolo Bonzini
2016-03-03 5:30 ` [Qemu-devel] [PATCH 5/7] target-i386: fix addr16 prefix Richard Henderson
2016-03-03 5:30 ` [Qemu-devel] [PATCH 6/7] target-i386: Use gen_nop_modrm for prefetch instructions Richard Henderson
2016-03-03 5:30 ` [Qemu-devel] [PATCH 7/7] target-i386: Fix inhibit irq mask handling Richard Henderson
2016-03-03 8:46 ` Paolo Bonzini
2016-03-03 6:49 ` [Qemu-devel] [PATCH 0/7] target-i386 fixes Hervé Poussineau
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=56D7E054.2040703@reactos.org \
--to=hpoussin@reactos.org \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
/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 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.