blob: 808a80c8a4aaef8c0208e29c403fb765abf26384 [file] [log] [blame]
// 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;
)