• Alessandro Arzilli's avatar
    cmd/link: fix DWARF refs so that they always point to the typedef entry · a0f5d5f8
    Alessandro Arzilli authored
    For types defined as:
    
    type typename struct { ... }
    
    the linker produces two DIEs: (1) a DW_TAG_structure_type DIE and (2) a
    DW_TAG_typedef_type DIE having (1) as its type attribute.
    
    All subsequent references to 'typename' should use the
    DW_TAG_typedef_type DIE, not the DW_TAG_structure_type. Mostly this is
    true but sometimes one reference will use the DW_TAG_structure_type
    directly. In particular, this happens to the 'first' reference to the
    type in question (where 'first' means whatever happens first in the way
    the linker scans its symbols).
    
    This isn't only true of struct types: pointer types, array types, etc.
    can also be affected.
    
    This fix solves the problem by always returning the typedef DIE in
    newtype, when one is created.
    
    Fixes #27614
    
    Change-Id: Ia65b4a1d8c2b752e33a4ebdb74ccd92faa69526e
    Reviewed-on: https://go-review.googlesource.com/134555
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: default avatarThan McIntosh <thanm@google.com>
    a0f5d5f8
dwarf_test.go 26.8 KB