[lldb-dev] Adding breakpad "symbol" file support

Pavel Labath via lldb-dev lldb-dev at lists.llvm.org
Mon Dec 3 05:39:56 PST 2018


Hello all,

I'd like to propose adding support for reading breakpad symbol files to 
LLDB.

The breakpad files are textual files, which contain just enough
information to produce a backtrace from a crash
dump. This information includes:

- UUID, architecture and name of the module
- line tables
- list of symbols
- unwind information

They are meant to complement the "minidump" files (already supported by 
lldb), which are the "core" files produced by breakpad when an 
application crashes.

A minimal breakpad file could look like this:
MODULE Linux x86_64 0000000024B5D199F0F766FFFFFF5DC30 a.out
INFO CODE_ID 00000000B52499D1F0F766FFFFFF5DC3
FILE 0 /tmp/a.c
FUNC 1010 10 0 _start
1010 4 4 0
1014 5 5 0
1019 5 6 0
101e 2 7 0
PUBLIC 1010 0 _start
STACK CFI INIT 1010 10 .cfa: $rsp 8 + .ra: .cfa -8 + ^
STACK CFI 1011 $rbp: .cfa -16 + ^ .cfa: $rsp 16 +
STACK CFI 1014 .cfa: $rbp 16 +

Even though this data would normally be considered "symbol" information,
in the current lldb infrastructure it is assumed every SymbolFile object
is backed by an ObjectFile instance. So, in order to better interoperate
with the rest of the code (particularly symbol vendors). I propose to 
also add an ObjectFileBreakpad class to access the breakpad file at a 
lower level. My plan tentative plan is to present the individual chunks 
of the breakpad file as ObjectFile , which can then be used by
other parts of the codebase (SymbolFileBreakpad ?) to vend the necessary
information.

I have a preliminary patch (D55214), which adds the scaffolding 
necessary to recognise breakpad files as on object format, and parses 
the information in the breakpad header (i.e., it's UUID and 
architecture). The other parts are to be added later.

Please let me know if you have any questions or concerns about this,
pavel


More information about the lldb-dev mailing list