> On Nov 29, 2018, at 10:55 AM, Pavel Labath via Phabricator 
> <revi...@reviews.llvm.org> wrote:
> 
> labath added a comment.
> 
> I've recently started looking at adding a new symbol file format (breakpad 
> symbols). While researching the best way to achieve that, I started comparing 
> the operation of PDB and DWARF symbol files. I noticed a very important 
> difference there, and I think that is the cause of our problems here. In the 
> DWARF implementation, a symbol file is an overlay on top of an object file - 
> it takes the data contained by the object file and presents it in a more 
> structured way.
> 
> However, that is not the case with PDB (both implementations). These take the 
> debug information from a completely different file, which is not backed by an 
> ObjectFile instance, and then present that. Since the SymbolFile interface 
> requires them to be backed by an object file, they both pretend they are 
> backed by the original EXE file, but in reality the data comes from elsewhere.
> 
> If we had an ObjectFilePDB (which not also not ideal, though in a way it is a 
> better fit to the current lldb organization), then this could expose the PDB 
> symtab via the existing ObjectFile interface and we could reuse the existing 
> mechanism for merging symtabs from two object files.
> 
> I am asking this because now I am facing a choice in how to implement 
> breakpad symbols. I could go the PDB way, and read the symbols without an 
> intervening object file, or I could create an ObjectFileBreakpad and then 
> (possibly) a SymbolFileBreakpad sitting on top of that.
> 
> The drawbacks of the PDB approach I see are:
> 
> - I lose the ability to do matching of the (real) object file via symbol 
> vendors. The PDB symbol files now basically implement their own little symbol 
> vendors inside them, which is mostly fine if you just need to find the PDB 
> next to the exe file. However, things could get a bit messy if you wanted to 
> implement some more complex searching on multiple paths, or downloading them 
> from the internet.
> - I'll hit issues when attempting to unwind (which is the real meat of the 
> breakpad symbols), because unwind info is currently provided via the 
> ObjectFile interface (ObjectFile::GetUnwindTable).
> 
> The drawbacks of the ObjectFile approach are:
> 
> - more code  - it needs a new ObjectFile and a new SymbolFile class (possibly 
> also a SymbolVendor)
> - it will probably look a bit weird because Breakpad files (and PDBs) aren't 
> really object files
> 
> I'd like to hear your thoughts on this, if you have any.

Since the Breakpad files contain symbol and debug info, I would make a 
ObjectFileBreakpad and SymbolFileBreakpad route. We might want to just load a 
break pad file and be able to symbolicate with it. Each symbol vendor will need 
to be able to use a breakpad file (since Breakpad produces files for all 
architectures), so we can build some functionality into the SymbolVendor base 
class for file formats that any file format (ELF, Mach-o, COFF) might want to 
use.
> 
> 
> CHANGES SINCE LAST ACTION
>  https://reviews.llvm.org/D53368/new/
> 
> https://reviews.llvm.org/D53368
> 
> 
> 

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to