[PATCH 3/3] opcodes/i386: partially implement disassembler style support

Jan Beulich jbeulich@suse.com
Thu Feb 17 16:29:21 GMT 2022


On 17.02.2022 17:15, Andrew Burgess wrote:
> Jan Beulich via Binutils <binutils@sourceware.org> writes:
>> On 16.02.2022 21:53, Andrew Burgess via Binutils wrote:
>>> @@ -9456,12 +9456,18 @@ print_insn (bfd_vma pc, instr_info *ins)
>>>  	{
>>>  	  name = prefix_name (ins, priv.the_buffer[0], priv.orig_sizeflag);
>>>  	  if (name != NULL)
>>> -	    (*ins->info->fprintf_func) (ins->info->stream, "%s", name);
>>> +	    (*ins->info->fprintf_styled_func)
>>> +	      (ins->info->stream, dis_style_mnemonic, "%s", name);
>>>  	  else
>>>  	    {
>>>  	      /* Just print the first byte as a .byte instruction.  */
>>> -	      (*ins->info->fprintf_func) (ins->info->stream, ".byte 0x%x",
>>> -				     (unsigned int) priv.the_buffer[0]);
>>> +	      (*ins->info->fprintf_styled_func)
>>> +		(ins->info->stream, dis_style_mnemonic, ".byte");
>>
>> Perhaps better have dis_style_directive for this? It's certainly not
>> an insn mnemonic.
> 
> Are you suggesting directive in addition to mnemonic?  Or as a
> replacement for?

In addition to. They're fundamentally different things at the
assembler level. But that's just my view ...

> My goal with the style list was to try and keep the number of styles
> pretty small, an instrution mnemonic like 'add' and a directive like
> '.byte' seemed to have a similar enough function that styling them
> identically felt OK.
> 
>>
>>> +	      (*ins->info->fprintf_styled_func)
>>> +		(ins->info->stream, dis_style_text, " ");
>>> +	      (*ins->info->fprintf_styled_func)
>>> +		(ins->info->stream, dis_style_immediate, "0x%x",
>>> +		 (unsigned int) priv.the_buffer[0]);
>>
>> I wonder if the naming (dis_style_immediate) isn't misleading. As per
>> the comment next to its definition it really appears to mean any kind
>> of number (like is the case here), not just immediate operands of
>> instructions. Hence maybe dis_style_number (as replacement for or in
>> addition to dis_style_immediate)?
> 
> You mentioned this before in the previous thread, and I didn't really
> understand then either.
> 
> Can you give an example of something that's a number, but not an
> immediate?  e.g. I wonder (given the instruction/directive distinction
> you draw above), I wonder if you're conserned about: '.byte 0x4', maybe
> you don't like referring to this 0x4 here as an immediate?

Well, an operand to a directive for example is not an immediate imo,
yes. A "load offset" (as your comment calls it) may also not be an
immediate. E.g. in x86 memory access instructions:

	mov	0x10(%rbx), %eax

the 0x10 isn't an immediate, but a displacement. The difference may
be more relevant in something like

	mov	$0, 0x10(%rbx)

where the $0 is an immediate operand, but the 0x10 isn't (and you
wouldn't want to mix the two).

>From that comment it's not clear to me where else you would think
"immediate" applies (or not), but in RISC-V's

	lw	x0, 0x10(x0)

I wouldn't consider the 0x10 an immediate either, albeit this may
be a result of my x86 bias.

Jan



More information about the Binutils mailing list