f92c640 debug/dwarf: speed up SkipChildren for compilation units

Authored and Committed by Dmitry Vyukov 3 years ago
    debug/dwarf: speed up SkipChildren for compilation units
    
    For a common pattern of iterating only over top-level compilation units (CU)
    Reader.SkipChildren has decode and meterialize all CU subentries just
    to skip them, because DW_TAG_compile_unit does not have DW_AT_sibling.
    However, CUs have total size encoded before the unit and we already parse them
    and know all unit sizes.
    Optimize Reader.SkipChildren to use that size when skipping CUs children.
    
    This speeds up iteration over a 1.3GB object file from 7.5s to 0.73s.
    
    Change-Id: I2a8f00955159b4bd13571409f4817805f934cb69
    Reviewed-on: https://go-review.googlesource.com/c/go/+/256217
    Run-TryBot: Dmitry Vyukov <dvyukov@google.com>
    TryBot-Result: Go Bot <gobot@golang.org>
    Reviewed-by: Than McIntosh <thanm@google.com>
    Reviewed-by: Ian Lance Taylor <iant@golang.org>
    Trust: Than McIntosh <thanm@google.com>
    
        
file modified
+17 -4
file modified
+42 -0