From: Borislav Petkov <bp@alien8.de>
To: Masami Hiramatsu <mhiramat@kernel.org>
Cc: x86-ml <x86@kernel.org>, Joerg Roedel <jroedel@suse.de>,
lkml <linux-kernel@vger.kernel.org>
Subject: Re: [RFC] Have insn decoder functions return success/failure
Date: Thu, 22 Oct 2020 11:30:44 +0200 [thread overview]
Message-ID: <20201022093044.GA29222@zn.tnic> (raw)
In-Reply-To: <20201022163100.1139b28220da4eafb5e70fcc@kernel.org>
On Thu, Oct 22, 2020 at 04:31:00PM +0900, Masami Hiramatsu wrote:
> No, insn_get_length() implies it decodes whole of the instruction.
> (yeah, we need an alias of that, something like insn_get_complete())
That's exactly what I'm trying to point out: the whole API is not
entirely wrong - it just needs a better naming and documentation. Now,
the implication that getting the length of the insn will give you a full
decode is a totally internal detail which users don't need and have to
know.
> I need insn.length too. Of course we can split it into 2 calls. But
> as I said, since the insn_get_length() implies it decodes all other
> parts, I just called it once.
Yes, I have noticed that and wrote about it further on. The intent was
to show that the API needs work.
> Hm, it is better to call insn_get_immediate() if it doesn't use length later.
Ok, so you see the problem. This thing wants to decode the whole insn -
that's what the function is called. But it reads like it does something
else.
> Would you mean we'd better have something like insn_get_until_immediate() ?
>
> Since the x86 instruction is CISC, we can not decode intermediate
> parts. The APIs follows that. If you are confused, I'm sorry about that.
No, I'm not confused - again, I'd like for the API to be properly
defined and callers should not have to care which parts of the insn they
need to decode in order to get something else they actually need.
So the main API should be: insn_decode_insn() or so and it should give
you everything you need.
If this succeeds, you can go poke at insn.<field> and you know you have
valid data there.
If there are specialized uses, you can call some of the insn_get_*
helpers if you're not interested in decoding the full insn.
But if simply calling insn_decode_insn() would give you everything and
that is not that expensive, we can do that - API simplicity.
What I don't want to have is calling insn_get_length() or so and then
inspecting the opcode bytes because that's totally non-transparent.
Thx.
--
Regards/Gruss,
Boris.
https://people.kernel.org/tglx/notes-about-netiquette
next prev parent reply other threads:[~2020-10-22 9:31 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-20 12:02 [RFC] Have insn decoder functions return success/failure Borislav Petkov
2020-10-20 14:27 ` Masami Hiramatsu
2020-10-20 14:37 ` Borislav Petkov
2020-10-21 0:50 ` Masami Hiramatsu
2020-10-21 9:27 ` Borislav Petkov
2020-10-21 14:26 ` Masami Hiramatsu
2020-10-21 16:45 ` Borislav Petkov
2020-10-22 7:31 ` Masami Hiramatsu
2020-10-22 9:30 ` Borislav Petkov [this message]
2020-10-22 13:21 ` Masami Hiramatsu
2020-10-22 17:58 ` Andy Lutomirski
2020-10-23 9:20 ` Borislav Petkov
2020-10-23 9:28 ` Masami Hiramatsu
2020-10-23 9:32 ` Borislav Petkov
2020-10-23 10:47 ` Masami Hiramatsu
2020-10-23 23:27 ` Borislav Petkov
2020-10-24 0:12 ` Andy Lutomirski
2020-10-24 7:21 ` Masami Hiramatsu
2020-10-24 8:23 ` Borislav Petkov
2020-10-24 16:10 ` Andy Lutomirski
2020-10-27 13:42 ` Borislav Petkov
2020-10-28 11:36 ` Masami Hiramatsu
2020-10-24 7:13 ` Masami Hiramatsu
2020-10-24 8:24 ` Borislav Petkov
2020-10-29 12:42 ` Borislav Petkov
2020-10-30 1:24 ` Masami Hiramatsu
2020-10-30 13:07 ` Borislav Petkov
2020-10-23 9:17 ` Borislav Petkov
2020-10-22 8:04 ` Peter Zijlstra
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=20201022093044.GA29222@zn.tnic \
--to=bp@alien8.de \
--cc=jroedel@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=mhiramat@kernel.org \
--cc=x86@kernel.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