All of lore.kernel.org
 help / color / mirror / Atom feed
From: "H. Peter Anvin" <hpa@zytor.com>
To: Masami Hiramatsu <mhiramat@redhat.com>
Cc: Jim Keniston <jkenisto@us.ibm.com>, Ingo Molnar <mingo@elte.hu>,
	Ananth N Mavinakayanahalli <ananth@in.ibm.com>,
	Andi Kleen <andi@firstfloor.org>,
	kvm@vger.kernel.org, Steven Rostedt <rostedt@goodmis.org>,
	Frederic Weisbecker <fweisbec@gmail.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Arnaldo Carvalho de Melo <acme@redhat.com>,
	systemtap-ml <systemtap@sources.redhat.com>,
	LKML <linux-kernel@vger.kernel.org>,
	Vegard Nossum <vegard.nossum@gmail.com>,
	Avi Kivity <avi@redhat.com>, Roland McGrath <roland@redhat.com>
Subject: Re: [PATCH -tip 3/6 V4.1] x86: instruction decorder API
Date: Fri, 03 Apr 2009 16:43:53 -0700	[thread overview]
Message-ID: <49D69F39.4010101@zytor.com> (raw)
In-Reply-To: <49D69BCA.8060506@redhat.com>

Masami Hiramatsu wrote:
> Add x86 instruction decoder to arch-specific libraries. This decoder
> can decode all x86 instructions into prefix, opcode, modrm, sib,
> displacement and immediates. This can also show the length of
> instructions.
> 
> changes from v4:
>  - make bitmap tables static.

Hi Masami,

On the surface the overall structure looks fine, but I have a couple of 
concerns:

1. is this meant to be able to decode userspace code or just kernel 
code?  If it is supposed to be able to decode userspace code, is there a 
reason you're not dealing with 16-bit or V86 mode code at all?  If not, 
why are you including the 32-bit decoder in a 64-bit kernel (as well as 
instructions which we're pretty much guaranteed to never use in the 
kernel, such as ENTER.)

2. you're already not dealing with all existing three-byte opcode 
spaces, nor with DREX or VEX encodings for upcoming processors.  This 
doesn't matter so much for the kernel, but it does matter if this is 
supposed to be used for user-space code.

3. is there any need to deal with instruction set differences among 
processors?  (Again, this depends on the usage model.)

4. you have a bunch of magic opcode constants all over the place.  This 
means that as new instructions come in -- and they're going to be coming 
in -- this is going to be hard to update.  It would be cleaner if we 
could have an intermediate format that preprocesses down to all the 
relevant tables and perhaps even some of the code rather than 
open-coding everything in C.

This matters... for example you have:

+		} else if (opcode == 0xea /* jmp far seg:offs */) {
+			__get_immptr(insn);

... but nothing similar for opcode 0x9a.  This is extremely hard to spot 
with this kind of structure.

The more data-driven we can make it (without bloating the code too much) 
the better off we are, I believe.

	-hpa

  reply	other threads:[~2009-04-03 23:45 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-04-02 17:24 [PATCH -tip 3/6 V4] x86: instruction decorder API Masami Hiramatsu
2009-04-02 17:24 ` Masami Hiramatsu
2009-04-03 23:29 ` [PATCH -tip 3/6 V4.1] " Masami Hiramatsu
2009-04-03 23:29   ` Masami Hiramatsu
2009-04-03 23:43   ` H. Peter Anvin [this message]
2009-04-03 23:43     ` H. Peter Anvin
2009-04-04  0:37     ` Masami Hiramatsu
2009-04-04  0:37       ` Masami Hiramatsu
2009-04-06 22:48       ` Jim Keniston
2009-04-06 22:48         ` Jim Keniston
2009-04-06 22:55         ` H. Peter Anvin
2009-04-06 22:55           ` H. Peter Anvin
2009-04-16 23:31           ` Masami Hiramatsu
2009-04-16 23:31             ` Masami Hiramatsu
2009-04-16 23:39             ` H. Peter Anvin
2009-04-16 23:39               ` H. Peter Anvin
2009-04-17 13:31               ` Masami Hiramatsu
2009-04-17 13:31                 ` Masami Hiramatsu
2009-04-17 18:07                 ` H. Peter Anvin
2009-04-17 18:07                   ` H. Peter Anvin
2009-04-17  0:06             ` Jim Keniston
2009-04-17  0:08               ` H. Peter Anvin
2009-04-17  0:08                 ` H. Peter Anvin
2009-04-22  0:17                 ` Masami Hiramatsu
2009-04-22  0:17                   ` Masami Hiramatsu
2009-04-23  0:47                   ` Jim Keniston
2009-04-23 17:29                     ` Masami Hiramatsu
2009-04-23 17:29                       ` Masami Hiramatsu
2009-04-23 22:22                       ` Jim Keniston
2009-04-24  3:53                         ` Masami Hiramatsu
2009-04-24  3:53                           ` Masami Hiramatsu

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=49D69F39.4010101@zytor.com \
    --to=hpa@zytor.com \
    --cc=acme@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=ananth@in.ibm.com \
    --cc=andi@firstfloor.org \
    --cc=avi@redhat.com \
    --cc=fweisbec@gmail.com \
    --cc=jkenisto@us.ibm.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mhiramat@redhat.com \
    --cc=mingo@elte.hu \
    --cc=roland@redhat.com \
    --cc=rostedt@goodmis.org \
    --cc=systemtap@sources.redhat.com \
    --cc=vegard.nossum@gmail.com \
    /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.