]> Cypherpunks repositories - gostls13.git/commit
cmd/link: fix DWARF refs so that they always point to the typedef entry
authorAlessandro Arzilli <alessandro.arzilli@gmail.com>
Mon, 10 Sep 2018 13:36:59 +0000 (15:36 +0200)
committerThan McIntosh <thanm@google.com>
Tue, 18 Sep 2018 15:38:16 +0000 (15:38 +0000)
commita0f5d5f8830e578892c47f7704e6a2616273aac1
treec35854a21c06d5246c25f2cb30e879f6e7136eb8
parent19ac6a82d3be818572881d60026109946a5a69e6
cmd/link: fix DWARF refs so that they always point to the typedef entry

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: Than McIntosh <thanm@google.com>
src/cmd/link/internal/ld/dwarf.go
src/cmd/link/internal/ld/dwarf_test.go