]> Cypherpunks repositories - gostls13.git/commitdiff
debug/dwarf: fix Reader panic on DW_TAG_unspecified_type
authorDerek Parker <parkerderek86@gmail.com>
Wed, 6 Aug 2014 19:11:37 +0000 (12:11 -0700)
committerBrad Fitzpatrick <bradfitz@golang.org>
Wed, 6 Aug 2014 19:11:37 +0000 (12:11 -0700)
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

index 7b5f1cf7b9a89ee4b4ba437d3931f46f7e2f4acf..e59737b0a45cc6a1c71d1dc0a37a43b3e5cddefc 100644 (file)
@@ -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 {