github.com/corona10/go@v0.0.0-20180224231303-7a218942be57/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  //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  	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  func (a Attr) GoString() string {
    90  	if str, ok := _Attr_map[a]; ok {
    91  		return "dwarf.Attr" + str
    92  	}
    93  	return "dwarf." + a.String()
    94  }
    95  
    96  // A format is a DWARF data encoding format.
    97  type format uint32
    98  
    99  const (
   100  	// value formats
   101  	formAddr        format = 0x01
   102  	formDwarfBlock2 format = 0x03
   103  	formDwarfBlock4 format = 0x04
   104  	formData2       format = 0x05
   105  	formData4       format = 0x06
   106  	formData8       format = 0x07
   107  	formString      format = 0x08
   108  	formDwarfBlock  format = 0x09
   109  	formDwarfBlock1 format = 0x0A
   110  	formData1       format = 0x0B
   111  	formFlag        format = 0x0C
   112  	formSdata       format = 0x0D
   113  	formStrp        format = 0x0E
   114  	formUdata       format = 0x0F
   115  	formRefAddr     format = 0x10
   116  	formRef1        format = 0x11
   117  	formRef2        format = 0x12
   118  	formRef4        format = 0x13
   119  	formRef8        format = 0x14
   120  	formRefUdata    format = 0x15
   121  	formIndirect    format = 0x16
   122  	// The following are new in DWARF 4.
   123  	formSecOffset   format = 0x17
   124  	formExprloc     format = 0x18
   125  	formFlagPresent format = 0x19
   126  	formRefSig8     format = 0x20
   127  	// Extensions for multi-file compression (.dwz)
   128  	// http://www.dwarfstd.org/ShowIssue.php?issue=120604.1
   129  	formGnuRefAlt  format = 0x1f20
   130  	formGnuStrpAlt format = 0x1f21
   131  )
   132  
   133  //go:generate stringer -type Tag -trimprefix=Tag
   134  
   135  // A Tag is the classification (the type) of an Entry.
   136  type Tag uint32
   137  
   138  const (
   139  	TagArrayType              Tag = 0x01
   140  	TagClassType              Tag = 0x02
   141  	TagEntryPoint             Tag = 0x03
   142  	TagEnumerationType        Tag = 0x04
   143  	TagFormalParameter        Tag = 0x05
   144  	TagImportedDeclaration    Tag = 0x08
   145  	TagLabel                  Tag = 0x0A
   146  	TagLexDwarfBlock          Tag = 0x0B
   147  	TagMember                 Tag = 0x0D
   148  	TagPointerType            Tag = 0x0F
   149  	TagReferenceType          Tag = 0x10
   150  	TagCompileUnit            Tag = 0x11
   151  	TagStringType             Tag = 0x12
   152  	TagStructType             Tag = 0x13
   153  	TagSubroutineType         Tag = 0x15
   154  	TagTypedef                Tag = 0x16
   155  	TagUnionType              Tag = 0x17
   156  	TagUnspecifiedParameters  Tag = 0x18
   157  	TagVariant                Tag = 0x19
   158  	TagCommonDwarfBlock       Tag = 0x1A
   159  	TagCommonInclusion        Tag = 0x1B
   160  	TagInheritance            Tag = 0x1C
   161  	TagInlinedSubroutine      Tag = 0x1D
   162  	TagModule                 Tag = 0x1E
   163  	TagPtrToMemberType        Tag = 0x1F
   164  	TagSetType                Tag = 0x20
   165  	TagSubrangeType           Tag = 0x21
   166  	TagWithStmt               Tag = 0x22
   167  	TagAccessDeclaration      Tag = 0x23
   168  	TagBaseType               Tag = 0x24
   169  	TagCatchDwarfBlock        Tag = 0x25
   170  	TagConstType              Tag = 0x26
   171  	TagConstant               Tag = 0x27
   172  	TagEnumerator             Tag = 0x28
   173  	TagFileType               Tag = 0x29
   174  	TagFriend                 Tag = 0x2A
   175  	TagNamelist               Tag = 0x2B
   176  	TagNamelistItem           Tag = 0x2C
   177  	TagPackedType             Tag = 0x2D
   178  	TagSubprogram             Tag = 0x2E
   179  	TagTemplateTypeParameter  Tag = 0x2F
   180  	TagTemplateValueParameter Tag = 0x30
   181  	TagThrownType             Tag = 0x31
   182  	TagTryDwarfBlock          Tag = 0x32
   183  	TagVariantPart            Tag = 0x33
   184  	TagVariable               Tag = 0x34
   185  	TagVolatileType           Tag = 0x35
   186  	// The following are new in DWARF 3.
   187  	TagDwarfProcedure  Tag = 0x36
   188  	TagRestrictType    Tag = 0x37
   189  	TagInterfaceType   Tag = 0x38
   190  	TagNamespace       Tag = 0x39
   191  	TagImportedModule  Tag = 0x3A
   192  	TagUnspecifiedType Tag = 0x3B
   193  	TagPartialUnit     Tag = 0x3C
   194  	TagImportedUnit    Tag = 0x3D
   195  	TagMutableType     Tag = 0x3E // Later removed from DWARF.
   196  	TagCondition       Tag = 0x3F
   197  	TagSharedType      Tag = 0x40
   198  	// The following are new in DWARF 4.
   199  	TagTypeUnit            Tag = 0x41
   200  	TagRvalueReferenceType Tag = 0x42
   201  	TagTemplateAlias       Tag = 0x43
   202  )
   203  
   204  func (t Tag) GoString() string {
   205  	if t <= TagTemplateAlias {
   206  		return "dwarf.Tag" + t.String()
   207  	}
   208  	return "dwarf." + t.String()
   209  }
   210  
   211  // Location expression operators.
   212  // The debug info encodes value locations like 8(R3)
   213  // as a sequence of these op codes.
   214  // This package does not implement full expressions;
   215  // the opPlusUconst operator is expected by the type parser.
   216  const (
   217  	opAddr       = 0x03 /* 1 op, const addr */
   218  	opDeref      = 0x06
   219  	opConst1u    = 0x08 /* 1 op, 1 byte const */
   220  	opConst1s    = 0x09 /*	" signed */
   221  	opConst2u    = 0x0A /* 1 op, 2 byte const  */
   222  	opConst2s    = 0x0B /*	" signed */
   223  	opConst4u    = 0x0C /* 1 op, 4 byte const */
   224  	opConst4s    = 0x0D /*	" signed */
   225  	opConst8u    = 0x0E /* 1 op, 8 byte const */
   226  	opConst8s    = 0x0F /*	" signed */
   227  	opConstu     = 0x10 /* 1 op, LEB128 const */
   228  	opConsts     = 0x11 /*	" signed */
   229  	opDup        = 0x12
   230  	opDrop       = 0x13
   231  	opOver       = 0x14
   232  	opPick       = 0x15 /* 1 op, 1 byte stack index */
   233  	opSwap       = 0x16
   234  	opRot        = 0x17
   235  	opXderef     = 0x18
   236  	opAbs        = 0x19
   237  	opAnd        = 0x1A
   238  	opDiv        = 0x1B
   239  	opMinus      = 0x1C
   240  	opMod        = 0x1D
   241  	opMul        = 0x1E
   242  	opNeg        = 0x1F
   243  	opNot        = 0x20
   244  	opOr         = 0x21
   245  	opPlus       = 0x22
   246  	opPlusUconst = 0x23 /* 1 op, ULEB128 addend */
   247  	opShl        = 0x24
   248  	opShr        = 0x25
   249  	opShra       = 0x26
   250  	opXor        = 0x27
   251  	opSkip       = 0x2F /* 1 op, signed 2-byte constant */
   252  	opBra        = 0x28 /* 1 op, signed 2-byte constant */
   253  	opEq         = 0x29
   254  	opGe         = 0x2A
   255  	opGt         = 0x2B
   256  	opLe         = 0x2C
   257  	opLt         = 0x2D
   258  	opNe         = 0x2E
   259  	opLit0       = 0x30
   260  	/* OpLitN = OpLit0 + N for N = 0..31 */
   261  	opReg0 = 0x50
   262  	/* OpRegN = OpReg0 + N for N = 0..31 */
   263  	opBreg0 = 0x70 /* 1 op, signed LEB128 constant */
   264  	/* OpBregN = OpBreg0 + N for N = 0..31 */
   265  	opRegx       = 0x90 /* 1 op, ULEB128 register */
   266  	opFbreg      = 0x91 /* 1 op, SLEB128 offset */
   267  	opBregx      = 0x92 /* 2 op, ULEB128 reg; SLEB128 off */
   268  	opPiece      = 0x93 /* 1 op, ULEB128 size of piece */
   269  	opDerefSize  = 0x94 /* 1-byte size of data retrieved */
   270  	opXderefSize = 0x95 /* 1-byte size of data retrieved */
   271  	opNop        = 0x96
   272  	/* next four new in Dwarf v3 */
   273  	opPushObjAddr = 0x97
   274  	opCall2       = 0x98 /* 2-byte offset of DIE */
   275  	opCall4       = 0x99 /* 4-byte offset of DIE */
   276  	opCallRef     = 0x9A /* 4- or 8- byte offset of DIE */
   277  	/* 0xE0-0xFF reserved for user-specific */
   278  )
   279  
   280  // Basic type encodings -- the value for AttrEncoding in a TagBaseType Entry.
   281  const (
   282  	encAddress        = 0x01
   283  	encBoolean        = 0x02
   284  	encComplexFloat   = 0x03
   285  	encFloat          = 0x04
   286  	encSigned         = 0x05
   287  	encSignedChar     = 0x06
   288  	encUnsigned       = 0x07
   289  	encUnsignedChar   = 0x08
   290  	encImaginaryFloat = 0x09
   291  )
   292  
   293  // Statement program standard opcode encodings.
   294  const (
   295  	lnsCopy           = 1
   296  	lnsAdvancePC      = 2
   297  	lnsAdvanceLine    = 3
   298  	lnsSetFile        = 4
   299  	lnsSetColumn      = 5
   300  	lnsNegateStmt     = 6
   301  	lnsSetBasicBlock  = 7
   302  	lnsConstAddPC     = 8
   303  	lnsFixedAdvancePC = 9
   304  
   305  	// DWARF 3
   306  	lnsSetPrologueEnd   = 10
   307  	lnsSetEpilogueBegin = 11
   308  	lnsSetISA           = 12
   309  )
   310  
   311  // Statement program extended opcode encodings.
   312  const (
   313  	lneEndSequence = 1
   314  	lneSetAddress  = 2
   315  	lneDefineFile  = 3
   316  
   317  	// DWARF 4
   318  	lneSetDiscriminator = 4
   319  )