| // Copyright 2009 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| // Constants | |
| package dwarf | |
| //go:generate stringer -type Attr -trimprefix=Attr | |
| // An Attr identifies the attribute type in a DWARF [Entry.Field]. | |
| type Attr uint32 | |
| const ( | |
| AttrSibling Attr = 0x01 | |
| AttrLocation Attr = 0x02 | |
| AttrName Attr = 0x03 | |
| AttrOrdering Attr = 0x09 | |
| AttrByteSize Attr = 0x0B | |
| AttrBitOffset Attr = 0x0C | |
| AttrBitSize Attr = 0x0D | |
| AttrStmtList Attr = 0x10 | |
| AttrLowpc Attr = 0x11 | |
| AttrHighpc Attr = 0x12 | |
| AttrLanguage Attr = 0x13 | |
| AttrDiscr Attr = 0x15 | |
| AttrDiscrValue Attr = 0x16 | |
| AttrVisibility Attr = 0x17 | |
| AttrImport Attr = 0x18 | |
| AttrStringLength Attr = 0x19 | |
| AttrCommonRef Attr = 0x1A | |
| AttrCompDir Attr = 0x1B | |
| AttrConstValue Attr = 0x1C | |
| AttrContainingType Attr = 0x1D | |
| AttrDefaultValue Attr = 0x1E | |
| AttrInline Attr = 0x20 | |
| AttrIsOptional Attr = 0x21 | |
| AttrLowerBound Attr = 0x22 | |
| AttrProducer Attr = 0x25 | |
| AttrPrototyped Attr = 0x27 | |
| AttrReturnAddr Attr = 0x2A | |
| AttrStartScope Attr = 0x2C | |
| AttrStrideSize Attr = 0x2E | |
| AttrUpperBound Attr = 0x2F | |
| AttrAbstractOrigin Attr = 0x31 | |
| AttrAccessibility Attr = 0x32 | |
| AttrAddrClass Attr = 0x33 | |
| AttrArtificial Attr = 0x34 | |
| AttrBaseTypes Attr = 0x35 | |
| AttrCalling Attr = 0x36 | |
| AttrCount Attr = 0x37 | |
| AttrDataMemberLoc Attr = 0x38 | |
| AttrDeclColumn Attr = 0x39 | |
| AttrDeclFile Attr = 0x3A | |
| AttrDeclLine Attr = 0x3B | |
| AttrDeclaration Attr = 0x3C | |
| AttrDiscrList Attr = 0x3D | |
| AttrEncoding Attr = 0x3E | |
| AttrExternal Attr = 0x3F | |
| AttrFrameBase Attr = 0x40 | |
| AttrFriend Attr = 0x41 | |
| AttrIdentifierCase Attr = 0x42 | |
| AttrMacroInfo Attr = 0x43 | |
| AttrNamelistItem Attr = 0x44 | |
| AttrPriority Attr = 0x45 | |
| AttrSegment Attr = 0x46 | |
| AttrSpecification Attr = 0x47 | |
| AttrStaticLink Attr = 0x48 | |
| AttrType Attr = 0x49 | |
| AttrUseLocation Attr = 0x4A | |
| AttrVarParam Attr = 0x4B | |
| AttrVirtuality Attr = 0x4C | |
| AttrVtableElemLoc Attr = 0x4D | |
| // The following are new in DWARF 3. | |
| AttrAllocated Attr = 0x4E | |
| AttrAssociated Attr = 0x4F | |
| AttrDataLocation Attr = 0x50 | |
| AttrStride Attr = 0x51 | |
| AttrEntrypc Attr = 0x52 | |
| AttrUseUTF8 Attr = 0x53 | |
| AttrExtension Attr = 0x54 | |
| AttrRanges Attr = 0x55 | |
| AttrTrampoline Attr = 0x56 | |
| AttrCallColumn Attr = 0x57 | |
| AttrCallFile Attr = 0x58 | |
| AttrCallLine Attr = 0x59 | |
| AttrDescription Attr = 0x5A | |
| AttrBinaryScale Attr = 0x5B | |
| AttrDecimalScale Attr = 0x5C | |
| AttrSmall Attr = 0x5D | |
| AttrDecimalSign Attr = 0x5E | |
| AttrDigitCount Attr = 0x5F | |
| AttrPictureString Attr = 0x60 | |
| AttrMutable Attr = 0x61 | |
| AttrThreadsScaled Attr = 0x62 | |
| AttrExplicit Attr = 0x63 | |
| AttrObjectPointer Attr = 0x64 | |
| AttrEndianity Attr = 0x65 | |
| AttrElemental Attr = 0x66 | |
| AttrPure Attr = 0x67 | |
| AttrRecursive Attr = 0x68 | |
| // The following are new in DWARF 4. | |
| AttrSignature Attr = 0x69 | |
| AttrMainSubprogram Attr = 0x6A | |
| AttrDataBitOffset Attr = 0x6B | |
| AttrConstExpr Attr = 0x6C | |
| AttrEnumClass Attr = 0x6D | |
| AttrLinkageName Attr = 0x6E | |
| // The following are new in DWARF 5. | |
| AttrStringLengthBitSize Attr = 0x6F | |
| AttrStringLengthByteSize Attr = 0x70 | |
| AttrRank Attr = 0x71 | |
| AttrStrOffsetsBase Attr = 0x72 | |
| AttrAddrBase Attr = 0x73 | |
| AttrRnglistsBase Attr = 0x74 | |
| AttrDwoName Attr = 0x76 | |
| AttrReference Attr = 0x77 | |
| AttrRvalueReference Attr = 0x78 | |
| AttrMacros Attr = 0x79 | |
| AttrCallAllCalls Attr = 0x7A | |
| AttrCallAllSourceCalls Attr = 0x7B | |
| AttrCallAllTailCalls Attr = 0x7C | |
| AttrCallReturnPC Attr = 0x7D | |
| AttrCallValue Attr = 0x7E | |
| AttrCallOrigin Attr = 0x7F | |
| AttrCallParameter Attr = 0x80 | |
| AttrCallPC Attr = 0x81 | |
| AttrCallTailCall Attr = 0x82 | |
| AttrCallTarget Attr = 0x83 | |
| AttrCallTargetClobbered Attr = 0x84 | |
| AttrCallDataLocation Attr = 0x85 | |
| AttrCallDataValue Attr = 0x86 | |
| AttrNoreturn Attr = 0x87 | |
| AttrAlignment Attr = 0x88 | |
| AttrExportSymbols Attr = 0x89 | |
| AttrDeleted Attr = 0x8A | |
| AttrDefaulted Attr = 0x8B | |
| AttrLoclistsBase Attr = 0x8C | |
| ) | |
| func (a Attr) GoString() string { | |
| if str, ok := _Attr_map[a]; ok { | |
| return "dwarf.Attr" + str | |
| } | |
| return "dwarf." + a.String() | |
| } | |
| // A format is a DWARF data encoding format. | |
| type format uint32 | |
| const ( | |
| // value formats | |
| formAddr format = 0x01 | |
| formDwarfBlock2 format = 0x03 | |
| formDwarfBlock4 format = 0x04 | |
| formData2 format = 0x05 | |
| formData4 format = 0x06 | |
| formData8 format = 0x07 | |
| formString format = 0x08 | |
| formDwarfBlock format = 0x09 | |
| formDwarfBlock1 format = 0x0A | |
| formData1 format = 0x0B | |
| formFlag format = 0x0C | |
| formSdata format = 0x0D | |
| formStrp format = 0x0E | |
| formUdata format = 0x0F | |
| formRefAddr format = 0x10 | |
| formRef1 format = 0x11 | |
| formRef2 format = 0x12 | |
| formRef4 format = 0x13 | |
| formRef8 format = 0x14 | |
| formRefUdata format = 0x15 | |
| formIndirect format = 0x16 | |
| // The following are new in DWARF 4. | |
| formSecOffset format = 0x17 | |
| formExprloc format = 0x18 | |
| formFlagPresent format = 0x19 | |
| formRefSig8 format = 0x20 | |
| // The following are new in DWARF 5. | |
| formStrx format = 0x1A | |
| formAddrx format = 0x1B | |
| formRefSup4 format = 0x1C | |
| formStrpSup format = 0x1D | |
| formData16 format = 0x1E | |
| formLineStrp format = 0x1F | |
| formImplicitConst format = 0x21 | |
| formLoclistx format = 0x22 | |
| formRnglistx format = 0x23 | |
| formRefSup8 format = 0x24 | |
| formStrx1 format = 0x25 | |
| formStrx2 format = 0x26 | |
| formStrx3 format = 0x27 | |
| formStrx4 format = 0x28 | |
| formAddrx1 format = 0x29 | |
| formAddrx2 format = 0x2A | |
| formAddrx3 format = 0x2B | |
| formAddrx4 format = 0x2C | |
| // Extensions for multi-file compression (.dwz) | |
| // http://www.dwarfstd.org/ShowIssue.php?issue=120604.1 | |
| formGnuRefAlt format = 0x1f20 | |
| formGnuStrpAlt format = 0x1f21 | |
| ) | |
| //go:generate stringer -type Tag -trimprefix=Tag | |
| // A Tag is the classification (the type) of an [Entry]. | |
| type Tag uint32 | |
| const ( | |
| TagArrayType Tag = 0x01 | |
| TagClassType Tag = 0x02 | |
| TagEntryPoint Tag = 0x03 | |
| TagEnumerationType Tag = 0x04 | |
| TagFormalParameter Tag = 0x05 | |
| TagImportedDeclaration Tag = 0x08 | |
| TagLabel Tag = 0x0A | |
| TagLexDwarfBlock Tag = 0x0B | |
| TagMember Tag = 0x0D | |
| TagPointerType Tag = 0x0F | |
| TagReferenceType Tag = 0x10 | |
| TagCompileUnit Tag = 0x11 | |
| TagStringType Tag = 0x12 | |
| TagStructType Tag = 0x13 | |
| TagSubroutineType Tag = 0x15 | |
| TagTypedef Tag = 0x16 | |
| TagUnionType Tag = 0x17 | |
| TagUnspecifiedParameters Tag = 0x18 | |
| TagVariant Tag = 0x19 | |
| TagCommonDwarfBlock Tag = 0x1A | |
| TagCommonInclusion Tag = 0x1B | |
| TagInheritance Tag = 0x1C | |
| TagInlinedSubroutine Tag = 0x1D | |
| TagModule Tag = 0x1E | |
| TagPtrToMemberType Tag = 0x1F | |
| TagSetType Tag = 0x20 | |
| TagSubrangeType Tag = 0x21 | |
| TagWithStmt Tag = 0x22 | |
| TagAccessDeclaration Tag = 0x23 | |
| TagBaseType Tag = 0x24 | |
| TagCatchDwarfBlock Tag = 0x25 | |
| TagConstType Tag = 0x26 | |
| TagConstant Tag = 0x27 | |
| TagEnumerator Tag = 0x28 | |
| TagFileType Tag = 0x29 | |
| TagFriend Tag = 0x2A | |
| TagNamelist Tag = 0x2B | |
| TagNamelistItem Tag = 0x2C | |
| TagPackedType Tag = 0x2D | |
| TagSubprogram Tag = 0x2E | |
| TagTemplateTypeParameter Tag = 0x2F | |
| TagTemplateValueParameter Tag = 0x30 | |
| TagThrownType Tag = 0x31 | |
| TagTryDwarfBlock Tag = 0x32 | |
| TagVariantPart Tag = 0x33 | |
| TagVariable Tag = 0x34 | |
| TagVolatileType Tag = 0x35 | |
| // The following are new in DWARF 3. | |
| TagDwarfProcedure Tag = 0x36 | |
| TagRestrictType Tag = 0x37 | |
| TagInterfaceType Tag = 0x38 | |
| TagNamespace Tag = 0x39 | |
| TagImportedModule Tag = 0x3A | |
| TagUnspecifiedType Tag = 0x3B | |
| TagPartialUnit Tag = 0x3C | |
| TagImportedUnit Tag = 0x3D | |
| TagMutableType Tag = 0x3E // Later removed from DWARF. | |
| TagCondition Tag = 0x3F | |
| TagSharedType Tag = 0x40 | |
| // The following are new in DWARF 4. | |
| TagTypeUnit Tag = 0x41 | |
| TagRvalueReferenceType Tag = 0x42 | |
| TagTemplateAlias Tag = 0x43 | |
| // The following are new in DWARF 5. | |
| TagCoarrayType Tag = 0x44 | |
| TagGenericSubrange Tag = 0x45 | |
| TagDynamicType Tag = 0x46 | |
| TagAtomicType Tag = 0x47 | |
| TagCallSite Tag = 0x48 | |
| TagCallSiteParameter Tag = 0x49 | |
| TagSkeletonUnit Tag = 0x4A | |
| TagImmutableType Tag = 0x4B | |
| ) | |
| func (t Tag) GoString() string { | |
| if t <= TagTemplateAlias { | |
| return "dwarf.Tag" + t.String() | |
| } | |
| return "dwarf." + t.String() | |
| } | |
| // Location expression operators. | |
| // The debug info encodes value locations like 8(R3) | |
| // as a sequence of these op codes. | |
| // This package does not implement full expressions; | |
| // the opPlusUconst operator is expected by the type parser. | |
| const ( | |
| opAddr = 0x03 /* 1 op, const addr */ | |
| opDeref = 0x06 | |
| opConst1u = 0x08 /* 1 op, 1 byte const */ | |
| opConst1s = 0x09 /* " signed */ | |
| opConst2u = 0x0A /* 1 op, 2 byte const */ | |
| opConst2s = 0x0B /* " signed */ | |
| opConst4u = 0x0C /* 1 op, 4 byte const */ | |
| opConst4s = 0x0D /* " signed */ | |
| opConst8u = 0x0E /* 1 op, 8 byte const */ | |
| opConst8s = 0x0F /* " signed */ | |
| opConstu = 0x10 /* 1 op, LEB128 const */ | |
| opConsts = 0x11 /* " signed */ | |
| opDup = 0x12 | |
| opDrop = 0x13 | |
| opOver = 0x14 | |
| opPick = 0x15 /* 1 op, 1 byte stack index */ | |
| opSwap = 0x16 | |
| opRot = 0x17 | |
| opXderef = 0x18 | |
| opAbs = 0x19 | |
| opAnd = 0x1A | |
| opDiv = 0x1B | |
| opMinus = 0x1C | |
| opMod = 0x1D | |
| opMul = 0x1E | |
| opNeg = 0x1F | |
| opNot = 0x20 | |
| opOr = 0x21 | |
| opPlus = 0x22 | |
| opPlusUconst = 0x23 /* 1 op, ULEB128 addend */ | |
| opShl = 0x24 | |
| opShr = 0x25 | |
| opShra = 0x26 | |
| opXor = 0x27 | |
| opSkip = 0x2F /* 1 op, signed 2-byte constant */ | |
| opBra = 0x28 /* 1 op, signed 2-byte constant */ | |
| opEq = 0x29 | |
| opGe = 0x2A | |
| opGt = 0x2B | |
| opLe = 0x2C | |
| opLt = 0x2D | |
| opNe = 0x2E | |
| opLit0 = 0x30 | |
| /* OpLitN = OpLit0 + N for N = 0..31 */ | |
| opReg0 = 0x50 | |
| /* OpRegN = OpReg0 + N for N = 0..31 */ | |
| opBreg0 = 0x70 /* 1 op, signed LEB128 constant */ | |
| /* OpBregN = OpBreg0 + N for N = 0..31 */ | |
| opRegx = 0x90 /* 1 op, ULEB128 register */ | |
| opFbreg = 0x91 /* 1 op, SLEB128 offset */ | |
| opBregx = 0x92 /* 2 op, ULEB128 reg; SLEB128 off */ | |
| opPiece = 0x93 /* 1 op, ULEB128 size of piece */ | |
| opDerefSize = 0x94 /* 1-byte size of data retrieved */ | |
| opXderefSize = 0x95 /* 1-byte size of data retrieved */ | |
| opNop = 0x96 | |
| // The following are new in DWARF 3. | |
| opPushObjAddr = 0x97 | |
| opCall2 = 0x98 /* 2-byte offset of DIE */ | |
| opCall4 = 0x99 /* 4-byte offset of DIE */ | |
| opCallRef = 0x9A /* 4- or 8- byte offset of DIE */ | |
| opFormTLSAddress = 0x9B | |
| opCallFrameCFA = 0x9C | |
| opBitPiece = 0x9D | |
| // The following are new in DWARF 4. | |
| opImplicitValue = 0x9E | |
| opStackValue = 0x9F | |
| // The following a new in DWARF 5. | |
| opImplicitPointer = 0xA0 | |
| opAddrx = 0xA1 | |
| opConstx = 0xA2 | |
| opEntryValue = 0xA3 | |
| opConstType = 0xA4 | |
| opRegvalType = 0xA5 | |
| opDerefType = 0xA6 | |
| opXderefType = 0xA7 | |
| opConvert = 0xA8 | |
| opReinterpret = 0xA9 | |
| /* 0xE0-0xFF reserved for user-specific */ | |
| ) | |
| // Basic type encodings -- the value for AttrEncoding in a TagBaseType Entry. | |
| const ( | |
| encAddress = 0x01 | |
| encBoolean = 0x02 | |
| encComplexFloat = 0x03 | |
| encFloat = 0x04 | |
| encSigned = 0x05 | |
| encSignedChar = 0x06 | |
| encUnsigned = 0x07 | |
| encUnsignedChar = 0x08 | |
| // The following are new in DWARF 3. | |
| encImaginaryFloat = 0x09 | |
| encPackedDecimal = 0x0A | |
| encNumericString = 0x0B | |
| encEdited = 0x0C | |
| encSignedFixed = 0x0D | |
| encUnsignedFixed = 0x0E | |
| encDecimalFloat = 0x0F | |
| // The following are new in DWARF 4. | |
| encUTF = 0x10 | |
| // The following are new in DWARF 5. | |
| encUCS = 0x11 | |
| encASCII = 0x12 | |
| ) | |
| // Statement program standard opcode encodings. | |
| const ( | |
| lnsCopy = 1 | |
| lnsAdvancePC = 2 | |
| lnsAdvanceLine = 3 | |
| lnsSetFile = 4 | |
| lnsSetColumn = 5 | |
| lnsNegateStmt = 6 | |
| lnsSetBasicBlock = 7 | |
| lnsConstAddPC = 8 | |
| lnsFixedAdvancePC = 9 | |
| // DWARF 3 | |
| lnsSetPrologueEnd = 10 | |
| lnsSetEpilogueBegin = 11 | |
| lnsSetISA = 12 | |
| ) | |
| // Statement program extended opcode encodings. | |
| const ( | |
| lneEndSequence = 1 | |
| lneSetAddress = 2 | |
| lneDefineFile = 3 | |
| // DWARF 4 | |
| lneSetDiscriminator = 4 | |
| ) | |
| // Line table directory and file name entry formats. | |
| // These are new in DWARF 5. | |
| const ( | |
| lnctPath = 0x01 | |
| lnctDirectoryIndex = 0x02 | |
| lnctTimestamp = 0x03 | |
| lnctSize = 0x04 | |
| lnctMD5 = 0x05 | |
| ) | |
| // Location list entry codes. | |
| // These are new in DWARF 5. | |
| const ( | |
| lleEndOfList = 0x00 | |
| lleBaseAddressx = 0x01 | |
| lleStartxEndx = 0x02 | |
| lleStartxLength = 0x03 | |
| lleOffsetPair = 0x04 | |
| lleDefaultLocation = 0x05 | |
| lleBaseAddress = 0x06 | |
| lleStartEnd = 0x07 | |
| lleStartLength = 0x08 | |
| ) | |
| // Unit header unit type encodings. | |
| // These are new in DWARF 5. | |
| const ( | |
| utCompile = 0x01 | |
| utType = 0x02 | |
| utPartial = 0x03 | |
| utSkeleton = 0x04 | |
| utSplitCompile = 0x05 | |
| utSplitType = 0x06 | |
| ) | |
| // Opcodes for DWARFv5 debug_rnglists section. | |
| const ( | |
| rleEndOfList = 0x0 | |
| rleBaseAddressx = 0x1 | |
| rleStartxEndx = 0x2 | |
| rleStartxLength = 0x3 | |
| rleOffsetPair = 0x4 | |
| rleBaseAddress = 0x5 | |
| rleStartEnd = 0x6 | |
| rleStartLength = 0x7 | |
| ) |