[Crash-utility] Another parsing bug -- likely confusion caused by open parenthesis

Dave Anderson anderson at redhat.com
Tue Feb 21 21:40:03 UTC 2012



----- Original Message -----
> 
> 
> ----- Original Message -----
> > crash> p/x *(*(struct trace_page*)0xFFFF8804125CBA60).page | sed
> > 's/^\$[0-9]* =/0xFFFF8804125CBA60 =/' >> trace-data.txt\n
> > gdb: gdb request failed: p/x *(*(struct
> > trace_page*)0xFFFF8804125CBA60).page | sed 's/^\$[0-9]*
> > =/0xFFFF8804125CBA60 =/'
> > crash> p/x *(*(struct trace_page*)0xFFFF8804125CBA60).page
> > $1467 = {
> >    flags = 0x200000000000000,
> >    _count = {
> >      counter = 0x1
> >    },
> >    {
> >      _mapcount = {
> >        counter = 0xffffffff
> >      },
> >      {
> >        inuse = 0xffff,
> >        objects = 0xffff
> >      }
> >    },
> >    {
> >      {
> >        private = 0x0,
> >        mapping = 0x0
> >      },
> >      ptl = {
> >        raw_lock = {
> >          slock = 0x0
> >        }
> >      },
> >      slab = 0x0,
> >      first_page = 0x0
> >    },
> >    {
> >      index = 0x0,
> >      freelist = 0x0,
> >      reserve = 0x0,
> >      frag_count = {
> >        counter = 0x0
> >      }
> >    },
> >    lru = {
> >      next = 0xdead000000100100,
> >      prev = 0xdead000000200200
> >    }
> > }
> 
> Bruce,
> 
> I'm not sure what you mean about the "open parenthesis", but I think
> this simpler example shows the problem, which is related to using
> a native gdb command in conjunction with a pipe and a redirect.
>   
> The "p" command is sort of a "convenience" crash command that pretty
> much exists to be able to quickly change the output radix before passing
> the request to the gdb module.  Using just "p" alone defaults to the
> current output radix (decimal by default):
>  
>   crash> p jiffies
>   jiffies = $12 = 4294754313
>   crash>
> 
> The output radix can be changed by entering the "hex" alias,
> and then the same command above.  Or alternatively, either
> "p -x" or the "px" alias can be used:
> 
>   crash> px jiffies
>   jiffies = $13 = 0xfffcc009
>   crash>
> 
> Piping the output works:
> 
>   crash> px jiffies | cat
>   jiffies = $14 = 0xfffcc009
>   crash>
> 
> Piping the output, and then redirecting it works:
> 
>   crash> px jiffies | cat > /tmp/junk
>   crash> !cat /tmp/junk
>   jiffies = $15 = 0xfffcc009
>   crash>
> 
> But using the gdb "p/x" command directly (bypassing the crash "p"
> command), in conjunction with a pipe and a redirect, generates the
> failure.  Just a pipe or a redirect alone works OK:
> 
>   crash> p/x jiffies | cat
>   $16 = 0xfffcc009
>   crash> p/x jiffies > /tmp/junk
>   crash> !cat /tmp/junk
>   $17 = 0xfffcc009
>   crash>
> 
> But using a pipe and a redirect strips the redirect, but leaves the "| cat"
> attached to the end of the command line sent to gdb:
> 
>   crash> p/x jiffies | cat > /tmp/junk
>   gdb: gdb request failed: p/x jiffies | cat
>   crash>
> 
> Interesting that several pipes can be used, with the same bug
> showing up:
> 
>   crash> p/x jiffies | cat | cat > /tmp/junk
>   gdb: gdb request failed: p/x jiffies | cat | cat
>   crash>
> 
> Not sure why just yet, other than there's a difference in the way
> native gdb commands and crash commands are processed.  Let me dig
> into it...

Bruce,

The attached patch will address the above issue with native gdb command
handling -- although I suspect it will only be a matter of time before you
come up with another anomaly nobody's bumped into yet...  ;-)

Thanks,
  Dave

-------------- next part --------------
A non-text attachment was scrubbed...
Name: gdb_interface.patch
Type: text/x-patch
Size: 750 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/crash-utility/attachments/20120221/856acc0b/attachment.bin>


More information about the Crash-utility mailing list