Documentation

Index

Constants

View Source
const (
	PkgIdxNone    = (1<<31 - 1) - iota // Non-package symbols
	PkgIdxBuiltin                      // Predefined symbols // TODO: not used for now, we could use it for compiler-generated symbols like runtime.newobject
	PkgIdxSelf                         // Symbols defined in the current package
	PkgIdxInvalid = 0
)

    Package Index.

    View Source
    const (
    	BlkAutolib = iota
    	BlkPkgIdx
    	BlkDwarfFile
    	BlkSymdef
    	BlkNonpkgdef
    	BlkNonpkgref
    	BlkRelocIdx
    	BlkAuxIdx
    	BlkDataIdx
    	BlkReloc
    	BlkAux
    	BlkData
    	BlkPcdata
    	BlkRefName
    	BlkEnd
    	NBlk
    )

      Blocks

      View Source
      const (
      	SymFlagDupok = 1 << iota
      	SymFlagLocal
      	SymFlagTypelink
      	SymFlagLeaf
      	SymFlagNoSplit
      	SymFlagReflectMethod
      	SymFlagGoType
      	SymFlagTopFrame
      )
      View Source
      const (
      	AuxGotype = iota
      	AuxFuncInfo
      	AuxFuncdata
      	AuxDwarfInfo
      	AuxDwarfLoc
      	AuxDwarfRanges
      	AuxDwarfLines
      )

        Aux Type

        View Source
        const AuxSize = 1 + 8
        View Source
        const Magic = "\x00go115ld"
        View Source
        const (
        	ObjFlagShared = 1 << iota
        )
        View Source
        const RefNameSize = 8 + stringRefSize
        View Source
        const RelocSize = 4 + 1 + 1 + 8 + 8
        View Source
        const SymABIstatic = ^uint16(0)
        View Source
        const SymSize = stringRefSize + 2 + 1 + 1 + 4 + 4

        Variables

        This section is empty.

        Functions

        func BuiltinIdx

        func BuiltinIdx(name string, abi int) int

          BuiltinIdx returns the index of the builtin with the given name and abi, or -1 if it is not a builtin.

          func BuiltinName

          func BuiltinName(i int) (string, int)

            BuiltinName returns the name and ABI of the i-th builtin symbol.

            func NBuiltin

            func NBuiltin() int

              NBuiltin returns the number of listed builtin symbols.

              Types

              type Aux

              type Aux [AuxSize]byte

                Aux symbol info.

                Serialized format: Aux struct {

                Type uint8
                Sym  SymRef
                

                }

                func (*Aux) SetSym

                func (a *Aux) SetSym(x SymRef)

                func (*Aux) SetType

                func (a *Aux) SetType(x uint8)

                func (*Aux) Sym

                func (a *Aux) Sym() SymRef

                func (*Aux) Type

                func (a *Aux) Type() uint8

                func (*Aux) Write

                func (a *Aux) Write(w *Writer)

                type FingerprintType

                type FingerprintType [8]byte

                func (FingerprintType) IsZero

                func (fp FingerprintType) IsZero() bool

                type FuncInfo

                type FuncInfo struct {
                	Args   uint32
                	Locals uint32
                
                	Pcsp        uint32
                	Pcfile      uint32
                	Pcline      uint32
                	Pcinline    uint32
                	Pcdata      []uint32
                	PcdataEnd   uint32
                	Funcdataoff []uint32
                	File        []SymRef // TODO: just use string?
                
                	InlTree []InlTreeNode
                }

                  FuncInfo is serialized as a symbol (aux symbol). The symbol data is the binary encoding of the struct below.

                  TODO: make each pcdata a separate symbol?

                  func (*FuncInfo) Read

                  func (a *FuncInfo) Read(b []byte)

                  func (*FuncInfo) ReadArgs

                  func (*FuncInfo) ReadArgs(b []byte) uint32

                  func (*FuncInfo) ReadFile

                  func (*FuncInfo) ReadFile(b []byte, filesoff uint32, k uint32) SymRef

                  func (*FuncInfo) ReadFuncInfoLengths

                  func (*FuncInfo) ReadFuncInfoLengths(b []byte) FuncInfoLengths

                  func (*FuncInfo) ReadFuncdataoff

                  func (*FuncInfo) ReadFuncdataoff(b []byte, funcdataofffoff uint32, k uint32) int64

                  func (*FuncInfo) ReadInlTree

                  func (*FuncInfo) ReadInlTree(b []byte, inltreeoff uint32, k uint32) InlTreeNode

                  func (*FuncInfo) ReadLocals

                  func (*FuncInfo) ReadLocals(b []byte) uint32

                  func (*FuncInfo) ReadPcdata

                  func (*FuncInfo) ReadPcdata(b []byte, pcdataoffset uint32, k uint32) (uint32, uint32)

                    return start and end offsets.

                    func (*FuncInfo) ReadPcfile

                    func (*FuncInfo) ReadPcfile(b []byte) (uint32, uint32)

                      return start and end offsets.

                      func (*FuncInfo) ReadPcinline

                      func (*FuncInfo) ReadPcinline(b []byte, pcdataoffset uint32) (uint32, uint32)

                        return start and end offsets.

                        func (*FuncInfo) ReadPcline

                        func (*FuncInfo) ReadPcline(b []byte) (uint32, uint32)

                          return start and end offsets.

                          func (*FuncInfo) ReadPcsp

                          func (*FuncInfo) ReadPcsp(b []byte) (uint32, uint32)

                            return start and end offsets.

                            func (*FuncInfo) Write

                            func (a *FuncInfo) Write(w *bytes.Buffer)

                            type FuncInfoLengths

                            type FuncInfoLengths struct {
                            	NumPcdata      uint32
                            	PcdataOff      uint32
                            	NumFuncdataoff uint32
                            	FuncdataoffOff uint32
                            	NumFile        uint32
                            	FileOff        uint32
                            	NumInlTree     uint32
                            	InlTreeOff     uint32
                            	Initialized    bool
                            }

                              FuncInfoLengths is a cache containing a roadmap of offsets and lengths for things within a serialized FuncInfo. Each length field stores the number of items (e.g. files, inltree nodes, etc), and the corresponding "off" field stores the byte offset of the start of the items in question.

                              type Header struct {
                              	Magic       string
                              	Fingerprint FingerprintType
                              	Flags       uint32
                              	Offsets     [NBlk]uint32
                              }

                                File header. TODO: probably no need to export this.

                                func (*Header) Read

                                func (h *Header) Read(r *Reader) error

                                func (*Header) Size

                                func (h *Header) Size() int

                                func (*Header) Write

                                func (h *Header) Write(w *Writer)

                                type ImportedPkg

                                type ImportedPkg struct {
                                	Pkg         string
                                	Fingerprint FingerprintType
                                }

                                  Autolib

                                  func (*ImportedPkg) Write

                                  func (p *ImportedPkg) Write(w *Writer)

                                  type InlTreeNode

                                  type InlTreeNode struct {
                                  	Parent   int32
                                  	File     SymRef
                                  	Line     int32
                                  	Func     SymRef
                                  	ParentPC int32
                                  }

                                    InlTreeNode is the serialized form of FileInfo.InlTree.

                                    func (*InlTreeNode) Read

                                    func (inl *InlTreeNode) Read(b []byte) []byte

                                      Read an InlTreeNode from b, return the remaining bytes.

                                      func (*InlTreeNode) Write

                                      func (inl *InlTreeNode) Write(w *bytes.Buffer)

                                      type Reader

                                      type Reader struct {
                                      	// contains filtered or unexported fields
                                      }

                                      func NewReaderFromBytes

                                      func NewReaderFromBytes(b []byte, readonly bool) *Reader

                                      func (*Reader) Autolib

                                      func (r *Reader) Autolib() []ImportedPkg

                                      func (*Reader) Aux

                                      func (r *Reader) Aux(i int, j int) *Aux

                                        Aux returns a pointer to the j-th aux symbol of the i-th symbol.

                                        func (*Reader) AuxOff

                                        func (r *Reader) AuxOff(i int, j int) uint32

                                          AuxOff returns the offset of the j-th aux symbol of the i-th symbol.

                                          func (*Reader) Auxs

                                          func (r *Reader) Auxs(i int) []Aux

                                            Auxs returns the aux symbols of the i-th symbol.

                                            func (*Reader) BytesAt

                                            func (r *Reader) BytesAt(off uint32, len int) []byte

                                            func (*Reader) Data

                                            func (r *Reader) Data(i int) []byte

                                              Data returns the i-th symbol's data.

                                              func (*Reader) DataOff

                                              func (r *Reader) DataOff(i int) uint32

                                                DataOff returns the offset of the i-th symbol's data.

                                                func (*Reader) DataSize

                                                func (r *Reader) DataSize(i int) int

                                                  DataSize returns the size of the i-th symbol's data.

                                                  func (*Reader) DwarfFile

                                                  func (r *Reader) DwarfFile(i int) string

                                                  func (*Reader) Fingerprint

                                                  func (r *Reader) Fingerprint() FingerprintType

                                                  func (*Reader) Flags

                                                  func (r *Reader) Flags() uint32

                                                    Flags returns the flag bits read from the object file header.

                                                    func (*Reader) NAux

                                                    func (r *Reader) NAux(i int) int

                                                      NAux returns the number of aux symbols of the i-th symbol.

                                                      func (*Reader) NDwarfFile

                                                      func (r *Reader) NDwarfFile() int

                                                      func (*Reader) NNonpkgdef

                                                      func (r *Reader) NNonpkgdef() int

                                                      func (*Reader) NNonpkgref

                                                      func (r *Reader) NNonpkgref() int

                                                      func (*Reader) NPkg

                                                      func (r *Reader) NPkg() int

                                                      func (*Reader) NRefName

                                                      func (r *Reader) NRefName() int

                                                        NRefName returns the number of referenced symbol names.

                                                        func (*Reader) NReloc

                                                        func (r *Reader) NReloc(i int) int

                                                          NReloc returns the number of relocations of the i-th symbol.

                                                          func (*Reader) NSym

                                                          func (r *Reader) NSym() int

                                                          func (*Reader) PcdataBase

                                                          func (r *Reader) PcdataBase() uint32

                                                            AuxDataBase returns the base offset of the aux data block.

                                                            func (*Reader) Pkg

                                                            func (r *Reader) Pkg(i int) string

                                                            func (*Reader) Pkglist

                                                            func (r *Reader) Pkglist() []string

                                                            func (*Reader) ReadOnly

                                                            func (r *Reader) ReadOnly() bool

                                                              ReadOnly returns whether r.BytesAt returns read-only bytes.

                                                              func (*Reader) RefName

                                                              func (r *Reader) RefName(i int) *RefName

                                                                RefName returns a pointer to the i-th referenced symbol name. Note: here i is not a local symbol index, just a counter.

                                                                func (*Reader) Reloc

                                                                func (r *Reader) Reloc(i int, j int) *Reloc

                                                                  Reloc returns a pointer to the j-th relocation of the i-th symbol.

                                                                  func (*Reader) RelocOff

                                                                  func (r *Reader) RelocOff(i int, j int) uint32

                                                                    RelocOff returns the offset of the j-th relocation of the i-th symbol.

                                                                    func (*Reader) Relocs

                                                                    func (r *Reader) Relocs(i int) []Reloc

                                                                      Relocs returns a pointer to the relocations of the i-th symbol.

                                                                      func (*Reader) StringAt

                                                                      func (r *Reader) StringAt(off uint32, len uint32) string

                                                                      func (*Reader) StringRef

                                                                      func (r *Reader) StringRef(off uint32) string

                                                                      func (*Reader) Sym

                                                                      func (r *Reader) Sym(i int) *Sym

                                                                        Sym returns a pointer to the i-th symbol.

                                                                        func (*Reader) SymOff

                                                                        func (r *Reader) SymOff(i int) uint32

                                                                          SymOff returns the offset of the i-th symbol.

                                                                          type RefName

                                                                          type RefName [RefNameSize]byte

                                                                            Referenced symbol name.

                                                                            Serialized format: RefName struct {

                                                                            Sym  symRef
                                                                            Name string
                                                                            

                                                                            }

                                                                            func (*RefName) Name

                                                                            func (n *RefName) Name(r *Reader) string

                                                                            func (*RefName) SetName

                                                                            func (n *RefName) SetName(x string, w *Writer)

                                                                            func (*RefName) SetSym

                                                                            func (n *RefName) SetSym(x SymRef)

                                                                            func (*RefName) Sym

                                                                            func (n *RefName) Sym() SymRef

                                                                            func (*RefName) Write

                                                                            func (n *RefName) Write(w *Writer)

                                                                            type Reloc

                                                                            type Reloc [RelocSize]byte

                                                                              Relocation.

                                                                              Serialized format: Reloc struct {

                                                                              Off  int32
                                                                              Siz  uint8
                                                                              Type uint8
                                                                              Add  int64
                                                                              Sym  SymRef
                                                                              

                                                                              }

                                                                              func (*Reloc) Add

                                                                              func (r *Reloc) Add() int64

                                                                              func (*Reloc) Off

                                                                              func (r *Reloc) Off() int32

                                                                              func (*Reloc) Set

                                                                              func (r *Reloc) Set(off int32, size uint8, typ uint8, add int64, sym SymRef)

                                                                              func (*Reloc) SetAdd

                                                                              func (r *Reloc) SetAdd(x int64)

                                                                              func (*Reloc) SetOff

                                                                              func (r *Reloc) SetOff(x int32)

                                                                              func (*Reloc) SetSiz

                                                                              func (r *Reloc) SetSiz(x uint8)

                                                                              func (*Reloc) SetSym

                                                                              func (r *Reloc) SetSym(x SymRef)

                                                                              func (*Reloc) SetType

                                                                              func (r *Reloc) SetType(x uint8)

                                                                              func (*Reloc) Siz

                                                                              func (r *Reloc) Siz() uint8

                                                                              func (*Reloc) Sym

                                                                              func (r *Reloc) Sym() SymRef

                                                                              func (*Reloc) Type

                                                                              func (r *Reloc) Type() uint8

                                                                              func (*Reloc) Write

                                                                              func (r *Reloc) Write(w *Writer)

                                                                              type Sym

                                                                              type Sym [SymSize]byte

                                                                                Symbol definition.

                                                                                Serialized format: Sym struct {

                                                                                Name  string
                                                                                ABI   uint16
                                                                                Type  uint8
                                                                                Flag  uint8
                                                                                Siz   uint32
                                                                                Align uint32
                                                                                

                                                                                }

                                                                                func (*Sym) ABI

                                                                                func (s *Sym) ABI() uint16

                                                                                func (*Sym) Align

                                                                                func (s *Sym) Align() uint32

                                                                                func (*Sym) Dupok

                                                                                func (s *Sym) Dupok() bool

                                                                                func (*Sym) Flag

                                                                                func (s *Sym) Flag() uint8

                                                                                func (*Sym) IsGoType

                                                                                func (s *Sym) IsGoType() bool

                                                                                func (*Sym) Leaf

                                                                                func (s *Sym) Leaf() bool

                                                                                func (*Sym) Local

                                                                                func (s *Sym) Local() bool

                                                                                func (*Sym) Name

                                                                                func (s *Sym) Name(r *Reader) string

                                                                                func (*Sym) NoSplit

                                                                                func (s *Sym) NoSplit() bool

                                                                                func (*Sym) ReflectMethod

                                                                                func (s *Sym) ReflectMethod() bool

                                                                                func (*Sym) SetABI

                                                                                func (s *Sym) SetABI(x uint16)

                                                                                func (*Sym) SetAlign

                                                                                func (s *Sym) SetAlign(x uint32)

                                                                                func (*Sym) SetFlag

                                                                                func (s *Sym) SetFlag(x uint8)

                                                                                func (*Sym) SetName

                                                                                func (s *Sym) SetName(x string, w *Writer)

                                                                                func (*Sym) SetSiz

                                                                                func (s *Sym) SetSiz(x uint32)

                                                                                func (*Sym) SetType

                                                                                func (s *Sym) SetType(x uint8)

                                                                                func (*Sym) Siz

                                                                                func (s *Sym) Siz() uint32

                                                                                func (*Sym) TopFrame

                                                                                func (s *Sym) TopFrame() bool

                                                                                func (*Sym) Type

                                                                                func (s *Sym) Type() uint8
                                                                                func (s *Sym) Typelink() bool

                                                                                func (*Sym) Write

                                                                                func (s *Sym) Write(w *Writer)

                                                                                type SymRef

                                                                                type SymRef struct {
                                                                                	PkgIdx uint32
                                                                                	SymIdx uint32
                                                                                }

                                                                                  Symbol reference.

                                                                                  type Writer

                                                                                  type Writer struct {
                                                                                  	// contains filtered or unexported fields
                                                                                  }

                                                                                  func NewWriter

                                                                                  func NewWriter(wr *bio.Writer) *Writer

                                                                                  func (*Writer) AddString

                                                                                  func (w *Writer) AddString(s string)

                                                                                  func (*Writer) Bytes

                                                                                  func (w *Writer) Bytes(s []byte)

                                                                                  func (*Writer) Offset

                                                                                  func (w *Writer) Offset() uint32

                                                                                  func (*Writer) RawString

                                                                                  func (w *Writer) RawString(s string)

                                                                                  func (*Writer) StringRef

                                                                                  func (w *Writer) StringRef(s string)

                                                                                  func (*Writer) Uint16

                                                                                  func (w *Writer) Uint16(x uint16)

                                                                                  func (*Writer) Uint32

                                                                                  func (w *Writer) Uint32(x uint32)

                                                                                  func (*Writer) Uint64

                                                                                  func (w *Writer) Uint64(x uint64)

                                                                                  func (*Writer) Uint8

                                                                                  func (w *Writer) Uint8(x uint8)