From: Jan Kratochvil <jan.kratochvil@redhat.com>
To: Paul Smith <psmith@gnu.org>
Cc: gdb@sourceware.org
Subject: Re: Classifying core files?
Date: Wed, 10 Dec 2008 22:15:00 -0000 [thread overview]
Message-ID: <20081210221408.GA13433@host0.dyn.jankratochvil.net> (raw)
In-Reply-To: <1228842548.2017.64.camel@psmith-ubeta.netezza.com>
On Tue, 09 Dec 2008 18:09:08 +0100, Paul Smith wrote:
> What I have at my disposal is a bunch of local and cross-debuggers and
> gcc/binutils suites, a bunch of potential executables that cores could
> come from, and a bunch of shared objects that might or might not have
> been loaded. And, a core file.
With old and/or non-Linux cores/executables there is no way to safely associate
them. It may be some heuristics such as checking some _r_debug linklist
validity but it is nothing much reliable, if possible at all. The primary
problem is that in the core files the readonly (commonly .text and .rodata)
pages are just omitted and readwrite pages cannot be compared as sure they
could be / usually are already modified in the core dumping time.
I do not understand much if you can generate new core files or if you are just
interested in the existing core files you have. In the former case there are
some possibilities:
For recent Linux kernels you may get the full dumps (incl. the readonly pages)
using /proc/<pid>/coredump_filter (see its doc). But still it will be
complicated to find the appropriate file containing the debuginfo for it.
More efficient and recommended would be build-ids:
With recent (2007 Oct+) Linux kernel the core files now contain also the first
page of the mapped ELF files.
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=82df39738ba9e02c057fa99b7461a56117d36119
If you build your distro using `ld --build-id' (default for Fedora since
Fedora 8) each binary has its unique id and so this unique id is present also
in the core files. Described at:
http://fedoraproject.org/wiki/Releases/FeatureBuildId
FSF GDB currently contains only the faster verification the separate .debug
files. There is a patch going to be hopefully integrated one day which
supports automatically finding the right binary just being given a bare core
file (`gdb -c ./core.1234'). For gdb-6.8:
http://cvs.fedora.redhat.com/viewvc/rpms/gdb/devel/gdb-6.6-buildid-locate.patch?view=co
For GDB HEAD:
http://people.redhat.com/jkratoch/gdb-6.8.50.20081209-buildid-locate.patch
It still has currently merged two unrelated functionalities:
(a) The expected locating of appropriate binaries from a bare core file.
(b) Reporting missing debuginfo rpms from missing .debug files.
> What I'm trying to do is generate a script that can determine the right
> set of GDB executable, GDB command line options (to "set sysroot",
> etc.), etc., starting with only the core file itself as information,
> then invoke GDB properly.
Yes, it works as described although it understandably requires the appropriate
symlinks (files) for the build-id hash mapping:
lrwxrwxrwx 1 root root 23 2008-10-30 11:57 /usr/lib/debug/.build-id/29/93b8ca46989e7434eef8daf61f31e9f8d6a0ba -> ../../../../../bin/bash
-rwxr-xr-x 1 root root 834520 2008-10-28 22:37 /bin/bash
lrwxrwxrwx 1 root root 20 2008-10-30 11:57 /usr/lib/debug/.build-id/29/93b8ca46989e7434eef8daf61f31e9f8d6a0ba.debug -> ../../bin/bash.debug
-rwxr-xr-x 1 root root 1903112 2008-10-28 22:37 /usr/lib/debug/bin/bash.debug
(possibly placed in a separate sysroot)
Patched GDB also loads the shared libraries according to their build-id hashes.
Regards,
Jan
prev parent reply other threads:[~2008-12-10 22:15 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-12-09 17:09 Paul Smith
2008-12-09 17:33 ` Daniel Jacobowitz
2008-12-10 22:15 ` Jan Kratochvil [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20081210221408.GA13433@host0.dyn.jankratochvil.net \
--to=jan.kratochvil@redhat.com \
--cc=gdb@sourceware.org \
--cc=psmith@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox