• Alex Brainman's avatar
    cmd/link: rewrite pe symbol table generating code · bb48b864
    Alex Brainman authored
    Every go executable has COFF symbol table appended at the end. The table is
    used by nm and addr2line and contains all symbols present in the executable.
    The table is quite large. For example, my go.exe has 11736 records.
    
    To generate symbol table:
    1) we walk "all symbols" list to count symbols we want for the table;
    2) we allocate large global array of COFFSym structs (32 bytes each)
       to fit our symbols;
    3) we walk "all symbols" list again to fill our array with contents;
    4) we iterate over our global array to write all records to the file.
    
    This CL changes all these steps with single step:
    - walk "all symbols" list and write each COFF symbol table record to
      the file as we go.
    
    I hope new version is faster and uses less garbage, but I don't know
    how to benchmark this.
    
    Change-Id: Ie4870583250131ea4428e0e83a0696c9df1794e0
    Reviewed-on: https://go-review.googlesource.com/20580Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
    Run-TryBot: David Crawshaw <crawshaw@golang.org>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Run-TryBot: Alex Brainman <alex.brainman@gmail.com>
    bb48b864
pe.go 29 KB