Source file src/debug/dwarf/const.go

     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  //go:generate stringer -type Attr -trimprefix=Attr
    10  
    11  // An Attr identifies the attribute type in a DWARF [Entry.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  	// The following are new in DWARF 3.
    75  	AttrAllocated     Attr = 0x4E
    76  	AttrAssociated    Attr = 0x4F
    77  	AttrDataLocation  Attr = 0x50
    78  	AttrStride        Attr = 0x51
    79  	AttrEntrypc       Attr = 0x52
    80  	AttrUseUTF8       Attr = 0x53
    81  	AttrExtension     Attr = 0x54
    82  	AttrRanges        Attr = 0x55
    83  	AttrTrampoline    Attr = 0x56
    84  	AttrCallColumn    Attr = 0x57
    85  	AttrCallFile      Attr = 0x58
    86  	AttrCallLine      Attr = 0x59
    87  	AttrDescription   Attr = 0x5A
    88  	AttrBinaryScale   Attr = 0x5B
    89  	AttrDecimalScale  Attr = 0x5C
    90  	AttrSmall         Attr = 0x5D
    91  	AttrDecimalSign   Attr = 0x5E
    92  	AttrDigitCount    Attr = 0x5F
    93  	AttrPictureString Attr = 0x60
    94  	AttrMutable       Attr = 0x61
    95  	AttrThreadsScaled Attr = 0x62
    96  	AttrExplicit      Attr = 0x63
    97  	AttrObjectPointer Attr = 0x64
    98  	AttrEndianity     Attr = 0x65
    99  	AttrElemental     Attr = 0x66
   100  	AttrPure          Attr = 0x67
   101  	AttrRecursive     Attr = 0x68
   102  	// The following are new in DWARF 4.
   103  	AttrSignature      Attr = 0x69
   104  	AttrMainSubprogram Attr = 0x6A
   105  	AttrDataBitOffset  Attr = 0x6B
   106  	AttrConstExpr      Attr = 0x6C
   107  	AttrEnumClass      Attr = 0x6D
   108  	AttrLinkageName    Attr = 0x6E
   109  	// The following are new in DWARF 5.
   110  	AttrStringLengthBitSize  Attr = 0x6F
   111  	AttrStringLengthByteSize Attr = 0x70
   112  	AttrRank                 Attr = 0x71
   113  	AttrStrOffsetsBase       Attr = 0x72
   114  	AttrAddrBase             Attr = 0x73
   115  	AttrRnglistsBase         Attr = 0x74
   116  	AttrDwoName              Attr = 0x76
   117  	AttrReference            Attr = 0x77
   118  	AttrRvalueReference      Attr = 0x78
   119  	AttrMacros               Attr = 0x79
   120  	AttrCallAllCalls         Attr = 0x7A
   121  	AttrCallAllSourceCalls   Attr = 0x7B
   122  	AttrCallAllTailCalls     Attr = 0x7C
   123  	AttrCallReturnPC         Attr = 0x7D
   124  	AttrCallValue            Attr = 0x7E
   125  	AttrCallOrigin           Attr = 0x7F
   126  	AttrCallParameter        Attr = 0x80
   127  	AttrCallPC               Attr = 0x81
   128  	AttrCallTailCall         Attr = 0x82
   129  	AttrCallTarget           Attr = 0x83
   130  	AttrCallTargetClobbered  Attr = 0x84
   131  	AttrCallDataLocation     Attr = 0x85
   132  	AttrCallDataValue        Attr = 0x86
   133  	AttrNoreturn             Attr = 0x87
   134  	AttrAlignment            Attr = 0x88
   135  	AttrExportSymbols        Attr = 0x89
   136  	AttrDeleted              Attr = 0x8A
   137  	AttrDefaulted            Attr = 0x8B
   138  	AttrLoclistsBase         Attr = 0x8C
   139  )
   140  
   141  func (a Attr) GoString() string {
   142  	if str, ok := _Attr_map[a]; ok {
   143  		return "dwarf.Attr" + str
   144  	}
   145  	return "dwarf." + a.String()
   146  }
   147  
   148  // A format is a DWARF data encoding format.
   149  type format uint32
   150  
   151  const (
   152  	// value formats
   153  	formAddr        format = 0x01
   154  	formDwarfBlock2 format = 0x03
   155  	formDwarfBlock4 format = 0x04
   156  	formData2       format = 0x05
   157  	formData4       format = 0x06
   158  	formData8       format = 0x07
   159  	formString      format = 0x08
   160  	formDwarfBlock  format = 0x09
   161  	formDwarfBlock1 format = 0x0A
   162  	formData1       format = 0x0B
   163  	formFlag        format = 0x0C
   164  	formSdata       format = 0x0D
   165  	formStrp        format = 0x0E
   166  	formUdata       format = 0x0F
   167  	formRefAddr     format = 0x10
   168  	formRef1        format = 0x11
   169  	formRef2        format = 0x12
   170  	formRef4        format = 0x13
   171  	formRef8        format = 0x14
   172  	formRefUdata    format = 0x15
   173  	formIndirect    format = 0x16
   174  	// The following are new in DWARF 4.
   175  	formSecOffset   format = 0x17
   176  	formExprloc     format = 0x18
   177  	formFlagPresent format = 0x19
   178  	formRefSig8     format = 0x20
   179  	// The following are new in DWARF 5.
   180  	formStrx          format = 0x1A
   181  	formAddrx         format = 0x1B
   182  	formRefSup4       format = 0x1C
   183  	formStrpSup       format = 0x1D
   184  	formData16        format = 0x1E
   185  	formLineStrp      format = 0x1F
   186  	formImplicitConst format = 0x21
   187  	formLoclistx      format = 0x22
   188  	formRnglistx      format = 0x23
   189  	formRefSup8       format = 0x24
   190  	formStrx1         format = 0x25
   191  	formStrx2         format = 0x26
   192  	formStrx3         format = 0x27
   193  	formStrx4         format = 0x28
   194  	formAddrx1        format = 0x29
   195  	formAddrx2        format = 0x2A
   196  	formAddrx3        format = 0x2B
   197  	formAddrx4        format = 0x2C
   198  	// Extensions for multi-file compression (.dwz)
   199  	// http://www.dwarfstd.org/ShowIssue.php?issue=120604.1
   200  	formGnuRefAlt  format = 0x1f20
   201  	formGnuStrpAlt format = 0x1f21
   202  )
   203  
   204  //go:generate stringer -type Tag -trimprefix=Tag
   205  
   206  // A Tag is the classification (the type) of an [Entry].
   207  type Tag uint32
   208  
   209  const (
   210  	TagArrayType              Tag = 0x01
   211  	TagClassType              Tag = 0x02
   212  	TagEntryPoint             Tag = 0x03
   213  	TagEnumerationType        Tag = 0x04
   214  	TagFormalParameter        Tag = 0x05
   215  	TagImportedDeclaration    Tag = 0x08
   216  	TagLabel                  Tag = 0x0A
   217  	TagLexDwarfBlock          Tag = 0x0B
   218  	TagMember                 Tag = 0x0D
   219  	TagPointerType            Tag = 0x0F
   220  	TagReferenceType          Tag = 0x10
   221  	TagCompileUnit            Tag = 0x11
   222  	TagStringType             Tag = 0x12
   223  	TagStructType             Tag = 0x13
   224  	TagSubroutineType         Tag = 0x15
   225  	TagTypedef                Tag = 0x16
   226  	TagUnionType              Tag = 0x17
   227  	TagUnspecifiedParameters  Tag = 0x18
   228  	TagVariant                Tag = 0x19
   229  	TagCommonDwarfBlock       Tag = 0x1A
   230  	TagCommonInclusion        Tag = 0x1B
   231  	TagInheritance            Tag = 0x1C
   232  	TagInlinedSubroutine      Tag = 0x1D
   233  	TagModule                 Tag = 0x1E
   234  	TagPtrToMemberType        Tag = 0x1F
   235  	TagSetType                Tag = 0x20
   236  	TagSubrangeType           Tag = 0x21
   237  	TagWithStmt               Tag = 0x22
   238  	TagAccessDeclaration      Tag = 0x23
   239  	TagBaseType               Tag = 0x24
   240  	TagCatchDwarfBlock        Tag = 0x25
   241  	TagConstType              Tag = 0x26
   242  	TagConstant               Tag = 0x27
   243  	TagEnumerator             Tag = 0x28
   244  	TagFileType               Tag = 0x29
   245  	TagFriend                 Tag = 0x2A
   246  	TagNamelist               Tag = 0x2B
   247  	TagNamelistItem           Tag = 0x2C
   248  	TagPackedType             Tag = 0x2D
   249  	TagSubprogram             Tag = 0x2E
   250  	TagTemplateTypeParameter  Tag = 0x2F
   251  	TagTemplateValueParameter Tag = 0x30
   252  	TagThrownType             Tag = 0x31
   253  	TagTryDwarfBlock          Tag = 0x32
   254  	TagVariantPart            Tag = 0x33
   255  	TagVariable               Tag = 0x34
   256  	TagVolatileType           Tag = 0x35
   257  	// The following are new in DWARF 3.
   258  	TagDwarfProcedure  Tag = 0x36
   259  	TagRestrictType    Tag = 0x37
   260  	TagInterfaceType   Tag = 0x38
   261  	TagNamespace       Tag = 0x39
   262  	TagImportedModule  Tag = 0x3A
   263  	TagUnspecifiedType Tag = 0x3B
   264  	TagPartialUnit     Tag = 0x3C
   265  	TagImportedUnit    Tag = 0x3D
   266  	TagMutableType     Tag = 0x3E // Later removed from DWARF.
   267  	TagCondition       Tag = 0x3F
   268  	TagSharedType      Tag = 0x40
   269  	// The following are new in DWARF 4.
   270  	TagTypeUnit            Tag = 0x41
   271  	TagRvalueReferenceType Tag = 0x42
   272  	TagTemplateAlias       Tag = 0x43
   273  	// The following are new in DWARF 5.
   274  	TagCoarrayType       Tag = 0x44
   275  	TagGenericSubrange   Tag = 0x45
   276  	TagDynamicType       Tag = 0x46
   277  	TagAtomicType        Tag = 0x47
   278  	TagCallSite          Tag = 0x48
   279  	TagCallSiteParameter Tag = 0x49
   280  	TagSkeletonUnit      Tag = 0x4A
   281  	TagImmutableType     Tag = 0x4B
   282  )
   283  
   284  func (t Tag) GoString() string {
   285  	if t <= TagTemplateAlias {
   286  		return "dwarf.Tag" + t.String()
   287  	}
   288  	return "dwarf." + t.String()
   289  }
   290  
   291  // Location expression operators.
   292  // The debug info encodes value locations like 8(R3)
   293  // as a sequence of these op codes.
   294  // This package does not implement full expressions;
   295  // the opPlusUconst operator is expected by the type parser.
   296  const (
   297  	opAddr       = 0x03 /* 1 op, const addr */
   298  	opDeref      = 0x06
   299  	opConst1u    = 0x08 /* 1 op, 1 byte const */
   300  	opConst1s    = 0x09 /*	" signed */
   301  	opConst2u    = 0x0A /* 1 op, 2 byte const  */
   302  	opConst2s    = 0x0B /*	" signed */
   303  	opConst4u    = 0x0C /* 1 op, 4 byte const */
   304  	opConst4s    = 0x0D /*	" signed */
   305  	opConst8u    = 0x0E /* 1 op, 8 byte const */
   306  	opConst8s    = 0x0F /*	" signed */
   307  	opConstu     = 0x10 /* 1 op, LEB128 const */
   308  	opConsts     = 0x11 /*	" signed */
   309  	opDup        = 0x12
   310  	opDrop       = 0x13
   311  	opOver       = 0x14
   312  	opPick       = 0x15 /* 1 op, 1 byte stack index */
   313  	opSwap       = 0x16
   314  	opRot        = 0x17
   315  	opXderef     = 0x18
   316  	opAbs        = 0x19
   317  	opAnd        = 0x1A
   318  	opDiv        = 0x1B
   319  	opMinus      = 0x1C
   320  	opMod        = 0x1D
   321  	opMul        = 0x1E
   322  	opNeg        = 0x1F
   323  	opNot        = 0x20
   324  	opOr         = 0x21
   325  	opPlus       = 0x22
   326  	opPlusUconst = 0x23 /* 1 op, ULEB128 addend */
   327  	opShl        = 0x24
   328  	opShr        = 0x25
   329  	opShra       = 0x26
   330  	opXor        = 0x27
   331  	opSkip       = 0x2F /* 1 op, signed 2-byte constant */
   332  	opBra        = 0x28 /* 1 op, signed 2-byte constant */
   333  	opEq         = 0x29
   334  	opGe         = 0x2A
   335  	opGt         = 0x2B
   336  	opLe         = 0x2C
   337  	opLt         = 0x2D
   338  	opNe         = 0x2E
   339  	opLit0       = 0x30
   340  	/* OpLitN = OpLit0 + N for N = 0..31 */
   341  	opReg0 = 0x50
   342  	/* OpRegN = OpReg0 + N for N = 0..31 */
   343  	opBreg0 = 0x70 /* 1 op, signed LEB128 constant */
   344  	/* OpBregN = OpBreg0 + N for N = 0..31 */
   345  	opRegx       = 0x90 /* 1 op, ULEB128 register */
   346  	opFbreg      = 0x91 /* 1 op, SLEB128 offset */
   347  	opBregx      = 0x92 /* 2 op, ULEB128 reg; SLEB128 off */
   348  	opPiece      = 0x93 /* 1 op, ULEB128 size of piece */
   349  	opDerefSize  = 0x94 /* 1-byte size of data retrieved */
   350  	opXderefSize = 0x95 /* 1-byte size of data retrieved */
   351  	opNop        = 0x96
   352  	// The following are new in DWARF 3.
   353  	opPushObjAddr    = 0x97
   354  	opCall2          = 0x98 /* 2-byte offset of DIE */
   355  	opCall4          = 0x99 /* 4-byte offset of DIE */
   356  	opCallRef        = 0x9A /* 4- or 8- byte offset of DIE */
   357  	opFormTLSAddress = 0x9B
   358  	opCallFrameCFA   = 0x9C
   359  	opBitPiece       = 0x9D
   360  	// The following are new in DWARF 4.
   361  	opImplicitValue = 0x9E
   362  	opStackValue    = 0x9F
   363  	// The following a new in DWARF 5.
   364  	opImplicitPointer = 0xA0
   365  	opAddrx           = 0xA1
   366  	opConstx          = 0xA2
   367  	opEntryValue      = 0xA3
   368  	opConstType       = 0xA4
   369  	opRegvalType      = 0xA5
   370  	opDerefType       = 0xA6
   371  	opXderefType      = 0xA7
   372  	opConvert         = 0xA8
   373  	opReinterpret     = 0xA9
   374  	/* 0xE0-0xFF reserved for user-specific */
   375  )
   376  
   377  // Basic type encodings -- the value for AttrEncoding in a TagBaseType Entry.
   378  const (
   379  	encAddress      = 0x01
   380  	encBoolean      = 0x02
   381  	encComplexFloat = 0x03
   382  	encFloat        = 0x04
   383  	encSigned       = 0x05
   384  	encSignedChar   = 0x06
   385  	encUnsigned     = 0x07
   386  	encUnsignedChar = 0x08
   387  	// The following are new in DWARF 3.
   388  	encImaginaryFloat = 0x09
   389  	encPackedDecimal  = 0x0A
   390  	encNumericString  = 0x0B
   391  	encEdited         = 0x0C
   392  	encSignedFixed    = 0x0D
   393  	encUnsignedFixed  = 0x0E
   394  	encDecimalFloat   = 0x0F
   395  	// The following are new in DWARF 4.
   396  	encUTF = 0x10
   397  	// The following are new in DWARF 5.
   398  	encUCS   = 0x11
   399  	encASCII = 0x12
   400  )
   401  
   402  // Statement program standard opcode encodings.
   403  const (
   404  	lnsCopy           = 1
   405  	lnsAdvancePC      = 2
   406  	lnsAdvanceLine    = 3
   407  	lnsSetFile        = 4
   408  	lnsSetColumn      = 5
   409  	lnsNegateStmt     = 6
   410  	lnsSetBasicBlock  = 7
   411  	lnsConstAddPC     = 8
   412  	lnsFixedAdvancePC = 9
   413  
   414  	// DWARF 3
   415  	lnsSetPrologueEnd   = 10
   416  	lnsSetEpilogueBegin = 11
   417  	lnsSetISA           = 12
   418  )
   419  
   420  // Statement program extended opcode encodings.
   421  const (
   422  	lneEndSequence = 1
   423  	lneSetAddress  = 2
   424  	lneDefineFile  = 3
   425  
   426  	// DWARF 4
   427  	lneSetDiscriminator = 4
   428  )
   429  
   430  // Line table directory and file name entry formats.
   431  // These are new in DWARF 5.
   432  const (
   433  	lnctPath           = 0x01
   434  	lnctDirectoryIndex = 0x02
   435  	lnctTimestamp      = 0x03
   436  	lnctSize           = 0x04
   437  	lnctMD5            = 0x05
   438  )
   439  
   440  // Location list entry codes.
   441  // These are new in DWARF 5.
   442  const (
   443  	lleEndOfList       = 0x00
   444  	lleBaseAddressx    = 0x01
   445  	lleStartxEndx      = 0x02
   446  	lleStartxLength    = 0x03
   447  	lleOffsetPair      = 0x04
   448  	lleDefaultLocation = 0x05
   449  	lleBaseAddress     = 0x06
   450  	lleStartEnd        = 0x07
   451  	lleStartLength     = 0x08
   452  )
   453  
   454  // Unit header unit type encodings.
   455  // These are new in DWARF 5.
   456  const (
   457  	utCompile      = 0x01
   458  	utType         = 0x02
   459  	utPartial      = 0x03
   460  	utSkeleton     = 0x04
   461  	utSplitCompile = 0x05
   462  	utSplitType    = 0x06
   463  )
   464  
   465  // Opcodes for DWARFv5 debug_rnglists section.
   466  const (
   467  	rleEndOfList    = 0x0
   468  	rleBaseAddressx = 0x1
   469  	rleStartxEndx   = 0x2
   470  	rleStartxLength = 0x3
   471  	rleOffsetPair   = 0x4
   472  	rleBaseAddress  = 0x5
   473  	rleStartEnd     = 0x6
   474  	rleStartLength  = 0x7
   475  )
   476  

View as plain text