From: Jan Beulich <jbeulich@suse.com>
To: Andrew Burgess <aburgess@redhat.com>
Cc: binutils@sourceware.org
Subject: Re: [PATCH 2/2] libopcodes: extend the styling within the i386 disassembler
Date: Mon, 2 May 2022 09:28:08 +0200 [thread overview]
Message-ID: <be8ba48b-e381-8e77-f0d8-f83c00815767@suse.com> (raw)
In-Reply-To: <388c1dd1235a3c95aefc7caee5726b869b6894e0.1651239378.git.aburgess@redhat.com>
On 29.04.2022 15:42, Andrew Burgess via Binutils wrote:
> The i386 disassembler is pretty complex. Most disassembly is done
> indirectly; operands are built into buffers within a struct instr_info
> instance, before finally being printed later in the disassembly
> process.
>
> Sometimes the operand buffers are built in a different order to the
> order in which they will eventually be printed.
>
> Each operand can contain multiple components, e.g. multiple registers,
> immediates, other textual elements (commas, brackets, etc).
>
> When looking for how to apply styling I guess the ideal solution would
> be to move away from the operands being a single string that is built
> up, and instead have each operand be a list of "parts", where each
> part is some text and a style. Then, when we eventually print the
> operand we would loop over the parts and print each part with the
> correct style.
>
> But it feels like a huge amount of work to move from where we are
> now to that potentially ideal solution. Plus, the above solution
> would be pretty complex.
>
> So, instead I propose a .... different solution here, one that works
> with the existing infrastructure.
>
> As each operand is built up, piece be piece, we pass through style
> information. This style information is then encoded into the operand
> buffer (see below for details). After this the code can continue to
> operate as it does right now in order to manage the set of operand
> buffers.
>
> Then, as each operand is printed we can split the operand buffer into
> chunks at the style marker boundaries, with each chunk being printed
> in the correct style.
>
> For encoding the style information I use the format "~%x~". As far as
> I can tell the '~' is not otherwise used in the i386 disassembler, so
> this should serve as a unique marker. To speed up writing and then
> reading the style markers, I take advantage of the fact that there are
> less than 16 styles so I know the '%x' will only ever be a single hex
> character.
Like H.J. I'd like to ask that you avoid ~ here (I actually have plans
to use it to make at least some 64-bit constants better recognizable);
I'm not sure about using non-ASCII though, as that may cause issues with
compilers treating non-ASCII wrong. I'd soften this to non-alnum, non-
operator characters (perhaps more generally non-printable). Otoh I guess
about _any_ character could be used in symbol names, so I'm not
convinced such an escaping model can be generally conflict free.
Jan
next prev parent reply other threads:[~2022-05-02 7:28 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-29 13:42 [PATCH 0/2] Disassembler styling for i386-dis.c Andrew Burgess
2022-04-29 13:42 ` [PATCH 1/2] objdump: fix styled printing of addresses Andrew Burgess
2022-05-02 7:14 ` Jan Beulich
2022-05-03 9:52 ` Andrew Burgess
2022-04-29 13:42 ` [PATCH 2/2] libopcodes: extend the styling within the i386 disassembler Andrew Burgess
2022-04-29 18:16 ` Vladimir Mezentsev
2022-05-03 13:15 ` Andrew Burgess
2022-04-29 18:57 ` H.J. Lu
2022-05-03 13:14 ` Andrew Burgess
2022-05-02 7:28 ` Jan Beulich [this message]
2022-05-03 13:12 ` Andrew Burgess
2022-05-03 15:47 ` H.J. Lu
2022-05-04 7:58 ` Jan Beulich
2022-05-09 9:48 ` Andrew Burgess
2022-05-09 12:54 ` [PATCHv2] " Andrew Burgess
2022-05-18 12:27 ` Jan Beulich
2022-05-26 12:48 ` Andrew Burgess
2022-05-18 21:23 ` H.J. Lu
2022-05-27 17:44 ` [PATCHv3] " Andrew Burgess
2022-05-30 8:19 ` Jan Beulich
2022-05-31 17:20 ` Andrew Burgess
2022-06-01 5:59 ` Jan Beulich
2022-06-01 15:56 ` H.J. Lu
2022-06-08 16:03 ` Andrew Burgess
2022-06-10 10:56 ` Jan Beulich
2022-06-10 13:01 ` Andrew Burgess
2022-05-18 7:06 ` [PATCH 2/2] " Jan Beulich
2022-05-18 10:41 ` Andrew Burgess
2022-05-18 10:46 ` Jan Beulich
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=be8ba48b-e381-8e77-f0d8-f83c00815767@suse.com \
--to=jbeulich@suse.com \
--cc=aburgess@redhat.com \
--cc=binutils@sourceware.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 read-only IMAP folder(s) and NNTP newsgroup(s).