github.com/x04/go/src@v0.0.0-20200202162449-3d481ceb3525/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  //go:generate stringer -type Attr -trimprefix=Attr
    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  	// 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 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  )