[PATCH v2 2/2] disas/hppa: Show hexcode of instruction along with disassembly

deller@kernel.org posted 2 patches 1 year ago
Maintainers: Richard Henderson <richard.henderson@linaro.org>
[PATCH v2 2/2] disas/hppa: Show hexcode of instruction along with disassembly
Posted by deller@kernel.org 1 year ago
From: Helge Deller <deller@gmx.de>

On hppa many instructions can be expressed by different bytecodes.
To be able to debug qemu translation bugs it's therefore necessary to see the
currently executed byte codes without the need to lookup the sequence without
the full executable.
With this patch the instruction byte code is shown beside the disassembly.

Signed-off-by: Helge Deller <deller@gmx.de>
---
 disas/hppa.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/disas/hppa.c b/disas/hppa.c
index dcf9a47f34..38fc05acc4 100644
--- a/disas/hppa.c
+++ b/disas/hppa.c
@@ -1979,6 +1979,9 @@ print_insn_hppa (bfd_vma memaddr, disassemble_info *info)
 	  if (opcode->arch == pa20w)
 	    continue;
 #endif
+	  (*info->fprintf_func) (info->stream, " %02x %02x %02x %02x   ",
+                (insn >> 24) & 0xff, (insn >> 16) & 0xff,
+                (insn >>  8) & 0xff, insn & 0xff);
 	  (*info->fprintf_func) (info->stream, "%s", opcode->name);
 
 	  if (!strchr ("cfCY?-+nHNZFIuv{", opcode->args[0]))
-- 
2.41.0
Re: [PATCH v2 2/2] disas/hppa: Show hexcode of instruction along with disassembly
Posted by Richard Henderson 1 year ago
On 11/17/23 02:53, deller@kernel.org wrote:
> From: Helge Deller <deller@gmx.de>
> 
> On hppa many instructions can be expressed by different bytecodes.
> To be able to debug qemu translation bugs it's therefore necessary to see the
> currently executed byte codes without the need to lookup the sequence without
> the full executable.
> With this patch the instruction byte code is shown beside the disassembly.
> 
> Signed-off-by: Helge Deller <deller@gmx.de>
> ---
>   disas/hppa.c | 3 +++
>   1 file changed, 3 insertions(+)
> 
> diff --git a/disas/hppa.c b/disas/hppa.c
> index dcf9a47f34..38fc05acc4 100644
> --- a/disas/hppa.c
> +++ b/disas/hppa.c
> @@ -1979,6 +1979,9 @@ print_insn_hppa (bfd_vma memaddr, disassemble_info *info)
>   	  if (opcode->arch == pa20w)
>   	    continue;
>   #endif
> +	  (*info->fprintf_func) (info->stream, " %02x %02x %02x %02x   ",
> +                (insn >> 24) & 0xff, (insn >> 16) & 0xff,
> +                (insn >>  8) & 0xff, insn & 0xff);
>   	  (*info->fprintf_func) (info->stream, "%s", opcode->name);
>   
>   	  if (!strchr ("cfCY?-+nHNZFIuv{", opcode->args[0]))

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

A possible improvement is to push this outside of the search loop and then change

      }
-  (*info->fprintf_func) (info->stream, "#%8x", insn);
+  info->fprintf_func(info->stream, "<unknown>");
    return sizeof (insn);

so the byte decode is shared with the rare case of garbage in the insn stream.


r~
Re: [PATCH v2 2/2] disas/hppa: Show hexcode of instruction along with disassembly
Posted by Helge Deller 1 year ago
* Richard Henderson <richard.henderson@linaro.org>:
> On 11/17/23 02:53, deller@kernel.org wrote:
> > From: Helge Deller <deller@gmx.de>
> > 
> > On hppa many instructions can be expressed by different bytecodes.
> > To be able to debug qemu translation bugs it's therefore necessary to see the
> > currently executed byte codes without the need to lookup the sequence without
> > the full executable.
> > With this patch the instruction byte code is shown beside the disassembly.
> > 
> > Signed-off-by: Helge Deller <deller@gmx.de>
> > ---
> >   disas/hppa.c | 3 +++
> >   1 file changed, 3 insertions(+)
> > 
> > diff --git a/disas/hppa.c b/disas/hppa.c
> > index dcf9a47f34..38fc05acc4 100644
> > --- a/disas/hppa.c
> > +++ b/disas/hppa.c
> > @@ -1979,6 +1979,9 @@ print_insn_hppa (bfd_vma memaddr, disassemble_info *info)
> >   	  if (opcode->arch == pa20w)
> >   	    continue;
> >   #endif
> > +	  (*info->fprintf_func) (info->stream, " %02x %02x %02x %02x   ",
> > +                (insn >> 24) & 0xff, (insn >> 16) & 0xff,
> > +                (insn >>  8) & 0xff, insn & 0xff);
> >   	  (*info->fprintf_func) (info->stream, "%s", opcode->name);
> >   	  if (!strchr ("cfCY?-+nHNZFIuv{", opcode->args[0]))
> 
> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
> 
> A possible improvement is to push this outside of the search loop and then change
> 
>      }
> -  (*info->fprintf_func) (info->stream, "#%8x", insn);
> +  info->fprintf_func(info->stream, "<unknown>");
>    return sizeof (insn);
> 
> so the byte decode is shared with the rare case of garbage in the insn stream.

