Adding breakpad "symbol" file support

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

Yay!

In case anyone is interested in the details, the Breakpad symbol format is documented here: https://chromium.googlesource.com/breakpad/breakpad/+/master/docs/symbol_files.md

Thanks, Leonard, I actually didn't know about that document. :slight_smile: (The format seemed straight-forward enough, so I wasn't really trying to find it either).

I also forgot to add that these breakpad files might also be interesting as a test vehicle for the unwinder, as they provide a human-editable format for describing unwind instructions.

pl