I made some minidump-2-core changes that give us much more complete core files
from our minidumps.
These changes really only make sense though, once my other change list goes in.
I made changes to breakpad that make it include information about DSOs into the
minidump. This information can then be used by "gdb" to find the appropriate
DSOs and to give us correct backtraces.
Description:
Miscellaneous improvements to minidump-2-core:
- now builds from gyp.
- added a "-v" flag to print (almost) all of the information contained in
the minidump file to stderr.
- keep track of all mappings including the data that is part of this
mapping (if any). This allows us to read the entire minidump file
initially, combine all the different sources of information that we
have, and come up with a complete picture of what needs to go into the
core file. Previously, we had a hard time combining partial data from
different minidump streams.
- parse all information about memory mappings (including the /proc/$PID/maps
data) that we get from the minidump. This gives us the most complete
core file possible.
- if breakpad recorded the loaded DSOs, update the _DYNAMIC data structure
in the core file to include this information. The exact details for this
data structure are described in <link.h>.
- keep track of signatures for all DSOs. When we then generate the core
file, include the signature in the filename of the DSO. This allows us
to analyze user-provided crash dumps, even if the user has system
libraries that differ from ours.
We now assume that all of these DSOs are installed in "/var/lib/breakpad/"
- added parsing of CPU register information for x86-64. Previously, we could
only parse minidumps generated on i386.
- detect incorrectly written minidump files (e.g. zero'd out environment and
corrupted command lines) and don't bother parsing defective streams.
- detect if the minidump file used the wrong stream identifier for the
AUXV vector and compensate for this bug.
TEST=convert minidump files, load in gdb, check that we get full backtraces
BUG=none