[Crash-utility] After feedback on crash patch

Dave Anderson anderson at redhat.com
Tue Apr 24 14:54:24 UTC 2012



----- Original Message -----
> Hi,
> 
> I'd like to get crash changed to add a new option to the mod command
> in crash. If you've got a dump server and you've got debuginfo RPMs
> extracted for pretty much every RHEL/SLES release you can create a
> symlink in the same directory as the vmcore pointing to the correct
> namelist, for example:
> 
> vmlinux -> /debuginfo/x86_64/rhel5/2.6.18-164/usr/lib/debug/lib/modules/2.6.18-164.el5/vmlinux
> 
> I'd like to see the mod command automatically work out where the
> debug modules will be based upon the result of realpath(3) on the
> namelist then removing everything after /usr/lib/debug. I know that
> there's the "--mod directory" option but you've got to remember to
> run it all the time and if you've extracted the kernel debuginfo
> crash can easily work out where they are if you use either a full or
> relative path or symlink to the namelist. I don't know if anyone
> would prefer to see it implemented in a different way but rather
> than risk breaking something I didn't understand I added a new -t
> option instead (-t because it's similar to -S and t is the next
> available option after the letter s).
> 
> I've run it on a few dumps and it seems to be working correctly. All
> of the code changes are in kernel.c, help.c needed some changes just
> to add the help text. Any feedback would be appreciated.
> 
> Thanks
> Shane

It's a reasonable idea, but it seems that the eventual "tree" that is 
selected should be more restrictive.  Here's what I mean...

It works nicely using the setup that you describe:

 vmlinux -> /debuginfo/x86_64/rhel5/2.6.18-164/usr/lib/debug/lib/modules/2.6.18-164.el5/vmlinux

So on my workstation, I set up a sample tree like so, where "mod -t" 
with CRASHDEBUG(3) shows this:

 REL namelist: vmlinux
 REL realpath: /tmp/mydebuginfos/usr/lib/debug/lib/modules/2.6.18-128.el5/vmlinux
 REL short path: /tmp/mydebuginfos/usr/lib/debug/

and it found the <module>.ko.debug files OK.

But on an internal server, we have a directory structure like this:

 /cores/debuginfo/x86_64/usr/lib/debug/lib/modules

And in that "modules" directory, there are dozens of "2.6.x" kernel version 
debuginfo trees.  So taking one example using a symbolically linked vmlinux
file, "mod -t" shows this:
  
 REL namelist: vmlinux
 REL realpath: /cores/debuginfo/x86_64/usr/lib/debug/lib/modules/2.6.32-220.2.1.el6.x86_64/vmlinux
 REL short path: /cores/debuginfo/x86_64/usr/lib/debug/

But unfortunately it just grabs whichever "<module>.ko.debug" it finds
first -- which invariably comes from the wrong kernel version tree, because
there are dozens of each <module>.ko.debug file to select from.

If it used "/cores/debuginfo/x86_64/usr/lib/debug/lib/modules/2.6.32-220.2.1.el6.x86_64",
as the "short path", then it would find the correct (only) <module>.ko.debug files.
  
So would there be a problem in having the "short path" include the parent 
directory that contains the vmlinux file?

We also compress the vmlinux files for space-saving.  You might
also test what happens when the local symbolic link is to a
vmlinux.gz file, because pc->namelist will point to the
uncompressed tmpname-generated file instead of back into the 
original tree.

Thanks,
  Dave




More information about the Crash-utility mailing list