| // 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 | |
| import "strconv" | |
| // An Attr identifies the attribute type in a DWARF Entry's 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; | |
| 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; | |
| ) | |
| var attrNames = [...]string{ | |
| AttrSibling: "Sibling", | |
| AttrLocation: "Location", | |
| AttrName: "Name", | |
| AttrOrdering: "Ordering", | |
| AttrByteSize: "ByteSize", | |
| AttrBitOffset: "BitOffset", | |
| AttrBitSize: "BitSize", | |
| AttrStmtList: "StmtList", | |
| AttrLowpc: "Lowpc", | |
| AttrHighpc: "Highpc", | |
| AttrLanguage: "Language", | |
| AttrDiscr: "Discr", | |
| AttrDiscrValue: "DiscrValue", | |
| AttrVisibility: "Visibility", | |
| AttrImport: "Import", | |
| AttrStringLength: "StringLength", | |
| AttrCommonRef: "CommonRef", | |
| AttrCompDir: "CompDir", | |
| AttrConstValue: "ConstValue", | |
| AttrContainingType: "ContainingType", | |
| AttrDefaultValue: "DefaultValue", | |
| AttrInline: "Inline", | |
| AttrIsOptional: "IsOptional", | |
| AttrLowerBound: "LowerBound", | |
| AttrProducer: "Producer", | |
| AttrPrototyped: "Prototyped", | |
| AttrReturnAddr: "ReturnAddr", | |
| AttrStartScope: "StartScope", | |
| AttrStrideSize: "StrideSize", | |
| AttrUpperBound: "UpperBound", | |
| AttrAbstractOrigin: "AbstractOrigin", | |
| AttrAccessibility: "Accessibility", | |
| AttrAddrClass: "AddrClass", | |
| AttrArtificial: "Artificial", | |
| AttrBaseTypes: "BaseTypes", | |
| AttrCalling: "Calling", | |
| AttrCount: "Count", | |
| AttrDataMemberLoc: "DataMemberLoc", | |
| AttrDeclColumn: "DeclColumn", | |
| AttrDeclFile: "DeclFile", | |
| AttrDeclLine: "DeclLine", | |
| AttrDeclaration: "Declaration", | |
| AttrDiscrList: "DiscrList", | |
| AttrEncoding: "Encoding", | |
| AttrExternal: "External", | |
| AttrFrameBase: "FrameBase", | |
| AttrFriend: "Friend", | |
| AttrIdentifierCase: "IdentifierCase", | |
| AttrMacroInfo: "MacroInfo", | |
| AttrNamelistItem: "NamelistItem", | |
| AttrPriority: "Priority", | |
| AttrSegment: "Segment", | |
| AttrSpecification: "Specification", | |
| AttrStaticLink: "StaticLink", | |
| AttrType: "Type", | |
| AttrUseLocation: "UseLocation", | |
| AttrVarParam: "VarParam", | |
| AttrVirtuality: "Virtuality", | |
| AttrVtableElemLoc: "VtableElemLoc", | |
| AttrAllocated: "Allocated", | |
| AttrAssociated: "Associated", | |
| AttrDataLocation: "DataLocation", | |
| AttrStride: "Stride", | |
| AttrEntrypc: "Entrypc", | |
| AttrUseUTF8: "UseUTF8", | |
| AttrExtension: "Extension", | |
| AttrRanges: "Ranges", | |
| AttrTrampoline: "Trampoline", | |
| AttrCallColumn: "CallColumn", | |
| AttrCallFile: "CallFile", | |
| AttrCallLine: "CallLine", | |
| AttrDescription: "Description", | |
| } | |
| func (a Attr) String() string { | |
| if int(a) < len(attrNames) { | |
| s := attrNames[a]; | |
| if s != "" { | |
| return s | |
| } | |
| } | |
| return strconv.Itoa(int(a)); | |
| } | |
| func (a Attr) GoString() string { | |
| if int(a) < len(attrNames) { | |
| s := attrNames[a]; | |
| if s != "" { | |
| return "dwarf.Attr" + s | |
| } | |
| } | |
| return "dwarf.Attr(" + strconv.Itoa64(int64(a)) + ")"; | |
| } | |
| // 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; | |
| ) | |
| // 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; | |
| 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; | |
| ) | |
| var tagNames = [...]string{ | |
| TagArrayType: "ArrayType", | |
| TagClassType: "ClassType", | |
| TagEntryPoint: "EntryPoint", | |
| TagEnumerationType: "EnumerationType", | |
| TagFormalParameter: "FormalParameter", | |
| TagImportedDeclaration: "ImportedDeclaration", | |
| TagLabel: "Label", | |
| TagLexDwarfBlock: "LexDwarfBlock", | |
| TagMember: "Member", | |
| TagPointerType: "PointerType", | |
| TagReferenceType: "ReferenceType", | |
| TagCompileUnit: "CompileUnit", | |
| TagStringType: "StringType", | |
| TagStructType: "StructType", | |
| TagSubroutineType: "SubroutineType", | |
| TagTypedef: "Typedef", | |
| TagUnionType: "UnionType", | |
| TagUnspecifiedParameters: "UnspecifiedParameters", | |
| TagVariant: "Variant", | |
| TagCommonDwarfBlock: "CommonDwarfBlock", | |
| TagCommonInclusion: "CommonInclusion", | |
| TagInheritance: "Inheritance", | |
| TagInlinedSubroutine: "InlinedSubroutine", | |
| TagModule: "Module", | |
| TagPtrToMemberType: "PtrToMemberType", | |
| TagSetType: "SetType", | |
| TagSubrangeType: "SubrangeType", | |
| TagWithStmt: "WithStmt", | |
| TagAccessDeclaration: "AccessDeclaration", | |
| TagBaseType: "BaseType", | |
| TagCatchDwarfBlock: "CatchDwarfBlock", | |
| TagConstType: "ConstType", | |
| TagConstant: "Constant", | |
| TagEnumerator: "Enumerator", | |
| TagFileType: "FileType", | |
| TagFriend: "Friend", | |
| TagNamelist: "Namelist", | |
| TagNamelistItem: "NamelistItem", | |
| TagPackedType: "PackedType", | |
| TagSubprogram: "Subprogram", | |
| TagTemplateTypeParameter: "TemplateTypeParameter", | |
| TagTemplateValueParameter: "TemplateValueParameter", | |
| TagThrownType: "ThrownType", | |
| TagTryDwarfBlock: "TryDwarfBlock", | |
| TagVariantPart: "VariantPart", | |
| TagVariable: "Variable", | |
| TagVolatileType: "VolatileType", | |
| TagDwarfProcedure: "DwarfProcedure", | |
| TagRestrictType: "RestrictType", | |
| TagInterfaceType: "InterfaceType", | |
| TagNamespace: "Namespace", | |
| TagImportedModule: "ImportedModule", | |
| TagUnspecifiedType: "UnspecifiedType", | |
| TagPartialUnit: "PartialUnit", | |
| TagImportedUnit: "ImportedUnit", | |
| TagMutableType: "MutableType", | |
| } | |
| func (t Tag) String() string { | |
| if int(t) < len(tagNames) { | |
| s := tagNames[t]; | |
| if s != "" { | |
| return s | |
| } | |
| } | |
| return strconv.Itoa(int(t)); | |
| } | |
| func (t Tag) GoString() string { | |
| if int(t) < len(tagNames) { | |
| s := tagNames[t]; | |
| if s != "" { | |
| return "dwarf.Tag" + s | |
| } | |
| } | |
| return "dwarf.Tag(" + strconv.Itoa64(int64(t)) + ")"; | |
| } | |
| // 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; | |
| /* next four new in Dwarf v3 */ | |
| 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 */ | |
| /* 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; | |
| encImaginaryFloat = 0x09; | |
| ) |