func gocoreName(dt dwarf.Type) string {
	switch x := dt.(type) {
	case *dwarf.PtrType:
		if _, ok := x.Type.(*dwarf.VoidType); ok {
			return "unsafe.Pointer"
		}
		return "*" + gocoreName(x.Type)
	case *dwarf.ArrayType:
		return fmt.Sprintf("[%d]%s", x.Count, gocoreName(x.Type))
	case *dwarf.StructType:
		if !strings.HasPrefix(x.StructName, "struct {") {
			// This is a named type, return that name.
			return x.StructName
		}
		// Build gocore name from the DWARF fields.
		s := "struct {"
		first := true
		for _, f := range x.Field {
			if !first {
				s += ";"
			}
			name := f.Name
			if i := strings.Index(name, "."); i >= 0 {
				// Remove pkg path from field names.
				name = name[i+1:]
			}
			s += fmt.Sprintf(" %s %s", name, gocoreName(f.Type))
			first = false
		}
		s += " }"
		return s
	default:
		return dt.String()
	}
}
func gocoreName(dt dwarf.Type) string {
	switch x := dt.(type) {
	case *dwarf.PtrType:
		if _, ok := x.Type.(*dwarf.VoidType); ok {
			return "unsafe.Pointer"
		}
		return "*" + gocoreName(x.Type)
	case *dwarf.ArrayType:
		return fmt.Sprintf("[%d]%s", x.Count, gocoreName(x.Type))
	case *dwarf.StructType:
		if !strings.HasPrefix(x.StructName, "struct {") {
			
			return x.StructName
		}
		
		s := "struct {"
		first := true
		for _, f := range x.Field {
			if !first {
				s += ";"
			}
			name := f.Name
			if i := strings.Index(name, "."); i >= 0 {
				
				name = name[i+1:]
			}
			s += fmt.Sprintf(" %s %s", name, gocoreName(f.Type))
			first = false
		}
		s += " }"
		return s
	default:
		return dt.String()
	}
}
func gocoreName ( dt dwarf . Type ) string { switch x := dt . ( type ) { case * dwarf . PtrType : if _ , ok := x . Type . ( * dwarf . VoidType ) ; ok { return " " } return " " + gocoreName ( x . Type ) case * dwarf . ArrayType : return fmt . Sprintf ( " " , x . Count , gocoreName ( x . Type ) ) case * dwarf . StructType : if ! strings . HasPrefix ( x . StructName , " " ) { // This is a named type, return that name. return x . StructName } // Build gocore name from the DWARF fields. s := " " first := true for _ , f := range x . Field { if ! first { s += " " } name := f . Name if i := strings . Index ( name , " " ) ; i >= 0 { // Remove pkg path from field names. name = name [ i + 1 : ] } s += fmt . Sprintf ( " " , name , gocoreName ( f . Type ) ) first = false } s += " " return s default : return dt . String ( ) } }
// gocoreName generates the name this package uses to refer to a dwarf type.
// This name differs from the dwarf name in that it stays closer to the Go name for the type.
// For instance (dwarf name -> gocoreName)
//   struct runtime.siginfo -> runtime.siginfo
//   *void -> unsafe.Pointer
//   struct struct { runtime.signalLock uint32; runtime.hz int32 } -> struct { signalLock uint32; hz int32 }
gocoreName generates the name this package uses to refer to a dwarf type . This name differs from the dwarf name in that it stays closer to the Go name for the type . For instance ( dwarf name - > gocoreName ) struct runtime . siginfo - > runtime . siginfo * void - > unsafe . Pointer struct struct { runtime . signalLock uint32 ; runtime . hz int32 } - > struct { signalLock uint32 ; hz int32 }