[Crash-utility] [PATCH v2] crash: dis: introduce count in reverse and forward mode

Dave Anderson anderson at redhat.com
Tue Jul 9 19:34:49 UTC 2019



Hi Aaron,

I didn't mean to scare you off, but at the same time I think you
understand how strongly I prefer to avoid screwing around with the
gdb code unless it's absolutely necessary.  (Not to mention that 
the dual-patching of printcmd.c by both gdb-7.6.patch and the
gdb-7.6-ppc64le-support.patch, may have made it unworkable.)

So I took my own advice, and implemented the "dis -[rf] address count"
capability with a simple patch to the top-level kernel.c disassembly
code:

  https://github.com/crash-utility/crash/commit/6c891b667f75543db279e1a29bf3d646a83d175d

Also, inspired by your reference to "Add negative repeat count to 'x' command" 
gdb patch, I added a new "rd -R" option last week:

  https://github.com/crash-utility/crash/commit/72654f8c62fb1277939a21daa92bc8b1af70ed71

Thanks,
  Dave




----- Original Message -----
> ----- Original Message -----
> > On Fri 2019-06-21 11:45 -0400, Dave Anderson wrote:
> > > 
> > > 
> > > ----- Original Message -----
> > > > Changes since v1:
> > > > 
> > > >  - Update 'dis' help page
> > > >  - Resolve patch fuzz
> > > > 
> > > > 
> > > > The purpose of this patch is to add support for a count value in reverse
> > > > or forward mode, during disassembly:
> > > > 
> > > > 	'dis [-r|-f] [symbol|address] [count]'
> > > > 
> > > > For example:
> > > > 
> > > >   crash> dis -f list_del+0x16 4
> > > >   0xffffffff812b3346 <list_del+22>:       jne    0xffffffff812b3381
> > > >   <list_del+81>
> > > >   0xffffffff812b3348 <list_del+24>:       mov    (%rbx),%rax
> > > >   0xffffffff812b334b <list_del+27>:       mov    0x8(%rax),%r8
> > > >   0xffffffff812b334f <list_del+31>:       cmp    %r8,%rbx
> > > > 
> > > >   crash> dis -r list_del+0x16 4
> > > >   0xffffffff812b333c <list_del+12>:       mov    0x8(%rdi),%rax
> > > >   0xffffffff812b3340 <list_del+16>:       mov    (%rax),%r8
> > > >   0xffffffff812b3343 <list_del+19>:       cmp    %r8,%rdi
> > > >   0xffffffff812b3346 <list_del+22>:       jne    0xffffffff812b3381
> > > >   <list_del+81>
> > [ ... ]
> > 
> > Hi Dave,
> > 
> > > To be honest, it's not clear how that can be addressed, because any patches
> > > to printcmd.c must be applicable to the non-ppc64le and the ppc64le
> > > versions
> > > of the file.
> > 
> > Unfortunately, I believe this is the underlying issue.
> > I did not compile test under ppc64le.
> > 
> > > So let's take a step back, and consider the risk/reward of this quite intrusive
> > > patchset to such a crucial gdb file.
> > 
> > In my opinion and if I understand correctly, the original GDB commit
> > bb556f1facb ("Add negative repeat count to 'x' command") is rather
> > self-contained and should not cause an issue. I was particularly careful in
> > this regard. Moving forward, I could strip out all but absolutely necessary
> > changes from the original GDB commit, to support this feature.
> > 
> > > First, "dis -f <address> <count>" is pretty much meaningless.  In order
> > > to accomplish that, just don't use the "-f" argument!
> > 
> > I agree - this is superficial; count in forward mode was added since
> > reverse mode also accepts a count.
> > 
> > > Secondly, for "dis -r <address> count", you could simply run "dis -r
> > > <address> | tail -4".
> > > For that matter, is it really all that onerous to see the fully
> > > disassembled function
> > > up to the target address?
> > 
> > Personally, I would prefer to avoid using an external command in this
> > particular case. Especially since the GDB command examine supports a
> > positive or negative (i.e. in GDB release 7.12 and above) count.
> > 
> > > And again, even if you wanted to support it, it also seems like it could be accomplished
> > > within the cmd_dis() function, given that the full output is pre-gathered into a tmpfile
> > > prior to being displayed.
> > 
> > We can indeed but it would be easier to utilise GDB for this as explained
> > above.
> >
> > If you don't mind another iteration, I'll attempt to address the above
> > build issues. Please let me know your thoughts.
> 
> I can't stop you from trying, but I have to say that you're not calming 
> my nerves, because:
>   
>   (1) I don't care whether gdb-7.12 has that capability.
>   (2) If it is at all possible to refrain from tinkering with
>       the temperamental beast gdb, I would always rather do so.
> 
> In the interest of simplicity and maintainability, it just seems that 
> here in cmd_dis():
> 
>    2019                 gdb_pass_through(buf5, NULL, GNU_RETURN_ON_ERROR);
>    2020 
>    2021                 if (req->flags & GNU_COMMAND_FAILED) {
>    2022                         close_tmpfile();
>    2023                         error(FATAL, dis_err, req->addr);
>    2024                 }
>    2025 
>    2026                 rewind(pc->tmpfile);
>    2027                 while (fgets(buf2, BUFSIZE, pc->tmpfile)) {
> 
> at line 2025, you could do something like:
> 
>                         if (count_entered and reverse)
>                                 set_reverse_offset(req->count);
>                         else
>                                 rewind(pc->tmpfile)
> 
> Your choice...
> 
> Dave
> 
> 
> > 
> > 
> > Kind regards,
> > 
> > --
> > Aaron Tomlin
> > 




More information about the Crash-utility mailing list