Documentation ΒΆ
Overview ΒΆ
Package dwarf provides access to DWARF debugging information loaded from executable files, as defined in the DWARF 2.0 Standard at http://dwarfstd.org/doc/dwarf-2.0.0.pdf
Index ΒΆ
- Constants
- Variables
- type AddrType
- type ArrayType
- type AtomFlag
- type Attr
- type BasicType
- type BoolType
- type CharType
- type Chunk
- type Class
- type CommonType
- type ComplexType
- type Data
- func (d *Data) AddHashes(name string, contents []byte) error
- func (d *Data) AddSection(name string, contents []byte) error
- func (d *Data) AddTypes(name string, types []byte) error
- func (d *Data) DumpNames() (Entries, error)
- func (d *Data) DumpNamespaces() (Entries, error)
- func (d *Data) DumpObjC() (Entries, error)
- func (d *Data) DumpTypes() (Entries, error)
- func (d *Data) FilesForEntry(e *Entry) ([]*LineFile, error)
- func (d *Data) LineReader(cu *Entry) (*LineReader, error)
- func (d *Data) LookupName(name string) (Offset, error)
- func (d *Data) LookupNamespace(name string) (Offset, error)
- func (d *Data) LookupObjC(name string) (Offset, error)
- func (d *Data) LookupType(name string) (Offset, error)
- func (d *Data) Ranges(e *Entry) ([][2]uint64, error)
- func (d *Data) Reader() *Reader
- func (d *Data) Type(off Offset) (Type, error)
- type DecodeError
- type DotDotDotType
- type Entries
- type Entry
- type EnumType
- type EnumValue
- type Field
- type FloatType
- type FuncType
- type Hash
- type IntType
- type LabelType
- type LineEntry
- type LineFile
- type LineReader
- type LineReaderPos
- type MemberType
- type NameEntry
- type NamespaceType
- type Offset
- type PtrType
- type PtrauthType
- type QualNameHash
- type QualType
- type Reader
- func (r *Reader) AddressSize() int
- func (r *Reader) ByteOrder() binary.ByteOrder
- func (reader *Reader) InstructionsForEntry(entry *Entry) ([]byte, error)
- func (r *Reader) Next() (*Entry, error)
- func (r *Reader) Seek(off Offset)
- func (r *Reader) SeekPC(pc uint64) (*Entry, error)
- func (reader *Reader) SeekToEntry(entry *Entry) error
- func (r *Reader) SkipChildren()
- type StructField
- type StructType
- type Tag
- type Type
- type TypeEntry
- type TypedefType
- type UcharType
- type UintType
- type UnspecifiedType
- type UnsupportedType
- type VariableType
- type VoidType
Constants ΒΆ
const ( LangC89 lang = 0x0001 LangC lang = 0x0002 LangAda83 lang = 0x0003 LangCPlusPlus lang = 0x0004 LangCobol74 lang = 0x0005 LangCobol85 lang = 0x0006 LangFortran77 lang = 0x0007 LangFortran90 lang = 0x0008 LangPascal83 lang = 0x0009 LangModula2 lang = 0x000a LangJava lang = 0x000b LangC99 lang = 0x000c LangAda95 lang = 0x000d LangFortran95 lang = 0x000e LangPli lang = 0x000f LangObjC lang = 0x0010 LangObjCPlusPlus lang = 0x0011 LangUpc lang = 0x0012 LangD lang = 0x0013 LangPython lang = 0x0014 LangOpenCl lang = 0x0015 LangGo lang = 0x0016 LangModula3 lang = 0x0017 LangHaskell lang = 0x0018 LangCPlusPlus_03 lang = 0x0019 LangCPlusPlus_11 lang = 0x001a LangOCaml lang = 0x001b LangRust lang = 0x001c LangC11 lang = 0x001d LangSwift lang = 0x001e LangJulia lang = 0x001f LangDylan lang = 0x0020 LangCPlusPlus_14 lang = 0x0021 LangFortran03 lang = 0x0022 LangFortran08 lang = 0x0023 LangRenderScript lang = 0x0024 LangBliss lang = 0x0025 LangKotlin lang = 0x0026 LangZig lang = 0x0027 LangCrystal lang = 0x0028 LangCPlusPlus_17 lang = 0x002a LangCPlusPlus_20 lang = 0x002b LangC17 lang = 0x002c LangFortran18 lang = 0x002d LangAda2005 lang = 0x002e LangAda2012 lang = 0x002f LangMipsAssembler lang = 0x8001 LangGoogleRenderScript lang = 0x8e57 LangSunAssembler lang = 0x9001 LangAltiumAssembler lang = 0x9101 LangBorlandDelphi lang = 0xb000 )
const ( AtomTypeNULL atomType = 0 // a termination atom that specifies the end of the atom list AtomTypeDIEOffset atomType = 1 // DIE offset, check form for encoding (an offset into the .debug_info section for the DWARF DIE for this name) AtomTypeCUOffset atomType = 2 // DIE offset of the compiler unit header that contains the item in question (an offset into the .debug_info section for the CU that contains the DIE) AtomTypeTag atomType = 3 // DW_TAG_xxx value, should be encoded as DW_FORM_data1 (if no tags exceed 255) or DW_FORM_data2 (so you don't have to parse the DWARF to see what it is) AtomTypeNameFlags atomType = 4 // Flags from enum NameFlags (for functions and global variables (isFunction, isInlined, isExternal...)) AtomTypeTypeFlags atomType = 5 // Flags from enum TypeFlags (for types (isCXXClass, isObjCClass, ...)) AtomTypeQualNameHash atomType = 6 // A 32 bit hash of the full qualified name (since all hash entries are )
const (
HashFunctionDJB hashFuncType = 0 // Daniel J Bernstein hash function
)
Variables ΒΆ
var ErrUnknownPC = errors.New("ErrUnknownPC")
ErrUnknownPC is the error returned by LineReader.ScanPC when the seek PC is not covered by any entry in the line table.
Functions ΒΆ
This section is empty.
Types ΒΆ
type ArrayType ΒΆ
type ArrayType struct { CommonType Type Type StrideBitSize int64 // if > 0, number of bits to hold each element Count int64 // if == -1, an incomplete array, like char x[]. }
An ArrayType represents a fixed size array type.
type AtomFlag ΒΆ added in v1.0.6
type AtomFlag uint8
const (
FlagClassIsImplementation AtomFlag = 1 << 1 // Always set for C++, only set for ObjC if this is the @implementation for class.
)
type Attr ΒΆ
type Attr uint32
An Attr identifies the attribute type in a DWARF Entry's Field.
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 // GNU extensions AttrSfNames Attr = 0x2101 AttrSrcInfo Attr = 0x2102 AttrMacInfo Attr = 0x2103 AttrSrcCoords Attr = 0x2104 AttrBodyBegin Attr = 0x2105 AttrBodyEnd Attr = 0x2106 AttrGnuVector Attr = 0x2107 AttrGnuGuardedBy Attr = 0x2108 AttrGnuPtGuardedBy Attr = 0x2109 AttrGnuGuarded Attr = 0x210a AttrGnuPtGuarded Attr = 0x210b AttrGnuLocksExcluded Attr = 0x210c AttrGnuExclusiveLocksRequired Attr = 0x210d AttrGnuOdrSignature Attr = 0x210f AttrGnuTemplateName Attr = 0x2110 AttrGnuCallSiteValue Attr = 0x2111 AttrGnuCallSiteDataValue Attr = 0x2112 AttrGnuCallSiteTarget Attr = 0x2113 AttrGnuCallSiteTargetClobbered Attr = 0x2114 AttrGnuTailCall Attr = 0x2115 AttrGnuAllTailCallSites Attr = 0x2116 AttrGnuAllCallSites Attr = 0x2117 AttrGnuAllSourceCallSites Attr = 0x2118 AttrGnuMacros Attr = 0x2119 // Extensions for Fission proposal. AttrGnuDwoName Attr = 0x2130 AttrGnuDwoId Attr = 0x2131 AttrGnuRangesBase Attr = 0x2132 AttrGnuAddrBase Attr = 0x2133 AttrGnuPubnames Attr = 0x2134 AttrGnuPubtypes Attr = 0x2135 AttrGnuDiscriminator Attr = 0x2136 AttrGnuLocviews Attr = 0x2137 AttrGnuEntryView Attr = 0x2138 // LLVM project extensions. AttrLlvmIncludePath Attr = 0x3e00 AttrLlvmConfigMacros Attr = 0x3e01 AttrLlvmSysroot Attr = 0x3e02 AttrLlvmTagOffset Attr = 0x3e03 AttrLlvmPtrauthKey Attr = 0x3e04 AttrLlvmPtrauthAddressDiscriminated Attr = 0x3e05 AttrLlvmPtrauthExtraDiscriminator Attr = 0x3e06 AttrLlvmApiNotes Attr = 0x3e07 AttrLlvmPtrauthIsaPointer Attr = 0x3e08 AttrLlvmPtrauthAuthenticatesNullValues Attr = 0x3e09 // Apple extensions. AttrAppleOptimized Attr = 0x3fe1 AttrAppleFlags Attr = 0x3fe2 AttrAppleIsa Attr = 0x3fe3 AttrAppleBlock Attr = 0x3fe4 AttrAppleMajorRuntimeVersion Attr = 0x3fe5 AttrAppleRuntimeClass Attr = 0x3fe6 AttrAppleOmitFramePtr Attr = 0x3fe7 AttrApplePropertyName Attr = 0x3fe8 AttrApplePropertyGetter Attr = 0x3fe9 AttrApplePropertySetter Attr = 0x3fea AttrApplePropertyAttribute Attr = 0x3feb AttrAppleObjcCompleteType Attr = 0x3fec AttrAppleProperty Attr = 0x3fed AttrAppleObjcDirect Attr = 0x3fee AttrAppleSDK Attr = 0x3fef )
type BasicType ΒΆ
type BasicType struct { CommonType BitSize int64 BitOffset int64 DataBitOffset int64 }
A BasicType holds fields common to all basic types.
See the documentation for StructField for more info on the interpretation of the BitSize/BitOffset/DataBitOffset fields.
type Chunk ΒΆ added in v1.0.6
type Chunk struct { StrOffset uint32 // KeyType HashDataCount uint32 HashData [][]any // array of DIE offsets }
func (Chunk) GetFirstOffset ΒΆ added in v1.0.6
type Class ΒΆ
type Class int
A Class is the DWARF 4 class of an attribute value.
In general, a given attribute's value may take on one of several possible classes defined by DWARF, each of which leads to a slightly different interpretation of the attribute.
DWARF version 4 distinguishes attribute value classes more finely than previous versions of DWARF. The reader will disambiguate coarser classes from earlier versions of DWARF into the appropriate DWARF 4 class. For example, DWARF 2 uses "constant" for constants as well as all types of section offsets, but the reader will canonicalize attributes in DWARF 2 files that refer to section offsets to one of the Class*Ptr classes, even though these classes were only defined in DWARF 3.
const ( // ClassUnknown represents values of unknown DWARF class. ClassUnknown Class = iota // ClassAddress represents values of type uint64 that are // addresses on the target machine. ClassAddress // ClassBlock represents values of type []byte whose // interpretation depends on the attribute. ClassBlock // ClassConstant represents values of type int64 that are // constants. The interpretation of this constant depends on // the attribute. ClassConstant // ClassExprLoc represents values of type []byte that contain // an encoded DWARF expression or location description. ClassExprLoc // ClassFlag represents values of type bool. ClassFlag // ClassLinePtr represents values that are an int64 offset // into the "line" section. ClassLinePtr // ClassLocListPtr represents values that are an int64 offset // into the "loclist" section. ClassLocListPtr // ClassMacPtr represents values that are an int64 offset into // the "mac" section. ClassMacPtr // ClassRangeListPtr represents values that are an int64 offset into // the "rangelist" section. ClassRangeListPtr // ClassReference represents values that are an Offset offset // of an Entry in the info section (for use with Reader.Seek). // The DWARF specification combines ClassReference and // ClassReferenceSig into class "reference". ClassReference // ClassReferenceSig represents values that are a uint64 type // signature referencing a type Entry. ClassReferenceSig // ClassString represents values that are strings. If the // compilation unit specifies the AttrUseUTF8 flag (strongly // recommended), the string value will be encoded in UTF-8. // Otherwise, the encoding is unspecified. ClassString // ClassReferenceAlt represents values of type int64 that are // an offset into the DWARF "info" section of an alternate // object file. ClassReferenceAlt // ClassStringAlt represents values of type int64 that are an // offset into the DWARF string section of an alternate object // file. ClassStringAlt // ClassAddrPtr represents values that are an int64 offset // into the "addr" section. ClassAddrPtr // ClassLocList represents values that are an int64 offset // into the "loclists" section. ClassLocList // ClassRngList represents values that are a uint64 offset // from the base of the "rnglists" section. ClassRngList // ClassRngListsPtr represents values that are an int64 offset // into the "rnglists" section. These are used as the base for // ClassRngList values. ClassRngListsPtr // ClassStrOffsetsPtr represents values that are an int64 // offset into the "str_offsets" section. ClassStrOffsetsPtr )
type CommonType ΒΆ
type CommonType struct { ByteSize int64 // size of value of this type, in bytes Name string // name that can be used to refer to type }
A CommonType holds fields common to multiple types. If a field is not known or not applicable for a given type, the zero value is used.
func (*CommonType) Common ΒΆ
func (c *CommonType) Common() *CommonType
func (*CommonType) Format ΒΆ added in v1.0.4
func (c *CommonType) Format(name string) string
func (*CommonType) Size ΒΆ
func (c *CommonType) Size() int64
type ComplexType ΒΆ
type ComplexType struct {
BasicType
}
A ComplexType represents a complex floating point type.
type Data ΒΆ
type Data struct {
// contains filtered or unexported fields
}
Data represents the DWARF debugging information loaded from an executable file (for example, an ELF or Mach-O executable).
func New ΒΆ
New returns a new Data object initialized from the given parameters. Rather than calling this function directly, clients should typically use the DWARF method of the File type of the appropriate package debug/elf, debug/macho, or debug/pe.
The []byte arguments are the data from the corresponding debug section in the object file; for example, for an ELF object, abbrev is the contents of the ".debug_abbrev" section.
func (*Data) AddSection ΒΆ
AddSection adds another DWARF section by name. The name should be a DWARF section name such as ".debug_addr", ".debug_str_offsets", and so forth. This approach is used for new DWARF sections added in DWARF 5 and later.
func (*Data) AddTypes ΒΆ
AddTypes will add one .debug_types section to the DWARF data. A typical object with DWARF version 4 debug info will have multiple .debug_types sections. The name is used for error reporting only, and serves to distinguish one .debug_types section from another.
func (*Data) DumpNamespaces ΒΆ added in v1.0.5
func (*Data) FilesForEntry ΒΆ added in v1.0.7
func (*Data) LineReader ΒΆ
func (d *Data) LineReader(cu *Entry) (*LineReader, error)
LineReader returns a new reader for the line table of compilation unit cu, which must be an Entry with tag TagCompileUnit.
If this compilation unit has no line table, it returns nil, nil.
func (*Data) LookupNamespace ΒΆ added in v1.0.5
func (*Data) Ranges ΒΆ
Ranges returns the PC ranges covered by e, a slice of [low,high) pairs. Only some entry types, such as TagCompileUnit or TagSubprogram, have PC ranges; for others, this will return nil with no error.
type DecodeError ΒΆ
func (DecodeError) Error ΒΆ
func (e DecodeError) Error() string
type DotDotDotType ΒΆ
type DotDotDotType struct {
CommonType
}
A DotDotDotType represents the variadic ... function parameter.
func (*DotDotDotType) String ΒΆ
func (t *DotDotDotType) String() string
type Entry ΒΆ
type Entry struct { Offset Offset // offset of Entry in DWARF info Tag Tag // tag (kind of Entry) Children bool // whether Entry is followed by children Field []Field }
An entry is a sequence of attribute/value pairs.
func (*Entry) AttrField ΒΆ
AttrField returns the Field associated with attribute Attr in Entry, or nil if there is no such attribute.
type EnumType ΒΆ
type EnumType struct { CommonType EnumName string Val []*EnumValue }
An EnumType represents an enumerated type. The only indication of its native integer type is its ByteSize (inside CommonType).
type Field ΒΆ
A Field is a single attribute/value pair in an Entry.
A value can be one of several "attribute classes" defined by DWARF. The Go types corresponding to each class are:
DWARF class Go type Class ----------- ------- ----- address uint64 ClassAddress block []byte ClassBlock constant int64 ClassConstant flag bool ClassFlag reference to info dwarf.Offset ClassReference to type unit uint64 ClassReferenceSig string string ClassString exprloc []byte ClassExprLoc lineptr int64 ClassLinePtr loclistptr int64 ClassLocListPtr macptr int64 ClassMacPtr rangelistptr int64 ClassRangeListPtr
For unrecognized or vendor-defined attributes, Class may be ClassUnknown.
type FuncType ΒΆ
type FuncType struct { CommonType ReturnType Type ParamType []Type LowPC uint64 HighPC int64 FileIndex int64 FileLine int64 FileColumn int64 Ranges [][2]uint64 }
A FuncType represents a function type.
type LabelType ΒΆ added in v1.0.6
type LabelType struct { CommonType Type Type Address uint64 }
A LabelType represents a variable type.
type LineEntry ΒΆ
type LineEntry struct { // Address is the program-counter value of a machine // instruction generated by the compiler. This LineEntry // applies to each instruction from Address to just before the // Address of the next LineEntry. Address uint64 // OpIndex is the index of an operation within a VLIW // instruction. The index of the first operation is 0. For // non-VLIW architectures, it will always be 0. Address and // OpIndex together form an operation pointer that can // reference any individual operation within the instruction // stream. OpIndex int // File is the source file corresponding to these // instructions. File *LineFile // Line is the source code line number corresponding to these // instructions. Lines are numbered beginning at 1. It may be // 0 if these instructions cannot be attributed to any source // line. Line int // Column is the column number within the source line of these // instructions. Columns are numbered beginning at 1. It may // be 0 to indicate the "left edge" of the line. Column int // IsStmt indicates that Address is a recommended breakpoint // location, such as the beginning of a line, statement, or a // distinct subpart of a statement. IsStmt bool // BasicBlock indicates that Address is the beginning of a // basic block. BasicBlock bool // PrologueEnd indicates that Address is one (of possibly // many) PCs where execution should be suspended for a // breakpoint on entry to the containing function. // // Added in DWARF 3. PrologueEnd bool // EpilogueBegin indicates that Address is one (of possibly // many) PCs where execution should be suspended for a // breakpoint on exit from this function. // // Added in DWARF 3. EpilogueBegin bool // ISA is the instruction set architecture for these // instructions. Possible ISA values should be defined by the // applicable ABI specification. // // Added in DWARF 3. ISA int // Discriminator is an arbitrary integer indicating the block // to which these instructions belong. It serves to // distinguish among multiple blocks that may all have with // the same source file, line, and column. Where only one // block exists for a given source position, it should be 0. // // Added in DWARF 3. Discriminator int // EndSequence indicates that Address is the first byte after // the end of a sequence of target machine instructions. If it // is set, only this and the Address field are meaningful. A // line number table may contain information for multiple // potentially disjoint instruction sequences. The last entry // in a line table should always have EndSequence set. EndSequence bool }
A LineEntry is a row in a DWARF line table.
type LineFile ΒΆ
type LineFile struct { Name string Mtime uint64 // Implementation defined modification time, or 0 if unknown Length int // File length, or 0 if unknown }
A LineFile is a source file referenced by a DWARF line table entry.
type LineReader ΒΆ
type LineReader struct {
// contains filtered or unexported fields
}
A LineReader reads a sequence of LineEntry structures from a DWARF "line" section for a single compilation unit. LineEntries occur in order of increasing PC and each LineEntry gives metadata for the instructions from that LineEntry's PC to just before the next LineEntry's PC. The last entry will have its EndSequence field set.
func (*LineReader) Files ΒΆ
func (r *LineReader) Files() []*LineFile
Files returns the file name table of this compilation unit as of the current position in the line table. The file name table may be referenced from attributes in this compilation unit such as AttrDeclFile.
Entry 0 is always nil, since file index 0 represents "no file".
The file name table of a compilation unit is not fixed. Files returns the file table as of the current position in the line table. This may contain more entries than the file table at an earlier position in the line table, though existing entries never change.
func (*LineReader) Next ΒΆ
func (r *LineReader) Next(entry *LineEntry) error
Next sets *entry to the next row in this line table and moves to the next row. If there are no more entries and the line table is properly terminated, it returns io.EOF.
Rows are always in order of increasing entry.Address, but entry.Line may go forward or backward.
func (*LineReader) Reset ΒΆ
func (r *LineReader) Reset()
Reset repositions the line table reader at the beginning of the line table.
func (*LineReader) Seek ΒΆ
func (r *LineReader) Seek(pos LineReaderPos)
Seek restores the line table reader to a position returned by Tell.
The argument pos must have been returned by a call to Tell on this line table.
func (*LineReader) SeekPC ΒΆ
func (r *LineReader) SeekPC(pc uint64, entry *LineEntry) error
SeekPC sets *entry to the LineEntry that includes pc and positions the reader on the next entry in the line table. If necessary, this will seek backwards to find pc.
If pc is not covered by any entry in this line table, SeekPC returns ErrUnknownPC. In this case, *entry and the final seek position are unspecified.
Note that DWARF line tables only permit sequential, forward scans. Hence, in the worst case, this takes time linear in the size of the line table. If the caller wishes to do repeated fast PC lookups, it should build an appropriate index of the line table.
func (*LineReader) Tell ΒΆ
func (r *LineReader) Tell() LineReaderPos
Tell returns the current position in the line table.
type LineReaderPos ΒΆ
type LineReaderPos struct {
// contains filtered or unexported fields
}
A LineReaderPos represents a position in a line table.
type MemberType ΒΆ added in v1.0.7
type MemberType struct { CommonType Type Type FileIndex int64 FileLine int64 External bool Declaration bool }
A MemberType represents a member type.
func (*MemberType) Size ΒΆ added in v1.0.7
func (t *MemberType) Size() int64
func (*MemberType) String ΒΆ added in v1.0.7
func (t *MemberType) String() string
type NamespaceType ΒΆ added in v1.0.6
type NamespaceType struct { CommonType Type Type }
A NamespaceType represents a namespace type.
func (*NamespaceType) Size ΒΆ added in v1.0.6
func (t *NamespaceType) Size() int64
func (*NamespaceType) String ΒΆ added in v1.0.6
func (t *NamespaceType) String() string
type Offset ΒΆ
type Offset uint32
An Offset represents the location of an Entry within the DWARF info. (See Reader.Seek.)
type PtrauthType ΒΆ added in v1.0.4
type PtrauthType struct { CommonType Type Type Key int64 Discriminated bool Discriminator int64 }
A PtrauthType represents a LLVM ptrauth type.
func (*PtrauthType) GetKey ΒΆ added in v1.0.4
func (t *PtrauthType) GetKey() string
func (*PtrauthType) String ΒΆ added in v1.0.4
func (t *PtrauthType) String() string
type QualNameHash ΒΆ added in v1.0.6
type QualNameHash uint32
type QualType ΒΆ
type QualType struct { CommonType Qual string Type Type }
A QualType represents a type that has the C/C++ "const", "restrict", or "volatile" qualifier.
type Reader ΒΆ
type Reader struct {
// contains filtered or unexported fields
}
A Reader allows reading Entry structures from a DWARF βinfoβ section. The Entry structures are arranged in a tree. The Reader's Next function return successive entries from a pre-order traversal of the tree. If an entry has children, its Children field will be true, and the children follow, terminated by an Entry with Tag 0.
func (*Reader) AddressSize ΒΆ
AddressSize returns the size in bytes of addresses in the current compilation unit.
func (*Reader) InstructionsForEntry ΒΆ added in v1.0.6
func (*Reader) Next ΒΆ
Next reads the next entry from the encoded entry stream. It returns nil, nil when it reaches the end of the section. It returns an error if the current offset is invalid or the data at the offset cannot be decoded as a valid Entry.
func (*Reader) Seek ΒΆ
Seek positions the Reader at offset off in the encoded entry stream. Offset 0 can be used to denote the first entry.
func (*Reader) SeekPC ΒΆ
SeekPC returns the Entry for the compilation unit that includes pc, and positions the reader to read the children of that unit. If pc is not covered by any unit, SeekPC returns ErrUnknownPC and the position of the reader is undefined.
Because compilation units can describe multiple regions of the executable, in the worst case SeekPC must search through all the ranges in all the compilation units. Each call to SeekPC starts the search at the compilation unit of the last call, so in general looking up a series of PCs will be faster if they are sorted. If the caller wishes to do repeated fast PC lookups, it should build an appropriate index using the Ranges method.
func (*Reader) SeekToEntry ΒΆ added in v1.0.6
SeekToEntry moves the reader to an arbitrary entry.
func (*Reader) SkipChildren ΒΆ
func (r *Reader) SkipChildren()
SkipChildren skips over the child entries associated with the last Entry returned by Next. If that Entry did not have children or Next has not been called, SkipChildren is a no-op.
type StructField ΒΆ
type StructField struct { Name string Type Type ByteOffset int64 ByteSize int64 // usually zero; use Type.Size() for normal fields BitOffset int64 DataBitOffset int64 BitSize int64 // zero if not a bit field }
A StructField represents a field in a struct, union, or C++ class type.
Bit Fields ΒΆ
The BitSize, BitOffset, and DataBitOffset fields describe the bit size and offset of data members declared as bit fields in C/C++ struct/union/class types.
BitSize is the number of bits in the bit field.
DataBitOffset, if non-zero, is the number of bits from the start of the enclosing entity (e.g. containing struct/class/union) to the start of the bit field. This corresponds to the DW_AT_data_bit_offset DWARF attribute that was introduced in DWARF 4.
BitOffset, if non-zero, is the number of bits between the most significant bit of the storage unit holding the bit field to the most significant bit of the bit field. Here "storage unit" is the type name before the bit field (for a field "unsigned x:17", the storage unit is "unsigned"). BitOffset values can vary depending on the endianness of the system. BitOffset corresponds to the DW_AT_bit_offset DWARF attribute that was deprecated in DWARF 4 and removed in DWARF 5.
At most one of DataBitOffset and BitOffset will be non-zero; DataBitOffset/BitOffset will only be non-zero if BitSize is non-zero. Whether a C compiler uses one or the other will depend on compiler vintage and command line options.
Here is an example of C/C++ bit field use, along with what to expect in terms of DWARF bit offset info. Consider this code:
struct S { int q; int j:5; int k:6; int m:5; int n:8; } s;
For the code above, one would expect to see the following for DW_AT_bit_offset values (using GCC 8):
Little | Big Endian | Endian | "j": 27 | 0 "k": 21 | 5 "m": 16 | 11 "n": 8 | 16
Note that in the above the offsets are purely with respect to the containing storage unit for j/k/m/n -- these values won't vary based on the size of prior data members in the containing struct.
If the compiler emits DW_AT_data_bit_offset, the expected values would be:
"j": 32 "k": 37 "m": 43 "n": 48
Here the value 32 for "j" reflects the fact that the bit field is preceded by other data members (recall that DW_AT_data_bit_offset values are relative to the start of the containing struct). Hence DW_AT_data_bit_offset values can be quite large for structs with many fields.
DWARF also allow for the possibility of base types that have non-zero bit size and bit offset, so this information is also captured for base types, but it is worth noting that it is not possible to trigger this behavior using mainstream languages.
type StructType ΒΆ
type StructType struct { CommonType StructName string Kind string // "struct", "union", or "class". Field []*StructField Incomplete bool // if true, struct, union, class is declared but not defined }
A StructType represents a struct, union, or C++ class type.
func (*StructType) Defn ΒΆ
func (t *StructType) Defn(showOffsets bool) string
func (*StructType) String ΒΆ
func (t *StructType) String() string
type Tag ΒΆ
type Tag uint16
A Tag is the classification (the type) of an Entry.
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 // 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 // GNU TagFormatLabel Tag = 0x4101 TagFunctionTemplate Tag = 0x4102 TagClassTemplate Tag = 0x4103 TagGnuBincl Tag = 0x4104 TagGnuEincl Tag = 0x4105 TagGnuTemplateTemplateParam Tag = 0x4106 TagGnuTemplateParameterPack Tag = 0x4107 TagGnuFormalParameterPack Tag = 0x4108 TagGnuCallSite Tag = 0x4109 TagGnuCallSiteParameter Tag = 0x410a // Apple TagAppleProperty Tag = 0x4200 // Sun TagSunFunctionTemplate Tag = 0x4201 TagSunClassTemplate Tag = 0x4202 TagSunStructTemplate Tag = 0x4203 TagSunUnionTemplate Tag = 0x4204 TagSunIndirectInheritance Tag = 0x4205 TagSunCodeflags Tag = 0x4206 TagSunMemopInfo Tag = 0x4207 TagSunOmpChildFunc Tag = 0x4208 TagSunRttiDescriptor Tag = 0x4209 TagSunDtorInfo Tag = 0x420a TagSunDtor Tag = 0x420b TagSunF90Interface Tag = 0x420c TagSunFortranVaxStructure Tag = 0x420d // LLVM TagPtrauthType Tag = 0x4300 TagAnnotation Tag = 0x6000 )
type Type ΒΆ
type Type interface { Common() *CommonType String() string Format(string) string Size() int64 }
A Type conventionally represents a pointer to any of the specific Type structures (CharType, StructType, etc.).
type TypedefType ΒΆ
type TypedefType struct { CommonType Type Type }
A TypedefType represents a named type.
func (*TypedefType) Format ΒΆ added in v1.0.8
func (t *TypedefType) Format(name string) string
func (*TypedefType) Size ΒΆ
func (t *TypedefType) Size() int64
func (*TypedefType) String ΒΆ
func (t *TypedefType) String() string
type UcharType ΒΆ
type UcharType struct {
BasicType
}
A UcharType represents an unsigned character type.
type UnspecifiedType ΒΆ
type UnspecifiedType struct {
BasicType
}
An UnspecifiedType represents an implicit, unknown, ambiguous or nonexistent type.
type UnsupportedType ΒΆ
type UnsupportedType struct { CommonType Tag Tag }
An UnsupportedType is a placeholder returned in situations where we encounter a type that isn't supported.
func (*UnsupportedType) String ΒΆ
func (t *UnsupportedType) String() string
type VariableType ΒΆ added in v1.0.6
type VariableType struct { CommonType Type Type Address uint64 }
A VariableType represents a variable type.
func (*VariableType) Size ΒΆ added in v1.0.6
func (t *VariableType) Size() int64
func (*VariableType) String ΒΆ added in v1.0.6
func (t *VariableType) String() string