Go Home Page
The Go Programming Language

Source file src/pkg/debug/dwarf/const.go

// 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
)