github.com/d4l3k/go@v0.0.0-20151015000803-65fc379daeda/src/debug/dwarf/const.go (about)

     1  // Copyright 2009 The Go Authors.  All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  // Constants
     6  
     7  package dwarf
     8  
     9  import "strconv"
    10  
    11  // An Attr identifies the attribute type in a DWARF Entry's Field.
    12  type Attr uint32
    13  
    14  const (
    15  	AttrSibling        Attr = 0x01
    16  	AttrLocation       Attr = 0x02
    17  	AttrName           Attr = 0x03
    18  	AttrOrdering       Attr = 0x09
    19  	AttrByteSize       Attr = 0x0B
    20  	AttrBitOffset      Attr = 0x0C
    21  	AttrBitSize        Attr = 0x0D
    22  	AttrStmtList       Attr = 0x10
    23  	AttrLowpc          Attr = 0x11
    24  	AttrHighpc         Attr = 0x12
    25  	AttrLanguage       Attr = 0x13
    26  	AttrDiscr          Attr = 0x15
    27  	AttrDiscrValue     Attr = 0x16
    28  	AttrVisibility     Attr = 0x17
    29  	AttrImport         Attr = 0x18
    30  	AttrStringLength   Attr = 0x19
    31  	AttrCommonRef      Attr = 0x1A
    32  	AttrCompDir        Attr = 0x1B
    33  	AttrConstValue     Attr = 0x1C
    34  	AttrContainingType Attr = 0x1D
    35  	AttrDefaultValue   Attr = 0x1E
    36  	AttrInline         Attr = 0x20
    37  	AttrIsOptional     Attr = 0x21
    38  	AttrLowerBound     Attr = 0x22
    39  	AttrProducer       Attr = 0x25
    40  	AttrPrototyped     Attr = 0x27
    41  	AttrReturnAddr     Attr = 0x2A
    42  	AttrStartScope     Attr = 0x2C
    43  	AttrStrideSize     Attr = 0x2E
    44  	AttrUpperBound     Attr = 0x2F
    45  	AttrAbstractOrigin Attr = 0x31
    46  	AttrAccessibility  Attr = 0x32
    47  	AttrAddrClass      Attr = 0x33
    48  	AttrArtificial     Attr = 0x34
    49  	AttrBaseTypes      Attr = 0x35
    50  	AttrCalling        Attr = 0x36
    51  	AttrCount          Attr = 0x37
    52  	AttrDataMemberLoc  Attr = 0x38
    53  	AttrDeclColumn     Attr = 0x39
    54  	AttrDeclFile       Attr = 0x3A
    55  	AttrDeclLine       Attr = 0x3B
    56  	AttrDeclaration    Attr = 0x3C
    57  	AttrDiscrList      Attr = 0x3D
    58  	AttrEncoding       Attr = 0x3E
    59  	AttrExternal       Attr = 0x3F
    60  	AttrFrameBase      Attr = 0x40
    61  	AttrFriend         Attr = 0x41
    62  	AttrIdentifierCase Attr = 0x42
    63  	AttrMacroInfo      Attr = 0x43
    64  	AttrNamelistItem   Attr = 0x44
    65  	AttrPriority       Attr = 0x45
    66  	AttrSegment        Attr = 0x46
    67  	AttrSpecification  Attr = 0x47
    68  	AttrStaticLink     Attr = 0x48
    69  	AttrType           Attr = 0x49
    70  	AttrUseLocation    Attr = 0x4A
    71  	AttrVarParam       Attr = 0x4B
    72  	AttrVirtuality     Attr = 0x4C
    73  	AttrVtableElemLoc  Attr = 0x4D
    74  	AttrAllocated      Attr = 0x4E
    75  	AttrAssociated     Attr = 0x4F
    76  	AttrDataLocation   Attr = 0x50
    77  	AttrStride         Attr = 0x51
    78  	AttrEntrypc        Attr = 0x52
    79  	AttrUseUTF8        Attr = 0x53
    80  	AttrExtension      Attr = 0x54
    81  	AttrRanges         Attr = 0x55
    82  	AttrTrampoline     Attr = 0x56
    83  	AttrCallColumn     Attr = 0x57
    84  	AttrCallFile       Attr = 0x58
    85  	AttrCallLine       Attr = 0x59
    86  	AttrDescription    Attr = 0x5A
    87  )
    88  
    89  var attrNames = [...]string{
    90  	AttrSibling:        "Sibling",
    91  	AttrLocation:       "Location",
    92  	AttrName:           "Name",
    93  	AttrOrdering:       "Ordering",
    94  	AttrByteSize:       "ByteSize",
    95  	AttrBitOffset:      "BitOffset",
    96  	AttrBitSize:        "BitSize",
    97  	AttrStmtList:       "StmtList",
    98  	AttrLowpc:          "Lowpc",
    99  	AttrHighpc:         "Highpc",
   100  	AttrLanguage:       "Language",
   101  	AttrDiscr:          "Discr",
   102  	AttrDiscrValue:     "DiscrValue",
   103  	AttrVisibility:     "Visibility",
   104  	AttrImport:         "Import",
   105  	AttrStringLength:   "StringLength",
   106  	AttrCommonRef:      "CommonRef",
   107  	AttrCompDir:        "CompDir",
   108  	AttrConstValue:     "ConstValue",
   109  	AttrContainingType: "ContainingType",
   110  	AttrDefaultValue:   "DefaultValue",
   111  	AttrInline:         "Inline",
   112  	AttrIsOptional:     "IsOptional",
   113  	AttrLowerBound:     "LowerBound",
   114  	AttrProducer:       "Producer",
   115  	AttrPrototyped:     "Prototyped",
   116  	AttrReturnAddr:     "ReturnAddr",
   117  	AttrStartScope:     "StartScope",
   118  	AttrStrideSize:     "StrideSize",
   119  	AttrUpperBound:     "UpperBound",
   120  	AttrAbstractOrigin: "AbstractOrigin",
   121  	AttrAccessibility:  "Accessibility",
   122  	AttrAddrClass:      "AddrClass",
   123  	AttrArtificial:     "Artificial",
   124  	AttrBaseTypes:      "BaseTypes",
   125  	AttrCalling:        "Calling",
   126  	AttrCount:          "Count",
   127  	AttrDataMemberLoc:  "DataMemberLoc",
   128  	AttrDeclColumn:     "DeclColumn",
   129  	AttrDeclFile:       "DeclFile",
   130  	AttrDeclLine:       "DeclLine",
   131  	AttrDeclaration:    "Declaration",
   132  	AttrDiscrList:      "DiscrList",
   133  	AttrEncoding:       "Encoding",
   134  	AttrExternal:       "External",
   135  	AttrFrameBase:      "FrameBase",
   136  	AttrFriend:         "Friend",
   137  	AttrIdentifierCase: "IdentifierCase",
   138  	AttrMacroInfo:      "MacroInfo",
   139  	AttrNamelistItem:   "NamelistItem",
   140  	AttrPriority:       "Priority",
   141  	AttrSegment:        "Segment",
   142  	AttrSpecification:  "Specification",
   143  	AttrStaticLink:     "StaticLink",
   144  	AttrType:           "Type",
   145  	AttrUseLocation:    "UseLocation",
   146  	AttrVarParam:       "VarParam",
   147  	AttrVirtuality:     "Virtuality",
   148  	AttrVtableElemLoc:  "VtableElemLoc",
   149  	AttrAllocated:      "Allocated",
   150  	AttrAssociated:     "Associated",
   151  	AttrDataLocation:   "DataLocation",
   152  	AttrStride:         "Stride",
   153  	AttrEntrypc:        "Entrypc",
   154  	AttrUseUTF8:        "UseUTF8",
   155  	AttrExtension:      "Extension",
   156  	AttrRanges:         "Ranges",
   157  	AttrTrampoline:     "Trampoline",
   158  	AttrCallColumn:     "CallColumn",
   159  	AttrCallFile:       "CallFile",
   160  	AttrCallLine:       "CallLine",
   161  	AttrDescription:    "Description",
   162  }
   163  
   164  func (a Attr) String() string {
   165  	if int(a) < len(attrNames) {
   166  		s := attrNames[a]
   167  		if s != "" {
   168  			return s
   169  		}
   170  	}
   171  	return strconv.Itoa(int(a))
   172  }
   173  
   174  func (a Attr) GoString() string {
   175  	if int(a) < len(attrNames) {
   176  		s := attrNames[a]
   177  		if s != "" {
   178  			return "dwarf.Attr" + s
   179  		}
   180  	}
   181  	return "dwarf.Attr(" + strconv.FormatInt(int64(a), 10) + ")"
   182  }
   183  
   184  // A format is a DWARF data encoding format.
   185  type format uint32
   186  
   187  const (
   188  	// value formats
   189  	formAddr        format = 0x01
   190  	formDwarfBlock2 format = 0x03
   191  	formDwarfBlock4 format = 0x04
   192  	formData2       format = 0x05
   193  	formData4       format = 0x06
   194  	formData8       format = 0x07
   195  	formString      format = 0x08
   196  	formDwarfBlock  format = 0x09
   197  	formDwarfBlock1 format = 0x0A
   198  	formData1       format = 0x0B
   199  	formFlag        format = 0x0C
   200  	formSdata       format = 0x0D
   201  	formStrp        format = 0x0E
   202  	formUdata       format = 0x0F
   203  	formRefAddr     format = 0x10
   204  	formRef1        format = 0x11
   205  	formRef2        format = 0x12
   206  	formRef4        format = 0x13
   207  	formRef8        format = 0x14
   208  	formRefUdata    format = 0x15
   209  	formIndirect    format = 0x16
   210  	// The following are new in DWARF 4.
   211  	formSecOffset   format = 0x17
   212  	formExprloc     format = 0x18
   213  	formFlagPresent format = 0x19
   214  	formRefSig8     format = 0x20
   215  	// Extensions for multi-file compression (.dwz)
   216  	// http://www.dwarfstd.org/ShowIssue.php?issue=120604.1
   217  	formGnuRefAlt  format = 0x1f20
   218  	formGnuStrpAlt format = 0x1f21
   219  )
   220  
   221  // A Tag is the classification (the type) of an Entry.
   222  type Tag uint32
   223  
   224  const (
   225  	TagArrayType              Tag = 0x01
   226  	TagClassType              Tag = 0x02
   227  	TagEntryPoint             Tag = 0x03
   228  	TagEnumerationType        Tag = 0x04
   229  	TagFormalParameter        Tag = 0x05
   230  	TagImportedDeclaration    Tag = 0x08
   231  	TagLabel                  Tag = 0x0A
   232  	TagLexDwarfBlock          Tag = 0x0B
   233  	TagMember                 Tag = 0x0D
   234  	TagPointerType            Tag = 0x0F
   235  	TagReferenceType          Tag = 0x10
   236  	TagCompileUnit            Tag = 0x11
   237  	TagStringType             Tag = 0x12
   238  	TagStructType             Tag = 0x13
   239  	TagSubroutineType         Tag = 0x15
   240  	TagTypedef                Tag = 0x16
   241  	TagUnionType              Tag = 0x17
   242  	TagUnspecifiedParameters  Tag = 0x18
   243  	TagVariant                Tag = 0x19
   244  	TagCommonDwarfBlock       Tag = 0x1A
   245  	TagCommonInclusion        Tag = 0x1B
   246  	TagInheritance            Tag = 0x1C
   247  	TagInlinedSubroutine      Tag = 0x1D
   248  	TagModule                 Tag = 0x1E
   249  	TagPtrToMemberType        Tag = 0x1F
   250  	TagSetType                Tag = 0x20
   251  	TagSubrangeType           Tag = 0x21
   252  	TagWithStmt               Tag = 0x22
   253  	TagAccessDeclaration      Tag = 0x23
   254  	TagBaseType               Tag = 0x24
   255  	TagCatchDwarfBlock        Tag = 0x25
   256  	TagConstType              Tag = 0x26
   257  	TagConstant               Tag = 0x27
   258  	TagEnumerator             Tag = 0x28
   259  	TagFileType               Tag = 0x29
   260  	TagFriend                 Tag = 0x2A
   261  	TagNamelist               Tag = 0x2B
   262  	TagNamelistItem           Tag = 0x2C
   263  	TagPackedType             Tag = 0x2D
   264  	TagSubprogram             Tag = 0x2E
   265  	TagTemplateTypeParameter  Tag = 0x2F
   266  	TagTemplateValueParameter Tag = 0x30
   267  	TagThrownType             Tag = 0x31
   268  	TagTryDwarfBlock          Tag = 0x32
   269  	TagVariantPart            Tag = 0x33
   270  	TagVariable               Tag = 0x34
   271  	TagVolatileType           Tag = 0x35
   272  	// The following are new in DWARF 3.
   273  	TagDwarfProcedure  Tag = 0x36
   274  	TagRestrictType    Tag = 0x37
   275  	TagInterfaceType   Tag = 0x38
   276  	TagNamespace       Tag = 0x39
   277  	TagImportedModule  Tag = 0x3A
   278  	TagUnspecifiedType Tag = 0x3B
   279  	TagPartialUnit     Tag = 0x3C
   280  	TagImportedUnit    Tag = 0x3D
   281  	TagMutableType     Tag = 0x3E // Later removed from DWARF.
   282  	TagCondition       Tag = 0x3F
   283  	TagSharedType      Tag = 0x40
   284  	// The following are new in DWARF 4.
   285  	TagTypeUnit            Tag = 0x41
   286  	TagRvalueReferenceType Tag = 0x42
   287  	TagTemplateAlias       Tag = 0x43
   288  )
   289  
   290  var tagNames = [...]string{
   291  	TagArrayType:              "ArrayType",
   292  	TagClassType:              "ClassType",
   293  	TagEntryPoint:             "EntryPoint",
   294  	TagEnumerationType:        "EnumerationType",
   295  	TagFormalParameter:        "FormalParameter",
   296  	TagImportedDeclaration:    "ImportedDeclaration",
   297  	TagLabel:                  "Label",
   298  	TagLexDwarfBlock:          "LexDwarfBlock",
   299  	TagMember:                 "Member",
   300  	TagPointerType:            "PointerType",
   301  	TagReferenceType:          "ReferenceType",
   302  	TagCompileUnit:            "CompileUnit",
   303  	TagStringType:             "StringType",
   304  	TagStructType:             "StructType",
   305  	TagSubroutineType:         "SubroutineType",
   306  	TagTypedef:                "Typedef",
   307  	TagUnionType:              "UnionType",
   308  	TagUnspecifiedParameters:  "UnspecifiedParameters",
   309  	TagVariant:                "Variant",
   310  	TagCommonDwarfBlock:       "CommonDwarfBlock",
   311  	TagCommonInclusion:        "CommonInclusion",
   312  	TagInheritance:            "Inheritance",
   313  	TagInlinedSubroutine:      "InlinedSubroutine",
   314  	TagModule:                 "Module",
   315  	TagPtrToMemberType:        "PtrToMemberType",
   316  	TagSetType:                "SetType",
   317  	TagSubrangeType:           "SubrangeType",
   318  	TagWithStmt:               "WithStmt",
   319  	TagAccessDeclaration:      "AccessDeclaration",
   320  	TagBaseType:               "BaseType",
   321  	TagCatchDwarfBlock:        "CatchDwarfBlock",
   322  	TagConstType:              "ConstType",
   323  	TagConstant:               "Constant",
   324  	TagEnumerator:             "Enumerator",
   325  	TagFileType:               "FileType",
   326  	TagFriend:                 "Friend",
   327  	TagNamelist:               "Namelist",
   328  	TagNamelistItem:           "NamelistItem",
   329  	TagPackedType:             "PackedType",
   330  	TagSubprogram:             "Subprogram",
   331  	TagTemplateTypeParameter:  "TemplateTypeParameter",
   332  	TagTemplateValueParameter: "TemplateValueParameter",
   333  	TagThrownType:             "ThrownType",
   334  	TagTryDwarfBlock:          "TryDwarfBlock",
   335  	TagVariantPart:            "VariantPart",
   336  	TagVariable:               "Variable",
   337  	TagVolatileType:           "VolatileType",
   338  	TagDwarfProcedure:         "DwarfProcedure",
   339  	TagRestrictType:           "RestrictType",
   340  	TagInterfaceType:          "InterfaceType",
   341  	TagNamespace:              "Namespace",
   342  	TagImportedModule:         "ImportedModule",
   343  	TagUnspecifiedType:        "UnspecifiedType",
   344  	TagPartialUnit:            "PartialUnit",
   345  	TagImportedUnit:           "ImportedUnit",
   346  	TagMutableType:            "MutableType",
   347  	TagCondition:              "Condition",
   348  	TagSharedType:             "SharedType",
   349  	TagTypeUnit:               "TypeUnit",
   350  	TagRvalueReferenceType:    "RvalueReferenceType",
   351  	TagTemplateAlias:          "TemplateAlias",
   352  }
   353  
   354  func (t Tag) String() string {
   355  	if int(t) < len(tagNames) {
   356  		s := tagNames[t]
   357  		if s != "" {
   358  			return s
   359  		}
   360  	}
   361  	return strconv.Itoa(int(t))
   362  }
   363  
   364  func (t Tag) GoString() string {
   365  	if int(t) < len(tagNames) {
   366  		s := tagNames[t]
   367  		if s != "" {
   368  			return "dwarf.Tag" + s
   369  		}
   370  	}
   371  	return "dwarf.Tag(" + strconv.FormatInt(int64(t), 10) + ")"
   372  }
   373  
   374  // Location expression operators.
   375  // The debug info encodes value locations like 8(R3)
   376  // as a sequence of these op codes.
   377  // This package does not implement full expressions;
   378  // the opPlusUconst operator is expected by the type parser.
   379  const (
   380  	opAddr       = 0x03 /* 1 op, const addr */
   381  	opDeref      = 0x06
   382  	opConst1u    = 0x08 /* 1 op, 1 byte const */
   383  	opConst1s    = 0x09 /*	" signed */
   384  	opConst2u    = 0x0A /* 1 op, 2 byte const  */
   385  	opConst2s    = 0x0B /*	" signed */
   386  	opConst4u    = 0x0C /* 1 op, 4 byte const */
   387  	opConst4s    = 0x0D /*	" signed */
   388  	opConst8u    = 0x0E /* 1 op, 8 byte const */
   389  	opConst8s    = 0x0F /*	" signed */
   390  	opConstu     = 0x10 /* 1 op, LEB128 const */
   391  	opConsts     = 0x11 /*	" signed */
   392  	opDup        = 0x12
   393  	opDrop       = 0x13
   394  	opOver       = 0x14
   395  	opPick       = 0x15 /* 1 op, 1 byte stack index */
   396  	opSwap       = 0x16
   397  	opRot        = 0x17
   398  	opXderef     = 0x18
   399  	opAbs        = 0x19
   400  	opAnd        = 0x1A
   401  	opDiv        = 0x1B
   402  	opMinus      = 0x1C
   403  	opMod        = 0x1D
   404  	opMul        = 0x1E
   405  	opNeg        = 0x1F
   406  	opNot        = 0x20
   407  	opOr         = 0x21
   408  	opPlus       = 0x22
   409  	opPlusUconst = 0x23 /* 1 op, ULEB128 addend */
   410  	opShl        = 0x24
   411  	opShr        = 0x25
   412  	opShra       = 0x26
   413  	opXor        = 0x27
   414  	opSkip       = 0x2F /* 1 op, signed 2-byte constant */
   415  	opBra        = 0x28 /* 1 op, signed 2-byte constant */
   416  	opEq         = 0x29
   417  	opGe         = 0x2A
   418  	opGt         = 0x2B
   419  	opLe         = 0x2C
   420  	opLt         = 0x2D
   421  	opNe         = 0x2E
   422  	opLit0       = 0x30
   423  	/* OpLitN = OpLit0 + N for N = 0..31 */
   424  	opReg0 = 0x50
   425  	/* OpRegN = OpReg0 + N for N = 0..31 */
   426  	opBreg0 = 0x70 /* 1 op, signed LEB128 constant */
   427  	/* OpBregN = OpBreg0 + N for N = 0..31 */
   428  	opRegx       = 0x90 /* 1 op, ULEB128 register */
   429  	opFbreg      = 0x91 /* 1 op, SLEB128 offset */
   430  	opBregx      = 0x92 /* 2 op, ULEB128 reg; SLEB128 off */
   431  	opPiece      = 0x93 /* 1 op, ULEB128 size of piece */
   432  	opDerefSize  = 0x94 /* 1-byte size of data retrieved */
   433  	opXderefSize = 0x95 /* 1-byte size of data retrieved */
   434  	opNop        = 0x96
   435  	/* next four new in Dwarf v3 */
   436  	opPushObjAddr = 0x97
   437  	opCall2       = 0x98 /* 2-byte offset of DIE */
   438  	opCall4       = 0x99 /* 4-byte offset of DIE */
   439  	opCallRef     = 0x9A /* 4- or 8- byte offset of DIE */
   440  	/* 0xE0-0xFF reserved for user-specific */
   441  )
   442  
   443  // Basic type encodings -- the value for AttrEncoding in a TagBaseType Entry.
   444  const (
   445  	encAddress        = 0x01
   446  	encBoolean        = 0x02
   447  	encComplexFloat   = 0x03
   448  	encFloat          = 0x04
   449  	encSigned         = 0x05
   450  	encSignedChar     = 0x06
   451  	encUnsigned       = 0x07
   452  	encUnsignedChar   = 0x08
   453  	encImaginaryFloat = 0x09
   454  )
   455  
   456  // Statement program standard opcode encodings.
   457  const (
   458  	lnsCopy           = 1
   459  	lnsAdvancePC      = 2
   460  	lnsAdvanceLine    = 3
   461  	lnsSetFile        = 4
   462  	lnsSetColumn      = 5
   463  	lnsNegateStmt     = 6
   464  	lnsSetBasicBlock  = 7
   465  	lnsConstAddPC     = 8
   466  	lnsFixedAdvancePC = 9
   467  
   468  	// DWARF 3
   469  	lnsSetPrologueEnd   = 10
   470  	lnsSetEpilogueBegin = 11
   471  	lnsSetISA           = 12
   472  )
   473  
   474  // Statement program extended opcode encodings.
   475  const (
   476  	lneEndSequence = 1
   477  	lneSetAddress  = 2
   478  	lneDefineFile  = 3
   479  
   480  	// DWARF 4
   481  	lneSetDiscriminator = 4
   482  )