From c0ccf6f314a1658e148d1aae4db5ac2be249fbe8 Mon Sep 17 00:00:00 2001 From: Derek Parker Date: Wed, 6 Aug 2014 12:11:37 -0700 Subject: [PATCH] debug/dwarf: fix Reader panic on DW_TAG_unspecified_type The linker currently produces the DWARF 3 DW_TAG_unspecified_type tag, however the Reader in debug/dwarf will panic whenever that tag is encountered. Fixes #8437. LGTM=rsc R=golang-codereviews, bradfitz, iant, rsc CC=golang-codereviews https://golang.org/cl/117280043 --- src/pkg/debug/dwarf/type.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/pkg/debug/dwarf/type.go b/src/pkg/debug/dwarf/type.go index 7b5f1cf7b9..e59737b0a4 100644 --- a/src/pkg/debug/dwarf/type.go +++ b/src/pkg/debug/dwarf/type.go @@ -88,6 +88,11 @@ type AddrType struct { BasicType } +// A UnspecifiedType represents implicit, unknown, ambiguous or nonexistent type. +type UnspecifiedType struct { + BasicType +} + // qualifiers // A QualType represents a type that has the C/C++ "const", "restrict", or "volatile" qualifier. @@ -630,6 +635,15 @@ func (d *Data) readType(name string, r typeReader, off Offset, typeCache map[Off typeCache[off] = t t.Name, _ = e.Val(AttrName).(string) t.Type = typeOf(e) + + case TagUnspecifiedType: + // Unspecified type (DWARF v3 §5.2) + // Attributes: + // AttrName: name + t := new(UnspecifiedType) + typ = t + typeCache[off] = t + t.Name, _ = e.Val(AttrName).(string) } if err != nil { -- 2.48.1