Like below?

From: Helge Deller <deller@gmx.de>
Subject: [PATCH] disas/hppa: Show hexcode of instruction along with
 disassembly

On hppa many instructions can be expressed by different bytecodes.
To be able to debug qemu translation bugs it's therefore necessary to see the
currently executed byte codes without the need to lookup the sequence without
the full executable.
With this patch the instruction byte code is shown beside the disassembly.

Signed-off-by: Helge Deller <deller@gmx.de>

diff --git a/disas/hppa.c b/disas/hppa.c
index dcf9a47f34..cce4f4aa37 100644
--- a/disas/hppa.c
+++ b/disas/hppa.c
@@ -1968,6 +1968,10 @@ print_insn_hppa (bfd_vma memaddr, disassemble_info *info)
 
   insn = bfd_getb32 (buffer);
 
+  info->fprintf_func(info->stream, " %02x %02x %02x %02x   ",
+                (insn >> 24) & 0xff, (insn >> 16) & 0xff,
+                (insn >>  8) & 0xff, insn & 0xff);
+
   for (i = 0; i < NUMOPCODES; ++i)
     {
       const struct pa_opcode *opcode = &pa_opcodes[i];
@@ -2826,6 +2830,6 @@ print_insn_hppa (bfd_vma memaddr, disassemble_info *info)
 	  return sizeof (insn);
 	}
     }
-  (*info->fprintf_func) (info->stream, "#%8x", insn);
+  info->fprintf_func(info->stream, "<unknown>");
   return sizeof (insn);
 }
Re: [PATCH v2 2/2] disas/hppa: Show hexcode of instruction along with disassembly
Posted by Richard Henderson 1 year ago
On 11/17/23 09:33, Helge Deller wrote:
> * Richard Henderson <richard.henderson@linaro.org>:
>> On 11/17/23 02:53, deller@kernel.org wrote:
>>> From: Helge Deller <deller@gmx.de>
>>>
>>> On hppa many instructions can be expressed by different bytecodes.
>>> To be able to debug qemu translation bugs it's therefore necessary to see the
>>> currently executed byte codes without the need to lookup the sequence without
>>> the full executable.
>>> With this patch the instruction byte code is shown beside the disassembly.
>>>
>>> Signed-off-by: Helge Deller <deller@gmx.de>
>>> ---
>>>    disas/hppa.c | 3 +++
>>>    1 file changed, 3 insertions(+)
>>>
>>> diff --git a/disas/hppa.c b/disas/hppa.c
>>> index dcf9a47f34..38fc05acc4 100644
>>> --- a/disas/hppa.c
>>> +++ b/disas/hppa.c
>>> @@ -1979,6 +1979,9 @@ print_insn_hppa (bfd_vma memaddr, disassemble_info *info)
>>>    	  if (opcode->arch == pa20w)
>>>    	    continue;
>>>    #endif
>>> +	  (*info->fprintf_func) (info->stream, " %02x %02x %02x %02x   ",
>>> +                (insn >> 24) & 0xff, (insn >> 16) & 0xff,
>>> +                (insn >>  8) & 0xff, insn & 0xff);
>>>    	  (*info->fprintf_func) (info->stream, "%s", opcode->name);
>>>    	  if (!strchr ("cfCY?-+nHNZFIuv{", opcode->args[0]))
>>
>> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
>>
>> A possible improvement is to push this outside of the search loop and then change
>>
>>       }
>> -  (*info->fprintf_func) (info->stream, "#%8x", insn);
>> +  info->fprintf_func(info->stream, "<unknown>");
>>     return sizeof (insn);
>>
>> so the byte decode is shared with the rare case of garbage in the insn stream.
> 
> Like below?

Yes, perfect, thanks.


r~

> 
> From: Helge Deller <deller@gmx.de>
> Subject: [PATCH] disas/hppa: Show hexcode of instruction along with
>   disassembly
> 
> On hppa many instructions can be expressed by different bytecodes.
> To be able to debug qemu translation bugs it's therefore necessary to see the
> currently executed byte codes without the need to lookup the sequence without
> the full executable.
> With this patch the instruction byte code is shown beside the disassembly.
> 
> Signed-off-by: Helge Deller <deller@gmx.de>
> 
> diff --git a/disas/hppa.c b/disas/hppa.c
> index dcf9a47f34..cce4f4aa37 100644
> --- a/disas/hppa.c
> +++ b/disas/hppa.c
> @@ -1968,6 +1968,10 @@ print_insn_hppa (bfd_vma memaddr, disassemble_info *info)
>   
>     insn = bfd_getb32 (buffer);
>   
> +  info->fprintf_func(info->stream, " %02x %02x %02x %02x   ",
> +                (insn >> 24) & 0xff, (insn >> 16) & 0xff,
> +                (insn >>  8) & 0xff, insn & 0xff);
> +
>     for (i = 0; i < NUMOPCODES; ++i)
>       {
>         const struct pa_opcode *opcode = &pa_opcodes[i];
> @@ -2826,6 +2830,6 @@ print_insn_hppa (bfd_vma memaddr, disassemble_info *info)
>   	  return sizeof (insn);
>   	}
>       }
> -  (*info->fprintf_func) (info->stream, "#%8x", insn);
> +  info->fprintf_func(info->stream, "<unknown>");
>     return sizeof (insn);
>   }