const.mx raw

   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() []byte {
 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() []byte {
 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