• S
    proc: add support for dwz compressed DWARF · 38307f92
    Sergio Lopez 提交于
    'dwz' is a tool that reduces the size of DWARF sections by
    deduplicating symbols. The deduplicated symbols are moved from their
    original 'compile unit' to a 'partial unit', which is then referenced
    from its original location with an 'imported unit' tag.
    
    In the case of Go binaries, all symbols are located in a single
    'compile unit', and the name of each symbol contains a reference to its
    package, so 'dwz' is not able to deduplicate them. But still, some C
    symbols included in the binary are deduplicated, which also alters the
    structure of the DWARF sections, making delve unable to parse them
    (crashing in the attempt).
    
    While it would've been possible to simply ignore the C symbols, or
    blindly loading all then into BinaryInfo members (packageVars,
    Functions...), for correctness sake this change tries to do the right
    thing, staging symbols into temporary partialUnit objects, moving them
    to BinaryInfo when they are actually requested  by a 'imported unit'
    tag.
    38307f92
bininfo.go 21.1 KB