...
Run Format

Source file src/debug/dwarf/const.go

     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	import "strconv"
    10	
    11	// An Attr identifies the attribute type in a DWARF Entry's 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		AttrAllocated      Attr = 0x4E
    75		AttrAssociated     Attr = 0x4F
    76		AttrDataLocation   Attr = 0x50
    77		AttrStride         Attr = 0x51
    78		AttrEntrypc        Attr = 0x52
    79		AttrUseUTF8        Attr = 0x53
    80		AttrExtension      Attr = 0x54
    81		AttrRanges         Attr = 0x55
    82		AttrTrampoline     Attr = 0x56
    83		AttrCallColumn     Attr = 0x57
    84		AttrCallFile       Attr = 0x58
    85		AttrCallLine       Attr = 0x59
    86		AttrDescription    Attr = 0x5A
    87	)
    88	
    89	var attrNames = [...]string{
    90		AttrSibling:        "Sibling",
    91		AttrLocation:       "Location",
    92		AttrName:           "Name",
    93		AttrOrdering:       "Ordering",
    94		AttrByteSize:       "ByteSize",
    95		AttrBitOffset:      "BitOffset",
    96		AttrBitSize:        "BitSize",
    97		AttrStmtList:       "StmtList",
    98		AttrLowpc:          "Lowpc",
    99		AttrHighpc:         "Highpc",
   100		AttrLanguage:       "Language",
   101		AttrDiscr:          "Discr",
   102		AttrDiscrValue:     "DiscrValue",
   103		AttrVisibility:     "Visibility",
   104		AttrImport:         "Import",
   105		AttrStringLength:   "StringLength",
   106		AttrCommonRef:      "CommonRef",
   107		AttrCompDir:        "CompDir",
   108		AttrConstValue:     "ConstValue",
   109		AttrContainingType: "ContainingType",
   110		AttrDefaultValue:   "DefaultValue",
   111		AttrInline:         "Inline",
   112		AttrIsOptional:     "IsOptional",
   113		AttrLowerBound:     "LowerBound",
   114		AttrProducer:       "Producer",
   115		AttrPrototyped:     "Prototyped",
   116		AttrReturnAddr:     "ReturnAddr",
   117		AttrStartScope:     "StartScope",
   118		AttrStrideSize:     "StrideSize",
   119		AttrUpperBound:     "UpperBound",
   120		AttrAbstractOrigin: "AbstractOrigin",
   121		AttrAccessibility:  "Accessibility",
   122		AttrAddrClass:      "AddrClass",
   123		AttrArtificial:     "Artificial",
   124		AttrBaseTypes:      "BaseTypes",
   125		AttrCalling:        "Calling",
   126		AttrCount:          "Count",
   127		AttrDataMemberLoc:  "DataMemberLoc",
   128		AttrDeclColumn:     "DeclColumn",
   129		AttrDeclFile:       "DeclFile",
   130		AttrDeclLine:       "DeclLine",
   131		AttrDeclaration:    "Declaration",
   132		AttrDiscrList:      "DiscrList",
   133		AttrEncoding:       "Encoding",
   134		AttrExternal:       "External",
   135		AttrFrameBase:      "FrameBase",
   136		AttrFriend:         "Friend",
   137		AttrIdentifierCase: "IdentifierCase",
   138		AttrMacroInfo:      "MacroInfo",
   139		AttrNamelistItem:   "NamelistItem",
   140		AttrPriority:       "Priority",
   141		AttrSegment:        "Segment",
   142		AttrSpecification:  "Specification",
   143		AttrStaticLink:     "StaticLink",
   144		AttrType:           "Type",
   145		AttrUseLocation:    "UseLocation",
   146		AttrVarParam:       "VarParam",
   147		AttrVirtuality:     "Virtuality",
   148		AttrVtableElemLoc:  "VtableElemLoc",
   149		AttrAllocated:      "Allocated",
   150		AttrAssociated:     "Associated",
   151		AttrDataLocation:   "DataLocation",
   152		AttrStride:         "Stride",
   153		AttrEntrypc:        "Entrypc",
   154		AttrUseUTF8:        "UseUTF8",
   155		AttrExtension:      "Extension",
   156		AttrRanges:         "Ranges",
   157		AttrTrampoline:     "Trampoline",
   158		AttrCallColumn:     "CallColumn",
   159		AttrCallFile:       "CallFile",
   160		AttrCallLine:       "CallLine",
   161		AttrDescription:    "Description",
   162	}
   163	
   164	func (a Attr) String() string {
   165		if int(a) < len(attrNames) {
   166			s := attrNames[a]
   167			if s != "" {
   168				return s
   169			}
   170		}
   171		return strconv.Itoa(int(a))
   172	}
   173	
   174	func (a Attr) GoString() string {
   175		if int(a) < len(attrNames) {
   176			s := attrNames[a]
   177			if s != "" {
   178				return "dwarf.Attr" + s
   179			}
   180		}
   181		return "dwarf.Attr(" + strconv.FormatInt(int64(a), 10) + ")"
   182	}
   183	
   184	// A format is a DWARF data encoding format.
   185	type format uint32
   186	
   187	const (
   188		// value formats
   189		formAddr        format = 0x01
   190		formDwarfBlock2 format = 0x03
   191		formDwarfBlock4 format = 0x04
   192		formData2       format = 0x05
   193		formData4       format = 0x06
   194		formData8       format = 0x07
   195		formString      format = 0x08
   196		formDwarfBlock  format = 0x09
   197		formDwarfBlock1 format = 0x0A
   198		formData1       format = 0x0B
   199		formFlag        format = 0x0C
   200		formSdata       format = 0x0D
   201		formStrp        format = 0x0E
   202		formUdata       format = 0x0F
   203		formRefAddr     format = 0x10
   204		formRef1        format = 0x11
   205		formRef2        format = 0x12
   206		formRef4        format = 0x13
   207		formRef8        format = 0x14
   208		formRefUdata    format = 0x15
   209		formIndirect    format = 0x16
   210		// The following are new in DWARF 4.
   211		formSecOffset   format = 0x17
   212		formExprloc     format = 0x18
   213		formFlagPresent format = 0x19
   214		formRefSig8     format = 0x20
   215		// Extensions for multi-file compression (.dwz)
   216		// http://www.dwarfstd.org/ShowIssue.php?issue=120604.1
   217		formGnuRefAlt  format = 0x1f20
   218		formGnuStrpAlt format = 0x1f21
   219	)
   220	
   221	// A Tag is the classification (the type) of an Entry.
   222	type Tag uint32
   223	
   224	const (
   225		TagArrayType              Tag = 0x01
   226		TagClassType              Tag = 0x02
   227		TagEntryPoint             Tag = 0x03
   228		TagEnumerationType        Tag = 0x04
   229		TagFormalParameter        Tag = 0x05
   230		TagImportedDeclaration    Tag = 0x08
   231		TagLabel                  Tag = 0x0A
   232		TagLexDwarfBlock          Tag = 0x0B
   233		TagMember                 Tag = 0x0D
   234		TagPointerType            Tag = 0x0F
   235		TagReferenceType          Tag = 0x10
   236		TagCompileUnit            Tag = 0x11
   237		TagStringType             Tag = 0x12
   238		TagStructType             Tag = 0x13
   239		TagSubroutineType         Tag = 0x15
   240		TagTypedef                Tag = 0x16
   241		TagUnionType              Tag = 0x17
   242		TagUnspecifiedParameters  Tag = 0x18
   243		TagVariant                Tag = 0x19
   244		TagCommonDwarfBlock       Tag = 0x1A
   245		TagCommonInclusion        Tag = 0x1B
   246		TagInheritance            Tag = 0x1C
   247		TagInlinedSubroutine      Tag = 0x1D
   248		TagModule                 Tag = 0x1E
   249		TagPtrToMemberType        Tag = 0x1F
   250		TagSetType                Tag = 0x20
   251		TagSubrangeType           Tag = 0x21
   252		TagWithStmt               Tag = 0x22
   253		TagAccessDeclaration      Tag = 0x23
   254		TagBaseType               Tag = 0x24
   255		TagCatchDwarfBlock        Tag = 0x25
   256		TagConstType              Tag = 0x26
   257		TagConstant               Tag = 0x27
   258		TagEnumerator             Tag = 0x28
   259		TagFileType               Tag = 0x29
   260		TagFriend                 Tag = 0x2A
   261		TagNamelist               Tag = 0x2B
   262		TagNamelistItem           Tag = 0x2C
   263		TagPackedType             Tag = 0x2D
   264		TagSubprogram             Tag = 0x2E
   265		TagTemplateTypeParameter  Tag = 0x2F
   266		TagTemplateValueParameter Tag = 0x30
   267		TagThrownType             Tag = 0x31
   268		TagTryDwarfBlock          Tag = 0x32
   269		TagVariantPart            Tag = 0x33
   270		TagVariable               Tag = 0x34
   271		TagVolatileType           Tag = 0x35
   272		// The following are new in DWARF 3.
   273		TagDwarfProcedure  Tag = 0x36
   274		TagRestrictType    Tag = 0x37
   275		TagInterfaceType   Tag = 0x38
   276		TagNamespace       Tag = 0x39
   277		TagImportedModule  Tag = 0x3A
   278		TagUnspecifiedType Tag = 0x3B
   279		TagPartialUnit     Tag = 0x3C
   280		TagImportedUnit    Tag = 0x3D
   281		TagMutableType     Tag = 0x3E // Later removed from DWARF.
   282		TagCondition       Tag = 0x3F
   283		TagSharedType      Tag = 0x40
   284		// The following are new in DWARF 4.
   285		TagTypeUnit            Tag = 0x41
   286		TagRvalueReferenceType Tag = 0x42
   287		TagTemplateAlias       Tag = 0x43
   288	)
   289	
   290	var tagNames = [...]string{
   291		TagArrayType:              "ArrayType",
   292		TagClassType:              "ClassType",
   293		TagEntryPoint:             "EntryPoint",
   294		TagEnumerationType:        "EnumerationType",
   295		TagFormalParameter:        "FormalParameter",
   296		TagImportedDeclaration:    "ImportedDeclaration",
   297		TagLabel:                  "Label",
   298		TagLexDwarfBlock:          "LexDwarfBlock",
   299		TagMember:                 "Member",
   300		TagPointerType:            "PointerType",
   301		TagReferenceType:          "ReferenceType",
   302		TagCompileUnit:            "CompileUnit",
   303		TagStringType:             "StringType",
   304		TagStructType:             "StructType",
   305		TagSubroutineType:         "SubroutineType",
   306		TagTypedef:                "Typedef",
   307		TagUnionType:              "UnionType",
   308		TagUnspecifiedParameters:  "UnspecifiedParameters",
   309		TagVariant:                "Variant",
   310		TagCommonDwarfBlock:       "CommonDwarfBlock",
   311		TagCommonInclusion:        "CommonInclusion",
   312		TagInheritance:            "Inheritance",
   313		TagInlinedSubroutine:      "InlinedSubroutine",
   314		TagModule:                 "Module",
   315		TagPtrToMemberType:        "PtrToMemberType",
   316		TagSetType:                "SetType",
   317		TagSubrangeType:           "SubrangeType",
   318		TagWithStmt:               "WithStmt",
   319		TagAccessDeclaration:      "AccessDeclaration",
   320		TagBaseType:               "BaseType",
   321		TagCatchDwarfBlock:        "CatchDwarfBlock",
   322		TagConstType:              "ConstType",
   323		TagConstant:               "Constant",
   324		TagEnumerator:             "Enumerator",
   325		TagFileType:               "FileType",
   326		TagFriend:                 "Friend",
   327		TagNamelist:               "Namelist",
   328		TagNamelistItem:           "NamelistItem",
   329		TagPackedType:             "PackedType",
   330		TagSubprogram:             "Subprogram",
   331		TagTemplateTypeParameter:  "TemplateTypeParameter",
   332		TagTemplateValueParameter: "TemplateValueParameter",
   333		TagThrownType:             "ThrownType",
   334		TagTryDwarfBlock:          "TryDwarfBlock",
   335		TagVariantPart:            "VariantPart",
   336		TagVariable:               "Variable",
   337		TagVolatileType:           "VolatileType",
   338		TagDwarfProcedure:         "DwarfProcedure",
   339		TagRestrictType:           "RestrictType",
   340		TagInterfaceType:          "InterfaceType",
   341		TagNamespace:              "Namespace",
   342		TagImportedModule:         "ImportedModule",
   343		TagUnspecifiedType:        "UnspecifiedType",
   344		TagPartialUnit:            "PartialUnit",
   345		TagImportedUnit:           "ImportedUnit",
   346		TagMutableType:            "MutableType",
   347		TagCondition:              "Condition",
   348		TagSharedType:             "SharedType",
   349		TagTypeUnit:               "TypeUnit",
   350		TagRvalueReferenceType:    "RvalueReferenceType",
   351		TagTemplateAlias:          "TemplateAlias",
   352	}
   353	
   354	func (t Tag) String() string {
   355		if int(t) < len(tagNames) {
   356			s := tagNames[t]
   357			if s != "" {
   358				return s
   359			}
   360		}
   361		return strconv.Itoa(int(t))
   362	}
   363	
   364	func (t Tag) GoString() string {
   365		if int(t) < len(tagNames) {
   366			s := tagNames[t]
   367			if s != "" {
   368				return "dwarf.Tag" + s
   369			}
   370		}
   371		return "dwarf.Tag(" + strconv.FormatInt(int64(t), 10) + ")"
   372	}
   373	
   374	// Location expression operators.
   375	// The debug info encodes value locations like 8(R3)
   376	// as a sequence of these op codes.
   377	// This package does not implement full expressions;
   378	// the opPlusUconst operator is expected by the type parser.
   379	const (
   380		opAddr       = 0x03 /* 1 op, const addr */
   381		opDeref      = 0x06
   382		opConst1u    = 0x08 /* 1 op, 1 byte const */
   383		opConst1s    = 0x09 /*	" signed */
   384		opConst2u    = 0x0A /* 1 op, 2 byte const  */
   385		opConst2s    = 0x0B /*	" signed */
   386		opConst4u    = 0x0C /* 1 op, 4 byte const */
   387		opConst4s    = 0x0D /*	" signed */
   388		opConst8u    = 0x0E /* 1 op, 8 byte const */
   389		opConst8s    = 0x0F /*	" signed */
   390		opConstu     = 0x10 /* 1 op, LEB128 const */
   391		opConsts     = 0x11 /*	" signed */
   392		opDup        = 0x12
   393		opDrop       = 0x13
   394		opOver       = 0x14
   395		opPick       = 0x15 /* 1 op, 1 byte stack index */
   396		opSwap       = 0x16
   397		opRot        = 0x17
   398		opXderef     = 0x18
   399		opAbs        = 0x19
   400		opAnd        = 0x1A
   401		opDiv        = 0x1B
   402		opMinus      = 0x1C
   403		opMod        = 0x1D
   404		opMul        = 0x1E
   405		opNeg        = 0x1F
   406		opNot        = 0x20
   407		opOr         = 0x21
   408		opPlus       = 0x22
   409		opPlusUconst = 0x23 /* 1 op, ULEB128 addend */
   410		opShl        = 0x24
   411		opShr        = 0x25
   412		opShra       = 0x26
   413		opXor        = 0x27
   414		opSkip       = 0x2F /* 1 op, signed 2-byte constant */
   415		opBra        = 0x28 /* 1 op, signed 2-byte constant */
   416		opEq         = 0x29
   417		opGe         = 0x2A
   418		opGt         = 0x2B
   419		opLe         = 0x2C
   420		opLt         = 0x2D
   421		opNe         = 0x2E
   422		opLit0       = 0x30
   423		/* OpLitN = OpLit0 + N for N = 0..31 */
   424		opReg0 = 0x50
   425		/* OpRegN = OpReg0 + N for N = 0..31 */
   426		opBreg0 = 0x70 /* 1 op, signed LEB128 constant */
   427		/* OpBregN = OpBreg0 + N for N = 0..31 */
   428		opRegx       = 0x90 /* 1 op, ULEB128 register */
   429		opFbreg      = 0x91 /* 1 op, SLEB128 offset */
   430		opBregx      = 0x92 /* 2 op, ULEB128 reg; SLEB128 off */
   431		opPiece      = 0x93 /* 1 op, ULEB128 size of piece */
   432		opDerefSize  = 0x94 /* 1-byte size of data retrieved */
   433		opXderefSize = 0x95 /* 1-byte size of data retrieved */
   434		opNop        = 0x96
   435		/* next four new in Dwarf v3 */
   436		opPushObjAddr = 0x97
   437		opCall2       = 0x98 /* 2-byte offset of DIE */
   438		opCall4       = 0x99 /* 4-byte offset of DIE */
   439		opCallRef     = 0x9A /* 4- or 8- byte offset of DIE */
   440		/* 0xE0-0xFF reserved for user-specific */
   441	)
   442	
   443	// Basic type encodings -- the value for AttrEncoding in a TagBaseType Entry.
   444	const (
   445		encAddress        = 0x01
   446		encBoolean        = 0x02
   447		encComplexFloat   = 0x03
   448		encFloat          = 0x04
   449		encSigned         = 0x05
   450		encSignedChar     = 0x06
   451		encUnsigned       = 0x07
   452		encUnsignedChar   = 0x08
   453		encImaginaryFloat = 0x09
   454	)
   455	
   456	// Statement program standard opcode encodings.
   457	const (
   458		lnsCopy           = 1
   459		lnsAdvancePC      = 2
   460		lnsAdvanceLine    = 3
   461		lnsSetFile        = 4
   462		lnsSetColumn      = 5
   463		lnsNegateStmt     = 6
   464		lnsSetBasicBlock  = 7
   465		lnsConstAddPC     = 8
   466		lnsFixedAdvancePC = 9
   467	
   468		// DWARF 3
   469		lnsSetPrologueEnd   = 10
   470		lnsSetEpilogueBegin = 11
   471		lnsSetISA           = 12
   472	)
   473	
   474	// Statement program extended opcode encodings.
   475	const (
   476		lneEndSequence = 1
   477		lneSetAddress  = 2
   478		lneDefineFile  = 3
   479	
   480		// DWARF 4
   481		lneSetDiscriminator = 4
   482	)
   483	

View as plain text